CentOS 7では、ファイアウォールの設定をfirewalldというデーモンが管理しています。firewalldの設定はfirewall-cmdというコマンドを使います。
firewalldにはWebサーバーやメールサーバーなどの標準的な設定が、サービスと言う形で登録されています。
–add-serviceでサービスの許可を設定し、–remove-serviceでサービスの許可を取り消すことができます。
サービスが登録されていない場合は、ポートを指定する–add-portや–remove-portといったオプションを使うこともできます。
CentOSがインストールされた初期の状態は、セキュリティ確保のためファイアウォールが設定されており、サーバーへの接続ができないようになっています。
許可されているサービスは以下コマンドで確認できます。
# firewall-cmd --list-services dhcpv6-client ssh
次に、すべてのサービスを表示します。
# firewall-cmd --get-services RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https
たくさん出力されますが、このひとつひとつの単位で通信許可/拒否を決めることになります。
サービスの通信を許可する
では、ファイアウォールの設定を変更してみます。今回はhttpサービスを追加で許可します。
# firewall-cmd --add-service http success
設定が反映されたかどうか、許可されているサービスを確認します
# firewall-cmd --list-services dhcpv6-client http ssh
上記コマンドを実行することで許可されているサービスの一覧(ホワイトリスト)が表示されます。httpが追加されており、無事に許可されているようです。ただ、このままではfirewalldを再起動したら、設定は元に戻ってしまいます。
再起動しても上記変更分の設定が有効にするには以下のように「–permanent」を付与します。
–permanentオプションの場合は、即座に反映されません。そのため、即座に反映して、再起動後も有効にするには、両方を実行する必要があります。
# firewall-cmd --add-service http # firewall-cmd --add-service http --permanent success
許可されていることを確認します。
# firewall-cmd --list-service dhcpv6-client http ssh
これで、firewalldを再起動しても設定は引き継がれます。
サービスの通信を拒否する
サービスの通信を拒否するには、ゾーンからサービスを外します。
firewall-cmdに–remove-serviceを付けて実行します。同じく再起動後も有効になるように–permanentオプションを付けて再度実行します。
# firewall-cmd --remove-service=http --zone=public success # firewall-cmd --remove-service=http --zone=public --permanent success
許可されているサービスを確認するとhttpがはずれていることが分かります。
# firewall-cmd --list-services dhcpv6-client ssh
設定の再読み込み
/etc/firewalld/services/ディレクトリにサービス定義を追加した場合などには、firewalldの設定の再読み込みを行います。
設定の再読み込みには、firewall-cmdに–reloadオプションを付けて実行します。
# firewall-cmd --reload success
また、firewall-cmdに–complete-reloadオプションを付けるとNetfilter Conntrackのステート情報も初期化されます。
# firewall-cmd --complete-reload success