Fork me on GitHub

The WebDevil

Enjoy development

Я пытался использовать fail2ban под Linux для отстрела ботов. Но через некоторое время он у меня отказался работать. Почему – не знаю, причины я особо не искал. И вчера заменил его на другое решение – sshguard.

Первое впечатление – не слишком хорошее, потому что надо было все настраивать руками. Но немного разобравшись, быстро поставил его на все свои линукс-сервера.

Итак, что потребуется: Ubuntu вместе с UFW, syslog-ng.

apt-get install sshguard

Примечание: на данный момент у меня версия 1.0 которая в пакетах отказалась нормально парсить логи. Потому берем исходники версии 1.1, ./configure –with-firewall=iptables и после сборки стопаем syslog-ng, заменяем /usr/sbin/sshguard новым бинарником (он будет раза в 4 больше) и запускаем syslog-ng вновь.

и в /etc/syslog-ng/syslog-ng.conf дописать в конец примерно следующее:

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);
};

Это будет передавать все сообщения об аутентификации sshguard’у. Он попытается их блокировать путем создания правил iptables. Однако имея ufw пришлось несколько адаптировать указанный в документации метод.
/etc/ufw/before.rules, сразу же под # End required lines добавил

:sshguard - [0:0]

и далее в списке правил

...
-A ufw-before-input -p tcp --dport 22 -j sshguard
#ufw-not-local
...

Так все на порт 22 будет проходить через эту цепочку. И в ней же sshguard будет отстреливать вредителей.

Аналогичную процедуру делаем и для before6.rules с учетом именования цепочек там.

Для тех кто еще не запускал ufw следует прописать политики по умолчанию в /etc/default/ufw и выполнить

ufw enable
ufw logging off

и после всего

/etc/init.d/syslog-ng reload

Enjoy =)

2 Responses to “Protecting SSH”

  1. А я просто перенёс ссш на другой порт :)

    Vasili Sviridov

  2. а ещё есть такая штука, как port-knocking

    оно всяко лучше, чем просто перенос ssh на другой порт

    Anton Kudris