LoginSignup
0
0

firewall-cmdでルールが削除できない時の対応

Last updated at Posted at 2024-02-04

アウトバウンドの通信を不許可にするためfirewalldのdirectルールを設定したところポート設定を間違えてどうにもならなくなってしまった時の解決法。
基本は設定項目をコピペするのがオペレーションとして正しいと思いますが、雑に手でやったら困ったことになったので備忘録として結果を残します。

iptablesにもかかる内容かと思います。

削除できなくなったオペレーション

ポート設定を間違えて登録した際に、--reloadで失敗する。

$ firewall-cmd --reload                                                    
Error: COMMAND_FAILED: Direct: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.5 (nf_tables): invalid port/service `0-65535' specified
Error occurred at line: 2
Try `iptables-restore -h' or 'iptables-restore --help' for more information.

確認したこと

ルール設定を確認しても、表示されない

$firewall-cmd --direct --get-all-rules
何も表示されない
$firewall-cmd --state
failed ←失敗したことは既にわかっている

ルール設定に表示されていないのでdirectルールの削除ができない

$firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 1 -m state
Warning: NOT_ENABLED: rule '('-m', 'state')' is not in 'ipv4:filter:OUTPUT'
success

iptablesの設定を見ても更新されていない

$iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

解決策

設定ファイルを削除後、reload

$rm /etc/firewalld/direct.xml
$rm /etc/firewalld/direct.xml.old
$firewall-cmd --reload

設定できるようになった

$firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
$firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -m state --state NEW -j DROP 
$firewall-cmd --reload
success

directルールを使用する時は便利だが、気をつける設定があるなと思いました。
firewall-cmdはまだまだ勉強中なので、ご意見ありましたらぜひコメントください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0