sshguardの導入(Debian sid編)

SSH向けブルートフォースアタックのログが目につくので導入.SSHDの設定のみでは対処できないようなので…
SSHデーモン自体は鍵認証のみ許可の設定になっているので侵入される心配はないと思うが,システムのリソースを喰われる.
具体的な導入方法については検索でヒットするので,そちらを参照してください.

サマリ
  • ブロッキングバックエンドはiptables
  • ロギングはsyslog-ng.もともとインストールされていた旧来syslogはログを直接プログラムに渡せない版のもの.FIFO(named Pipe)経由にすればよいのだが,設定が散逸(rc.localにも書く)になるので代替のロギングシステムのうちsyslog-ngに置き換えた.
  • Debianパッケージsshguardはバージョンが古く,途中で終了してしまうので,最新版を取得し,ソースからビルド
ビルド手順

ソースを解凍したディレクトリで以下を実行.

./configure --with-firewall=iptables
make
sudo make install
/etc/network/if-up.d/sshguard

以下の内容でファイルを作成し実行権をつける.eth0の部分は自分のシステムのものに修正してください.また,ネットワークインタフェースが落るとき,チェインsshguardを消すスクリプトも必要です(当面サボリ).

#!/bin/sh

[ "$IFACE" = eth0 ] || exit 0

iptables -N sshguard
iptables -A INPUT -p tcp --dport 22 -j sshguard

追加したらネットワークインタフェースをdown→upする.

/etc/syslog-ng/syslog-ng.conf

以下を最後に追加.

# pass only entries with auth+authpriv facilities that contain sshd
filter sshlogs { facility(auth, authpriv) and match("sshd"); };
# pass to this process with this template (avoids  prefixes)
destination sshguardproc {
	program("/usr/local/sbin/sshguard"
	    template("$DATE $FULLHOST $MESSAGE\n"));
};
log { source(s_all); filter(sshlogs); destination(sshguardproc); };


修正後,syslog-ngに設定ファイルをreloadさせる.

killall -HUP syslog-ng

ログ例: アタックサイトからのパケットの拒否と,一定時間後の解除

Dec 20 14:02:48 hikari sshd[24504]: Did not receive identification string from 218.6.128.2
Dec 20 14:02:48 hikari sshguard[2166]: Matched IP address 218.6.128.2
Dec 20 14:13:19 hikari sshd[2473]: Invalid user staff from 218.6.128.2
Dec 20 14:13:19 hikari sshguard[2166]: Matched IP address 218.6.128.2
Dec 20 14:13:27 hikari sshd[2612]: Invalid user sales from 218.6.128.2
Dec 20 14:13:27 hikari sshguard[2166]: Matched IP address 218.6.128.2
Dec 20 14:13:35 hikari sshd[2764]: Invalid user recruit from 218.6.128.2
Dec 20 14:13:35 hikari sshguard[2166]: Matched IP address 218.6.128.2
Dec 20 14:13:35 hikari sshguard[2166]: Blocking 218.6.128.2: 4 failures over 647 seconds.
Dec 20 14:13:35 hikari sshguard[2166]: Setting environment: SSHG_ADDR=218.6.128.2;SSHG_ADDRKIND=4;SSHG_SERVICE=100.
Dec 20 14:13:35 hikari sshguard[2166]: Run command "case $SSHG_ADDRKIND in 4) exec /sbin/iptables -A sshguard -s $SSHG_ADDR -j DROP ;; 6) exec /sbin/ip6tables -A sshguard -s $SSHG_ADDR -j DROP ;; *) exit -2 ;; esac": exited 0.
Dec 20 14:23:01 hikari sshguard[2166]: Releasing 218.6.128.2 after 566 seconds.
Dec 20 14:23:01 hikari sshguard[2166]: Setting environment: SSHG_ADDR=218.6.128.2;SSHG_ADDRKIND=4;SSHG_SERVICE=100.
Dec 20 14:23:01 hikari sshguard[2166]: Run command "case $SSHG_ADDRKIND in 4) exec /sbin/iptables -D sshguard -s $SSHG_ADDR -j DROP ;; 6) exec /sbin/ip6tables -D sshguard -s $SSHG_ADDR -j DROP ;; *) exit -2 ;; esac": exited 0.

参考にさせてもらったリンク