皆さんfirewalldは利用されてますでしょうか、知らない人のために説明しておくと
Linux7から登場したiptablesに代わるファイヤウォール機能です。
一応Linux7以降でもiptablesをインストールすれば、今まで通り使えたのであえて利用しなかった方も多いのではないでしょうか。
私自身もこれまで、逃げてましたがfirewalldに触れる機会ができたので、メモ。
いうほど難しくなかったので環境がある人は触ってみるといいですよ。
ポイントは、NICにどのゾーンを適用するか。
ゾーンに対してどのサービス(port)、IPアドレスを許可しているか。
リッチルール(詳細設定)を設定するかあたりです。
□ゾーン説明
デフォルトだと次の9つ用意されています。
「block、dmz、drop、external、home、internal、public、trusted、work」
ただし次の三つ以外は明確な違いはなく、初期に登録されているサービスが違う程度です。
--------------------------------------
trusted target: ACCEPT
→全許可。
drop target: DROP
→全拒否(内部→外部もNG)
block target: %%REJECT%%
→全拒否(内部→外部はOK)
--------------------------------------
基本的にこれらのゾーンはコンシューマ向けのシステム運用をしていてブラックリスト(海外IP等)で管理したい場合に利用する方がよいかと思います。
社内システムなどの場合は、ホワイトリストで問題なさそうです。
その他として、externalが唯一マスカレード機能がデフォルトでONになっています。
仰々しく書いてますが好きなゾーンを使って問題ないです。なければ作ってもよいです。
ここからはメモ書き。
□サービス起動停止
〇起動
systemctl start firewalld.service
〇確認
systemctl status firewalld.service
〇自動起動有効化
systemctl enable firewalld.service
〇確認
systemctl is-enabled firewalld.service
□firewall-cmd
〇反映(どのコマンドも実施した後は必ず実施する!!★)
firewall-cmd --reload
sshの許可などを変える際は反映後に接続確認するまでセッションを切らないようにすること!
--permanentをつけると恒久的な設定になる。と覚えておけばよい。
〇ゾーン作成
firewall-cmd --new-zone [ゾーン名] --permanent
〇ゾーン割り当て確認(全NIC)
firewall-cmd --get-active-zones
〇全ゾーン設定確認
firewall-cmd --list-all-zones --permanent
〇個別ゾーン設定確認
firewall-cmd --list-all --zone=internal --permanent
〇定義されているサービスの確認
firewall-cmd --get-services
〇サービスの作成
firewall-cmd --new-service [サービス名(任意)] --permanent
〇サービスの削除
firewall-cmd --remove-service=[サービス名(任意)] --permanent
〇サービスに対して定義情報の追加(port)
firewall-cmd --service=[サービス名] --add-port=[port番号]/tcp --permanent
同じサービスに対して複数の追加も可能。MWで複数利用するportがある場合は追加してしまう方がよい。
〇ゾーンに登録済のサービス確認
firewall-cmd --list-services --zone=[ゾーン名] --permanent
〇ゾーンに対してサービスを追加
firewall-cmd --add-service=[サービス名] --zone=[ゾーン名] --permanent
〇ゾーンからサービスの削除
firewall-cmd --remove-service=[サービス名] --zone=[ゾーン名] --permanent
〇デフォルトのサービス定義配置場所
/usr/lib/firewalld/services/
〇追加のサービス定義配置場所
/etc/firewalld/services/
★定義ファイルを直接編集しリロードしてもよい。
〇ゾーンに登録済のポート確認
firewall-cmd --list-ports --zone=[ゾーン名] --permanent
〇ゾーンに対してポートの追加(サービス定義を利用しない場合)
firewall-cmd --add-port=[port番号]/tcp --zone=[ゾーン名] --permanent
〇ゾーンからポートの削除
firewall-cmd --remove-port=[port番号]/tcp --zone=[ゾーン名] --permanent
〇ゾーンに対してIPアドレスの追加
firewall-cmd --add-source=[IPアドレス/サブネット] --zone=[ゾーン名] --permanent
〇ゾーンからIPアドレスの削除
firewall-cmd --remove-source=[IPアドレス/サブネット] --zone=[ゾーン名] --permanent
□リッチルール
上記で上げた3点は登録した時点で基本的には全許可。
もう少し対象を絞り込みたい時に利用するのがリッチルール。
〇追加
firewall-cmd --zone=[ゾーン名] --add-rich-rule='rule family=ipv4 source address="[IPアドレス/サブネット]" service name=[サービス名] [accept|reject|drop]' --permanent
(例)次の記述であれば、「192.168.100.200/32」から対象サーバに対してsshのアクセスは許可するという内容。
firewall-cmd --zone=[ゾーン名] --add-rich-rule='rule family=ipv4 source address="192.168.100.200/32" service name=ssh accept' --permanent
サービス側でsshが登録されており、ソースIPも登録されていた場合は「192.168.100.200/32」以外も通信許可されるので注意。
〇削除
firewall-cmd --zone=[ゾーン名] --remove-rich-rule='rule family=ipv4 source address="[IPアドレス/サブネット]" service name=[サービス名] [accept|reject|drop]' --permanent
基本的に追加で書いたものを--remove-rich-ruleとすればよい。