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

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:f9368977a6051ae9f2a9694e81f8fd5d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">&nbsp;Просматривая логи, опять обнаружил как кто-то битый час подбирал пароль доступа по ssh.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># tail -f /var/log/auth.log</strong></p>\n<p>Aug 23 00:38:29 web0 sshd[31139]: Invalid user alexis from 190.152.99.19<br />\n Aug 23 00:38:31 web0 sshd[31141]: Invalid user mlmb from 190.152.99.19<br />\n Aug 23 00:38:34 web0 sshd[31143]: Invalid user mlmb from 190.152.99.19<br />\n Aug 23 00:38:44 web0 sshd[31151]: Invalid user user from 190.152.99.19<br />\n Aug 23 00:38:46 web0 sshd[31153]: Invalid user test from 190.152.99.19<br />\n Aug 23 00:38:49 web0 sshd[31155]: Invalid user test from 190.152.99.19<br />\n Aug 23 00:38:51 web0 sshd[31157]: Invalid user test from 190.152.99.19<br />\n Aug 23 00:38:54 web0 sshd[31159]: Invalid user test from 190.152.99.19<br />\n Aug 23 00:38:56 web0 sshd[31161]: Invalid user ftp from 190.152.99.19<br />\n Aug 23 00:38:58 web0 sshd[31163]: Invalid user oracle from 190.152.99.19<br />\n Aug 23 00:39:01 web0 sshd[31165]: Invalid user oracle from 190.152.99.19<br />\n Aug 23 00:39:03 web0 sshd[31167]: Invalid user oracle from 190.152.99.19<br />\n Aug 23 00:39:06 web0 sshd[31169]: Invalid user service from 190.152.99.19<br />\n Aug 23 00:39:09 web0 sshd[31171]: Invalid user service from 190.152.99.19<br />\n Aug 23 00:39:11 web0 sshd[31173]: Invalid user office from 190.152.99.19<br />\n Aug 23 00:39:14 web0 sshd[31175]: Invalid user payment from 190.152.99.19<br />\n Aug 23 00:39:16 web0 sshd[31177]: Invalid user haisou from 190.152.99.19<br />\n Aug 23 00:39:19 web0 sshd[31179]: Invalid user asoto from 190.152.99.19<br />\n Aug 23 00:39:21 web0 sshd[31181]: Invalid user rainman from 190.152.99.19<br />\n Aug 23 00:39:24 web0 sshd[31183]: Invalid user archive from 190.152.99.19<br />\n Aug 23 00:39:26 web0 sshd[31185]: Invalid user archive1 from 190.152.99.19<br />\n Aug 23 00:39:28 web0 sshd[31187]: Invalid user art from 190.152.99.19<br />\n Aug 23 00:39:31 web0 sshd[31189]: Invalid user archive2 from 190.152.99.19<br />\n Aug 23 00:39:33 web0 sshd[31191]: Invalid user archive3 from 190.152.99.19<br />\n Aug 23 00:39:36 web0 sshd[31193]: Invalid user bobyn from 190.152.99.19<br />\n Aug 23 00:39:38 web0 sshd[31195]: Invalid user desiree from 190.152.99.19</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Конечно, можно зафильтровать на файрволе 22 порт, оставив разрешенными соединения с доверенных хостов. Однако меня это не устраивает.&nbsp;Иногда&nbsp;подключаюсь с разных ip-адресов, от разных провайдеров. Соответственно список &quot;доверенных&quot; хостов делается условно доверенным.&nbsp;Однако есть готовое решение, когда хост блокируется после определенного количества неудачных попыток авторизоваться. Даное решение можно реализовать с помощью sshit</p>\n<p>Приступим к установке:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cd /usr/ports/</strong><br />\n <strong># make search name=\'sshit\'</strong><br />\n Port: sshit-0.6_4<br />\n <span style=\"color: #ff0000\">Path: /usr/ports/security/sshit</span><br />\n <span style=\"color: #ff0000\">Info: Checks for SSH/FTP bruteforce and blocks given IPs<br />\n </span>Maint: <span class=\"spamspan\"><span class=\"u\">rafan</span> [at] <span class=\"d\">FreeBSD [dot] org</span></span><br />\n B-deps:<br />\n 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<br />\n WWW: <a href=\"http://anp.ath.cx/sshit/\">http://anp.ath.cx/sshit/</a><br />\n <strong># cd /usr/ports/security/sshit</strong><br />\n <strong># make install clean</strong><br />\n <strong># rehash</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Следуя послеинсталяционным указаниям,&nbsp;добавляем&nbsp;строку&nbsp;&quot;auth.info;authpriv.info |exec /usr/local/sbin/sshit&quot;&nbsp;в&nbsp;&nbsp;/etc/syslog.conf и перестартовываем syslogd:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cat /etc/syslog.conf</strong><br />\n # $FreeBSD: src/etc/syslog.conf,v 1.28 2005/03/12 12:31:16 glebius Exp $<br />\n #<br />\n # Spaces ARE valid field separators in this file. However,<br />\n # other *nix-like systems still insist on using tabs as field<br />\n # separators. If you are sharing this file between systems, you<br />\n # may want to use only tabs as field separators here.<br />\n # Consult the syslog.conf(5) manpage.<br />\n *.err;kern.warning;auth.notice;mail.crit /dev/console<br />\n *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages<br />\n security.* /var/log/security<br />\n auth.info;authpriv.info /var/log/auth.log<br />\n <span style=\"color: #ff0000\">auth.info;authpriv.info |exec /usr/local/sbin/sshit<br />\n </span>mail.info /var/log/maillog<br />\n lpr.info /var/log/lpd-errs<br />\n ftp.info /var/log/xferlog<br />\n cron.* /var/log/cron<br />\n *.=debug /var/log/debug.log<br />\n *.emerg *<br />\n # uncomment this to log all writes to /dev/console to /var/log/console.log<br />\n #console.info /var/log/console.log<br />\n # uncomment this to enable logging of all log messages to /var/log/all.log<br />\n # touch /var/log/all.log and chmod it to mode 600 before it will work<br />\n #*.* /var/log/all.log<br />\n # uncomment this to enable logging to a remote loghost named loghost<br />\n #*.* @loghost<br />\n # uncomment these if you\'re running inn<br />\n # news.crit /var/log/news/news.crit<br />\n # news.err /var/log/news/news.err<br />\n # news.notice /var/log/news/news.notice<br />\n !startslip<br />\n *.* /var/log/slip.log<br />\n !ppp<br />\n *.* /var/log/ppp.log<br />\n <strong># sh /etc/rc.d/syslogd restart</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Отредактируем конфигурационный файл /usr/local/etc/sshit.conf соответственно к нашим требованиям. Благо опций немного ;)</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cat /usr/local/etc/sshit.conf</strong></p>\n<p># Я использую ipfw<br />\n FIREWALL_TYPE = ipfw2</p>\n<p># Количество неверных вводов пароля, после которых IP-адрес клиента будет заблокирован<br />\n MAX_COUNT = 3</p>\n<p># Промежуток времени, в котором будет считаться кольчество попыток авторизации (в секундах)<br />\n WITHIN_TIME = 300</p>\n<p># Время, на которое будет заблокирован доступ (в секундах)<br />\n RESET_IP = 1200</p>\n<p># Исполняемая команда<br />\n IPFW_CMD2 = /sbin/ipfw</p>\n<p># Таблица файрвола, в которую будут добавляться &quot;недоброжелательные&quot; хосты<br />\n IPFW2_TABLE_NO = 10</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь необходимо добавить в файрвол правило, запрещающее доступ к нашему серверу. Обычно я размещаю это правило сразу после настройки обмена трафиком по loopback-интерфейсу.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># ipfw add 150 deny all from &quot;table(10)&quot; to any</strong><br />\n <strong># ipfw show</strong></p>\n<p>00100 34514 4580238&nbsp;&nbsp; allow ip from any to any via lo0<br />\n 00110 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny ip from any to 127.0.0.0/8<br />\n 00120 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deny ip from 127.0.0.0/8 to any<br />\n 00150 123&nbsp;&nbsp;&nbsp;&nbsp; 10368&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deny ip from table(10) to any<br />\n ...</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Можно протестировать созданную защиту, попробовав ввести неверный логин и пароль при подключении. Только будьте осторожны, подумайте над тем, как вы сможете попасть на сервер, если доступа с другого IP нету <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" /></p>\n<p><span style=\"color: #ff0000\"><strong>Примечание:</strong></span></p>\n<p class=\"rtejustify\">Для более уверенной работы советую отключить резолвинг ДНС&nbsp;для ssh. Для этого в /etc/ssh/sshd_config необходимо добавить параметр &quot;UseDNS no&quot; и перезапустить sshd:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>echo \'UseDNS no\' &gt;&gt; /etc/ssh/sshd_config<br />\n </strong># <strong>sh /etc/rc.d/sshd restart</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:f9368977a6051ae9f2a9694e81f8fd5d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ae39ff314eeea35b66e404fe4f8db26a' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;<span class=\"Apple-style-span\" style=\"color: rgb(37, 37, 37); font-size: 14px; line-height: 19px; \">Посмотреть таблицу 10, в которой хранятся адреса атакующих, можно с помощью команды</span></p>\n<p><span class=\"Apple-style-span\" style=\"color: rgb(37, 37, 37); font-family: Verdana; font-size: 14px; line-height: 21px; \"></span></p>\n<div class=\"geshifilter\" style=\"margin-top: 20px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 12px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(248, 248, 248); display: block; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(218, 218, 218); border-right-color: rgb(218, 218, 218); border-bottom-color: rgb(218, 218, 218); border-left-color: rgb(218, 218, 218); color: rgb(34, 34, 34); line-height: 1.3; overflow-x: auto; overflow-y: auto; background-position: initial initial; background-repeat: initial initial; \">\n<pre class=\"text geshifilter-text\" style=\"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 7px; padding-right: 8px; padding-bottom: 7px; padding-left: 8px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 1em; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(249, 249, 249); font-family: Consolas, monospace !important; line-height: 16px; background-position: initial initial; background-repeat: initial initial; \">\n# ipfw table 10 list&nbsp;</pre></div>\n<p></p>\n<p>&nbsp;</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:ae39ff314eeea35b66e404fe4f8db26a' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:1e50993b937ee9b2e54df42f9da14f87' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Интересно,&nbsp;настроил по статье:</p>\n<pre class=\"rteindent1\">\n# Number of failed login attempts within time before we block\nMAX_COUNT = 3\n\n# Time in seconds in which all failed login attempts must occur\nWITHIN_TIME = 60\n\n</pre><p>Попробовал,&nbsp;а меня заблокировало с первой попытки логина:</p>\n<pre class=\"rteindent1\">\nJan 20 13:11:27 akira sshd[50423]: Invalid user sdcsdc from 93.74.55.57\nJan 20 13:11:29 akira sshd[50423]: error: PAM: authentication error for illegal user sdcsdc from 93.74.55.57\nJan 20 13:11:29 akira sshd[50423]: Failed keyboard-interactive/pam for invalid user sdcsdc from 93.74.55.57 port 55035 ssh2\nJan 20 13:11:29 akira sshit: BLOCKING 93.74.55.57 with ipfw2\n</pre><p>Что я делаю не так?&nbsp;:-)</p>\n<p>&nbsp;</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:1e50993b937ee9b2e54df42f9da14f87' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:c06d0252423a241be18f0dbb0b39abe0' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Не скажу точно со 100-процентной вероятностью,&nbsp;как работает <strong>sshit</strong>, но кажется дело в том,&nbsp;что&nbsp;<strong>sshit</strong>&nbsp;зафиксировал три вхождения для IP 93.74.55.57: <strong>Invalid</strong>, <strong>error</strong> и <strong>Failed</strong>. <strong>MAX_COUNT</strong> установлен в значение 3,&nbsp;поэтому и сработала защита.</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:c06d0252423a241be18f0dbb0b39abe0' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ffbffb285cc7c7578250b6f6910eef51' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Да вот мне что-то тоже казалось.. Поставил счетик на 5 - опять то же самое:</p>\n<p>&nbsp;</p>\n<blockquote><p>Jan 20 19:32:44 akira sshd[57871]: Invalid user bfgbfgb from 93.74.55.57<br />\nJan 20 19:32:45 akira sshd[57871]: error: PAM: authentication error for illegal user bfgbfgb from 93.74.55.57<br />\nJan 20 19:32:45 akira sshd[57871]: Failed keyboard-interactive/pam for invalid user bfgbfgb from 93.74.55.57 port 57831 ssh2<br />\nJan 20 19:32:45 akira sshit: BLOCKING 93.74.55.57 with ipfw2</p>\n</blockquote>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:ffbffb285cc7c7578250b6f6910eef51' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:e9cc1aa46c99e58190b1c2a4b9ee9b53' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Пробовал ставить на 5 - все равно блокирует сразу. Ладно,&nbsp;главное что работает. Постараюсь не опечатываться в своих паролях )</p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:e9cc1aa46c99e58190b1c2a4b9ee9b53' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767596226, expire = 1767682626, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другу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 - все равно блокирует сразу. Ладно, главное что работает. Постараюсь не опечатываться в своих паролях )

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

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

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

Литература

Windows испугался и наложил в своп.