Uncomplicated Firewall
プロジェクトのホームページより:
- 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 にアップグレードしたときに、ルールを新しい置き場所にコピーしてください。
GUI フロントエンド
Gufw
gufw は Ufw の GTK であり、できるかぎり簡単に Linux のファイアウォールを管理できるように作られています。一般的なポートや p2p アプリケーションのプリセットが存在します。python と ufw、そして GTK のサポートが必要です。
ヒントとテクニック
リモート 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
参照
- Ubuntu UFW ドキュメント
- ufw(8) UFW マニュアル