RedHat等OSのFireWallでFireWallが動作しているホスト(以降、当該ホスト)を保護する場合、外部からアクセス制御することは当然として、当該ホストから外部への通信を制御することが必要な場合があると思います。
以下のようなメールサーバを構成するとします。
![](https://nets-tip.com/wp-content/uploads/2023/08/image-17.png)
Firewalld の設定を確認するコマンド
firewall-cmd --list-all
![](https://nets-tip.com/wp-content/uploads/2023/08/image-9.png)
![](https://nets-tip.com/wp-content/uploads/2023/08/image-10.png)
![](https://nets-tip.com/wp-content/uploads/2023/08/image-13-1024x505.png)
OSに設定されているネットワークインターフェイスを確認するコマンド
nmcli device
![](https://nets-tip.com/wp-content/uploads/2023/08/image-16.png)
ens192が割り当てられており、Firewallはens192で有効になっている。
Firewall サービスの起動と停止(OS再起動後も設定引継ぎ)
OS起動時にFirewallを有効
sytemctl enable firewalld
OS起動時にFirewall無効
sytemctl disable firewalld
Firewallの一時起動と一時停止
systemctl start firewalld
systemctl stop firewalld
本題として当該ホストがsynパケットになる通信を制御するにはダイレクトルールを作成必があります。
上のメールサーバの図ですと、以下のコマンドになります。
ダイレクトルールの登録
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m tcp -p tcp --dport 25 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m udp -p udp --dport 53 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m tcp -p tcp --dport 53 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m udp -p udp --dport 123 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m tcp -p tcp --dport 443 -j REJECT
ダイレクトルールの削除
firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -m tcp -p tcp --dport 443 -j REJECT
ダイレクトルールの現状確認
firewall-cmd --direct --get-all-rules
![](https://nets-tip.com/wp-content/uploads/2023/08/image-18.png)
破棄(REJECTやDROPが先に処理されるようですね)
設定後、digコマンドのリターンがあること、curlコマンドが拒否されることを確認しました。
![](https://nets-tip.com/wp-content/uploads/2023/08/image-19.png)
![](https://nets-tip.com/wp-content/uploads/2023/08/image-20.png)
ご参考まで。