2007年2月16日

ssh アクセスの制限する

専用サーバを借りている当初からパラパラと brute force attack を受けていたので、気になっていたので対策を立ててみた。

iptables を使う場合、ipt_recent/ipt_hashlimitの2種類の方法があるらしい(他にもあるかも)。 ipt_recentは CentOS 4 のカーネルに標準に入っているので、こいつを使ってみる。

ただ巷では、ipt_recent はバグ#415(1,2)があったらしく、その不具合の修正が 2.6.18 取り込まれたそうである。 ただ、CAN-2005-2872,CAN-2005-2873 という名前が付いている結構深刻そうな不具合らしいので、現在のサーバ環境にも当てはまるか注意する必要がありそうだ。

で、CentOS 4は 2.6.9 のままでパッチがやたら当たっているので、問題ないのかなぁ? RHELの changelog を見る限り #167703(CAN-2005-2872)/#189127 の fix としてkernel-2.6.9-42.ELまでに修正は入っているようだ。で、CAN-2005-2873 はどうかと言えば、パッチを見る限りどうも一緒に対応したようである。取り敢えず、yum update で最新版にしていれば安心なようである。

でもって、SSH接続を60秒に5回以上行うホストは10分間拒絶する感じにすると下記のようになる。 あまりにもしつこいホストはdenyhost とに登録しおく感じ。

iptables -N attacked
iptables -A attacked -m recent --name evilhost --set \
         -j LOG --log-level INFO --log-prefix "brute force attack: "
iptables -A attacked -j REJECT
 
iptables -N check_ssh
iptables -A check_ssh -m recent --name tcpssh --set
iptables -A check_ssh -m recent --name tcpssh --rcheck \
         --seconds 60 --hitcount 5 -j attacked
 
iptables -N safehost
iptables -A safehost -s 127.0.0.1 -j ACCEPT
 
iptables -N safeonly
iptables -A safeonly -j safehost
iptables -A safeonly -j REJECT
 
iptables -N denyhost
iptables -A denyhost -s xx.xx.xx.xx -j REJECT
 
iptables -A INPUT -j safehost
iptables -A INPUT -j denyhost
iptables -A INPUT -m recent --name evilhost --rcheck \
         --seconds 600 -j REJECT
iptables -A INPUT -p tcp --syn --dport 22 -j check_ssh
iptables -A INPUT -p tcp --dport xxx -j safeonly

余計なサービスを一切立ち上げていないので、いいのかなぁ。 何か頑張ってない感じが出ているなぁ〜。

さて、evilhostなのど名前を付けたリストには何個のIPアドレスを覚えており、登録したIPアドレスのタイムスタンプ履歴はいくつまで覚えているのでしょうか?

無限?、、、まさか

モジュールの引数に最大値を引き渡せて、デフォルトでは履歴は20個、リストあたり100 IPアドレスまで記録できるそうなぁ。リストがあふれた場合は、古い履歴を持つリストから削除されると思う(ipt_recent.cのソースはちょっと分かりづらいので詰めていないけど)

0 件のコメント: