[ssh] как лучше бороться с пидарчатами?
ipfw add deny ....
закрыть неинтересно, хочется пакость сделать
и судя по логам, у него неплохой для этого дела словарь логинов, так что есть маза просто окончания скана дождаться
и судя по логам, у него неплохой для этого дела словарь логинов, так что есть маза просто окончания скана дождаться
ну можно им вместо приглашения sshd выдавать какую-н пакость типа "впустить" их и посмотреть, что робот будет делать.
а они тебя напрягают? боишься что действительно взломают? 

я просто отключил возможность аутентификации по паролю
в данном случае боюсь
тачка многопользовательская, а юзеры не всегда утруждают себя придумыванием нормальных пассвордов
тачка многопользовательская, а юзеры не всегда утруждают себя придумыванием нормальных пассвордов
а юзеры не всегда утруждают себя придумыванием нормальных пассвордовв этом случае тебя взломают в любом случае. чего париццо?
не надо говорить глупостей
"париццо" есть смысл в любом случае, чтобы вывести время ожидаемого наступления взлома значительно за пределы времени жизни железяки
вопрос, как именно это сделать, чтобы у людей оставалась возможность работать
"париццо" есть смысл в любом случае, чтобы вывести время ожидаемого наступления взлома значительно за пределы времени жизни железяки
вопрос, как именно это сделать, чтобы у людей оставалась возможность работать
Переписать правила стенки так, чтобы пакеты отправлялись туда, где нет sshd?
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
гы, два раза исправил пост всё же 127.0.0.1 имхо лучше
tcp-reset вернуть не жалко, это не самая главная проблема
нужно:
1) пускать народ не только из внутренних доверенных сетей, но и снаружи (в пределах москвы, например, китайцы, буржуи и прочие нафиг не нужны)
2) для адресов, с которых возможен доступ, надо уметь обнаруживать и предотвращать такую атаку
нужно:
1) пускать народ не только из внутренних доверенных сетей, но и снаружи (в пределах москвы, например, китайцы, буржуи и прочие нафиг не нужны)
2) для адресов, с которых возможен доступ, надо уметь обнаруживать и предотвращать такую атаку
вопрос, как именно это сделать, чтобы у людей оставалась возможность работатьодин мой знакомый делал так:
Система настраивается, чтобы:
1. при смене пароля обязательно проверить пароль cracklib'ом, если тест не проходит - предложить сменить пароль.
2. новый пароль проверяется на соответствие с любым когда-либо существовавшим на этой системе паролем у какого-либо пользователя. если совпадает - предложить сменить пароль.
3. естественно, все когда-либо стоявшие у кого-либо пароли архивируются, для дальнейших проверок новых паролей.
Настраиваешь таким образом систему, добавляешь все существующие сейчас пароли в базу для 2. и предлагаешь всем добровольно поменять пароль в течение недели, иначе они лишатся доступа к системе. Готово.
А защита от говноскриптов взлома всего интернета - это так себе, разве что для самоуспокоения поможет.
новый пароль проверяется на соответствие с любым когда-либо существовавшим на этой системе паролем у какого-либо пользователя. если совпадает - предложить сменить пароль.Ох. Решил я сделать пароль "hatelenasomuchoh". А тут мне система говорит, что такой уже есть. Я дедуктирую, что это мой сосед по парте Андрей такой пароль использовал, пробую использовать его для доступа на почтовый ящик, где указанной системы защиты нет, и вуаля

