2018年5月4日金曜日

【CentOS7】エフェメラルポートを除いた全てのアウトバウンド通信をDROP(もしくはREJECT)

「指定のポート以外の外向きの通信を禁止したい」
「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