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 のセキュリティグループあるからそこまで神経質にならなくてもいいのかな感ある。