非常に単純なbashスクリプト(最初はエコー、コマンド実行、最後にエコー)を作成し、iptablesに約7300のルールを追加してほとんどの中国とロシアをブロックしましたが、次のエラーが発生する前に約400のルールを追加しました。
iptables: Unknown error 18446744073709551615
後でルールを手動で追加しようとしましたが、追加できませんでした(同じエラーが発生しました)。
各ルールを追加するコマンドは次のとおりです。
/sbin/iptables -A sshguard -s x.x.x.0/x -j DROP
sshguard
私が使用するために作ったチェーンですsshguardデーモン、チェーンを混乱させないように、そこにルールを追加したいと思いますINPUT
。私が提供したIP範囲はテストする有効な範囲を提供しましたが、同じエラーが発生したため、ここで責める必要はありません。ルールチェーンを更新して単一のルールを追加すると機能しますが、約400項目以降は機能しません。
あらかじめグーグルをやってみましたが、こんな問題を経験する他の方も私と同じ理由でそんな問題はないようでした。
各iptablesチェーンには一種のルール制限がありますか?また、これはエラーではなく、これらの範囲をブロックする正しい方法ですか?
# iptables -V
iptables v1.3.5
# cat /etc/issue
CentOS release 5.8 (Final)
# uname -a
Linux domain.com 2.6.18-028stab101.1 #1 SMP Sun Jun 24 19:50:48 MSD 2012 x86_64 x86_64 x86_64 GNU/Linux
編集する:明確にするために、bashスクリプトはファイルまたはIPリストを繰り返すのではなく、各iptablesコマンドを個別に実行します。
さらに、これらの範囲をブロックする目的は予防です。一部のサイトでクロール、クロール、またはスパムアカウントを作成しようとしているボットの数を制限したいとします。すでに使っています。sshguard私のサーバーに対する無差別攻撃の試みをブロックしますが、これは明らかに他のボットには役立ちません。
答え1
わかりました、わかりました。
私のVPSにはVirtuozzoコンテナがあることに言及したいと思います。http://kb.parallels.com/en/746以下を参照してください:
さらに、より多くのiptablesルールを追加するには、numpentバリア値を増やす必要があるかもしれません。
~# vzctl set 101 --save --numiptent 400
注:この内容を適用するには、コンテナを再起動する必要があります。
これが私が約400の限界に達した理由を説明します。 CentOS 6がある場合は、これらのルールをすべて追加するのではなく、モジュールipset
(EPEL)をインストールします(より高速なため)。iptables
ipset
現在、CentOS 5.9ではiptables
>1.4.4
とカーネルをコンパイルする必要がありますipset
。これはVPSであり、私のホストはおそらく最終的にCentOS 6にアップグレードされるため、これを追求しません。
答え2
デバッグは難しくありませんが、ルールを純粋なiptablesコマンドに変換して1つずつ実行すると(シェルスクリプトを使用して)エラーが表示され、通常は一部のiptモジュールがありません。
まず、iptables-save
現在のルールをエクスポートするために使用され、次の操作を実行して1行ずつデバッグします。
egrep '^(-A|-I)' ok.rules | while read x; do iptables $x || { echo failed $x; break; }; done
グーグルしてみると、CentOSのデフォルトカーネル構成にバグがあるようです。
答え3
RHELのiptablesに未解決のバグがあるようです。あなたはそれに触れることができます。 https://bugzilla.redhat.com/show_bug.cgi?id=598380
これまで似たようなものを見たことがありますかdenyhosts
?hosts.deny
攻撃を受けると(ssh攻撃)、自動的にアイテムを追加します。
ただ考えです。