「Uncomplicated Firewall」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「Tips and tricks」を「ヒントとテクニック」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (→参照: リンクを追加) |
||
(4人の利用者による、間の9版が非表示) | |||
2行目: | 2行目: | ||
[[en:Uncomplicated Firewall]] |
[[en:Uncomplicated Firewall]] |
||
[[fa:Uncomplicated Firewall]] |
[[fa:Uncomplicated Firewall]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|iptables}} |
||
+ | {{Related|sshguard}} |
||
+ | {{Related articles end}} |
||
+ | |||
プロジェクトの[https://launchpad.net/ufw ホームページ]より: |
プロジェクトの[https://launchpad.net/ufw ホームページ]より: |
||
− | : |
+ | : Ufw は Uncomplicated Firewall の略であり、netfilter [[ファイアウォール]]を管理するためのプログラムです。コマンドラインインターフェースが存在し、あまり複雑にならず簡単に使えるように作られています。 |
+ | |||
+ | {{Note|UFW はバックエンドのファイアウォールとして {{pkg|iptables}} または {{pkg|nftables}} のどちらかを使用できることに注意してください。UFW を使用してルールを管理することに慣れているユーザーは、iptables や nftables への基本的な呼び出しを学ぶ必要はありません。これは、例えば {{ic|/etc/ufw/before.rules}} 内で {{ic|nft}} が iptables の構文を受け入れるためです。}} |
||
== インストール == |
== インストール == |
||
− | {{Pkg|ufw}} |
+ | {{Pkg|ufw}} パッケージを[[インストール]]してください。 |
− | 起動 |
+ | 起動時に有効化させるには ufw を[[起動]]・[[有効化]]してください。なお、{{ic|iptables.service}} や {{ic|ip6tables.service}} も有効にされていると動作しません。 |
== 基本設定 == |
== 基本設定 == |
||
− | デフォルトで全てを拒否して、192.168.0.1-192.168.0.255 LAN のプロトコルを許可し、どこからでも Deluge と SSH の通信ができ |
+ | デフォルトで全てを拒否して、192.168.0.1-192.168.0.255 LAN のプロトコルを許可し、どこからでも Deluge と SSH の通信ができ、SSH に[[#ufw によるレート制限|レート制限]]を設けるシンプルな設定: |
# ufw default deny |
# ufw default deny |
||
# ufw allow from 192.168.0.0/24 |
# ufw allow from 192.168.0.0/24 |
||
# ufw allow Deluge |
# ufw allow Deluge |
||
− | # ufw |
+ | # ufw limit ssh |
パッケージを最初にインストールしたときは次を実行する必要があります: |
パッケージを最初にインストールしたときは次を実行する必要があります: |
||
24行目: | 31行目: | ||
# ufw enable |
# ufw enable |
||
+ | {{Note|{{ic|ufw.service}} が[[有効化]]されている必要があります。}} |
||
− | そして [[Systemd#ユニットを使う|systemctl]] で {{ic|ufw}} サービスを有効化してください。 |
||
最後に、status コマンドで適用されているルールを確認します: |
最後に、status コマンドで適用されているルールを確認します: |
||
33行目: | 40行目: | ||
Anywhere ALLOW 192.168.0.0/24 |
Anywhere ALLOW 192.168.0.0/24 |
||
Deluge ALLOW Anywhere |
Deluge ALLOW Anywhere |
||
− | SSH |
+ | SSH LIMIT Anywhere |
}} |
}} |
||
status レポートはユーザーによって追加されたルールを示します。ほとんどの場合これで十分ですが、始めから入っているルールが存在していることに気をつけることは悪いことではありません。UPNP, AVAHI, DHCP を許可するフィルターが含まれています。全てのルールを表示するには: |
status レポートはユーザーによって追加されたルールを示します。ほとんどの場合これで十分ですが、始めから入っているルールが存在していることに気をつけることは悪いことではありません。UPNP, AVAHI, DHCP を許可するフィルターが含まれています。全てのルールを表示するには: |
||
41行目: | 48行目: | ||
レポートとしては動作しますが、iptables を管理するのに {{ic|ufw}} を使っている間は {{ic|iptables}} サービスは有効化しないようにしてください。 |
レポートとしては動作しますが、iptables を管理するのに {{ic|ufw}} を使っている間は {{ic|iptables}} サービスは有効化しないようにしてください。 |
||
{{Note|特殊なネットワーク変数を {{ic|/etc/sysctl.d/*}} で設定している場合、この設定によってデフォルト設定が上書きされてしまうため、それにあわせて {{ic|/etc/ufw/sysctl.conf}} を修正する必要があります。}} |
{{Note|特殊なネットワーク変数を {{ic|/etc/sysctl.d/*}} で設定している場合、この設定によってデフォルト設定が上書きされてしまうため、それにあわせて {{ic|/etc/ufw/sysctl.conf}} を修正する必要があります。}} |
||
+ | |||
+ | == Forward ポリシー == |
||
+ | |||
+ | [[OpenVPN]] や [[WireGuard]] などの [[VPN]] を実行する必要のあるユーザは、{{ic|/etc/default/ufw}} 内の '''DEFAULT_FORWARD_POLICY''' 変数の値を '''"DROP"''' から '''"ACCEPT"''' に変更することで、ユーザインターフェイスの設定に関わらずすべてのパケットを転送することができます。以下の行を '''*filter''' ブロック内に追加することで、'''wg0''' のような特定のインターフェイスで転送することができます: |
||
+ | |||
+ | {{hc|/etc/ufw/before.rules| |
||
+ | # End required lines |
||
+ | |||
+ | -A ufw-before-forward -i wg0 -j ACCEPT |
||
+ | -A ufw-before-forward -o wg0 -j ACCEPT |
||
+ | }} |
||
+ | |||
+ | また、場合によっては以下をアンコメントする必要があります: |
||
+ | |||
+ | {{hc|head=/etc/ufw/sysctl.conf|output= |
||
+ | net/ipv4/ip_forward=1 |
||
+ | net/ipv6/conf/default/forwarding=1 |
||
+ | net/ipv6/conf/all/forwarding=1 |
||
+ | }} |
||
== 他のアプリケーションの追加 == |
== 他のアプリケーションの追加 == |
||
84行目: | 110行目: | ||
SSH ALLOW Anywhere |
SSH ALLOW Anywhere |
||
Deluge-my ALLOW Anywhere |
Deluge-my ALLOW Anywhere |
||
+ | }} |
||
+ | |||
+ | == IP アドレスのブロック == |
||
+ | 特定の IP アドレスをブロックするには、{{ic|/etc/ufw/before.rules}} において ''COMMIT'' よりも手前に iptables DROP 行を書き加えます。 |
||
+ | |||
+ | {{hc|/etc/ufw/before.rules| |
||
+ | ... |
||
+ | ## blacklist section |
||
+ | |||
+ | # block just 199.115.117.99 |
||
+ | -A ufw-before-input -s 199.115.117.99 -j DROP |
||
+ | # block 184.105.*.* |
||
+ | -A ufw-before-input -s 184.105.0.0/16 -j DROP |
||
+ | |||
+ | # don't delete the 'COMMIT' line or these rules won't be processed |
||
+ | COMMIT |
||
}} |
}} |
||
== ufw によるレート制限 == |
== ufw によるレート制限 == |
||
− | ufw には30秒間の間に6回以上接続を試みた IP アドレスを拒否する機能があります。このオプションは |
+ | ufw には30秒間の間に6回以上接続を試みた IP アドレスを拒否する機能があります。このオプションは [[SSH]] などのサービスに使うと良いでしょう。 |
上記の基本設定を使って、レート制限を有効にするには、allow パラメータを limit パラメータで置き換えます。新しいルールは以前のルールを置き換えます。 |
上記の基本設定を使って、レート制限を有効にするには、allow パラメータを limit パラメータで置き換えます。新しいルールは以前のルールを置き換えます。 |
||
109行目: | 151行目: | ||
pacman によるアップグレード時にも表示されますが、バージョン 0.34 以前では置き場所が {{ic|/usr/lib/ufw/user.rules}} と {{ic|/usr/lib/ufw/user6.rules}} でした。バージョン 0.35 にアップグレードしたときに、ルールを新しい置き場所にコピーしてください。 |
pacman によるアップグレード時にも表示されますが、バージョン 0.34 以前では置き場所が {{ic|/usr/lib/ufw/user.rules}} と {{ic|/usr/lib/ufw/user6.rules}} でした。バージョン 0.35 にアップグレードしたときに、ルールを新しい置き場所にコピーしてください。 |
||
− | |||
− | == GUI フロントエンド == |
||
− | |||
− | === Gufw === |
||
− | |||
− | {{Pkg|gufw}} は Ufw の GTK であり、出来るかぎり簡単に Linux のファイアウォールを管理できるように作られています。一般的なポートや p2p アプリケーションのプリセットが存在します。{{Pkg|python}} と {{Pkg|ufw}}、そして GTK のサポートが必要です。 |
||
− | |||
− | === kcm-ufw === |
||
− | |||
− | {{AUR|kcm-ufw}} は ufw の KDE4 コントロールモジュールです。以下の機能をサポートしています: |
||
− | * ファイアウォールの有効化・無効化 |
||
− | * ファイアウォールのデフォルト設定の設定 |
||
− | * ルールの追加・編集・削除 |
||
− | * ドラッグアンドドロップによるルールの並び替え |
||
− | * ルールのインポート・エクスポート |
||
− | * iptables モジュールの設定 |
||
− | |||
− | このモジュールは "Network and Connectivity" カテゴリ下に表示されます。 |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
145行目: | 169行目: | ||
=== UFW のログ出力を無効化 === |
=== UFW のログ出力を無効化 === |
||
+ | |||
ログ出力を無効化することで UFW によってメッセージログ ({{ic|dmesg}}) が埋まってしまうのを防ぐことができます: |
ログ出力を無効化することで UFW によってメッセージログ ({{ic|dmesg}}) が埋まってしまうのを防ぐことができます: |
||
# ufw logging off |
# ufw logging off |
||
+ | |||
+ | === UFW と Docker === |
||
+ | 標準モードの Docker は独自の iptables ルールを書き込み、ufw のルールを無視します。これによりセキュリティの問題が発生する可能性があります。解決策は https://github.com/chaifeng/ufw-docker で見つけることができます。 |
||
+ | |||
+ | {{Tip|{{ic|ufw-docker install}} を実行して iptables ルールを自動的に修正するために、{{AUR|ufw-docker}} をインストールすることができます。このパッケージは Docker 関連の ufw ルールも管理できます。詳細は {{ic|ufw-docker help}} を参照してください。}} |
||
+ | |||
+ | == GUI フロントエンド == |
||
+ | |||
+ | === Gufw === |
||
+ | |||
+ | {{Pkg|gufw}} は Ufw の GTK であり、できるかぎり簡単に Linux のファイアウォールを管理できるように作られています。一般的なポートや p2p アプリケーションのプリセットが存在します。{{Pkg|python}} と {{Pkg|ufw}}、そして GTK のサポートが必要です。 |
||
== 参照 == |
== 参照 == |
||
+ | * [https://help.ubuntu.com/community/UFW Ubuntu UFW ドキュメント] |
||
− | * [[sshguard]] |
||
+ | * {{man|8|ufw}} UFW マニュアル |
||
− | * [http://help.ubuntu.com/community/UFW Ubuntu UFW ドキュメント] |
||
+ | * ipset を使用して ufw にブロックリストを追加する: https://github.com/poddmo/ufw-blocklist |
||
− | * [http://manpages.ubuntu.com/manpages/natty/en/man8/ufw.8.html UFW マニュアル] |
||
+ | |||
+ | {{TranslationStatus|Uncomplicated Firewall|2024-07-21|812732}} |
2024年7月21日 (日) 19:43時点における最新版
プロジェクトのホームページより:
- Ufw は Uncomplicated Firewall の略であり、netfilter ファイアウォールを管理するためのプログラムです。コマンドラインインターフェースが存在し、あまり複雑にならず簡単に使えるように作られています。
目次
インストール
起動時に有効化させるには ufw を起動・有効化してください。なお、iptables.service
や ip6tables.service
も有効にされていると動作しません。
基本設定
デフォルトで全てを拒否して、192.168.0.1-192.168.0.255 LAN のプロトコルを許可し、どこからでも Deluge と SSH の通信ができ、SSH にレート制限を設けるシンプルな設定:
# ufw default deny # ufw allow from 192.168.0.0/24 # ufw allow Deluge # ufw limit ssh
パッケージを最初にインストールしたときは次を実行する必要があります:
# ufw enable
最後に、status コマンドで適用されているルールを確認します:
# ufw status
Status: active To Action From -- ------ ---- Anywhere ALLOW 192.168.0.0/24 Deluge ALLOW Anywhere SSH LIMIT Anywhere
status レポートはユーザーによって追加されたルールを示します。ほとんどの場合これで十分ですが、始めから入っているルールが存在していることに気をつけることは悪いことではありません。UPNP, AVAHI, DHCP を許可するフィルターが含まれています。全てのルールを表示するには:
# ufw show raw
レポートではトラフィックも手短に示されますが、読むのが難しいと感じるかもしれません。承認されたトラフィックの確認をする別の方法:
# iptables -S | grep ACCEPT
レポートとしては動作しますが、iptables を管理するのに ufw
を使っている間は iptables
サービスは有効化しないようにしてください。
Forward ポリシー
OpenVPN や WireGuard などの VPN を実行する必要のあるユーザは、/etc/default/ufw
内の DEFAULT_FORWARD_POLICY 変数の値を "DROP" から "ACCEPT" に変更することで、ユーザインターフェイスの設定に関わらずすべてのパケットを転送することができます。以下の行を *filter ブロック内に追加することで、wg0 のような特定のインターフェイスで転送することができます:
/etc/ufw/before.rules
# End required lines -A ufw-before-forward -i wg0 -j ACCEPT -A ufw-before-forward -o wg0 -j ACCEPT
また、場合によっては以下をアンコメントする必要があります:
/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1 net/ipv6/conf/default/forwarding=1 net/ipv6/conf/all/forwarding=1
他のアプリケーションの追加
パッケージには多数のデーモンやプログラムのデフォルトのポートに基づいてデフォルトの設定が付いています。/etc/ufw/applications.d
ディレクトリを見たりプログラムを使ってリストアップすることでオプションを確認できます:
# ufw app list
標準のポートを使わないアプリケーションを実行している場合、デフォルトを見ながら /etc/ufw/applications.d/custom
に必要なデータを記述するのを推奨します。
例えば、tcp ポートが 20202-20205 の範囲にカスタマイズされた deluge の場合:
[Deluge-my] title=Deluge description=Deluge BitTorrent client ports=20202:20205/tcp
同じアプリケーションで tcp と udp ポートを両方定義する場合、以下のようにパイプで区切って下さい。tcp ポート 10000-10002 と udp ポート 10003 を開く例:
ports=10000:10002/tcp|10003/udp
範囲を指定するかわりに、カンマを使って複数のポートを指定することもできます。tcp ポート 10000-10002 (inclusive) と udp ポート 10003 と 10009 を開く例:
ports=10000:10002/tcp|10003,10009/udp
アプリケーションの削除
上の Deluge の例を利用するときは、以下のコマンドで標準の Deluge のルールを削除して上の例にあるルールで置き換えます:
# ufw delete allow Deluge # ufw allow Deluge-my
status コマンドで結果を確認します:
# ufw status
Status: active To Action From -- ------ ---- Anywhere ALLOW 192.168.0.0/24 SSH ALLOW Anywhere Deluge-my ALLOW Anywhere
IP アドレスのブロック
特定の IP アドレスをブロックするには、/etc/ufw/before.rules
において COMMIT よりも手前に iptables DROP 行を書き加えます。
/etc/ufw/before.rules
... ## blacklist section # block just 199.115.117.99 -A ufw-before-input -s 199.115.117.99 -j DROP # block 184.105.*.* -A ufw-before-input -s 184.105.0.0/16 -j DROP # don't delete the 'COMMIT' line or these rules won't be processed COMMIT
ufw によるレート制限
ufw には30秒間の間に6回以上接続を試みた IP アドレスを拒否する機能があります。このオプションは SSH などのサービスに使うと良いでしょう。
上記の基本設定を使って、レート制限を有効にするには、allow パラメータを limit パラメータで置き換えます。新しいルールは以前のルールを置き換えます。
# ufw limit SSH
Rule updated
# ufw status
Status: active To Action From -- ------ ---- Anywhere ALLOW 192.168.0.0/24 SSH LIMIT Anywhere Deluge-my ALLOW Anywhere
ユーザールール
全てのユーザールールは /etc/ufw/user.rules
(IPv4) と /etc/ufw/user6.rules
(IPv6) に保存されます。
pacman によるアップグレード時にも表示されますが、バージョン 0.34 以前では置き場所が /usr/lib/ufw/user.rules
と /usr/lib/ufw/user6.rules
でした。バージョン 0.35 にアップグレードしたときに、ルールを新しい置き場所にコピーしてください。
ヒントとテクニック
リモート ping を無効化
以下の行の ACCEPT
を DROP
に変更してください:
/etc/ufw/before.rules
# ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT -A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
IPv6 を使っている場合、同じルールが /etc/ufw/before6.rules
に存在します。
UFW のログ出力を無効化
ログ出力を無効化することで UFW によってメッセージログ (dmesg
) が埋まってしまうのを防ぐことができます:
# ufw logging off
UFW と Docker
標準モードの Docker は独自の iptables ルールを書き込み、ufw のルールを無視します。これによりセキュリティの問題が発生する可能性があります。解決策は https://github.com/chaifeng/ufw-docker で見つけることができます。
GUI フロントエンド
Gufw
gufw は Ufw の GTK であり、できるかぎり簡単に Linux のファイアウォールを管理できるように作られています。一般的なポートや p2p アプリケーションのプリセットが存在します。python と ufw、そして GTK のサポートが必要です。
参照
- Ubuntu UFW ドキュメント
- ufw(8) UFW マニュアル
- ipset を使用して ufw にブロックリストを追加する: https://github.com/poddmo/ufw-blocklist