ファイアウォール
iptables, nftables, firewalld
netfilter
netfilterはLinuxカーネルのパケットフィルタリングフレームワーク。 iptables、nftables、firewalldはnetfilterのユーザー空間ツールです。
iptables
従来のLinuxファイアウォールツール。テーブル→チェーン→ルールの階層構造。
filter
パケットフィルタリング(デフォルト)
nat
アドレス変換
mangle
パケット加工
1 # ルール一覧 2 iptables -L -n -v 3 iptables -t nat -L -n -v 4 5 # チェーン: INPUT, OUTPUT, FORWARD 6 # ターゲット: ACCEPT, DROP, REJECT, LOG 7 8 # ルール追加 9 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 10 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 11 iptables -A INPUT -p tcp --dport 443 -j ACCEPT 12 13 # 特定IPからの接続許可 14 iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT 15 16 # 接続済みセッション許可 17 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 18 19 # デフォルトポリシー 20 iptables -P INPUT DROP 21 iptables -P FORWARD DROP 22 iptables -P OUTPUT ACCEPT 23 24 # ルール削除 25 iptables -D INPUT 1 # 番号指定 26 iptables -D INPUT -p tcp --dport 80 -j ACCEPT # ルール指定 27 28 # 全ルール削除 29 iptables -F 30 31 # 保存と復元 32 iptables-save > /etc/iptables.rules 33 iptables-restore < /etc/iptables.rules
NAT設定
1 # SNAT(送信元NAT)- インターネット接続共有 2 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 3 4 # DNAT(宛先NAT)- ポートフォワーディング 5 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 6 7 # IP転送を有効化 8 sysctl -w net.ipv4.ip_forward=1
nftables
nftablesはiptablesの後継。シンプルな構文、 パフォーマンス向上、IPv4/IPv6統合が特徴。
1 # ルール一覧 2 nft list ruleset 3 4 # テーブル作成 5 nft add table inet filter 6 7 # チェーン作成 8 nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; } 9 10 # ルール追加 11 nft add rule inet filter input tcp dport 22 accept 12 nft add rule inet filter input tcp dport { 80, 443 } accept 13 nft add rule inet filter input ct state established,related accept 14 15 # ルールセットファイル(/etc/nftables.conf) 16 #!/usr/sbin/nft -f 17 table inet filter { 18 chain input { 19 type filter hook input priority 0; policy drop; 20 ct state established,related accept 21 tcp dport { 22, 80, 443 } accept 22 } 23 }
firewalld
firewalldはRHEL/CentOS/Fedoraのデフォルトファイアウォール管理ツール。 ゾーンベースの設定と動的ルール変更が特徴。
1 # 状態確認 2 firewall-cmd --state 3 firewall-cmd --list-all 4 5 # ゾーン一覧 6 firewall-cmd --get-zones 7 firewall-cmd --get-default-zone 8 9 # サービス許可 10 firewall-cmd --add-service=http --permanent 11 firewall-cmd --add-service=https --permanent 12 13 # ポート許可 14 firewall-cmd --add-port=8080/tcp --permanent 15 16 # 設定反映 17 firewall-cmd --reload 18 19 # リッチルール 20 firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent 21 22 # ゾーン変更 23 firewall-cmd --zone=public --change-interface=eth0
SRE/インフラ観点
ベストプラクティス
- • デフォルトDROP、必要なポートのみACCEPT
- • ESTABLISHED,RELATEDは必ず許可
- • ルール変更前に現在のルールをバックアップ
- • 変更はリモートアクセスを遮断しないよう注意
注意点
- • SSH(22)を遮断すると接続不能に
- • 本番環境では必ずコンソールアクセス手段を確保
- • クラウド環境ではセキュリティグループとの二重管理に注意