swatchとipfwでsshの不正アクセスを自動拒否する方法

はじめに

sshのポートを開いていると、世界中からrootログインやありがちなアカウント(guestとか)でのログインを試すアクセスがやってきます。
通常はsshでrootログインなど許可していないので(してませんよね?)、被害がないはずなのですが、立て続けに何度もアクセスされると気持ち悪いことは確かなので、そのような接続元を自動的にアクセス拒否してしまおうというのが目的です。

OSはFreeBSD 5.4Rを前提とします。

swatchのインストール&起動

swatch 3.1.1をportよりインストールします。(詳細省略)
/etc/rc.confに以下を追加します。
swatch_enable="YES"
swatch_rules="1"
swatch_1_flags="--tail-file=/var/log/auth.log --awk-field-syntax --config-file=/usr/local/etc/swatchrc -r 00:01 --daemon"
swatch_1_user="root"
swatch_1_pidfile="/var/run/swatch1.pid"

firewall_enable="YES"
firewall_quiet="YES"
firewall_logging="YES"
firewall_script="/etc/rc.firewall"
firewall_type="OPEN"
実質的には
swatch --tail-file=/var/log/auth.log --awk-field-syntax --config-file=/usr/local/etc/swatchrc -r 00:01 --daemon
というコマンドを起動時に立ち上げることになります。
/etc/rc.confの後半の"firewall_"で始まる変数は、ipfwを動かすための設定です。

swatchrcの設定

/usr/local/etc/swatchrcは以下のようにします。
watchfor   /Failed password for root from/
        exec /sbin/ipfw add 1 deny all from $11:255.255.255.255 to any
        mail=root,subject=Failed_password_for_root_from
#
watchfor   /Illegal user/
        exec /sbin/ipfw add 1 deny all from $10:255.255.255.255 to any
        mail=root,subject=Illegal_user
mailで始まる行は、動作が確認できたら消してもいいでしょう。
それぞれ$11, $10に拒否したいIPアドレスが入っているので、Linuxならば ipchainsなどで書き換えてやれば、同様にはじくことができると思います。

参考文献&リンク


目次

yossy@hodogaya.org