Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CentOS 7.7.1908 firewalld default-zone の違いによる iptables のポリシー違い

More than 1 year has passed since last update.

CentOS 7.7.1908
firewalld default-zone の違いによる iptables のポリシー違いを調べてみました。

留意点 ★ 部分

iptables-save

1. defult-zone が public の場合

iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [161:27475]
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direct - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:INPUT_ZONES - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i enp0s3 -g FWDI_public
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -o enp0s3 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A INPUT_ZONES -i enp0s3 -g IN_public
-A INPUT_ZONES -g IN_public
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT
COMMIT
# Completed on Sun Oct 27 16:41:01 2019

下記ポリシーにより チェイン INPUT は チェイン INPUT_ZONES を参照

★-A INPUT -j INPUT_ZONES

次に、チェイン INPUT_ZONES は下記のポリシーとなっていて、
インターフェイス enp0s3 からは チェイン IN_public を参照
さらに、enp0s3 以外のインタフェースについても、チェイン IN_public を参照となっている。

★-A INPUT_ZONES -i enp0s3 -g IN_public
★-A INPUT_ZONES -g IN_public

それでは チェイン IN_public はどうなっているかというと
チェイン IN_public_log, IN_public_deny, IN_public_allow を参照のこととなっている。

★-A IN_public -j IN_public_log
★-A IN_public -j IN_public_deny
★-A IN_public -j IN_public_allow

そして、デフォルトのポリシーでは、チェイン IN_public_log, IN_public_deny はなく、 IN_public_allow のみとなっている。

IN_public_allow では下記の定義となっていて、SSHを許可するポリシーとなっている。

★ -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT

実は firewall-cmd --add-service コマンドで外部からアクセスを許可するサービスを設定すると、IN_public_allow に設定されることになる。

firewall-cmd --add-service=https --zone=public 
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT

2. default-zone が private の場合

firewall-cmd --get-default-zone
> public
firewall-cmd --set-default-zone trusted
> success
iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [37:3004]
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direct - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDI_trusted - [0:0]
:FWDI_trusted_allow - [0:0]
:FWDI_trusted_deny - [0:0]
:FWDI_trusted_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:FWDO_trusted - [0:0]
:FWDO_trusted_allow - [0:0]
:FWDO_trusted_deny - [0:0]
:FWDO_trusted_log - [0:0]
:INPUT_ZONES - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:IN_trusted - [0:0]
:IN_trusted_allow - [0:0]
:IN_trusted_deny - [0:0]
:IN_trusted_log - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
 -A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i enp0s3 -j FWDI_trusted
-A FORWARD_IN_ZONES -j FWDI_trusted
-A FORWARD_OUT_ZONES -o enp0s3 -j FWDO_trusted
-A FORWARD_OUT_ZONES -j FWDO_trusted
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDI_trusted -j FWDI_trusted_log
-A FWDI_trusted -j FWDI_trusted_deny
-A FWDI_trusted -j FWDI_trusted_allow
-A FWDI_trusted -j ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A FWDO_trusted -j FWDO_trusted_log
-A FWDO_trusted -j FWDO_trusted_deny
-A FWDO_trusted -j FWDO_trusted_allow
-A FWDO_trusted -j ACCEPT
 -A INPUT_ZONES -i enp0s3 -j IN_trusted
 -A INPUT_ZONES -j IN_trusted
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT
 -A IN_trusted -j IN_trusted_log
 -A IN_trusted -j IN_trusted_deny
 -A IN_trusted -j IN_trusted_allow
 -A IN_trusted -j ACCEPT
COMMIT

firewall-cmd で default-zone を public から trusted に変更すると、iptables のポリシーが上記のとおりに変更される。

★ -A INPUT -j INPUT_ZONES
★ -A INPUT_ZONES -i enp0s3 -j IN_trusted
★ -A INPUT_ZONES -j IN_trusted
★ -A IN_trusted -j IN_trusted_log
★ -A IN_trusted -j IN_trusted_deny
★ -A IN_trusted -j IN_trusted_allow
★ -A IN_trusted -j ACCEPT

INPUT チェーンは INPUT_ZONES チェーンを参照という点は default zone が public のときと変わらない。
しかし、INPUT_ZONES チェーンの内容が変更されている。
INPUT_ZONEチェーンは enp0s3 インターフェイスからのInboundへの通信については IN_trustedチェーンを参照する。
また、enp0s3 インターフェイス以外からのInboundへの通信についてもIN_trustedチェーンを参照する。
default zone が public のときは、INPUT_ZONES チェーンは IN_public チェーンを参照する設定となっていたが、trusted に変更した場合は INPUT_ZONES チェーンは IN_trusted チェーンを参照せよとなったのだ。

続きを見てみよう。
IN_trusted チェーンは3つのチェーンと1つのターゲットを参照する。チェーンとしては、IN_trusted_log, IN_trusted_deny, In_trusted_allow チェーンだが、これらのチェーンの定義はない。最後に ACCEPT のターゲットが入っていることで、結局はすべての通信が許可となる。

この記事の背景は、そもそも firewalld と iptables ってどこが違うの?ってことを考えていて、ポリシーの設定のしやすさ、敷居の低さということが言われていて、それはわかるけれども iptables と firewalld とはどういう連携をしているのかわからないということでさらに調べていました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away