Uncomplicated Firewall

提供: ArchWiki
Ufwから転送)
ナビゲーションに移動 検索に移動

関連記事

プロジェクトのホームページより:

Ufw は Uncomplicated Firewall の略であり、netfilter ファイアウォールを管理するためのプログラムです。コマンドラインインターフェースが存在し、あまり複雑にならず簡単に使えるように作られています。

インストール

ufw パッケージをインストールしてください。

起動時に有効化させるには ufw を起動有効化してください。なお、iptables.serviceip6tables.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
ノート: ufw.service有効化されている必要があります。

最後に、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 サービスは有効化しないようにしてください。

ノート: 特殊なネットワーク変数を /etc/sysctl.d/* で設定している場合、この設定によってデフォルト設定が上書きされてしまうため、それにあわせて /etc/ufw/sysctl.conf を修正する必要があります。

Forward ポリシー

OpenVPNWireGuard などの 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 に必要なデータを記述するのを推奨します。

警告: パッケージに含まれているルールセットを編集した場合、ufw パッケージを更新したときに変更した部分が上書きされてしまいます。従って、上記のようにパッケージファイルにはないカスタム定義を使うことを推奨します。

例えば、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 にアップグレードしたときに、ルールを新しい置き場所にコピーしてください。

GUI フロントエンド

Gufw

gufw は Ufw の GTK であり、出来るかぎり簡単に Linux のファイアウォールを管理できるように作られています。一般的なポートや p2p アプリケーションのプリセットが存在します。pythonufw、そして GTK のサポートが必要です。

ヒントとテクニック

リモート ping を無効化

以下の行の ACCEPTDROP に変更してください:

/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

参照