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に入れておきましょう。

Follow me!

Leave a Reply