非常に単純な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コマンドを個別に実行しています。
また、これらの範囲をブロックする目的は予防的です。いくつかのWebサイトで、スクレイプ、クロール、またはスパムアカウントの作成を試みるボットの数を制限しようとしています。私はすでに sshguard を使用してサーバーでのブルートフォース攻撃をブロックしていますが、それは明らかに他のボットには役立ちません。
OK、わかりました。
VPS用のVirtuozzoコンテナがあることを述べておかなければなりません。 http://kb.parallels.com/en/746 は次のように述べています。
また、iptablesルールを追加できるようにするには、numiptentバリア値を増やす必要がある場合があります。
~# vzctl set 101 --save --numiptent 400
参考:これを有効にするには、コンテナを再起動する必要があります。
これは、私が約400で制限に達した理由を説明しています。CentOS6を使用している場合、これらすべてのルールを追加する代わりに、ipset
のiptables
モジュール(EPEL)をインストールします(ipset
は速い)。
現在のところ、CentOS 5.9では、iptables
> 1.4.4
とカーネルをコンパイルしてipset
を取得する必要があります。これはVPSであり、私のホストは最終的にCentOS 6にアップグレードする可能性があるため、これを追求するつもりはありません。
広い範囲またはかなりの範囲のIPについては、使用することをお勧めします ipset
国全体のIPブロックをブロックする場合は、 iptablesのgeoipモジュール を使用できます。
デバッグは難しくありませんが、ルールを純粋なiptablesコマンドに変換し、それらを1つずつ実行すると(シェルスクリプトを使用)、エラーが表示されます。通常、一部のiptモジュールが欠落しています。
最初に_iptables-save
_を使用して現在のルールをエクスポートし、次に次のようにしてその行ごとにデバッグします。
egrep '^(-A|-I)' ok.rules | while read x; do iptables $x || { echo failed $x; break; }; done
私は少しググった、それはCentOSのデフォルトのカーネル設定のバグのようだ。
Iptablesに関してRHELに未解決のバグがあるようです。あなたはそれを打っているかもしれません。 https://bugzilla.redhat.com/show_bug.cgi?id=59838
それまでの間、denyhosts
のようなものを見たことがありますか?攻撃されると、自動的にhosts.deny
にエントリが追加されます(ssh攻撃)
ちょっとした考え。