Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Security —> sshit

sshit - защита от подбора паролей ssh/ftp

Автор: lissyara.


    Решил порыться в портах на тему связанную с подбором паролей по ssh. Тема это частенько возникает на форуме, посему решил посмотреть, что есть кроме моих самописных скриптов. Поиск в портах принёс кучу всего, посему ставить начал с конца - чтоб проще :) Поехали:
/usr/home/lissyara/>cd /usr/ports/security/sshit
/usr/ports/security/sshit/>make install clean

........... skipped .....

===>  CONFIGURATION NOTE:

  Configuration of sshit is done via main configuration file
  located at /usr/local/etc/sshit.conf

  To run the script, add a line in /etc/syslog.conf:

auth.info;authpriv.info                         |exec /usr/local/sbin/sshit

  and restart syslogd.

  If you want to use pf as the firewall, you should add a table and the
  corresponding deny rule. For example,
  (In /etc/pf.conf)

table <badhosts> persist
block on $extdev from <badhosts> to any

  and reload the pf rules.

  If you want to use ipfw2 (with table) as the firewall, you should add a
  table and the corresponding deny rule. For example,

# ipfw add deny ip from table(0) to any

   В конце инсталляции лезет краткая инструкция - чё надо сделать чтоб оно заработало (люблю грамотно составленные порты). Ей и следуем - добавляем строку в /etc/syslog.conf (показан вместе с предыдущей)
auth.info;authpriv.info               /var/log/auth.log
auth.info;authpriv.info                |exec /usr/local/sbin/sshit

   После чего перезапускаем syslogd:
/root/>/etc/rc.d/syslogd restart
Stopping syslogd.
Waiting for PIDS: 814.
Starting syslogd.
/root/>

   И пробуем залогинится левым пользователем:
Jul 1 11:19:44 lissyara sshd[31058]: error: PAM: authentication error for root from 192.168.254.193
Jul 1 11:19:45 lissyara last message repeated 2 times
Jul 1 11:19:53 lissyara sshd[31066]: error: PAM: authentication error for root from 192.168.254.193
Jul 1 11:19:54 lissyara last message repeated 2 times
Jul 1 11:20:10 lissyara sshd[32186]: Invalid user ddd from 192.168.254.193
Jul 1 11:20:11 lissyara sshd[32186]: error: PAM: authentication error for illegal user ddd from 192.168.254.193
Jul 1 11:20:11 lissyara sshd[32186]: Failed keyboard-interactive/pam for invalid user ddd from 192.168.254.193 port 61558 ssh2
Jul 1 11:20:11 lissyara sshd[32186]: error: PAM: authentication error for illegal user ddd from 192.168.254.193
Jul 1 11:20:11 lissyara sshd[32186]: Failed keyboard-interactive/pam for invalid user ddd from 192.168.254.193 port 61558 ssh2
Jul 1 11:20:11 lissyara sshit: BLOCKING 192.168.254.193 with pf
Jul 1 11:20:11 lissyara sshd[32186]: error: PAM: authentication error for illegal user ddd from 192.168.254.193
Jul 1 11:20:11 lissyara sshd[32186]: Failed keyboard-interactive/pam for invalid user ddd from 192.168.254.193 port 61558 ssh2
Jul 1 11:20:11 lissyara sshit: block for 192.168.254.193 not working!

   Ага. По дефолту стоит pf, но - я использую ipfw. Лезем править конфиг. От дефолтового, я изменил тока две строчки, их и привожу:
MAX_COUNT       = 5
FIREWALL_TYPE   = ipfw2

   Собственно, конфиг не комментирую - там всё понятно по названию опций. Пока ковырялся, в логах нарисовалась ещё одна интересная запись:
Jul 1 11:25:17 lissyara sshit: janitor removed block rule for 192.168.254.193 (reset time of 300 seconds reached)

   Оно ещё и само удаляет записи, по прошествии определённого времени. Хорошо, а то вдруг сам с попойки ошибёшься сервером :)) Далее, необходимо добавить правило для таблицы в файрволл - на этой машине они у меня не используются, поэтому я оставил дефолтовый номер самой таблицы - ноль.
${FwCMD} -f table 0 flush

