Вопрос: Сотни неудачных ssh-логинов


Каждую ночь я получаю сотни, а иногда и тысячи, неудачных входов на моем сервере RedHat 4. Для причин брандмауэра из удаленных сайтов мне нужно запустить стандартный порт. Есть ли что-то, что я должен был сделать, чтобы заблокировать это. Я замечаю, что многие из них поступают с одного и того же IP-адреса. Разве это не остановит их через некоторое время?


77
2018-06-02 16:18


Источник




Ответы:


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

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

Эти правила предполагают, что вы принимаете ESTABLISHED соединения ранее в таблице (так что только новые подключения будут соответствовать этим правилам). Новые SSH-соединения ударят по этим правилам и будут отмечены. Через 60 секунд 5 попыток с одного IP-адреса приведут к тому, что новые входящие соединения будут удалены из этого IP-адреса.

Это хорошо сработало для меня.

Редактировать: я предпочитаю этот метод «fail2ban», потому что не нужно устанавливать дополнительное программное обеспечение и происходит полностью в режиме ядра. Он не обрабатывает файлы журналов анализа, такие как «fail2ban», но если ваша проблема связана только с SSH, я бы не использовал что-то пользовательское, которое требует установки программного обеспечения и является более сложным.


64
2018-06-02 16:25



Мне нравится это решение, и я планирую получить его на месте сегодня вечером, как только я получу сегодняшние пожары. - MattMcKnight
Он замедляет атаки, и я рекомендую его, но потому, что там есть разбросанные сканирование ботнетов, это не панацея. По-прежнему будут иметься недействительные учетные записи из бот-сетей, на которых распространяются развернутые проверки. На самом деле, вы не можете слишком много сделать, если не считать какой-то схемы «портового детонации», чтобы удаленно довести порт SSH, когда вы хотите войти. - Evan Anderson
+1 для предложения Evan's "port knocking". Некоторая информация: linux.die.net/man/1/knockd , Но не делайте этого man-страницы (то есть, добавляя / удаляя правила iptables), но вместо этого используйте -m condition Вместо этого iptables. - pepoluan
вам не нужно --dport 22 в этих правилах, чтобы они применялись только для трафика ssh? - clime
@clime - Да. Трудно поверить, что это было здесь 2 1/2 года, и никто не заметил! Хороший улов. - Evan Anderson


fail2ban может помочь в этом, заблокировав IP-адреса слишком большим количеством неудачных попыток входа в систему.


38
2018-06-02 16:20



Мне не нравятся инструменты / скрипты, читающие журналы и выдающие команды от имени пользователя sysadmin - asdmin
@asdmin, да, особенно когда они есть такой хороший послужной список ... - maxschlepzig


Я бы рекомендовал использовать нестандартный порт для SSH, если вы можете (например, порт 10222), но так как вы упомянули, что не можете этого сделать, я бы рекомендовал использовать что-то вроде DenyHosts.

http://denyhosts.sourceforge.net/

Отличный пакет, простой в установке и настройке.


25
2018-06-02 17:16



Я не знаю, почему люди поддерживают это; SSH находится на стандартном порту 22. Это означает, что когда вы находитесь в чужой сети, вы не полагаетесь на них, открыв нестандартный порт через исходящий брандмауэр. Реальное решение этой проблемы описано выше, либо ограничивает количество повторных подключений через входящий брандмауэр, либо отключает логины входа в систему. - Andrew Taylor
OpenSSH - 6,7 капли Поддержка tcpwrappers, что и использует denyhosts. - Zoredache


Хотя может быть приятно иметь возможность ssh в вашей системе из произвольных мест в Интернете, есть автоматические системы защиты паролем, которые блокируются на открытом ssh-порту и применяют различные атаки joe и словаря к вашей системе. Это может означать, что вы читаете в сводном сводке журнала и теряете свою пропускную способность.

Если у вас есть веб-сервер в той же системе, вы можете использовать обертки php и tcp, чтобы ограничить входящий трафик ssh на известные системы, а также предоставить вам ключ от двери для доступа к произвольным системам в Интернете.

Вот как вы это делаете:

запретить все ssh-соединения в /etc/hosts.deny:

# /etc/hosts.deny fragment
sshd:  all

Разрешить известные системы по IP в /etc/hosts.allow, а также добавить файл для временного доступа:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

Создайте php-файл на своем веб-сервере и дайте ему неочевидное имя, например my-sshd-access.php:

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

Простите php-код - я вытащил его из другого места, так что он, вероятно, может быть очищен от целой группы. Все, что он делает, это добавить IP-адрес системы, к которой он подключен, к файлу /etc/hosts.allow.temporary-sshd-access, который считывается sshd (из-за его включения /etc/hosts.allow) во время соединения ,

Теперь, когда вы находитесь в какой-то произвольной системе в Интернете и хотите ssh для этой системы, сначала используйте веб-браузер и нажмите этот файл (или используйте wget или equivilent):

$ wget http://your.system.name/my-sshd-access.php

Теперь вы должны быть в состоянии ssh в вашей системе. Если это где-то, вы, скорее всего, будете часто входить в ssh'ing, было бы тривиально читать содержимое файла /etc/hosts.allow.temporary-sshd-access и постоянно добавлять IP-адрес в / etc / hosts. позволять.


15
2018-06-02 17:07



Чтобы сделать это более безопасным, запустите эту страницу на https. - Robert Munteanu
Если вы измените сценарий, чтобы он не выводил содержимое файла «разрешенного временного IP-адреса», для потенциального сниффера не было бы никакого смысла. Затем вы можете запустить его на http вместо https. - Barry Brown
«Разрешенный временный IP-адрес» всегда относится к запрашивающему (т. Е. Вашему). Я не думаю, что это имеет значение так или иначе. Https означает, что запрошенный URL-адрес зашифрован, что означает, что его нетривиальное обнюхание с провода. - David Mackintosh
Это не будет работать, если вы находитесь в сети, которая проксирует HTTP-соединения, но ваш прямой маршрут в Интернет - через другой выход. - Andrew Taylor
OpenSSH - 6,7 капли Поддержка tcpwrappers, что и используется в вашем ответе. - Zoredache


Вы можете посмотреть на DenyHosts также.

FYI: OpenSSH - 6,7 капли Поддержка tcpwrappers, что означает, что denyhosts, вероятно, не является решением для новых установок.


9
2018-06-02 16:23





Сделайте себе одолжение и отключите пароль. Используйте исключительно ключи аутентификации (например, google ssh-keygen - Пример: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4.html ) Ваш сервер будет более безопасным, вы сможете подключиться к нему более комфортно (проверьте ssh-agent, ssh-add, keychain), и вы больше не будете жертвой атак с грубой силой ssh.


8
2017-08-17 22:08





другое решение - просто переместить ssh в другой порт. эти черви довольно глупы.


2
2018-06-02 16:28



Оригинальный плакат сказал, что ему нужно бежать по стандартному порту. - kbyrd
извините, я должен внимательно прочитать вопросы :) - disserman
Я должен согласиться ... У меня SSH работает на «альтернативных» портах, и это делает МИР различий в журналах. Черви примерно такие же умные, как кирпич, поэтому он хорошо работает против немых сценариев автоматизации; не так хорошо против людей, нападавших. Тем не менее, журналы имеют благословенный звук тишина в них... - Avery Payne