Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2005-09-20 (Tue)

ipt_recent

補足:いまならrecentじゃなくてhashlimitを使った方がよさげ。

以下の文章はrecentについてなので、hashlimitについて追記した id:hirose31:20060421 を見てもらった方がいいと思うす。


SSHのbrute forceアタックがうざいので、iptablesで悪い子はDROPするようにする。

  • OpenSSHのログをみて、
  • 一定時間に一定回数連続でアクセスに失敗しているやつはDROPするようにして、
  • atで然るべき時間が経ったら解除するように

しようかなぁと思ったら、iptablesにはipt_recentなんて便利がものがあるのがわかった。

↑を参考にして設定したのの抜粋はこんなかんじ。

iptables -N block_ssh
iptables -N ssh
iptables -A INPUT -j ACCEPT -s 信頼できるIPアドレス
iptables -A INPUT -j ssh    -p tcp --dport 22

# SSH brute force アタックを拒否する
# /proc/net/ipt_recent/*
iptables -F block_ssh
iptables -A block_ssh -m recent --name block_ssh --set \
    -j LOG --log-level DEBUG --log-prefix "block_ssh "
iptables -A block_ssh -j DROP

iptables -F ssh
## syn 以外のパッケットは許可
iptables -A ssh -p tcp ! --syn -m state --state ESTABLISHED,RELATED -j ACCEPT
## 攻撃者は10分間拒否し続ける
iptables -A ssh -p tcp --syn -m recent --name block_ssh \
    --update --seconds 600              -j REJECT
## 1分間に5回アクセスがあった場合は攻撃者と見なす
iptables -A ssh -p tcp --syn -m recent --name syn_ssh   \
    --rcheck --seconds 60  --hitcount 5 -j block_ssh
## syn パケットを記録
iptables -A ssh -p tcp --syn -m recent --name syn_ssh --set

iptables -A ssh -p tcp --syn -j ACCEPT

はまったのは、

  • Debian woodyのiptables 1.2.7aは古いらしく、-m recentの--nameが効かなかった。
    • → --name block_sshもsyn_sshもデフォルト名のDEFAULTになってしまった。
    • → なので、1回アクセスするとマークされて、2回目からブロックされてしまった。orz
    • → iptables 1.3.3にしたらちゃんと動くようになった。

s/blute/brute/gしました。ありがとうございますー>ifさん

numatanumata 2007/01/24 16:19 ipt_recent のバグはおっしゃる通り,去年の九月に出た 2.6.18 で解決されているはずです.
https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=415
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=332231

簡単なパッチらしきものは 2005 年の五月に既にあったんですが,完全な修正にはかなりの書き直しが必要だったことと,そもそも active なメンテナがいなかったのが,修正が遅れた原因のようです.
http://lists.netfilter.org/pipermail/netfilter-devel/2006-January/022946.html

SSH brute force attack 対策として ipt_recent について書いている日本語のサイトが hirose さんの所を含め幾つかあったんですが,修正されたのが数ヵ月前なのに,このバグについて書いてない所がほとんどなので,hirose さんのコメント欄をお借りしました.すいません.

hashlimit が使えれば OK なんですが,世の中には不幸な事情でカーネルアップデートがすぐできないサーバも多々あって,そういうサーバでの対策を紹介しておきます.
http://www.oreillynet.com/linux/blog/2006/05/iptables_recent_module_bug.html
にあるように 25 日以内に reboot して /proc/net/ipt_recent を一新するか,或いは ipt_recent の --name を 25 日以内に変更して別テーブルを使うことでバグから逃れられます.でもただの一時しのぎですから,recent と hashlimit,どっちを使う場合でも iptables のアップデートが必要です.

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 |