設定 - UFW
概要
UFW (Uncomplicated Firewall) とは、Linuxのファイアウォール管理を簡単にするツールである。
※注意 1
ファイヤーウォールのルールは追加した順序で適用されるため、順序にも注意が必要となる。
新しいルールを追加する前に、既存のルールとの競合がないか確認すること。
※注意 2
本番環境での変更は、メンテナンス時間中に行うことが推奨される。
複雑なルールを設定する場合は、ドキュメント化を行うこと。
UFWのインストール
# RHEL sudo dnf install ufw # SUSE sudo zypper install ufw # Raspberry Pi OS / PinePhone sudo apt install ufw
状態の確認
sudo ufw status
詳細な情報を表示する。
sudo ufw status verbose
ルールを番号付きで表示する。
sudo ufw status numbered
UFWの有効化 / 無効化
# UFWの有効化 sudo ufw enable # UFWの無効化 sudo ufw disable
ポートの開放 (許可)
sudo ufw allow <ポート番号>/<プロトコル 例: tcpまたはudp> # 実行例: sudo ufw allow 80/tcp # HTTPポート80を開放 sudo ufw allow 22 # SSHポート22を開放 (TCP / UDP両方) sudo ufw allow 53/udp # DNSのUDPポート53を開放
ポート範囲を制御することもできる。
# ポート範囲を指定して許可 sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
ポートの拒否 (クローズ)
sudo ufw deny <ポート番号>/<プロトコル 例: tcpまたはudp> # 実行例: sudo ufw deny 80/tcp # ポート80への接続を拒否 sudo ufw deny 22 # ポート22への接続を拒否
特定のIPアドレスやサブネットの制御
特定のIPからの接続を許可する。
sudo ufw allow from 192.168.1.100
特定のサブネットからの接続を許可する。
sudo ufw allow from 192.168.1.0/24
特定のIPの特定のポートへの接続を許可する。
sudo ufw allow from 192.168.1.100 to any port <ポート番号> # 実行例: 192.168.1.100から22番ポートのみを許可する場合 sudo ufw allow from 192.168.1.100 to any port 22
特定のIPアドレスからのポート範囲を許可する。
sudo ufw allow from 192.168.1.100 to any port 6000:6007
ファイヤーウォールのルールの削除
ルール (許可した設定) を削除する。
sudo ufw delete allow 80/tcp
ルール (拒否した設定) を削除する。
sudo ufw delete deny 22
ルールの番号を指定してルールを削除する。
sudo ufw delete 5
サービス名での制御
利用可能なサービスを確認する。
less /etc/services
サービス名で許可する。
sudo ufw allow http sudo ufw allow ssh
インターフェースベースのルール
特定のネットワークインターフェースに対するルールを設定する。
sudo ufw allow in on <ネットワークインターフェース名 例: eth0> to any port <ポート番号 例: 80> sudo ufw deny in on <ネットワークインターフェース名 例: eth1>
特定のインターフェースの特定のポートを許可する。
sudo ufw allow in on eth0 to any port 22
デフォルトポリシーの設定
デフォルトで全ての受信を拒否する。
sudo ufw default deny incoming
デフォルトで全ての送信を許可する。
sudo ufw default allow outgoing
送信も拒否する。
sudo ufw default deny outgoing
レート制限の設定
SSHへの接続を30秒間に6回までに制限する。
sudo ufw limit ssh
特定のポートにレート制限を設定する。
sudo ufw limit <ポート番号 例: 3306>
アプリケーションプロファイルの使用
利用可能なアプリケーションプロファイルを確認する。
sudo ufw app list
特定のアプリケーションプロファイルの詳細確認する。
sudo ufw app info '<プロファイル名 例: Apache Full>'
アプリケーションプロファイルを許可する。
sudo ufw allow '<プロファイル名 例: Apache Full>'
NAT設定
vi /etc/ufw/before.rules
# /etc/ufw/before.rulesファイル *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE COMMIT
フォワーディングの設定
フォワーディングを有効化する。
sudo vi /etc/default/ufw
# /etc/default/ufwファイル DEFAULT_FORWARD_POLICY="ACCEPT"
IPフォワーディングを有効化する。
sudo vi /etc/ufw/sysctl.conf
# /etc/ufw/sysctl.confファイル net/ipv4/ip_forward=1 net/ipv6/conf/default/forwarding=1
複雑なルール設定
特定のIPアドレスとポート番号を組み合わせる。
sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp
特定のサブネットの特定ポートへのアクセスを拒否する。
sudo ufw deny from 10.0.0.0/8 to any port 25
カスタムチェーンの作成
sudo vi /etc/ufw/before.rules
# /etc/ufw/before.rulesファイル *filter :ufw-custom-chain - [0:0] -A ufw-custom-chain -p tcp --dport 80 -j ACCEPT COMMIT
ログの設定
UFWのログを有効化する。
sudo ufw logging on
UFWのログを無効化する。
sudo ufw logging off
また、ログレベルの設定を行うこともできる。
sudo ufw logging low # 基本的なログ sudo ufw logging medium # より詳細なログ sudo ufw logging high # 最も詳細なログ
ログファイルは、/var/log/ufw.logファイルに存在する。
セキュリティ設定
TCPステルススキャン対策
sudo ufw deny proto <tcp または udp> from any to any port <ポート番号 例: 113>
pingの制限
sudo ufw deny proto icmp --icmp-type echo-request
シンフラッド攻撃対策
sudo vi /etc/ufw/before.rules
# /etc/ufw/before.rulesファイル -A ufw-before-input -p tcp --syn -m limit --limit 1/s -j ACCEPT
ルールのリセット
全てのルールを削除する。
sudo ufw reset
自動起動の設定
システム起動時にUFWを自動的に起動する。
sudo systemctl enable ufw
自動起動を無効にする。
sudo systemctl disable ufw