AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

firewalld 停止時にサービスを追加する

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

参考

www.certdepot.net

www.unix-power.net