CentOS7 以降の「極力設定ファイルを触らせない」感じのアレを遵守した場合、firewall-cmd 動いてない時どうすんの的なアレ。
firewalld が動いてるか確認する
動いてますね、ネットワークインタフェースの ens32 が public という名前の zone に所属しています。
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since 月 2016-05-16 19:35:48 JST; 7min ago
Main PID: 13414 (firewalld)
CGroup: /system.slice/firewalld.service
└─13414 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 16 19:35:48 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
5月 16 19:35:48 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
interfaces: ens32
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
firewalld を停止する
firewalld を停止して、どうなるか見てみましょ。
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) 5月 16 13:10:42 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon... 5月 16 13:10:47 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon. 5月 16 14:53:13 localhost.localdomain systemd[1]: Stopping firewalld - dynamic firewall daemon... 5月 16 14:53:14 localhost.localdomain systemd[1]: Stopped firewalld - dynamic firewall daemon. 5月 16 19:35:48 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon... 5月 16 19:35:48 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon. 5月 16 19:44:10 localhost.localdomain systemd[1]: Stopping firewalld - dynamic firewall daemon... 5月 16 19:44:11 localhost.localdomain systemd[1]: Stopped firewalld - dynamic firewall daemon.
--state で状態を取得してみる
not running ( 動作していない ) と返事をされます、これは大体想像できるかと思います。
[root@localhost ~]# firewall-cmd --state not running
動作していない状態でサービスを追加したい
動的に追加できる!とか言われても、firewalld を起動したら許可されたサービス以外遮断されてまうやん……?ほんなら停止中に追加すればええやん!!
[root@localhost ~]# firewall-cmd --add-service=http --zone=public FirewallD is not running [root@localhost ~]# firewall-cmd --list-all FirewallD is not running
firewalld が起動してないからだめだよ、と言われます。list すら通りません。困ったね。
司令官!firewall-offline-cmd があるじゃない!
ちゃんとパッケージが用意されてました。
--list-all してみる
とれる。
[root@localhost ~]# firewall-offline-cmd --list-all public (default) interfaces: sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
--add-service してみる
add できた。
[root@localhost ~]# firewall-offline-cmd --add-service=http --zone=public success [root@localhost ~]# firewall-offline-cmd --list-all public (default) interfaces: sources: services: dhcpv6-client http ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
firewall-offline-cmd から作業した結果を実際に確認する
という訳で以下のように、起動した後もちゃんと反映されていました。
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since 月 2016-05-16 20:44:26 JST; 21s ago
Main PID: 14069 (firewalld)
CGroup: /system.slice/firewalld.service
└─14069 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 16 20:44:26 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
5月 16 20:44:26 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
[root@localhost ~]# firewall-cmd --list-all
public (default, active)
interfaces: ens32
sources:
services: dhcpv6-client http ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
つまり?
firewall-offline-cmd を使えば解決します!やったね!!
しかし
動的に追加できない環境なら最初からちゃんと設計しましょう、というご指摘はごもっともですね……。まあ今どきはむっちゃお手軽な GUI ついかファイアウォールとか、AWS のセキュリティグループあるからそこまで神経質にならなくてもいいのかな感ある。