web-dev-qa-db-ja.com

Fail2Banを使用してSynフラッド攻撃を禁止するにはどうすればよいですか?

ログに、次のようなドロップされたIPが頻繁に表示されます。

> Oct 30 17:32:24 IPTables Dropped: IN=eth0 OUT=
> MAC=04:01:2b:bd:b0:01:4c:96:14:ff:df:f0:08:00 SRC=62.210.94.116
> DST=128.199.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=45212
> PROTO=TCP SPT=51266 DPT=5900 WINDOW=1024 RES=0x00 SYN URGP=0
> 
> Oct 30 17:29:57 Debian kernel: [231590.140175] IPTables Dropped:
> IN=eth0 OUT= MAC=04:01:2b:bd:b0:01:4c:96:14:ff:ff:f0:08:00
> SRC=69.30.240.90 DST=128.199.xxx.xxx LEN=40 TOS=0x00 PREC=0x00 TTL=245
> ID=12842 DF PROTO=TCP SPT=18534 DPT=8061 WINDOW=512 RES=0x00 SYN
> URGP=0

上記から、これらはIpTablesルールによってドロップされているSynフラッドであると想定しています。これは私がSynのiptablesに持っているものです(これらのルールのどれが上記のものを落としているのかわかりませんが):

# Drop bogus TCP packets
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

# --- Common Attacks: Null packets, XMAS Packets and Syn-Flood Attack ---
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Fail2banでは、filter.dフォルダーにSyn攻撃の特定のフィルターが表示されません。これについての私の質問は次のとおりです。

1)上記のログを無視し、インターネット上でこれらのログにFail2Banフィルターを設定することを心配しないでください。とにかく、スクリプトキディが常にこれらを実行しますか?

2)Fail2banはiptablesログに基づいて機能するため、上記のSyn試行をサーバーで禁止する方法はありますか?

これは、フィルタに対する私の不十分な試みであり、機能しません。それが有効かどうかわからない:

[Definition]
failregex = ^<Host> -.*IPTables Dropped:.*SYN URGP=0
ignoreregex =

Debian + Nginxを使用しています

3
Neel

私はこれに対する別の解決策を思いつきました、そしてそれは今のところうまくいっているようです。基本的に、ログをスキャンして、指定されたfindtimeでさまざまな理由でドロップされたすべての不正なIPアドレスをブロックするフィルターを作成しました。したがって、このフィルターは、Syn、Xmas攻撃、ポートスキャンなどのためにドロップされたIPをブロックします-iptablesルールにリストされているものは何でも。つまり、さまざまな理由でiptablesブロックリストに表示され続けるものをブロックします。

Jail.local

[iptables-dropped]

enabled = true
filter = iptables-dropped
banaction = iptables-allports
port = all
logpath = /var/log/messages
bantime = 1800
maxretry = 3

フィルター:iptables-dropped.conf

[Definition]
failregex = IPTables Dropped: .* SRC=<Host>
ignoreregex =

上記のフィルターが機能するように、ドロップしたIPを次のようにiptablesルールに記録してください。

# log iptables denied calls (access via 'dmesg' command) to /var/log/messages file
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 5/min -j LOG --log-prefix "IPTables Dropped: " --log-level 4
iptables -A LOGGING -j DROP

上記は私にとってはうまくいくようです。

3
Neel

スーパーfail2banフィルター!!それは魅力のように働きます。どうもありがとう!

とにかく、私はこの方法で正規表現を変更するfail2banフィルターを編集することをお勧めします:

failregex = ^%(__prefix_line)slost connection after .*\[<Host>\]$
            ^%(__prefix_line)stoo many errors after .*\[<Host>\]$
0
Paolo Subiaco