sshd へのブルートフォースアタック

先日,研究室サーバ PC (sshd) へのブルートフォースアタックがひどかったので,iptables の ipt_recent モジュール機能によるフィルタリングを試験的に開始しました.

iptables の設定は以下の通り.

#!/bin/sh

######################
## SSH-evil chain ##
######################

# SSH-evil チェインを定義
iptables -N SSH-evil

# SSH チェインから brute force attack とみなされたアドレスを badSSH リスト (ブラックリスト) に登録 (このアドレスは REJECT)
iptables -A SSH-evil -m recent --name badSSH --set -j LOG --log-level DEBUG --log-prefix "evil SSH user: "
iptables -A SSH-evil -j REJECT


#################
## SSH chain ##
#################

# SSH チェインを定義
iptables -N SSH

# syn フラグの立っていないパケットを ACCEPT
iptables -A SSH -p tcp ! --syn -m state --state ESTABLISHED,RELATED -j ACCEPT

# source IP が brute force attach のブラックリスト (過去 3 分間) に入っている場合 REJECT
iptables -A SSH -p tcp --syn -m recent --name badSSH --rcheck --seconds 180 -j REJECT

# brute force attack か否か判断 (15 秒間に 3 アクセス以上の場合 SSH-evil へ飛ぶ)
iptables -A SSH -p tcp --syn -m recent --name sshconn --rcheck --seconds 15 --hitcount 3 -j SSH-evil

# sshconn リストに source IP を記録 (このアドレスは ACCEPT)
iptables -A SSH -p tcp --syn -m recent --name sshconn --set
iptables -A SSH -p tcp --syn -j ACCEPT


# sshd へのアクセス (eth0) は SSH チェインへ飛ばす
iptables -A INPUT -i eth0 -p tcp --dport 22 -j SSH

これでとりあえず何日か見てみるということになっていたが,懸念されていた NAPT 下ユーザからの不満はでてこないものの,多いときは一日 100 アクセス以上….
それでも何もしなかったらその 30 倍はアクセスされてるわけだから,だいぶマシになってるのかな??

ただ,いろんな人が使うサーバだと,なかなか勝手なことができないっていうのが悩みどころです.