[ssh] как лучше бороться с пидарчатами?
ipfw add deny ....
и судя по логам, у него неплохой для этого дела словарь логинов, так что есть маза просто окончания скана дождаться
ну можно им вместо приглашения sshd выдавать какую-н пакость типа "впустить" их и посмотреть, что робот будет делать.
а они тебя напрягают? боишься что действительно взломают?
я просто отключил возможность аутентификации по паролю
тачка многопользовательская, а юзеры не всегда утруждают себя придумыванием нормальных пассвордов
а юзеры не всегда утруждают себя придумыванием нормальных пассвордовв этом случае тебя взломают в любом случае. чего париццо?
"париццо" есть смысл в любом случае, чтобы вывести время ожидаемого наступления взлома значительно за пределы времени жизни железяки
вопрос, как именно это сделать, чтобы у людей оставалась возможность работать
---
...Я работаю антинаучным аферистом...
гы, два раза исправил пост всё же 127.0.0.1 имхо лучше
нужно:
1) пускать народ не только из внутренних доверенных сетей, но и снаружи (в пределах москвы, например, китайцы, буржуи и прочие нафиг не нужны)
2) для адресов, с которых возможен доступ, надо уметь обнаруживать и предотвращать такую атаку
вопрос, как именно это сделать, чтобы у людей оставалась возможность работатьодин мой знакомый делал так:
Система настраивается, чтобы:
1. при смене пароля обязательно проверить пароль cracklib'ом, если тест не проходит - предложить сменить пароль.
2. новый пароль проверяется на соответствие с любым когда-либо существовавшим на этой системе паролем у какого-либо пользователя. если совпадает - предложить сменить пароль.
3. естественно, все когда-либо стоявшие у кого-либо пароли архивируются, для дальнейших проверок новых паролей.
Настраиваешь таким образом систему, добавляешь все существующие сейчас пароли в базу для 2. и предлагаешь всем добровольно поменять пароль в течение недели, иначе они лишатся доступа к системе. Готово.
А защита от говноскриптов взлома всего интернета - это так себе, разве что для самоуспокоения поможет.
новый пароль проверяется на соответствие с любым когда-либо существовавшим на этой системе паролем у какого-либо пользователя. если совпадает - предложить сменить пароль.Ох. Решил я сделать пароль "hatelenasomuchoh". А тут мне система говорит, что такой уже есть. Я дедуктирую, что это мой сосед по парте Андрей такой пароль использовал, пробую использовать его для доступа на почтовый ящик, где указанной системы защиты нет, и вуаля
один мой знакомый делал такНе проще ли сделать обязательной strong authentication? Т.е., нагенерить всем ключи и запретить аутентификацию паролем.
Система настраиваетсяКстати, как это делается? Свой модуль к PAM?
Ты счастливый человек. Ты не встречался с пользователями.
Если серьёзно, действительно заставил всех, кому нужен shell, сгенерить ключи. Мне кажется, что при грамотной реализации это не тот вопрос, которым пользователи могут быть недовольны.
---
...Я работаю...
Разбирать логи и добавлять правила по ходу дела?
Попытаться повесить sshd под daemontools?
Там, вроде есть какие-то способы отрубать слишком часто подсоединяющихся.
---
...Я работаю...
Тебе попались умные пользователи.
Либо ты просто оказался выше по лестнице.
---
...Я работаю...
настрой так, чтоб после 3-х неудачных попыток логина на некоторое время блокировались последующие
Кстати, поиск в гугле по "ssh block login attempts" может дать немало полезной информации
не знаю насколько это правильно осуществлять у тебя, но можно просто перенести ссшд на произвольный верхний порт.
кто с другого заходит, тех не пускать, а указать в сообщении, что надо зарегистрироваться
Если не удаётся заставить пользователей private key себе сгенерировать один раз, то и регистрироваться через веб-интерфейс они тем более не будут
#!/bin/shэто пи_дец
ipfw delete 20000
for ips in `cat /var/log/auth.log | grep sshd | grep "Illegal" | awk '{print $10}' | uniq -d` ; do
ipfw -q add 20000 deny tcp from $ips to any
done
cat /var/log/auth.log | grep sshd | grep "Failed" | rev | cut -d\ -f 4 | rev | sort | uniq -c | \
( while read num ips; do
if [ $num -gt 5 ]; then
if ! ipfw show | grep -q $ips ; then
ipfw -q add 20000 deny tcp from $ips to any
fi
fi
done
)
мало того, что в /var/log/auth.log при неудачной попытке пишется 11 полей и именно 11-е - IP адрес, так еще и такую комбинацию завернуть...
cat|grep|grep|awk|uniq или cat|grep|grep|rev|cut|rev|sort|uniq
awk 'BEGIN {system("ipfw delete 20000")} /sshd.+(Illegal|Failed)/ {P[$NF] += (/Illegal/) ? 5 : 1}и может вообще лучше использовать таблицы?
END {for (i in P) if (P[i] >= 5) system("ipfw -q add 20000 deny tcp from " i " to any")}' /var/log/auth.log
что лучше - я уже написал - аутентификация только по private key
2: Дык, пусть ломают юзеров. А у себя - нормальный пароль и вообще дырки позатыкай;) Кого-нибудь взломают и напакостят в их home - так юзеры поймут, зачем нужны нормальные пароли;)
А как ты думаешь, почему во всем мире идентификация по паролю? Может, все не знают про такой классный способ, как ключи?Да, я думаю, что не все люди, от которых зависят подобные решения, знают и понимают необходимость strong authentication. И ещё меньше людей знают, как легко и просто реализовать strong authentication применительно к ssh.
> один раз, то и регистрироваться через веб-интерфейс они тем более не будут
Через веб регистрироваться гораздо проще, это любой виндоюзер умеет по определению.
Более того, в целом образованность по security оставляет желать лучшего
Через веб регистрироваться гораздо проще, это любой виндоюзер умеет по определению.Напряг это большой очень - каждый раз при смене IP регистрироваться
пусть юзера регистрируются через веб-интерфейс, указывая, с каких ip они будут ходитьЭтот способ делает невозможным заход с других ip'ов для честных пользователей;) Потом проблемы с динамическими ипами. А если юзер - простой юзер, то он и IP свой узнать не сможет;)
кто с другого заходит, тех не пускать, а указать в сообщении, что надо зарегистрироваться
Если у кого-то часто меняется, можно диапазон зарегистрировать.
Это может сделать автомат, посмотрев whois, а может админ помочь.
Большинство же ходит с постоянных IP.
А если юзер - простой юзер, то он и IP свой узнать не сможет;)Кстати да, это аргумент.
И, опять же, если я хочу не из дома зайти, что делать?
немного не так. система не говорит, что такой уже есть, система говорит, что такой пароль ей не нравится. Почему не нравится - а хрен его знает.
вроде да.
> ...
> и может вообще лучше использовать таблицы?
Я так и сделал.
#!/usr/bin/perl
use strict;
use constant USERRE => '(?:root|backup|cyrus|daemon|mysql|nobody|operator)';
use constant IPFWCMD => '/sbin/ipfw';
use constant TABLE => 1;
use constant PIDARS => '/etc/pidars';
my $RE1 = 'Failed (?:password|keyboard\-interactive\/pam) for '.&USERRE.' from (\d+\.\d
+\.\d+\.\d+) port \d+';
my $RE2 = 'Illegal user \w+ from (\d+\.\d+\.\d+\.\d+)';
while (<>) {
local *FH;
next unless ($_ =~ $RE2 or $_ =~ $RE1);
system(&IPFWCMD, 'table', &TABLE, 'add', $1);
if (open(FH, '>>'.&PIDARS {
printf(FH "%s\n", $1);
close(FH);
}
}
Программа кормится от syslog-ng, который ей даёт только логи sshd.
5 фейлов с одного ИПа и юзерагента - и бан на час (фейл в любом случае, а не рефузить коннект)
Какого еще юзерагента?
При negotiation клиент с сервером обмениваются версиями - путти, хуютти, винссх там, и так далее.
подбиралка паролей, очевидно, с тем же успехом может подставлять рандомный текст вместо версии клиента.
От версии многое зависит.
Придётся еще патчить sshd, чтобы он это выводил в syslog.
долго придется в файле искать нужный адрес.
Каждому пользователю вот по такой пиз@юлине:
http://www.aladdin.com/etoken/ng_otp.asp
+софт под эту хрень - и вуаля....
Вроде к sshd оно тоже прикручивается...
Выбор решения зависит от того бюджета, который надо освоить...
ты маньяк-извращенец
Насколько я понял, конечной целью Шурика не является освоение бюджета.
Оставить комментарий
Chupa
вот такими: