Linux基礎

【firewalld】ダイレクトルール設定で外向き(Outbound)通信の制限

firewalld のダイレクトルールとは?

firewalld は iptables を利用してアクセス制御をしていますが、一般的な Zone を利用したルールでは受信 (INPUT) の通信しか制御できず、送信の制御はできません。

ですが、ダイレクトルールを使うことで、iptables を直接操作し、送信 (OUTPUT) の通信を制御することができます。

その際、インタフェースの Zone に関係なく、ルールが適用されます。

http 通信を禁止する例

例えばサーバがウィルスに冒された場合であっても、http通信による外部通信を禁止したい、というときは以下のようにします。

[root@localhost firewalld]# curl milestone-of-se.nesuke.com/http.txt
milestone-of-se.nesuke.com presents

studying about http!

上記の通り、外部へのhttp接続ができています。そこへ下記のように--direct ルールを追加します。

[root@localhost ~]# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -m state --state NEW -m tcp -p tcp --dport 80 -j DROP
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# curl milestone-of-se.nesuke.com/http.txt
curl: (7) Failed connect to milestone-of-se.nesuke.com:80; 接続がタイムアウトし ました

設定後は、先程できていた http 接続ができなくなりました。

ルールの意味は、iptables の OUTPUT Chain (送信制御) の 1 行目に、tcp 80 の新規コネクションをドロップする、という意味です。

iptables ルールを直接見ると、OUTPUT_direct というチェインにルールが追加されています。

[root@localhost ~]# iptables -nvL --line-numbers
~~~
Chain OUTPUT_direct (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:80
[root@localhost ~]#

設定情報は /etc/firewalld/direct.xml に格納されます。

[root@localhost ~]# cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
 <rule priority="1" table="filter" ipv="ipv4" chain="OUTPUT">-m state --state NEW -m tcp -p tcp --dport 80 -j DROP</rule>
</direct>
[root@localhost ~]#

コメント

タイトルとURLをコピーしました