コマンドを使用していくつかの新しいルールを追加した後、iptables
次のように保存しました。/sbin/service iptables save
その後、/etc/sysconfig/iptables
私の新しいルールだけがファイルに表示されます。これで、すべての以前のルールが/etc/sysconfig/iptables.save
ファイルにあります。
私が知っているのは、システムが再起動されると新しいルールが適用されますが、古いルールは適用されません。新しいルールと既存のルールの両方を適用するにはどうすればよいですか?
答え1
あなたの問題は、新しいルールを追加したときに古いルールセットがロードされないことです。したがって、保存すると、新しく追加されたルールのみが保存され、以前のルールはすべて上書きされます。
ルールセットからルールを追加または削除するには、まずを使用する必要があります。その後、現在のルールセットを再service iptables start
編集して保存できます。これにより、マージを実行する必要がなくなります。service iptables save
/etc/sysconfig/iptables
2つのファイルをマージするには、手動で編集する必要があります。たとえば、ルールの1つをロードしてから、別のルールからマージするルールを手動でコピーして貼り付けて、コマンドを使用して挿入してから、iptables
このservice iptables save
操作をやり直して設定ファイルに保存します。
次の再起動時にファイルのルールが自動的にロードされるようにするには、次の手順を実行します。これにより、chkconfig iptables on
iptablesサービスがデフォルトの実行レベルに追加されます。
答え2
唯一のオプションは、テキストエディタを使用して2つのファイルを手動でマージすることです。両方のファイルのエントリはプレーンテキストであるため、これはかなり簡単に行えます。
はい
これは私のファイルです/etc/sysconfig/iptables
。
$ sudo more /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
他のファイルの項目をマージするときは、/etc/sysconfig/iptables.save
順序がそのまま残っていることを確認してください。したがって、そのファイルに行がある場合は、-A INPUT ...
すでに存在する行の末尾に置きます。
私は同様の規則に従います。したがって、テーブル内の項目をINPUT
一緒に配置し、FORWARD
テーブルの規則を一緒に配置します。