Sshit - защищаем сервер от перебора паролей

Версия для печатиОтправить другуPDF version

 Просматривая логи, опять обнаружил как кто-то битый час подбирал пароль доступа по ssh.

# tail -f /var/log/auth.log

Aug 23 00:38:29 web0 sshd[31139]: Invalid user alexis from 190.152.99.19
Aug 23 00:38:31 web0 sshd[31141]: Invalid user mlmb from 190.152.99.19
Aug 23 00:38:34 web0 sshd[31143]: Invalid user mlmb from 190.152.99.19
Aug 23 00:38:44 web0 sshd[31151]: Invalid user user from 190.152.99.19
Aug 23 00:38:46 web0 sshd[31153]: Invalid user test from 190.152.99.19
Aug 23 00:38:49 web0 sshd[31155]: Invalid user test from 190.152.99.19
Aug 23 00:38:51 web0 sshd[31157]: Invalid user test from 190.152.99.19
Aug 23 00:38:54 web0 sshd[31159]: Invalid user test from 190.152.99.19
Aug 23 00:38:56 web0 sshd[31161]: Invalid user ftp from 190.152.99.19
Aug 23 00:38:58 web0 sshd[31163]: Invalid user oracle from 190.152.99.19
Aug 23 00:39:01 web0 sshd[31165]: Invalid user oracle from 190.152.99.19
Aug 23 00:39:03 web0 sshd[31167]: Invalid user oracle from 190.152.99.19
Aug 23 00:39:06 web0 sshd[31169]: Invalid user service from 190.152.99.19
Aug 23 00:39:09 web0 sshd[31171]: Invalid user service from 190.152.99.19
Aug 23 00:39:11 web0 sshd[31173]: Invalid user office from 190.152.99.19
Aug 23 00:39:14 web0 sshd[31175]: Invalid user payment from 190.152.99.19
Aug 23 00:39:16 web0 sshd[31177]: Invalid user haisou from 190.152.99.19
Aug 23 00:39:19 web0 sshd[31179]: Invalid user asoto from 190.152.99.19
Aug 23 00:39:21 web0 sshd[31181]: Invalid user rainman from 190.152.99.19
Aug 23 00:39:24 web0 sshd[31183]: Invalid user archive from 190.152.99.19
Aug 23 00:39:26 web0 sshd[31185]: Invalid user archive1 from 190.152.99.19
Aug 23 00:39:28 web0 sshd[31187]: Invalid user art from 190.152.99.19
Aug 23 00:39:31 web0 sshd[31189]: Invalid user archive2 from 190.152.99.19
Aug 23 00:39:33 web0 sshd[31191]: Invalid user archive3 from 190.152.99.19
Aug 23 00:39:36 web0 sshd[31193]: Invalid user bobyn from 190.152.99.19
Aug 23 00:39:38 web0 sshd[31195]: Invalid user desiree from 190.152.99.19

Конечно, можно зафильтровать на файрволе 22 порт, оставив разрешенными соединения с доверенных хостов. Однако меня это не устраивает. Иногда подключаюсь с разных ip-адресов, от разных провайдеров. Соответственно список "доверенных" хостов делается условно доверенным. Однако есть готовое решение, когда хост блокируется после определенного количества неудачных попыток авторизоваться. Даное решение можно реализовать с помощью sshit

Приступим к установке:

# cd /usr/ports/
# make search name='sshit'
Port: sshit-0.6_4
Path: /usr/ports/security/sshit
Info: Checks for SSH/FTP bruteforce and blocks given IPs
Maint: rafan [at] FreeBSD [dot] org
B-deps:
R-deps: p5-IPC-Shareable-0.60_1 p5-Proc-PID-File-1.24 p5-Unix-Syslog-1.1 perl-threaded-5.8.9_3
WWW: http://anp.ath.cx/sshit/
# cd /usr/ports/security/sshit
# make install clean
# rehash

Следуя послеинсталяционным указаниям, добавляем строку "auth.info;authpriv.info |exec /usr/local/sbin/sshit" в  /etc/syslog.conf и перестартовываем syslogd:

