Introduction
備忘録。firewall-cmd
は使う機会が多いのだが、どうにもコマンドが長くて覚えにくいのでメモ。
ここでは CentOS 8.1
での利用を想定。
How to use?
サービス名指定で通信許可
下記は cockpit
のサービスの通信許可設定の追加または削除。
追加
1 | firewall-cmd --permanent --zone=public --remove-service=cockpit |
削除
1 | firewall-cmd --permanent --zone=public --remove-service=cockpit |
ポート番号指定で通信許可
下記は ポート番号 9090 に対する通信許可設定の追加または削除。
追加
1 | firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 port port=9090 protocol=tcp accept" |
削除
1 | firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 port port=9090 protocol=tcp accept" |
通信元でフィルタ
前述の方法の場合、送信元に関係なく通信を許可してしまう。
そこで特定の送信元 IP (ここでは 192.168.11.21
) からの通信のみを許可するようにしてみる。
追加
1 | firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.11.21/32 port port=9090 protocol=tcp accept" |
削除
1 | firewall-cmd --permanent --zone=public --remove-rich-rule="rule family=ipv4 source address=192.168.11.21/32 port port=9090 protocol=tcp accept" |
ネットワーク指定も可能である。
その場合は 192.168.11.0/24
とか。
リジェクトのログを見る
ある端末からの通信が firewalld が原因で通信ができないのかを切り分けたいことは結構ある。
firewalld がリジェクトしているかどうかをログで見る
既定ではリジェクトのログは出力されないので明示的に有効化する。
現在の設定確認
1 | firewall-cmd --get-log-denied |
設定変更
1 | $ firewall-cmd --set-log-denied all |
ログの確認
/var/log/messages
を tail
でチェックし、問題の端末からアクセスを試してもらえば結果がわかる。
下記は、10.100.10.17
(つまり firewalld が動いている通信先のサーバー) に対して、10.100.1.1
という端末からポート番号 9090
にアクセスがあったが REJECT したというログになる。
1 | tail -f /var/log/messages |