Firewalld(Dynamic Firewall Manager)
- iptables よりユーザフレンドリーに仕立ててる
References
設定ファイル
- 初期定義ファイル
/usr/lib/firewalld/services/
- 独自定義ファイル
/etc/firewalld/
- 初期定義ファイルからコピーして作成することも可能
- 初期定義ファイル
ステータス確認
# systemctl status firewalld
永続設定の反映
# firewall-cmd --reload
ゾーンの設定
firewalld サービスの情報
一般用途
ゾーン名 役割 public デフォルトのゾーン
公共領域での利用を想定work 業務での利用を想定したゾーン home 家庭での利用を想定したゾーン ファイアウォール
ゾーン名 役割 internal ファイアウォールの内部ネットワーク側での利用を想定したゾーン external ファイアウォールの外部ネットワーク側での利用を想定したゾーン dmz ファイアウォールの DMZ での利用を想定したゾーン 特殊
ゾーン名 役割 block 受信パケットは基本的に拒否
外部への通信とそれに関連する受信パケットだけを受信drop 受信パケットは基本的に破棄
外部への通信とそれに関連する受信パケットだけを受信trusted すべてのネットワークコネクションを許可
ゾーン一覧の参照
# firewall-cmd --get-zones block dmz drop external home internal public trusted work
デフォルトゾーンの確認
# firewall-cmd --get-default-zone public
デフォルトゾーンの変更
- ゾーンを変更すると、これまでのデフォルトゾーンに関連していたコネクションやインタフェースも、一緒に変更されるので注意
# firewall-cmd --set-default-zone=trusted success
アクティブなゾーン
# firewall-cmd --get-active-zone public interfaces: eth0
インタフェースのゾーンを変更する(public => work)
# firewall-cmd --zone=work --change-interface=eth0
ゾーンの設定内容の表示
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
- "--permanent" を指定しないと現在有効な設定が表示され、指定すると永続的な設定が表示される
- ゾーンを指定する場合には、
--zone=public
をつける - 全ゾーンを表示するには
--list-all-zones
オプションにする
サービスの公開設定
サービス一覧の表示
# firewall-cmd --get-services
サービス公開設定
ゾーンを指定しない場合、デフォルトゾーンに対して設定が行われる
"--permanent" オプションを指定しない場合、設定は一時的
- オプション付与した場合にはすぐには反映されず、設定を反映させるためには firewalld に設定を再度読み込ませる必要がある
"--timeout" オプションをつけると、指定した時間の間だけサービスが公開される
http を公開する
# firewall-cmd --permanent --add-service=http # firewall-cmd --add-service=http
- reload 時の瞬断あるのでサービスインしているサーバはではやらない
サービスの公開停止
# firewall-cmd --permanent --remove-service=http # firewall-cmd --remove-service=http
サービスの公開状態の表示
# firewall-cmd --list-services ssh dhcpv6-client telnet http
ポートの公開設定
firewall-cmd にサービスが登録されていない場合には、ポート番号とプロトコル(TCP/UDP) を指定して、ポートを公開する設定を行なう必要がある
ポートの公開設定
# firewall-cmd --permanent --add-port=8080/tcp # firewall-cmd --add-port=8080/tcp
- 連番
# firewall-cmd --permanent --add-port=8080-8085/tcp # firewall-cmd --add-port=8080-8085/tcp
- 連番
ポートの公開停止
# firewall-cmd --remove-port=8089/tcp # firewall-cmd --permanent --remove-port=8089/tcp
ポートの公開状態の表示
# firewall-cmd --list-ports 8080/tcp
特定 IP からのみ http 接続を許可する
接続を閉じる
# firewall-cmd --remove-service=http # firewall-cmd --permanent --remove-service=http
10.0.0.1 からの接続を許可(service 指定)
# firewall-cmd --add-rich-rule='rule family=ipv4 source address="10.0.0.1" service name=http accept' # firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="10.0.0.1" service name=http accept'
10.0.0.1 からの接続を許可(port 指定)
# firewall-cmd --add-rich-rule="rule family="ipv4" source address="10.0.0.1" port protocol="tcp" port="80" accept" # firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.1" port protocol="tcp" port="80" accept"
ポートフォワーディング(8080 => 80)
# firewall-cmd --add-forward-port="port=8080:proto=tcp:toport=80" # firewall-cmd --permanent --add-forward-port="port=8080:proto=tcp:toport=80" # firewall-cmd --list-forward-ports
IP アドレス
現在追加されている IP アドレスの表示
# firewall-cmd --list-sources
アクセス許可
# firewall-cmd --add-source=10.0.0.1 --zone=public # firewall-cmd --permanent --add-source=10.0.0.1 --zone=public
削除
# firewall-cmd --remove-source=10.0.0.1 --zone=public # firewall-cmd --permanent --remove-source=10.0.0.1 --zone=public
アクセス拒否
# firewall-cmd --add-source=10.0.12.60 --zone=drop # firewall-cmd --permanent --add-source=10.0.12.60 --zone=drop
サービスの新規作成
--permanent
オプションは必須test サービスの作成
# firewall-cmd --permanent --new-service test
XML ファイル確認
# cat /etc/firewalld/services/test.xml <?xml version="1.0" encoding="utf-8"?> <service> </service>
既存のxmlファイルから作成する場合(ssh の設定ファイルから test02 サービスを作る)
# firewall-cmd --permanent --new-service-from-file=/usr/lib/firewalld/services/ssh.xml --name=test02 # cat /etc/firewalld/services/test02.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="22"/> </service>
test サービスの説明文追加
# firewall-cmd --permanent --service=test --set-description="This is test" # firewall-cmd --permanent --service=test --set-short="Short"
設定反映
# firewall-cmd --reload
test サービスの削除
# firewall-cmd --permanent --delete-service=test