SSHGURDをCentOS6.xで使う
2017年9月4日Security Tips, トピックス
SSH接続のブルートフォースアタックは、どのサイトでも当たり前に攻撃されている。概ね複雑なパスワードだと無理なので放置しても無害と思ってたが、それは意外にも連続して多数のサイトから攻撃されることもあり、ゆっくりコマンド投入してセッションホールドを長くして負荷を与えていることがわかった。解決策としてもう古いソフトだがsshguardを導入する。
この導入するシステムは、OSはCentOS6.xを想定している。Gitやソースでsshguardの導入ができるのだが最新のものやちょっと過去のものだとCentOSで動かない事がわかった。
このバージョンなら間違いなく動作します。
1 2 3 4 5 6 7 8 |
# cd /usr/local/src # wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/sshguard-1.5.tar.bz2/download # mv download sshguard-1.5.tar.bz2 # tar xvfj sshguard-1.5.tar.bz2 # cd sshguard-1.5 # ./configure --with-firewall=iptables # make && sudo make install <-- sshguardも起動します # nohup /usr/local/sbin/sshguard & <--2回め以降はこのようにするか/etc/rc.localにどうぞ! |
–prefixで指定しなければデフォルトで/usr/local/sbin配下にインストールされる。
必須ではないが使い勝手が良いsyslog-ngを入れて調整しよう。
1 2 3 |
# yum -y install syslog-ng # chkconfig syslog-ng on # chkconfig rsyslog off |
以下実行して「service iptables save」で保存すると/etc/sysconfig/iptablesにルール設定が保存され次回からの起動は何もしなくてもよい。
1 2 |
# iptables -N sshguard # iptables -A INPUT -j sshguard |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[root@shoot ~]# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED sshguard all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere tcp dpt:http limit: up to 1/min burst 700 mode srcip ACCEPT tcp -- anywhere anywhere tcp dpt:https limit: up to 1/min burst 700 mode srcip ACCEPT tcp -- anywhere anywhere tcp dpt:hbci ACCEPT tcp -- anywhere anywhere tcp dpt:imap ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:domain ACCEPT udp -- anywhere anywhere udp dpt:domain LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES INPUT] : ' DROP all -- anywhere anywhere drop_synflood tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN Chain FORWARD (policy DROP) target prot opt source destination LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix `[IPTABLES FORWARD] : ' DROP all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere Chain drop_synflood (1 references) target prot opt source destination RETURN all -- anywhere anywhere limit: avg 10/sec burst 20 LOG all -- anywhere anywhere limit: avg 1/sec burst 10 LOG level warning prefix `SYNFLOOD: ' DROP all -- anywhere anywhere Chain sshguard (1 references) target prot opt source destination DROP all -- 59.45.175.98 anywhere DROP all -- 59.45.175.11 anywhere DROP all -- 121.18.238.28 anywhere DROP all -- 59.45.175.24 anywhere DROP all -- 59.45.175.97 anywhere DROP all -- 121.18.238.119 anywhere [root@shoot ~]# |
最下行付近のChain sshguard (1 references)
のエントリ以下がブロックを自動で行ってくれた実績だ。順調にブロックが効いている。次にsyslog-ngを編集してログを吐くようにしましょう
1 |
# vi /etc/syslog-ng/syslog-ng.conf |
1 2 3 4 5 6 7 |
filter f_sshguard { facility(auth, authpriv) and not program("sshguard"); }; destination sshguard { program("/usr/local/sbin/sshguard" template("$DATE $FULLHOST $MSGHDR$MESSAGE\n") ); }; log { source(s_sys); filter(f_sshguard); destination(sshguard); }; |
1 2 |
# service syslog-ng stop <--起動してなければ不要 # service syslog-ng start |
初回起動でエラーが出ますが気にしないでOK。afsql moduleを使用していないならば。