# rulezz for sshit table 
${FwCMD} add deny not icmp from "table(0)" to me

   Для тех, кто не догадался сам, правило добавляется вторым, сразу после разрешения всего по петлевому интерфейсу. Почему такое? Ну - пусть попингуют - ничё страшного :)
   Также, было обнаружено что если пользователь существует, то на ошибки при вводе его пароля скрипт никак не реагирует. Причина нашлась быстро - регулярное выражение было составлено для старых версий sshd - если я правильно помню как оно ругалось раньше. Соостветственно было подправлено - патч для порта можно найти по тут (в порты отправил - будем надеятся закоммитят и не надо будет накладывать его руками).

2007-07-02: Патч закоммичен в порты - так что можно их обновлять и ставить ничё не патчив.



размещено: 2007-07-01,
последнее обновление: 2008-01-03,
автор: lissyara


andreza, 2007-07-02 в 13:58:29

Зачем городить все эти супер-блокираторы, когда проще просто повесить sshd на левый порт и нормально его настроить?

lissyara, 2007-07-02 в 14:15:09

а если наружу доступен ограниченный набор портов?
ходить через другой сервер?
А если он ляжет?

andreza, 2007-07-02 в 14:40:31

Согласен, просто в моей практике такого не было. А кому-то наверное может пригодиться. Но опять же никто не отменял авторизацию по ключам.

GR, 2007-07-02 в 17:21:25

"перевесить на другой порт" сильно уменьшит количество атак, но те кто знает о nmap на это не купятся ...

To Lissyara - ты бы знал какой знатный БОЯН ты растянул. За поледние 2-3 месяца ВСЕ (от /. до LOR'a) по этой теме отметились :) Пока с небольшим отрывом лидирует fall2ban :)

lissyara, 2007-07-02 в 17:41:44

Нифига не понял про боян...
То, что тема избитая - знаю, тока надоело отвечать на один и тот же вопрос - проще сюда будет послать.
А про последние 2-3 месяца вообще не понял...
тупею, чтоли... :)

p, 2007-07-02 в 19:40:46

а в pf можно поигратся c параметром max-src-conn-rate и стряпать нечто подобное, не используя ничего лишнего

p, 2007-07-02 в 19:50:31

а еще можно использовать port-knocking

Samm, 2007-07-03 в 10:17:52

security/bruteblock намного лучше. SSHIT отваливается через пару дней работы и перестаёт удалять плохие хосты из таблицы. Кроме того - bruteblock можно использовать не только для ssh, у меня он "пасёт" и pop3, и smtp (auth) и ftp.

Samm, 2007-07-03 в 10:19:39

И ещё 1 нюанс - как для sshit так и для bruteblock надо добавить в rc.conf syslogd_flags="-c", отрубив компрессию для piped clients. Иначе сообщение вида "last message was repeated 3 times", которое может появлятся при многократном подборе пароля будет сбивать блокиратор с толку.

Samm, 2007-07-03 в 10:23:09

По поводу "левого порта и нормальной настройки" - левый порт это вообще не защита, совсем. Даже автосканеры уже её обходят, у меня есть логи. Нормально настроить - это key auth, но это не всегда удобно. Кроме того, у меня стоит bruteblock даже на машине с key auth, так спокойнее, да и левой нагрузки и трафика чуток меньше. А вот на pop3 подобное, имхо, ещё более нужно чем на ssh, так как контроль над емейлом админа порой позволяет сделать гадостей не меньше чем взломанный юзер шелл )

RockerMan, 2007-07-04 в 17:31:56

---
Кроме того - bruteblock можно использовать не только для ssh, у меня он "пасёт" и pop3, и smtp (auth) и ftp.
---
А можно подробнее об этом?

Qaz, 2007-07-05 в 13:54:12

Имхо лутше добавить одно правило в pf которым заблокировать переборы да и всё, никаких приблуд ставить не нада

Klin, 2007-07-18 в 0:58:36

Не знаю как с ipfw, а с iptables очень просто:
Задал 2 раза неправильный password - гуляй 200 секунд:

IPT=/sbin/iptables
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m recent --update --seconds 200 --hitcount 2 --rttl --name SSH -j LOG --log-prefix "SSH BRUTE FORCE"
$IPT -A INPUT -p tcp --dport 22 -m recent --update --seconds 200 --hitcount 2 --rttl --name SSH -j DROP

