SSHGuardで不正アクセスを減らす方法
SSHポートを開けていると
さて、個人で借りてるVPSはSSHとSMTPを開けているせいで、当然の帰結としてSSHとSMTPへのアタックが沢山来るわけですよ。まあSSHのパスワード認証なんか当然不可にしているし、SMTP-AUTHで守っているので、不正なアクセスや踏み台にはならないようにしているのですが。
自宅のIPアドレスはDHCP割当ですが、DDNS登録しているのでそれをwhitelist化すれば?ということもあるのですが、外出時にアクセスしたいときは困るので、それは出来ない。
SSHGuradとは
SSHguardは、ログを解析して不正アクセスしてくるIPアドレスをipfilterやfirewalld でブロックしてくれるツールです。IPv4/IPv6に対応しているのがありがたいですね。
SSHGuardを入れてみる
こんな感じでインストールしましょう。対象はCentOS7です。
# yum install http://repo.iotti.biz/CentOS/7/x86_64/sshguard-2.1.0-1.el7.lux.x86_64.rpm
今回はfirewaldでインストールするので、以下のように設定ファイル/etc/sshguard.conf を修正します。ログ監視対象は、ssh用の/var/log/secureと、postfix/dovecot用のmaillogです。
BACKEND="/usr/libexec/sshg-fw-firewalld"
FILES="/var/log/secure /var/log/mail/maillog"
LOGREADER="LANG=C /usr/bin/journalctl -afb -p info -n1 -t sshd -t postfix -o cat"
THRESHOLD=30
BLOCK_TIME=120
DETECTION_TIME=1800
IPV6_SUBNET=128
IPV4_SUBNET=32
PID_FILE=/run/sshguard.pid
WHITELIST_FILE=/etc/friends
whitelistに指定した/etc/friendsには、除外するIPアドレスもしくはホスト名を羅列すればよいです。
次にfirewalldに、sshguard用の除外設定を追加します。
# firewall-cmd --permanent --zone="home" --add-rich-rule="rule source ipset=sshguard4 drop"
# firewall-cmd --permanent --zone="home" --add-rich-rule="rule source ipset=sshguard6 drop"
# firewall-cmd --reload
あとは、sshguard を起動しましょう。
# systemctl start sshguard
アタックがあったIPを検知すると、firewalld のsshguard4もしくはsshguard6にエントリが追加されます。
# firewall-cmd --info-ipset=sshguard4
sshguard4
type: hash:ip
options: family=inet
entries: 193.105.134.XX/32 122.226.181.XX/32 118.123.15.XX/32(略)
# firewall-cmd --info-ipset=sshguard6
sshguard6
type: hash:ip
options: family=inet6
entries:
誤検知があった場合は、以下ののように削除しましょう。
# firewall-cmd --ipset=sshguard4 --remove-entry=XX.XX.XX.XX/32
落とし穴
さて、この様に設定したのですが、Zabbixサーバからssh監視で接続したときや、Vulsで検知しようとしたときに、sshアクセスが多くなりすぎてvanされてしまうという、悲しい出来事がありました。
ちゃんと、自宅やZabbixサーバやVulsサーバのIPアドレスは、事前にwhitelistに入れておきましょう。