作成 2017.04.14
更新 2017.11.30
更新 2017.11.30
firewall-cmd コマンドメモ
CentOS 7 の firewalld に関するコマンドのメモです。
基本概念
firewalld は iptables と同じく Linux カーネルのパケットフィルター "netfilter" を操作する。
firewalld は iptables と比較して動的に操作できる。
firewalld はゾーンという複数のフィルターセットを切り替えて使う。ゾーン内を修正し、修正したゾーンをデフォルトゾーンに指定する。
firewalld の操作は、CLI で firewall-cmd 、GUI で firewall-config で使用する。
設定ファイルは /etc/firewalld ディレクトリ内に保存される。
firewalld で設定した現在の状態は iptables-save でも表示できる。
firewalld は iptables と比較して動的に操作できる。
firewalld はゾーンという複数のフィルターセットを切り替えて使う。ゾーン内を修正し、修正したゾーンをデフォルトゾーンに指定する。
firewalld の操作は、CLI で firewall-cmd 、GUI で firewall-config で使用する。
設定ファイルは /etc/firewalld ディレクトリ内に保存される。
firewalld で設定した現在の状態は iptables-save でも表示できる。
操作
デフォルトは public ゾーンが指定されており、dhcpv6-client と ssh が明示的に開いている。
また、ICMP はブロックされていない。
また、ICMP はブロックされていない。
ゾーンの管理
ゾーンの一覧
# firewall-cmd --get-zones work drop internal external trusted home dmz public block
ゾーンの一覧と設定を取得
# firewall-cmd --list-all-zones (長いので略)
とりあえず全開放
# firewall-cmd --set-default-zone=trusted
とりあえず全ブロック
# firewall-cmd --set-default-zone=block
各ゾーンの操作
現在の設定を確認
インターフェースごとに違うゾーンが指定できる
# firewall-cmd --get-active-zones public interfaces: ens160 # firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
サービス,ポートの追加(一時的)
指定すると直ちに反映される。
# firewall-cmd --zone=public --add-service=syslog # firewall-cmd --zone=public --add-port=514/tcp
サービス,ポートの追加(恒久的)
--permanent は設定ファイルに保存するだけで、現在の状態には反映されない。--reload を実行して初めて反映される
# firewall-cmd --zone=public --add-service=syslog --permanent # firewall-cmd --zone=public --add-port=514/tcp --permanent # firewall-cmd --reload
インターフェースの設定
複数インターフェースがあり、それぞれ別のゾーンを指定する場合に使用する
# firewall-cmd --zone=trust --add-interface=ens192
その他
指定可能なサービスの一覧
ポートの開放はサービス名でも指定できる。nfs など範囲が広い指定の際に便利。
ただし、実際に動作しているサービスを参照していないため期待通り通信できないことがある。
たとえば rsyslogd を使用する場合、サービス "syslog" を追加しても 514/udp しか解放されない。
実際には 514/tcp も必要なため別途ポートを開く必要がある。
想定外の不具合を回避するためにも --add-port の利用を勧める。
ただし、実際に動作しているサービスを参照していないため期待通り通信できないことがある。
たとえば rsyslogd を使用する場合、サービス "syslog" を追加しても 514/udp しか解放されない。
実際には 514/tcp も必要なため別途ポートを開く必要がある。
想定外の不具合を回避するためにも --add-port の利用を勧める。
# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
ICMP Type 一覧
ICMP をブロックすることもできるが、サーバーは特別な理由がない限りブロックすべきでない。
特に IPv6 では最適なパケットサイズをクライアントと合意して最適なパフォーマンスを得るために使用される。
また、IPv4 でもネットワークの輻輳状態を推測して最適な接続先を選択するのに使用される場合がある。
特に IPv6 では最適なパケットサイズをクライアントと合意して最適なパフォーマンスを得るために使用される。
また、IPv4 でもネットワークの輻輳状態を推測して最適な接続先を選択するのに使用される場合がある。
# firewall-cmd --get-icmptypes destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded timestamp-reply timestamp-request
タグ: CentOS