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 ~]#
ブラウザで開けることを確認しました。
つぎに、ポートベースで追加するときは次のようにします。
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 ~]#
長くなったのでこれまで。。