один мой знакомый делал такНе проще ли сделать обязательной strong authentication? Т.е., нагенерить всем ключи и запретить аутентификацию паролем.
Система настраиваетсяКстати, как это делается? Свой модуль к PAM?
> Не проще ли сделать обязательной strong authentication? Т.е., нагенерить всем ключи и запретить аутентификацию паролем.
Ты счастливый человек. Ты не встречался с пользователями.
Ты счастливый человек. Ты не встречался с пользователями.
Ещё как встречался. У меня манагеры и сейлзы в своё время Redhat Linux 7.3 на десктопах имели
Если серьёзно, действительно заставил всех, кому нужен shell, сгенерить ключи. Мне кажется, что при грамотной реализации это не тот вопрос, которым пользователи могут быть недовольны.
Если серьёзно, действительно заставил всех, кому нужен shell, сгенерить ключи. Мне кажется, что при грамотной реализации это не тот вопрос, которым пользователи могут быть недовольны.
Мне не нравится, что пакеты будут отправляться самому себе ещё раз.
---
...Я работаю...
---
...Я работаю...
А hosts.{allow,deny} проверяются?
Разбирать логи и добавлять правила по ходу дела?
Попытаться повесить sshd под daemontools?
Там, вроде есть какие-то способы отрубать слишком часто подсоединяющихся.
---
...Я работаю...
Разбирать логи и добавлять правила по ходу дела?
Попытаться повесить sshd под daemontools?
Там, вроде есть какие-то способы отрубать слишком часто подсоединяющихся.
---
...Я работаю...
Всё равно, ты счастливый человек.
Тебе попались умные пользователи.
Либо ты просто оказался выше по лестнице.
---
...Я работаю...
Тебе попались умные пользователи.
Либо ты просто оказался выше по лестнице.
---
...Я работаю...
настрой так, чтоб после 3-х неудачных попыток логина на некоторое время блокировались последующие
Кстати, поиск в гугле по "ssh block login attempts" может дать немало полезной информации
Например, вот: http://bsdwiki.com/wiki/Blocking_repeated_failed_login_attem...
Например, вот: http://bsdwiki.com/wiki/Blocking_repeated_failed_login_attem...
не знаю насколько это правильно осуществлять у тебя, но можно просто перенести ссшд на произвольный верхний порт.
пусть юзера регистрируются через веб-интерфейс, указывая, с каких ip они будут ходить
кто с другого заходит, тех не пускать, а указать в сообщении, что надо зарегистрироваться
кто с другого заходит, тех не пускать, а указать в сообщении, что надо зарегистрироваться
Если не удаётся заставить пользователей 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 - так юзеры поймут, зачем нужны нормальные пароли;)
2: Дык, пусть ломают юзеров. А у себя - нормальный пароль и вообще дырки позатыкай;) Кого-нибудь взломают и напакостят в их home - так юзеры поймут, зачем нужны нормальные пароли;)
А как ты думаешь, почему во всем мире идентификация по паролю? Может, все не знают про такой классный способ, как ключи?Да, я думаю, что не все люди, от которых зависят подобные решения, знают и понимают необходимость strong authentication. И ещё меньше людей знают, как легко и просто реализовать strong authentication применительно к ssh.
> Если не удаётся заставить пользователей private key себе сгенерировать
> один раз, то и регистрироваться через веб-интерфейс они тем более не будут
Через веб регистрироваться гораздо проще, это любой виндоюзер умеет по определению.
> один раз, то и регистрироваться через веб-интерфейс они тем более не будут
Через веб регистрироваться гораздо проще, это любой виндоюзер умеет по определению.
Более того, в целом образованность по security оставляет желать лучшего
Через веб регистрироваться гораздо проще, это любой виндоюзер умеет по определению.Напряг это большой очень - каждый раз при смене IP регистрироваться
пусть юзера регистрируются через веб-интерфейс, указывая, с каких ip они будут ходитьЭтот способ делает невозможным заход с других ip'ов для честных пользователей;) Потом проблемы с динамическими ипами. А если юзер - простой юзер, то он и IP свой узнать не сможет;)
кто с другого заходит, тех не пускать, а указать в сообщении, что надо зарегистрироваться
> Напряг это большой очень - каждый раз при смене IP регистрироваться
Если у кого-то часто меняется, можно диапазон зарегистрировать.
Это может сделать автомат, посмотрев whois, а может админ помочь.
Большинство же ходит с постоянных IP.
Если у кого-то часто меняется, можно диапазон зарегистрировать.
Это может сделать автомат, посмотрев whois, а может админ помочь.
Большинство же ходит с постоянных IP.
А если юзер - простой юзер, то он и IP свой узнать не сможет;)Кстати да, это аргумент.
Админу больше делать нечего...;) А если кому очень надо - заведет аккаунт у нужного прова, который попадает в разрешенный диапазон, и взломает так же точно;)
И, опять же, если я хочу не из дома зайти, что делать?
И, опять же, если я хочу не из дома зайти, что делать?
немного не так. система не говорит, что такой уже есть, система говорит, что такой пароль ей не нравится. Почему не нравится - а хрен его знает.
вроде да.
> это пи_дец
> ...
> и может вообще лучше использовать таблицы?
Я так и сделал.
Программа кормится от syslog-ng, который ей даёт только логи sshd.
> ...
> и может вообще лучше использовать таблицы?
Я так и сделал.
#!/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 фейлов с одного ИПа и юзерагента - и бан на час (фейл в любом случае, а не рефузить коннект)
5 фейлов с одного ИПа и юзерагента - и бан на час (фейл в любом случае, а не рефузить коннект)
Какого еще юзерагента?
При negotiation клиент с сервером обмениваются версиями - путти, хуютти, винссх там, и так далее.
подбиралка паролей, очевидно, с тем же успехом может подставлять рандомный текст вместо версии клиента.
От версии многое зависит.
Придётся еще патчить sshd, чтобы он это выводил в syslog.
а если кто-нибудь из пользователей просто неправильно логин набрал ?
долго придется в файле искать нужный адрес.
долго придется в файле искать нужный адрес.
Дорогое решение:
Каждому пользователю вот по такой пиз@юлине:
http://www.aladdin.com/etoken/ng_otp.asp
+софт под эту хрень - и вуаля....
Вроде к sshd оно тоже прикручивается...
Выбор решения зависит от того бюджета, который надо освоить...
Каждому пользователю вот по такой пиз@юлине:
http://www.aladdin.com/etoken/ng_otp.asp
+софт под эту хрень - и вуаля....
Вроде к sshd оно тоже прикручивается...
Выбор решения зависит от того бюджета, который надо освоить...
ты маньяк-извращенец 

Насколько я понял, конечной целью Шурика не является освоение бюджета.
Оставить комментарий
Chupa
вот такими: