それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

iptables / firewalld で外部への通信を特定ユーザのみに制限する

発端は "特定のサーバからメールが送信されるのを拒否したい" とか、"特定のユーザ以外のメール送信を拒否したい" という話が出たので、ついでに適当に調べてみたメモ c⌒っ゚д゚)っφ

参考URL

RHEL/CentOS6.x

6.x系についてはこちらのブログにある通り iptables の "owner" モジュールで設定する事で対応出来た。

owner

This module attempts to match various characteristics of the packet creator, for locally generated packets. This match is only valid in the OUTPUT and POSTROUTING chains. Forwarded packets do not have any socket associated with them. Packets from kernel threads do have a socket, but usually no owner.

[!] --uid-owner username

[!] --uid-owner userid[-userid]

Matches if the packet socket's file structure (if it has one) is owned by the given user. You may also specify a numerical UID, or an UID range.

[!] --gid-owner groupname

[!] --gid-owner groupid[-groupid]

Matches if the packet socket's file structure is owned by the given group. You may also specify a numerical GID, or a GID range.

[!] --socket-exists

Matches if the packet is associated with a socket.
## "root" ユーザのみSMTP(port:25)に出ていけるように設定# iptables -A OUTPUT -p tcp -m tcp --dport 25 -m owner --uid-owner root -j ACCEPT## その他はDROP# iptables -A OUTPUT -p tcp -m tcp --dport 25 -j DROP## 確認# su - oppaioppai -c "telnet (SMTP鯖IP) 25"  #<-出れない# telnet (SMTP鯖IP) 25                       #<-出れる## 保存# service iptables save# cat /etc/sysconfig/iptables

RHEL/CentOS7.x

firewalld で同じ設定を行うにはダイレクトインターフェイス(--direct)を使うことで出来た。 結局 --direct を使う事で iptables の設定がそのまま流し込める感じ。

# firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 -m tcp -p tcp --dport 25 -m owner --uid-owner root -j ACCEPT# firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 999 -p tcp -m tcp --dport 25 -j DROP# firewall-cmd --reload# firewall-cmd --direct --get-all-rulesipv4 filter OUTPUT 0 -m tcp -p tcp --dport 25 -m owner --uid-owner root -j ACCEPT  ipv4 filter OUTPUT 999 -p tcp -m tcp --dport 25 -j DROP    * 出力されない場合は設定に失敗しているので /var/log/firewalld.log などを確認する。

上記で設定した内容は /etc/firewalld/direct.xml に反映されるので、直接 direct.xml を編集・リロードする事でも設定できる。

以上