iptables ルールが反映されない/他のルールで上書きされるときの修正

  • URLをコピーしました!

Linuxサーバで通信制御を行う際、iptables のルールを設定しても期待通り反映されない、または再起動や別ツールの影響で上書きされてしまうことがあります。
この記事では、そのような状況での原因と修正方法を体系的に解説します。

目次

主な症状

  • 手動で設定したルールがすぐに消える
  • 再起動後にルールが初期化される
  • 他のサービス(例:firewalld, ufw)が上書きしている
  • 意図したポートが開放/遮断されない

想定環境

  • OS:RHEL / CentOS / Rocky / AlmaLinux / Ubuntu
  • 管理ツール:iptables、firewalld、nftables など

原因と修正方法

原因説明修正方法
① firewalld と iptables の競合CentOS/RHEL 7 以降では firewalldiptables のラッパーとして動作します。直接 iptables を操作すると、firewalld が上書きします。firewalldを無効化し、iptablesを直接管理するか、firewall-cmdで設定します。

例:firewalld無効化
bash<br>sudo systemctl stop firewalld<br>sudo systemctl disable firewalld<br>
例:firewalld経由で設定
bash<br>sudo firewall-cmd --add-port=80/tcp --permanent<br>sudo firewall-cmd --reload<br>
② ルールが永続化されていない手動で設定したルールは再起動時に失われます。設定を保存・復元するようにします。

例(RHEL系)
bash<br>sudo service iptables save<br>
または
bash<br>sudo iptables-save > /etc/sysconfig/iptables<br>
起動時に読み込み
bash<br>sudo systemctl enable iptables<br>
③ 他ツール(cloud-init, ufw, dockerなど)が上書きDocker や ufw が独自のチェーンを生成し、既存ルールを上書きすることがあります。対象ツールの挙動を理解し、チェーンの順序を調整。

例:Dockerチェーンの確認
bash<br>sudo iptables -L -n --line-numbers<br>
Dockerネットワークの変更
bash<br>sudo nano /etc/docker/daemon.json<br># "iptables": false を設定<br>
④ nftables に移行しているシステムRHEL9 / Debian11以降では iptables コマンドが nftables のラッパになっているため、設定が反映されないことがあります。nft コマンドを使用して設定を行うか、iptables-legacyを使用します。

例:nftablesでのルール追加
bash<br>sudo nft add rule inet filter input tcp dport 80 accept<br>
⑤ チェーンの順序やポリシー設定の誤りINPUTチェーンにREJECTが先にあるなど、順序の問題で通らない。順序を見直す。

ルール確認
bash<br>sudo iptables -L INPUT --line-numbers<br>
特定ルール削除
bash<br>sudo iptables -D INPUT 1<br>

具体的な確認コマンド例

# 現在のルール確認
sudo iptables -L -n -v

# ルールの番号付き表示
sudo iptables -L INPUT --line-numbers

# 永続化ファイル内容確認(RHEL系)
cat /etc/sysconfig/iptables

# firewalld状態確認
sudo systemctl status firewalld

トラブル発生時の手順まとめ

手順内容
firewalld が有効か確認 (systemctl status firewalld)
iptables -L -n -v でルールを確認
Docker や ufw が上書きしていないか確認
永続化ファイルの有無確認 (/etc/sysconfig/iptables)
必要に応じて nftables への切り替え検討

原因と対応の対応表

原因対応方法
firewalldによる上書きfirewalld停止またはfirewall-cmdで設定する
永続化されていないiptables-save または service iptables save を使用
Docker/ufwによる上書き設定順序を調整、または該当ツールの設定変更
nftablesとの競合nft コマンドまたは iptables-legacy を使用
チェーン順序誤りルール順序を確認し、不要ルール削除・並び替え

まとめ

iptables ルールが反映されない原因の多くは firewalldとの競合 または 永続化設定の不足 によるものです。
Dockerやnftablesの影響も見逃せません。
「どのサービスがルールを管理しているのか」を整理し、適切な方法で永続化・管理することが安定運用の鍵です。

目次