firewalldで特定ポートの通信許可（簡易版）

#目的
CentOS7のfirewalldで、特定のポート/プロトコルを通信許可する設定をすること
※「とりあえずこのポート通したい」などの状況を想定しています

#firewalldでの通信制御
firewalldでは、事前に定義されたzoneに対して通信許可/遮断のルールを適用し、そのzoneを各NICに割り当てることで、制御を行います。

##zone
デフォルトでpublic, dmzなど9つのゾーンが用意されています。
詳細はこちらを参照ください
[firewalldの設定方法（基本設定編）](https://www.server-memo.net/centos-settings/firewalld/firewalld.html)

各zoneの設定は `/usr/lib/firewalld/zones/`配下にxmlファイルとして配置されています。

```
publicゾーンのxml(デフォルト設定)を確認する
[root@testvm1 ~]# cat /usr/lib/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="ssh"/>
  <service name="dhcpv6-client"/>
</zone>
```

以下のコマンドでもゾーンの設定を確認できます

```
[root@testvm1 ~]# firewall-cmd --list-all --zone=public
public (active)
  target: default　　             制御内容(許可/拒否)
※ACCEPT(ルールに適するものを無効、他を許可), DROP(ルールに適するものを許可、他を無効), REJECTがある
※defaultはzoneによって3つのうちのいずれかになるらしい
  icmp-block-inversion: no　　　　icmp-blocksで定義したICMPタイプの許可/拒否が逆になる（デバッグ用）
  interfaces: eth0 eth1 eth2   　 zoneを設定するNIC
  sources:　　　　　　　　　　　　　許可/拒否する送信元IPアドレス/NW
  services: ssh dhcpv6-client　　 許可/拒否するサービス（port/protcol）
  ports:　　　　　　　　　　　　　　許可/拒否するポート
  protocols:　　　　　　　　　　　　許可/拒否するプロトコル
  masquerade: no　　　　　　　　　 IPマスカレード（NAPT）の設定ON/OFF
  forward-ports:　　　　　　　　　 ポート変換の設定
  source-ports:　　　　　　　　　　許可/拒否する送信元ポート/プロトコル
  icmp-blocks:　　　　　　　　　　 拒否するICMPのタイプ
  rich rules:　　　　　　　　　　　より細かいルールの設定
```

#特定ポートの通信を許可する
80/tcpのポートへの通信許可を設定してみます

1.firewalldを起動

```
[root@testvm1 ~]# systemctl start firewalld
[root@testvm1 ~]# 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 Sat 2020-01-11 09:23:06 UTC; 6h ago
     Docs: man:firewalld(1)
 Main PID: 5742 (firewalld)
   CGroup: /system.slice/firewalld.service
           mq5742 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
```

2.(デフォルトのZoneである)Publicの設定状態を表示（確認）

```
[root@testvm1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1 eth2
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

3.publicゾーンのservicesの設定にhttpを追加

- zoneと同様に、service一覧は`/usr/lib/firewalld/services`配下のxmlで確認できます
- `--permanent`を指定すると恒久設定(再起動で元に戻らない)となりますが、即時反映はされないので「firewall-cmd --reload」で設定反映が必要となります

```
[root@testvm1 ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@testvm1 ~]# firewall-cmd --reload
success
[root@testvm1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1 eth2
  sources:
  services: ssh dhcpv6-client http
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

以上でとりあえずhttpポートへ通信できるように設定できます

#おまけ
####servicesの一覧`/usr/lib/firewalld/services`に無いポートを開けたい場合

```
（80/tcpを開ける場合）
[root@testvm1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@testvm1 ~]# firewall-cmd --reload
success
[root@testvm1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1 eth2
  sources:
  services: ssh dhcpv6-client http
  ports: 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```


#参考
RedHatページ
　　[RedHatカスタマポータル「第5章 ファイアウォールの使用」](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls)

こちらも参考にさせていただきました
　　[【すぐわかる】CentOSのポート開放のやり方](https://eng-entrance.com/linux-centos-port)
　　[firewalldの設定方法（基本設定編）](https://www.server-memo.net/centos-settings/firewalld/firewalld.html)
　　[CentOS 7 firewalld よく使うコマンド](https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e)

ちなみにUDPでの疎通確認はこちら
　　[UDPの疎通確認はtracerouteよりncが便利](https://qiita.com/aki-takano/items/f6e4c0ff626103ebf324)