CentOS 7 で Firewall を無効にするには

CentOS 6 で Firewall を無効にするためには、# service iptables stop のように、iptables サービスを停止させる必要がありました。

しかし、CentOS 7 から Firewall を無効にするためには、サービス管理デーモンである systemctl を使って、iptables の代わりにデフォルト Firewall として採用された firewalld デーモンを停止させる必要があります。

今回は、Firewall は、ネットワークの上位に存在するからサーバ側では要らない検証目的で Firewall を無効にしたい 等の場合を想定し、Firewall を無効にする方法についてご紹介します。

従来の iptables と firewalld の関係firewalld の詳細がもっと知りたい方は、以下のサイトを参考にしてください。 (コンテンツが 2ページに分かれていて、2ページを見るためには会員登録が必要ですが、図は 1ページ目にあるので、図だけを軽く確認したい方は、そこだけ確認してもいいかなと思います)

Firewall 無効化

Step 1. 現在の iptables リスト確認

まずは、iptables のリストを確認します。(-n : IP アドレスは、数字で出力)

iptables が動いている場合には、以下のように、長い結果が返ってきます。

iptables リスト確認Raw Code(S)Raw Code(T)
# systemctl list-unit-files --type service | grep "firewalld"
firewalld.service        enabled

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0
INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0
INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
FORWARD_direct  all  --  0.0.0.0/0            0.0.0.0/0
FORWARD_IN_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0
FORWARD_IN_ZONES  all  --  0.0.0.0/0            0.0.0.0/0
FORWARD_OUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0
FORWARD_OUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
OUTPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD_IN_ZONES (1 references)
target     prot opt source               destination
FWDI_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]
FWDI_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]

Chain FORWARD_IN_ZONES_SOURCE (1 references)
target     prot opt source               destination

Chain FORWARD_OUT_ZONES (1 references)
target     prot opt source               destination
FWDO_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]
FWDO_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]

Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target     prot opt source               destination

Chain FORWARD_direct (1 references)
target     prot opt source               destination

Chain FWDI_public (2 references)
target     prot opt source               destination
FWDI_public_log  all  --  0.0.0.0/0            0.0.0.0/0
FWDI_public_deny  all  --  0.0.0.0/0            0.0.0.0/0
FWDI_public_allow  all  --  0.0.0.0/0            0.0.0.0/0

Chain FWDI_public_allow (1 references)
target     prot opt source               destination

Chain FWDI_public_deny (1 references)
target     prot opt source               destination

Chain FWDI_public_log (1 references)
target     prot opt source               destination

Chain FWDO_public (2 references)
target     prot opt source               destination
FWDO_public_log  all  --  0.0.0.0/0            0.0.0.0/0
FWDO_public_deny  all  --  0.0.0.0/0            0.0.0.0/0
FWDO_public_allow  all  --  0.0.0.0/0            0.0.0.0/0

Chain FWDO_public_allow (1 references)
target     prot opt source               destination

Chain FWDO_public_deny (1 references)
target     prot opt source               destination

Chain FWDO_public_log (1 references)
target     prot opt source               destination

Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]
IN_public  all  --  0.0.0.0/0            0.0.0.0/0           [goto]

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination

Chain INPUT_direct (1 references)
target     prot opt source               destination

Chain IN_public (2 references)
target     prot opt source               destination
IN_public_log  all  --  0.0.0.0/0            0.0.0.0/0
IN_public_deny  all  --  0.0.0.0/0            0.0.0.0/0
IN_public_allow  all  --  0.0.0.0/0            0.0.0.0/0

Chain IN_public_allow (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW

Chain IN_public_deny (1 references)
target     prot opt source               destination

Chain IN_public_log (1 references)
target     prot opt source               destination

Chain OUTPUT_direct (1 references)
target     prot opt source               destination

Step 2. Firewall 無効化

後は、systemctl を使って、firewalld サービスを停止した上で、無効にします。

Firewall 停止・無効化Raw Code(S)Raw Code(T)
# systemctl stop firewalld

# systemctl disable firewalld 
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

オマケ : 無効にしたのにも関わらず、iptables が動いている

CentOS 7 であれば、大体上記の手順で無効化できると思います。

しかし、確かに上記の手順で firewalld を無効にしたにも関わらず、ディストリビューションによっては、 firewalld だけではなく、iptables サービスも動いているケースもあります。

そのときには、合わせて、以下を試してみてください。

動いてないように見えても実際には無効になっていない状況Raw Code(S)Raw Code(T)
# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
iptables サービス停止・無効化Raw Code(S)Raw Code(T)
# systemctl stop iptables
# systemctl disable iptables

# systemctl status iptables
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
firewalld サービス停止・無効化Raw Code(S)Raw Code(T)
# systemctl stop firewalld
# systemctl disable firewalld

# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)
   Active: inactive (dead)

余談ですが、VMware のコンテナ向け軽量 Linux OS である Photon を少し試そうと思って、 同じ systemctl だし、firewalld だけ無効にすればいいだろう。。という思い込みのせいで、試してみたら全然無効にならなくて、少しハマりました。

何かサービスを止める際には、一通り関連プロセスが動いているかどうか調べておけば、ハマらずに済むと思いますけどね。

ご参考までに。

以上、CentOS 7 : Firewall 無効化 でした。