Protecting SSH
Я пытался использовать fail2ban под Linux для отстрела ботов. Но через некоторое время он у меня отказался работать. Почему - не знаю, причины я особо не искал. И вчера заменил его на другое решение - sshguard.
Первое впечатление - не слишком хорошее, потому что надо было все настраивать руками. Но немного разобравшись, быстро поставил его на все свои линукс-сервера.
Итак, что потребуется: Ubuntu вместе с UFW, syslog-ng.
[cc lang="bash"]
apt-get install sshguard
[/cc]
Примечание: на данный момент у меня версия 1.0 которая в пакетах отказалась нормально парсить логи. Потому берем исходники версии 1.1, ./configure --with-firewall=iptables и после сборки стопаем syslog-ng, заменяем /usr/sbin/sshguard новым бинарником (он будет раза в 4 больше) и запускаем syslog-ng вновь.
и в /etc/syslog-ng/syslog-ng.conf дописать в конец примерно следующее:
[cc lang=text]
destination sshguardproc {
program("/usr/sbin/sshguard"
template("$DATE $FULLHOST $MESSAGE\n"));
};
# filter LOG_AUTH messages which also contain "ssh"
filter authssh {
facility(auth, authpriv);
};
# copy filtered logs into the sshguard process
log {
source(s_all);
filter(authssh);
destination(sshguardproc);
};
[/cc]
Это будет передавать все сообщения об аутентификации sshguard'у. Он попытается их блокировать путем создания правил iptables. Однако имея ufw пришлось несколько адаптировать указанный в документации метод.
/etc/ufw/before.rules, сразу же под # End required lines добавил
[cc lang="bash"]
:sshguard - [0:0]
[/cc]
и далее в списке правил
[cc lang="bash"]
...
-A ufw-before-input -p tcp --dport 22 -j sshguard
#ufw-not-local
...
[/cc]
Так все на порт 22 будет проходить через эту цепочку. И в ней же sshguard будет отстреливать вредителей.
Аналогичную процедуру делаем и для before6.rules с учетом именования цепочек там.
Для тех кто еще не запускал ufw следует прописать политики по умолчанию в /etc/default/ufw и выполнить
[cc lang="bash"]
ufw enable
ufw logging off
[/cc]
и после всего
[cc lang="bash"]
/etc/init.d/syslog-ng reload
[/cc]
Enjoy =)