web-dev-qa-db-ja.com

iptables-restoreを使用したiptablesルールの適用エラー

こんにちはVPSでUbuntu 9.04を使用しています。 iptablesルールを適用するとエラーが発生します。これが私がしたことです。

1.既存のルールを保存しました

iptables-保存> /etc/iptables.up.rules

Iptables.test.rulesを作成し、それにいくつかのルールを追加します

nano /etc/iptables.test.rulesnano /etc/iptables.test.rules

これは私が追加したルールです

*filter


 #  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT


#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT


# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT


#  Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 22- j ACCEPT


# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT


# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7


# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

ルールを適用しようとしたときに編集した後

iptables-restore < /etc/iptables.test.rules

次のエラーが表示されます

iptables-restore:42行目が失敗しました

42行目はCOMMITであり、コメントします。

iptables-restore:43行目でCOMMITが必要です

何が問題なのかはわかりませんが、COMMITが必要ですが、COMMITが存在する場合はエラーになります。私がVPSを使用していることが原因でしょうか?私のプロバイダーは仮想化にOpenVZを使用しています。

2
John Franic

この時点で非常に古い投稿ですが、それはグーグルのトップの結果なので、私は自分のソリューションで更新すると思いました...

COMMITまたはiptablesの後に空白行が必要です。COMMITがオンになっている行で「コマンドが指定されていません」というエラーで復元が失敗します。

4
Drew N

iptables-restoreの動作方法により、ほとんどすべてのエラーはCOMMITポイントにあると報告されます。奇妙なことに、これらのエラーが発生した場合は、重要な各行の後にCOMMITを配置し(または、疑わしい場合は、問題と思われる行の後に)、どのバーフを確認します。

ただし、ルールを簡単に検査すると、これがおそらく問題であることがわかります。

-A INPUT -p tcp -m state --state NEW --dport 22-j ACCEPT

22-jの間にスペースがないことが、おそらく問題の原因です。クールな子供たちが言うように、「細部への注意は失敗します」。

[〜#〜] edit [〜#〜]:追加された情報を使って、私は手足に出て、OpenVZの問題だと言います(あなたのVPSプロバイダーはあなたに何も与えていません独自のルールを追加するためのiptablesクォータ)。とにかく、私は新しいVPSプロバイダーを見つけるでしょう。 VZは、仮想化のフィッシャープライスのおもちゃのようなものです。企業のデータセンターと10年あたり0.89ドルの「価格に敏感な」市場の終わりに位置していますが、プロのVPSホスティングにとっては絶対的な犬です。

4
womble

これは古い投稿ですが、誰かの問題を解決できるかもしれません。

同じエラーが発生しましたが、それはタイプミスがあるためです。

スローされたエラーは、最後の行である「COMMIT」にありましたが、実際にはこれでした。

-A RH-Firewall-1-INPUT -p tcp -m udp --dport 161 -j ACCEPT

エラーは、同じ行に"tcp"の後に "udp"と表示されていることでした。したがって、その行を次のように変更します。

-A RH-Firewall-1-INPUT -p udp -m udp --dport 161 -j ACCEPT

私の問題を解決しました

0
Gonzalo

おそらく、COMMITの前に持っていたスペース文字が原因で失敗していますか?

0
EEAA

古いスレッドですが、Google結果の最初のスレッドでもあります。おそらく、以下の情報は、iptablesルールが起動時に復元されない理由を解明しようとして髪を引っ張っている人を助けるでしょう。

私はUbuntu18.04でこの問題に遭遇しました。 netfilter-persistentサービスは、手動で起動すると正常に動作しているときに、起動時にランダムに失敗しました。 sshguardがすべてを並行してロードしようとしたため、systemdサービスと競合していたことが判明しました。 ENABLE_FIREWALL=0/etc/default/sshguardを設定してから、sshguardチェーンとルールを/etc/iptables/rules.v4/etc/iptables/rules.v6に手動で追加すると便利です。

0
leshik