tigerby, 2007-07-20 в 10:22:03

Klin. выше 2(два) раза писали про pf. это тоже самое ;-) кстати в -STABLE/-CURRENT я так понимаю уже от 4.0 или 4.1 портирован pf. там же можно задать и ttl, хотя я предпочитаю вообще не чистить эти блеклисты:-)

NarkomanLove, 2007-07-28 в 1:34:59

Что-то если ставиш другой номер таблицы в ipfw, он не хочет её наполнять гадами.

f0b0s, 2007-10-12 в 5:55:45

sshguard у меня нивкакую не зарабил, исчитался и факи и сетап гайд. хз почему.

поставил sshit — через 30 секунд после установки в заветной табличке появилась айпишка.

2Samm — ну не хорошо так свою прогу рекламировать, гнать на ссхит. (он автор брутблока)
хотя, проверим, как рабит, отвалится или нет.

Samm, 2007-10-12 в 8:52:49

2f0b0s
Я не "гоню" как вы изволили выразиться. Перед тем как перейти к написанию bruteblock я примерно месяц пытался заставить нормально работать sshit. Чему свидетелсьвто - принятый PR от меня в дереве портов и обсуждение возможных причин лика в группе по перлу.

Кроме того - bruteblock действительно лучше и универсальнее чем sshit, это не авторское мнение, а обьективный факт. Например тем, что маска не hardcoded а задаётся в конфиге, что позволяет использовать его для любого сервиса, который использует текстовые логи и пишет в них ip злоумышленника. Опять же - не использует никаких внешних бинарников, вся работа происходит внутри. Ну и как уже говорил - не требуется IPC между процессами из-за того, что время хранится в таблице ipfw.

Sergej Kandyla, 2007-10-15 в 1:28:41

4_Samm

Отличная прога! Спасибо еще раз! Я уже писал Вам в юафуге, но заюзать созрел только недавно ;)

Хотел добавить, что программы подобного рода больше предназначены для блокировки брутов по фтп, мылу и т.д.
Фаервол это, конечно, круто, но он не слишком умен по отношению к бруту сервисов.

johnd, 2007-11-08 в 17:29:35

После прочтения статьи использовал sshit как блокиратор к подбору паролей pureftpd (пришлось подправить код программы). Каким то образом прога периодически прога переставала срабатывать. Поставил bruteblock, доволен - спасибо Samm.

touch, 2008-01-27 в 23:25:44

2Samm:
Не очень-то я в регулярных выражениях, возможно поэтому ваш bruteblock с openssh-portable-4.7.p1 не заработал как нужно, а sshit с полпинка. Отвал через пару дней работы понаблюдаем :)

dmon_s, 2008-05-13 в 19:31:39

Пользуюсь denyhosts. Умеет анализировать не только ssh. Поддерживает самописные плюгины для блокировки. Есть возможность синхронизации БД с миром.

Nikky, 2008-08-23 в 12:15:31

Сделать бы поддержку pf в bruteblock... перешёл бы на него.

Samm, 2008-08-23 в 12:23:32

>Сделать бы поддержку pf в bruteblock... перешёл бы на него.
Запросто. Проблем вижу ровно 2 - недостаток времени и отсутствие у меня pf в production. А так в задаче ничего сложного нет, хотя и так красиво как с IPFW не получится, в PF негде хранить lifetime правила. Ну да shared memory вроде никто не отменял....

Sergej Kandyla, 2008-08-26 в 11:13:46

+1 pf было бы хорошо. Держать пару фаеров часто не хочется.

Также возникла идея, при грамотном составлении правил для bruteblock + кастомные логи веб сервера, по факту интересная штука от ддосов может получиться ;)

karat, 2008-10-20 в 13:52:02

Спасибо за статью!
я бы дабавил ключевое слово quick в запрещающее правило для pf.
block quick from <badhosts> to any
Иначе в случае добавления строки в начало правил (как у меня) в auth.log присутствовали записи: Oct 20 11:22:02 lll sshd[2735]: Failed password for invalid user user11 from <cracker`s ip> port 3209 ssh2
Oct 20 11:22:02 lll sshit: block for <cracker`s ip> not working!

