root で次を実行して、firewalldの代わりに iptables が起動するようにします。
yum install iptables-services
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
以下のように iptables のINPUT,FORWARDチェインともに、デフォルトポリシーが ACCEPT になっています。
また、各チェインのルールの最後に、それまでのルールに該当しなかったものを明示的に Rejectするルールが入っています。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ここで、iptables のルール追加を iptables -A INPUT … のように行うと、Rejectするルールの後に追加されて意味が無いので、末尾の REJECT のルールより前に挿入する必要があります。
iptables -P INPUT DROP を実行してポリシーをDROPにし、末尾の
REJECT all — anywhere anywhere reject-with icmp-host-prohibited
のルールを削除すると、iptables -A INPUT … のように追加して運用できます。
ただし、元のルールの reject-with icmp-host-prohibited では通信元にrejectされたことを通知しますが、ポリシーをDROPにした場合は、通知なしにパケットが破棄されることに注意してください。
コメント