【firewalld】コマンド(firewall-cmd)の使い方 〜設定ファイルのパス、rich-ruleの定義方法、targetの意味〜

スポンサーリンク
スポンサーリンク

firewalld のコマンドの使い方まとめ

コピペ用。

(デフォルトのZoneである)Publicの設定状態を表示する

firewall-cmd –list-all

サービスを削除する

firewall-cmd –remove-service=dhcpv6-client

サービスを追加する

firewall-cmd –add-service=rsyncd

ポートを削除する

firewall-cmd –remove-port=80/tcp

ポートを追加する

firewall-cmd –add-port=123/udp

スポンサーリンク

rich-rule を追加する

firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.200.0/24″ port port=”135″ protocol=”tcp” accept’

再起動時に反映させる

サーバ再起動やfirewalld reload時に恒久的に反映させるためには、コマンドのどこかに–permanentを入れる(前でも後でも良い)

firewall-cmd –permanent –add-port=123/udp
firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.200.0/24″ port port=”135″ protocol=”tcp” accept’ –permanent

このオプションを使うと、設定ファイルに書き込むだけなので、再起動・再読込時には反映されますが、既存稼働中プロセスには反映しません。なお、設定ファイルのパスは以下です(defaultのzoneのpublic zoneの例)。

/etc/firewalld/zones/public.xml
再起動・再読込時は、上記設定ファイルを読み込むのです。

firewalld の Reload

firewall-cmd –reload

通常のreload だと、通信中のセッションは通信が継続できます。なので例えばsshの許可ルールを外したにも関わらず、既存sshセッションは残ります。

これを強制的に切りたいときは以下コマンドを使います。

firewall-cmd –complete-reload

スポンサーリンク

firewall-cmd –list-all で表示されるパラメータの意味

target: { default , ACCEPT , DROP , REJECT }

default ⇒ Zoneによって以下3つのいずれかになる。publicの場合はREJECTの動作になる。

ACCEPT ⇒ 全てを許可するようになる。

DROP ⇒ 拒否ルールに引っ掛かった通信はルール通り拒否し、何も返さない。

REJECT ⇒ 拒否ルールに引っ掛かった通信はルール通り拒否し、ICMP の Type 3(Destination Unreachable) の Code 10 ( Host administratively prohibited) を返す。

DROPとREJECTの違いは、上記のようにICMPのエラーコードを返すか返さないかです。

icmp-block-inversion: { yes , no }

yes ⇒ icmp-blocks に記載されたICMP Typeを受け入れ、記載されていないICMP Type を拒否するようになる。つまり、逆の動作になる。

no ⇒ icmp-blocks に記載された ICMP Type を拒否する。通常の動作。

これは一時的にデバッグを行うときのために使うものです。

スポンサーリンク

interfaces: { 該当インタフェース }

そのゾーンに属するインタフェースです。

sources: { IP or NW address }

送信元IPもしくはNWアドレス単位で全てを許可したい場合はここで指定します。

sources: 192.168.100.0/24 等と記載されます。

services: { サービスタイプ }

サービス単位で(送信元IP等に依らず)許可したい場合はここで指定します。使えるサービスタイプ文字列は、firewall-cmd –get-services で確認できます。

[root@localhost ~]# 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

スポンサーリンク

ports: { ポート/プロトコル }

ポート単位で(送信元IP等に依らず)許可したい場合はここで指定します。サービスと使い分ける意味はあまりありません。

ports: 80/tcp 等と記載されます。

protocols: { プロトコル }

プロトコル単位で(送信元IP等に依らず)許可したい場合はここで指定します。TCPやUDP, ICMP, OSPF等が入れられます。

protocols: tcp udp icmp ospf 等と記載されます。

masquerade: { yes , no }

NAPTを掛けるかどうかを決めます。カーネルでルーティングを有効にした場合や、firewalld のポートフォワードの機能を使う際に使うことができます。

firewall-cmd –add-masqueradeyes に、firewall-cmd –remove-masqueradeno に設定できます。

forward-ports: { port=待受ポート:proto=プロトコル:toport=変換後ポート:toaddr=変換後IPアドレス }

待ち受けポートおよびプロトコルの通信を受信した場合に、ポートおよび送信元IPアドレスを変換してルーティングを行います。

forward-ports: port=8080:proto=tcp:toport=80:toaddr=192.168.1.1 等と記載されます。

スポンサーリンク

sourceports: { ポート/プロトコル }

送信元ポート番号で(送信元IP等に依らず)許可したい場合はここで指定します。

sourceports: 50000/tcp 等と記載されます。

コマンドは何故か firewall-cmd –add-source-port=50000/tcp と、source と port の間にハイフンが必要です。

icmp-blocks: { ICMP Type }

送られてきたときに拒否するICMPのタイプを指定します。ICMPタイプは firewall-cmd –get-icmptypes で確認できます。

[root@localhost ~]# 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

rich-rules: {rich rule}

細かいルールを指定します。例えば送信元IPが192.168.200.0/24 からの TCP 135 番ポートを許可する場合は以下のように指定します。

firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.200.0/24″ port port=”135″ protocol=”tcp” accept’

zoneについて

zoneとは、いわゆるゾーンベースポリシーファイアウォールの概念のゾーンと同じ意味で、インタフェースをカテゴリ分けして、設定する数をインタフェースの数ではなくゾーンの数に減らし、管理を簡素化する概念です。

firewalldで全てのzoneの設定を確認するには、以下コマンドを打ちます。

firewall-cmd –list-all-zones

特定のzone(例えばexternal)だけの設定を確認するには、以下コマンドを打ちます。

firewall-cmd –zone=external
スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク