Сотни неудачных логинов SSH
Каждую ночь я получаю сотни, а иногда и тысячи неудачных логинов ssh на моем сервере RedHat 4. По причинам брандмауэра с удаленных сайтов мне нужно работать на стандартном порту. Есть ли что-то, что я должен сделать, чтобы заблокировать это. Я заметил, что многие приходят с одного IP-адреса. Разве это не должно остановить их через некоторое время?
15 ответов
Вы можете использовать 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
Эти правила предполагают, что вы принимаете УСТАНОВЛЕННЫЕ соединения ранее в таблице (так что только новые соединения будут попадать в эти правила). Новые соединения SSH будут соответствовать этим правилам и будут отмечены. Через 60 секунд 5 попыток с одного IP-адреса приведут к тому, что новые входящие соединения с этого IP будут сброшены.
Это хорошо сработало для меня.
Редактировать: я предпочитаю этот метод "fail2ban", потому что не нужно устанавливать дополнительное программное обеспечение, и происходит полностью в режиме ядра. Он не обрабатывает файлы журнала анализа, как "fail2ban", но если ваша проблема связана только с SSH, я бы не использовал что-то в пользовательском режиме, которое требует установки программного обеспечения и является более сложным.
Я бы порекомендовал использовать нестандартный порт для SSH, если вы можете (например, порт 10222), но так как вы упомянули, что вы не можете сделать это, я бы порекомендовал использовать что-то вроде DenyHosts.
http://denyhosts.sourceforge.net/
Отличный пакет, прост в установке и настройке.
Хотя было бы неплохо иметь возможность подключаться к вашей системе через 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.teilitary-sshd-access, который читается sshd (из-за его включения /etc/hosts.allow) во время соединения,
Теперь, когда вы находитесь в какой-либо произвольной системе в Интернете и хотите использовать ssh для этой системы, сначала используйте веб-браузер и нажмите этот файл (или используйте wget или эквивалентный):
$ wget http://your.system.name/my-sshd-access.php
Теперь вы должны быть в состоянии подключиться к вашей системе. Если это то место, от которого вы, вероятно, будете часто пользоваться ssh'ом, было бы тривиально прочитать содержимое файла /etc/hosts.allow.tetims-sshd-access и добавить IP-адрес в / etc / hosts без возможности восстановления. разрешать.
Сделайте себе одолжение и отключите пароль для входа. Используйте исключительно ключи аутентификации (например, 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 brute force.
Возможно, вы захотите посмотреть и на денихотов.
К сведению: OpenSSH 6.7 прекращает поддержку tcpwrappers, а это значит, что denyhosts, вероятно, не является решением для новых установок.
Другое решение - просто перенести ssh на другой порт. эти черви довольно глупы.
Другой вариант может потребовать, чтобы все ssh-соединения были проверены сертификатом и вообще покончили с паролями.
Я использую Denyhosts, но обнаружил, что регулярно подключаюсь удаленно только из нескольких мест, поэтому я заблокировал все подключения к порту 22, кроме как из любого другого места, и использую стук портов, чтобы я мог подключиться к ноутбуку из любого места, если мне нужно,
Любое решение, которое включает автоматическую блокировку IP-адресов после нескольких сбоев, создает риск отказа в обслуживании. Пока существует хорошая политика паролей для снижения эффективности атак методом перебора или словарных атак, я бы не стал слишком беспокоиться о них.
Если вы ограничите пользователей / группы только теми, кому в первую очередь следует разрешить вход в ssh, и отключите вход в систему как root, вы должны быть более чем достаточно защищены. И, если этого недостаточно, всегда есть аутентификация на основе ключей.
Это довольно старая тема, и ее нужно обновить;) В настоящее время лучшим вариантом является использование 2FA, например https://ubuntu.com/tutorials/configure-ssh-2fa#1-overview. После установки на моем сервере боты перестали пытаться вторгнуться сразу же, в отличие от принятого решения iptables.
Честно говоря, если вам нужно запустить SSH (и на порту 22), вы не можете избежать этого. Если вы должны принять пароли, вы в еще худшей форме.
Лучше всего настроить программное обеспечение для анализа логов, чтобы исключить логи SSH. Затем запустите отдельный экземпляр, чтобы просмотреть только журналы SSH, и используйте procmail, чтобы отфильтровать неудачные попытки. Вы могли бы даже написать сценарии для отслеживания успешных входов с IP-адресов с несколькими неудачными попытками.
Там нет никакого способа, чтобы помешать людям исследовать ваш сервер SSH. Denyhosts, fail2ban и пример iptables будут работать до определенного момента, но с дополнительной опасностью случайной блокировки законных пользователей. Лучший способ - это смириться с этим и попытаться автоматизировать процесс анализа журналов, чтобы сократить количество времени, которое вы должны обдумать.
Когда вы говорите, что получаете неудачные попытки входа в систему на своем сервере Red Hat, какого рода брандмауэр он сидит и сколько людей должно войти в него. Я полагаю, что, если вы можете, вы хотите ограничить попытки брандмауэра, прежде чем они приблизятся к вашему серверу.
Если вы можете ограничить диапазон IP-адресов, которые законно нуждаются в доступе, вы сможете настроить список доступа на брандмауэре. Если вы можете ограничить трафик в брандмауэре, я бы посоветовал вам взглянуть на системы сетевого вторжения, так как кажется, что ваш сервер чем-то нацелен.
Если вам нужно решить эту проблему на нескольких хостах, вы можете проверить OSSEC: http://www.ossec.net/main/ossec-architecture
Это позволит вам настроить несколько агентов из централизованного местоположения для автоматического реагирования на атаки методом перебора (вместе с любым другим шаблоном, который вы можете извлечь из журналов).
Очень хороший кусок программного обеспечения:)
Другой вариант, похожий на DenyHosts, - это sshutout http://www.techfinesse.com/sshutout/sshutout.html
Большинство веб-хостов используют APF+BFD для ip-блокировки неудачных входов SSH. В настоящее время существует CSF (межсетевой экран Configserver), который включает в себя инструмент под названием LFD, который делает то же самое и многое другое, в том числе блокирует IP-адреса из определенных стран, которым вы не хотите получать доступ к вашему серверу (например, Корея, Китай и т. Д., Где 99% моих SSH-зондов кажется, происходят из).