こんにちは、ぐっちゃんです。
今回は、Webサーバ や メールサーバ の構築にてポート解放として使ってきたfirewalldについて調べていきたいと思います。
まとめ
- firewalld はパケットフィルタリングを行うデーモン
- 主に自身に向かう通信(INPUT)、自身から出る通信(OUTPUT)に対して制御が可能
- ゾーンは種類ごとに異なるセキュリティを設定可能
- ダイレクトルールはゾーンに関係なく設定するルール
- リッチルールはゾーンに対して設定するルール
firewalldって?
firewalld は、主に通信(パケット)のフィルタリングを行うためのセキュリティ機能を提供するデーモンです。firewall-cmdコマンドにてルールやゾーンの追加/削除、IP制限を行います。
環境
OS:MIRACLE LINUX9.0
バージョン:firewalld-1.0.0-4.el9.noarch
ゾーンについて
ネットワークインターフェース(NIC)を特定の「ゾーン」に割り当てることで、異なるセキュリティレベルを管理します。ゾーンごとに異なるファイアウォールのルール設定が可能であり、接続の種類や信頼度に応じて適切なセキュリティ設定を提供します。
ゾーンの種類は、block, dmz, drop, external, home, internal, nm-shared, public, trusted, workがあり、デフォルトは public が割り当てられています。
(–new-zoneオプションで独自のゾーンを追加可能です)
firewalld-cmdコマンドの主なオプション
設定全般に行うオプション
–permanent
設定した内容を恒久的にするオプションです。
通常、システムを再起動や firewalld のリロード時では変更した設定が元の状態になります。–permanentオプションをつけたうえで実行すると、再起動をしても設定を維持した状態になります。
独自のゾーンを作成したり、ゾーンの target を変更する等、一部のオプションでは –permanentオプションが必須となる場合があります。
–reload
firewalldの設定の再読み込み及び、–permanentオプションで設定した内容を反映させるコマンドです。
ちなみに、nftコマンドで設定した内容を元に戻すコマンドでもあります。
ゾーンに対して行うオプション
以下で紹介するオプションでは、ゾーン内の各行への設定をするコマンドです。
指定なしでは publicゾーンに設定となりますが、–zone=~~でゾーンを指定します。
–list-all
そのゾーンに設定された情報を出力します。デフォルトでは public ゾーンが指定されています。
–add-port (–remove-port) –add-service (–remove-service)
任意のポートやサービスを許可するオプションです。
ポート指定の場合、プロトコル(TCPやUDP)も指定しないとエラーになってしまいます。
–add-rich-rule
リッチルールとは、ゾーンに対し、ログをつける場合や指定した範囲のポートに対する許可(不許可)を設定する場合等、複雑なルールの設定ができるルールです。
- 相手のIP 192.168.XX.XXからくる通信には、ログをつける
- 自身のポートXXX-YYYへの通信は、ドロップさせる
もしリッチルールがなければ、独自のゾーンを追加し、ゾーン内の sources や ports等を細かく設定することになってしまいます。リッチルールではそのような動作を容易に設定可能になります。
ダイレクトルール
ダイレクトルールは リッチルールと同様、複雑なルールの設定が可能です。ルールを「ゾーンに割り当てるかそうでないか」が大きな違いです。ダイレクトルールはゾーンに関係なく設定するルールですが、リッチルールはゾーンに対して設定するルールです。
なお、このゾーンへのルールの有無についても、nftablesで確認ができます。
–direct –add-rule (–remove-rule)
例えば、ゾーン関係なく自身の80ポートに来る通信を許可したい場合は以下のように設定します。
# firewall-cmd –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 80 -j ACCEPT
firewalld のバックエンドについて
firewalld のバックエンドで動いているものが、RHEL7 と RHEL8 以降では異なり、RHEL7 では iptables、RHEL8 以降では nftables となっています。
<確認例>
# cat /etc/firewalld/firewalld.conf
FirewallBackend=nftables ★iptablesに変更したい場合、設定後リロードが必要
nftables は、iptables や ip6tables等を統合させたネットフィルターです。
firewall-cmd で設定された内容は、以下のように nftables に書き込まれます。
<確認例>
# nft list ruleset ★ルールの一覧を出力する
:
table inet firewalld {
:
chain filter_IN_public_allow { ★publicゾーンにて許可したルール
tcp dport 22 ct state { new, untracked } accept ★SSH接続が許可されている
ip6 daddr fe80::/64 udp dport 546 ct state { new, untracked } accept
tcp dport 9090 ct state { new, untracked } accept
}
:
}
コメント