VladVons, 2009-01-08 в 19:53:13

Замедление bruteforce атак на SSH с помощью PF:
http://www.opennet.ru/base/sec/bruteforce_pf.txt.html

andy03, 2009-02-08 в 13:16:04

поставил bruteblock заработал сразу - супер

Archer, 2009-04-27 в 5:20:47

Как альтернативу использовал denyhosts. Настройка за 5 минут, есть в портах, есть возможность создавать доверенные сети...
http://adw0rd.ru/2009/denyhosts
создаёт записи типа:
####
sshd: 221.238.193.71 : deny
sshd: 83.17.13.98 : deny
sshd: 77.92.142.210 : deny
sshd: 72.48.116.251 : deny
sshd: 121.52.210.198 : deny

####
И если вдруг из дома сам несколько раз ошибся, то можно удалить себя из списка, а вот в sshit чёт задолбался я таблицу с банлистом искать.

Банзай, 2009-06-28 в 2:11:19

sshit игнорирует строчку:

... pure-ftpd: (?@ppp91-76-56-185.pppoe.mtu-net.ru) [WARNING] Authentication failed for user [anonymous]

у кого есть REGEX?

Classified, 2009-07-13 в 16:59:27

По-моему разумнее SSH организовать через ключи, что исключит вероятность подбора пароля перебором.

Банзай, 2009-07-13 в 21:23:15

"По-моему разумнее SSH организовать через ключи, что исключит вероятность подбора пароля перебором" - это исключит вероятность входа на аварийную машину через ПУТТЮ с произвольной мобилы. Если запретить вход без ключа. А если не запретить, то, не получив ключа, SSH сервер предложит ввести пароль.

Для исключения вероятностей есть knockd, прикрутить который маловероятно, из-за лени вип-юзверей. Им эта каденция непосильна.

Classified, 2009-07-14 в 10:28:58

Значит нужно запретить. Значит нужно ключ + пасс.

"Это исключит вероятность входа на аварийную машину через ПУТТЮ с произвольной мобилы" - не исключит. Можно с мобилы. Putty по-умолчанию не понимает частный ключ ssh-keygen'а, но для этого есть PuTTYgen, и всё прекрасно входит :)

Банзай, 2009-07-14 в 10:48:57

Каким образом вы войдете с произвольной мобилы?
Условия: рыбалка, до очага цивилизации 200 км, но батарейки живы.
Ваши действия, по пунктам.

Classified, 2009-07-14 в 11:14:26

:) Условия интересные, но я могу придумать и еще более интересные. В данном случае, сопровождение сервера должно осуществлятся 2-я лицами, на случай рыбалки одного из 2-х. Мы говорим вприципе о том что возможно, а что нет и как это лучше организовать с точки зрения безопасности, которая начинается с грамотного планирования всей инфраструктуры включая человеческий фактор.

Classified, 2009-07-14 в 11:17:24

Но все же по поводу рыбалки. Если сеть в радусе действия телефона то я проблемы не вижу. У меня всегда с собой ноут, практический всегда когда я дежурю независимо рыбалка это или нет. Ноут + GPRS или CDMA проблема решена.

Банзай, 2009-07-14 в 11:42:30

Иди нахер, дурачок.

Classified, 2009-07-14 в 11:44:35

Банзай, ты бы лучше научился себя вести сначала.

Mikola, 2010-07-21 в 12:15:13

Спасибо поставил - работает.
Глюк: при изменении MAX_COUNT начинает тупить, я пробовал 5 ставить не знаю как с другими.
в логах говорит что забанить не могу, но банит а потом не разбанивает. Если MAX_COUNT = 3, то все ок!

Time, 2010-09-07 в 10:56:33

как удалить заблокированный ип?
установил попробовал протестить забанило, теперь пол дня сижу и не могу подкл
или он не удаляет забаненые ip?

Pandora, 2011-04-03 в 4:38:54

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

# ipfw table 0 list

lykich, 2012-01-28 в 13:53:11

/usr/ports/security/sshguard-ipfw/
/usr/ports/security/sshguard-pf/
Неплохие решения для ssh.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1861 секунд
Из них PHP: 43%; SQL: 57%; Число SQL-запросов: 86 шт.
Исходный размер: 48886; Сжатая: 12586