firewalldについて最低限まとめておく

CentOS7になり、ネットワークまわりの設定がかなり変わりましたね。地味に困りますねえ。。。設定の都度ググっては忘れてを繰り返しているので、備忘録としてまとめておきます。

以下のサイトを参考にしていますので、詳しくはこちらを見たほうが良いと思います。。。

CentOS7 firewalldの設定方法

firewalldの設定方法(基本設定編) | server-memo.net

CnetOS7で出てきたfirewalldではzoneという概念が出てきます。zone毎に通信制御のポリシーを設定して、そのzone(ポリシー集)をNICに紐付けることになります。

現在の設定状態を確認するのは、以下のコマンド。

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

「public」というzoneが、eth0のNICに紐付いていて、「dhcpv6-client」と「ssh」というサービスが許可されています。

デフォルトで用意されているzone情報は以下で確認。「dmz」とか「home」とか名前のzoneが定義されています。

$ sudo firewall-cmd --list-all-zones

事前に登録されているサービス情報は、以下にxmlファイルで定義されています。

$ ls /usr/lib/firewalld/services/
RH-Satellite-6.xml    dropbox-lansync.xml      ipsec.xml         ms-wbt.xml      privoxy.xml       smtps.xml        tor-socks.xml
amanda-client.xml     freeipa-ldap.xml         iscsi-target.xml  mysql.xml       proxy-dhcp.xml    snmp.xml         transmission-client.xml
amanda-k5-client.xml  freeipa-ldaps.xml        kadmin.xml        nfs.xml         ptp.xml           snmptrap.xml     vdsm.xml
bacula-client.xml     freeipa-replication.xml  kerberos.xml      ntp.xml         pulseaudio.xml    squid.xml        vnc-server.xml
bacula.xml            ftp.xml                  kpasswd.xml       openvpn.xml     puppetmaster.xml  ssh.xml          wbem-https.xml
ceph-mon.xml          high-availability.xml    ldap.xml          pmcd.xml        radius.xml        synergy.xml      xmpp-bosh.xml
ceph.xml              http.xml                 ldaps.xml         pmproxy.xml     rpc-bind.xml      syslog-tls.xml   xmpp-client.xml
dhcp.xml              https.xml                libvirt-tls.xml   pmwebapi.xml    rsyncd.xml        syslog.xml       xmpp-local.xml
dhcpv6-client.xml     imap.xml                 libvirt.xml       pmwebapis.xml   samba-client.xml  telnet.xml       xmpp-server.xml
dhcpv6.xml            imaps.xml                mdns.xml          pop3.xml        samba.xml         tftp-client.xml
dns.xml               ipp-client.xml           mosh.xml          pop3s.xml       sane.xml          tftp.xml
docker-registry.xml   ipp.xml                  mountd.xml        postgresql.xml  smtp.xml          tinc.xml

詳細はファイルの中身見れば分かります。

$ cat /usr/lib/firewalld/services/dhcpv6-client.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>DHCPv6 Client</short>
  <description>This option allows a DHCP for IPv6 (DHCPv6) client to obtain addresses and other IPv6 settings from DHCPv6 server.</description>
  <port protocol="udp" port="546"/>
  <destination ipv6="fe80::/64"/>
</service>

許可するサービスやポートの設定を変更するにあたり、一時的設定と恒久的設定があります。恒久的設定にしておかないと、firewalldサービスの再起動の都度、リセットされてしまいます。

設定するためのコマンドは以下です。サービスを登録する方法です。「--permanet」オプションをつけると、恒久的設定になります。

$ sudo firewall-cmd --permanent --zone=public --add-service=telnet
success

ポートを登録する方法。

$ sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
success

恒久的な設定を与えた場合、以下のリロードコマンドを実行しないと、設定が反映されません。なお、このリロード処理では、セッションは切れず、動的に更新してくれます。

$ sudo firewall-cmd --reload

あとは迷ったら、「firewall-cmd --help」で確認すること。

初めて触る人にしてみれば、iptablesよりfirewalldの方が分かり易いんじゃないかなと思います。