firewalldを使う。

 

Firewalldは、RHEL 7から採用されたファイアーウォールです。パケットの送受信において、あらかじめ指定したルールに基づいてパケットをフィルタします。ちなみにRHEL 6までは、iptablesが使用されておりました。なんで変えたんだろう。。という気もしなくもないですが、iptablesも引き続き7.xで使えます。

多分デフォルトで入っているかと思いますが、firewalldに関するモジュールを確認して入ってなかったらインストールします。


[root@host1 ~]# yum list installed |grep firewalld
firewalld.noarch 0.4.3.2-8.el7 @anaconda/7.3
firewalld-filesystem.noarch 0.4.3.2-8.el7 @anaconda/7.3
[root@host1 ~]#

firewwalldの起動

firewalldを有効化します。システム起動時に自動起動してくれます。

[root@host1 ~]# systemctl enable firewalld

 

サービスを立ち上げます。

[root@host1 ~]# systemctl start firewalld

 

念の為、ステーテスを確認しておきます。

[root@host1 ~]# systemctl status firewalld -l
??irewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-10-31 16:01:37 JST; 1 weeks 5 days ago
Docs: man:firewalld(1)
Main PID: 738 (firewalld)
CGroup: /system.slice/firewalld.service
??738 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Oct 31 16:01:36 host1.example.com systemd[1]: Starting firewalld - dynamic firewall daemon...
Oct 31 16:01:37 host1.example.com systemd[1]: Started firewalld - dynamic firewall daemon.
[root@host1 ~]#

 

 

ちなみにfirewalldで使用するConfigファイルは下記のディレクトリに保存されます。


[root@host1 ~]# ll /usr/lib/firewalld/
total 12
drwxr-xr-x. 2 root root 4096 Oct 27 16:38 icmptypes
drwxr-xr-x. 2 root root 20 Oct 27 16:38 ipsets
drwxr-xr-x. 2 root root 4096 Oct 27 16:38 services
drwxr-xr-x. 2 root root 94 Oct 27 16:38 xmlschema
drwxr-xr-x. 2 root root 163 Oct 27 16:38 zones

[root@host1 ~]# ll /etc/firewalld
total 8
-rw-r--r--. 1 root root 1525 Sep 13 2016 firewalld.conf
drwxr-x---. 2 root root 6 Sep 13 2016 icmptypes
-rw-r--r--. 1 root root 271 Sep 13 2016 lockdown-whitelist.xml
drwxr-x---. 2 root root 6 Sep 13 2016 services
drwxr-x---. 2 root root 46 Oct 27 16:42 zones
[root@host1 ~]#


 

firewalldの管理

 

firewalldを管理するには、firewall-cmdを使用します。

とりあえず、稼働状況を確認してみます。

[root@host1 ~]# firewall-cmd --state
running

[root@host1 ~]#

 

デフォルトのZoneを確認します。

[root@host1 ~]# firewall-cmd --get-default-zone
public
[root@host1 ~]#

 

Windowsでもネットワークを設定するときに、パブリックとか社内とかが設定されますが、Zoneはそれに似てますね。

 

## ルールの追加

httpをFirewallにサービスベースで追加してみます。

[root@host1 ~]# firewall-cmd --permanent --add-service=http
success
[root@host1 ~]#

 

--permanentオプションでは、永続的に保持されるConfigに追記されますので、一旦ReloadをするとConfigの設定で読み直します。

[root@host1 ~]# firewall-cmd --reload
success
[root@host1 ~]#

 

ブラウザで開けることを確認しました。

f:id:linlinrh:20171113172429p:plain

 

 

 

つぎに、ポートベースで追加するときは次のようにします。

 

vncのポートとhttpsのポートを開いてみました。httpsの方は--permanetオプションを付けてないので、--reloadすると外れます。


[root@host1 ~]# firewall-cmd --permanent --add-port=5901-5910/tcp
success
[root@host1 ~]# firewall-cmd --add-port=443/tcp
success

 

 

##追加されているルールの確認

 

Firewallに追加されたポートを表示します。

[root@host1 ~]# firewall-cmd --list-port
5901-5910/tcp 443/tcp

 

ちなみに、サービスを確認するときは、

[root@host1 ~]# firewall-cmd --list-service
dhcpv6-client http ssh
[root@host1 ~]#

 

iptablesでも確認できます。
[root@host1 ~]# iptables -L -n

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:80 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:5901:5910 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ctstate NEW

一旦Reloadをして様子をみます。

[root@host1 ~]# firewall-cmd --reload
success
[root@host1 ~]# firewall-cmd --list-port
5901-5910/tcp
[root@host1 ~]#

このように、permanentを指定していない443ポートは消えてしまいます。

 

permanent指定していない443はConfigファイルには入っていないため、reloadするとルールが消えます。


[root@host1 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="http"/>
<service name="ssh"/>
<port protocol="tcp" port="5901-5910"/>
</zone>
[root@host1 ~]#

 

##ルールの削除

 

ポートを削除します。


[root@host1 ~]# firewall-cmd --permanent --remove-port=5901-5910/tcp
success
[root@host1 ~]#

 

上のコマンドを実行しただけの状態では、まだポートはListenなっています。

[root@host1 ~]# firewall-cmd --list-ports
5901-5910/tcp
[root@host1 ~]#

 

ただ、Config上はでは5901-5910/tcpのエントリは消えていますので、

[root@host1 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="http"/>
<service name="ssh"/>
</zone>
[root@host1 ~]#

 

Reloadすれば、削除が反映されます。


[root@host1 ~]# firewall-cmd --reload
success
[root@host1 ~]#

 

Listenされなくなりました。

[root@host1 ~]# firewall-cmd --list-port

[root@host1 ~]#

 

 

長くなったのでこれまで。。