# cat /etc/syslog.conf
# $FreeBSD: src/etc/syslog.conf,v 1.28 2005/03/12 12:31:16 glebius Exp $
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
auth.info;authpriv.info |exec /usr/local/sbin/sshit
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
ftp.info /var/log/xferlog
cron.* /var/log/cron
*.=debug /var/log/debug.log
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
#*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.log
# sh /etc/rc.d/syslogd restart

Отредактируем конфигурационный файл /usr/local/etc/sshit.conf соответственно к нашим требованиям. Благо опций немного ;)

# cat /usr/local/etc/sshit.conf

# Я использую ipfw
FIREWALL_TYPE = ipfw2

# Количество неверных вводов пароля, после которых IP-адрес клиента будет заблокирован
MAX_COUNT = 3

# Промежуток времени, в котором будет считаться кольчество попыток авторизации (в секундах)
WITHIN_TIME = 300

# Время, на которое будет заблокирован доступ (в секундах)
RESET_IP = 1200

# Исполняемая команда
IPFW_CMD2 = /sbin/ipfw

# Таблица файрвола, в которую будут добавляться "недоброжелательные" хосты
IPFW2_TABLE_NO = 10

Теперь необходимо добавить в файрвол правило, запрещающее доступ к нашему серверу. Обычно я размещаю это правило сразу после настройки обмена трафиком по loopback-интерфейсу.

# ipfw add 150 deny all from "table(10)" to any
# ipfw show

00100 34514 4580238   allow ip from any to any via lo0
00110 0         0               deny ip from any to 127.0.0.0/8
00120 0         0               deny ip from 127.0.0.0/8 to any
00150 123     10368       deny ip from table(10) to any
...

Можно протестировать созданную защиту, попробовав ввести неверный логин и пароль при подключении. Только будьте осторожны, подумайте над тем, как вы сможете попасть на сервер, если доступа с другого IP нету

Примечание:

Для более уверенной работы советую отключить резолвинг ДНС для ssh. Для этого в /etc/ssh/sshd_config необходимо добавить параметр "UseDNS no" и перезапустить sshd:

# echo 'UseDNS no' >> /etc/ssh/sshd_config
# sh /etc/rc.d/sshd restart

 

Ваша оценка: Нет Средняя: 4.8 (5 голосов)

 Посмотреть таблицу 10, в

 Посмотреть таблицу 10, в которой хранятся адреса атакующих, можно с помощью команды

# ipfw table 10 list 

 

Интересно, настроил по

Интересно, настроил по статье:

# Number of failed login attempts within time before we block
MAX_COUNT       = 3

# Time in seconds in which all failed login attempts must occur
WITHIN_TIME     = 60

Попробовал, а меня заблокировало с первой попытки логина:

Jan 20 13:11:27 akira sshd[50423]: Invalid user sdcsdc from 93.74.55.57
Jan 20 13:11:29 akira sshd[50423]: error: PAM: authentication error for illegal user sdcsdc from 93.74.55.57
Jan 20 13:11:29 akira sshd[50423]: Failed keyboard-interactive/pam for invalid user sdcsdc from 93.74.55.57 port 55035 ssh2
Jan 20 13:11:29 akira sshit: BLOCKING 93.74.55.57 with ipfw2

Что я делаю не так? :-)

 

Не скажу точно со

Не скажу точно со 100-процентной вероятностью, как работает sshit, но кажется дело в том, что sshit зафиксировал три вхождения для IP 93.74.55.57: Invalid, error и Failed. MAX_COUNT установлен в значение 3, поэтому и сработала защита.

Да вот мне что-то тоже

Да вот мне что-то тоже казалось.. Поставил счетик на 5 - опять то же самое:

 

Jan 20 19:32:44 akira sshd[57871]: Invalid user bfgbfgb from 93.74.55.57
Jan 20 19:32:45 akira sshd[57871]: error: PAM: authentication error for illegal user bfgbfgb from 93.74.55.57
Jan 20 19:32:45 akira sshd[57871]: Failed keyboard-interactive/pam for invalid user bfgbfgb from 93.74.55.57 port 57831 ssh2
Jan 20 19:32:45 akira sshit: BLOCKING 93.74.55.57 with ipfw2

Пробовал ставить на 5 - все

Пробовал ставить на 5 - все равно блокирует сразу. Ладно, главное что работает. Постараюсь не опечатываться в своих паролях )

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература