皆さんfirewalldは利用されてますでしょうか、知らない人のために説明しておくと
Linux7から登場したiptablesに代わるファイヤウォール機能です。
一応Linux7以降でもiptablesをインストールすれば、今まで通り使えたのであえて利用しなかった方も多いのではないでしょうか。
私自身もこれまで、逃げてましたがfirewalldに触れる機会ができたので、メモ。
いうほど難しくなかったので環境がある人は触ってみてください。
ポイントは、NICにどのゾーンを適用するか。
ゾーンに対してどのサービス(port)、IPアドレスを許可しているか。
リッチルール(詳細設定)を設定するかあたりです。
1 初心者向けのLinux環境の用語・コマンド解説【firewalld用語】
1.1 firewalld用語解説【ゾーン】
1.2 firewalld用語解説【サービス】
2 初心者向けのLinux環境の用語・コマンド解説【firewalld起動停止】
2.1 service起動
2.2 serviceステータス確認
2.3 service自動起動有効化
2.4 service自動起動有効化確認
3 初心者向けのLinux環境の用語・コマンド解説【firewalld設定】
3.1 FW設定反映(どのコマンドも実施した後は必ず実施する!!★重要)
3.2 ゾーン作成
3.3 ゾーン割り当て確認(全NIC)
3.4 全ゾーン設定確認
3.5 個別ゾーン設定確認
3.6 定義されているサービスの確認
3.7 サービスの作成
3.8 サービスの削除
3.9 サービスに対して定義情報の追加(port)
3.10 ゾーンに登録済のサービス確認
3.11 ゾーンに対してサービスを追加
3.12 ゾーンからサービスの削除
3.13 デフォルトのサービス定義配置場所
3.14 追加のサービス定義配置場所
3.15 ゾーンに登録済のポート確認
3.16 ゾーンに対してポートの追加(サービス定義を利用しない場合)
3.17 ゾーンからポートの削除
3.18 ゾーンに対してIPアドレスの追加
3.19 ゾーンからIPアドレスの削除
3.20 リッチルール追加
3.21 リッチルール削除
初心者向けのLinux環境の用語・コマンド解説【firewalld用語】
・firewalld用語解説【ゾーン】
firewalldを利用する上で一番重要になるゾーンに関して解説します。
デフォルトだと次の9つ用意されています。
「block、dmz、drop、external、home、internal、public、trusted、work」
ただし次の三つ以外は明確な違いはなく、初期に登録されているサービスが違う程度です。
--------------------------------------
trusted target: ACCEPT
→全許可。
drop target: DROP
→全拒否(内部→外部もNG)
block target: %%REJECT%%
→全拒否(内部→外部はOK)
--------------------------------------
基本的にこれらのゾーンはコンシューマ向けのシステム運用をしていてブラックリスト(海外IP等)で管理したい場合に利用する方がよいかと思います。社内システムなどの場合は、ホワイトリストで問題なさそうです。
その他として、externalが唯一マスカレード機能がデフォルトでONになっています。
仰々しく書いてますが好きなゾーンを使って問題ないです。なければ作ってもよいです。
NICに対して、適したゾーンを設定するという事が重要になります。
・firewalld用語解説【サービス】
firewalldでは、ポート一つ一つを定義する事も可能ですが、サービスというものを登録する事で、MWが使用するポートをまとめて定義する事が可能です。勿論、ポート一つでも定義する事は可能なので、名称をつけてポートを管理(SSHなら22/tcp)したいというケースでも利用する事が可能です。あらかじめ主要なサービスは登録されているので、もしその中に存在しないようであれば自分自身で作成する事で利用が可能となります。
初心者向けのLinux環境の用語・コマンド解説【firewalld起動停止】
・service起動
systemctl start firewalld.service
・serviceステータス確認
systemctl status firewalld.service
・service自動起動有効化
systemctl enable firewalld.service
・service自動起動有効化確認
systemctl is-enabled firewalld.service
初心者向けのLinux環境の用語・コマンド解説【firewalld設定】
・FW設定反映(どのコマンドも実施した後は必ず実施する!!★重要)
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とすればよい。