「指定のポート以外の外向きの通信を禁止したい」
「Outbound通信のポートを全塞ぎしたい」
からと言って、安易に以下のように全通信をDROPしてはいけません。
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 65498 -p tcp -j REJECT
エフェメラルポートまで閉じてしまうと、
内→外全ての通信が死んでしまうので…。
アウトバウンドのポートを閉じたいときは、
事前に必ずエフェメラルポートを開ける設定を入れなければいけません。
加えて、エフェメラルポートを開けるルールは、
全通信をDROPするルールよりも優先度を高くしなければいけません。
(ファイアウォールルールの優先度ですが、 65498 とか 65499 とか、この記事では適当な数字を使っています)
というわけで、CentOS7でエフェメラルポートを開けた後、全通信をDROPします。
エフェメラルポートを確認する
sysctl コマンドから
sysctl -a 2> /dev/null | grep net.ipv4.ip_local_port_range
proc ファイルシステムから
cat /proc/sys/net/ipv4/ip_local_port_range
以下、実行結果。
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999
CentOS7 デフォルトのエフェメラルポートは
32768
から 60999
までのようです。
エフェメラルポートを開放する
上記で確認した ip_local_port_range
を元に、許可ルールを追加します。
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 65498 -p tcp --dport 32768:60999 -j ACCEPT
全通信をDROPする
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 65499 -p tcp -j REJECT
reload して設定を反映する
firewall-cmd --reload
ついでにループバック通信を許可する
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 65497 -p tcp -d 127.0.0.0/8 -j ACCEPT
firewall-cmd --reload