Вы можете использовать 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, я бы не использовал что-то в пользовательском режиме, которое требует установки программного обеспечения и является более сложным.
-m condition
iptables match.fail2ban может помочь с этим, блокируя IP-адреса при слишком большом количестве неудачных попыток входа в систему.
источник
Я бы порекомендовал использовать нестандартный порт для SSH, если вы можете (например, порт 10222), но так как вы упомянули, что вы не можете сделать это, я бы порекомендовал использовать что-то вроде DenyHosts.
http://denyhosts.sourceforge.net/
Отличный пакет, прост в установке и настройке.
источник
Хотя было бы неплохо иметь возможность подключаться к вашей системе через ssh из любого места в Интернете, существуют автоматизированные системы парольной атаки, которые блокируют открытый порт ssh и применяют различные атаки на учетную запись joe и словарь против вашей системы. Это может усугубить чтение в вашем ночном отчете и является пустой тратой пропускной способности.
Если у вас есть веб-сервер в той же системе, вы можете использовать оболочки php и tcp, чтобы ограничить входящий трафик ssh для известных систем, а также дать вам секретный ключ, чтобы разрешить себе доступ из произвольных систем в Интернете.
Вот как вы это делаете:
запретить все ssh-соединения в /etc/hosts.deny:
Разрешите известные системы по IP в /etc/hosts.allow, а также добавьте файл для временного доступа:
Создайте php-файл на вашем веб-сервере и дайте ему неочевидное имя, например my-sshd-access.php:
Простите код php - я провёл его откуда-то еще, так что он, вероятно, мог бы вытереть целую кучу. Все, что он делает, это добавляет IP-адрес системы, обращающейся к нему, в файл /etc/hosts.allow.teilitary-sshd-access, который читается sshd (из-за его включения /etc/hosts.allow) во время соединения ,
Теперь, когда вы находитесь в какой-либо произвольной системе в Интернете и хотите использовать ssh для этой системы, сначала используйте веб-браузер и нажмите этот файл (или используйте wget или эквивалентный):
Теперь вы должны быть в состоянии подключиться к вашей системе. Если это то место, от которого вы, вероятно, будете часто пользоваться ssh'ом, было бы тривиально прочитать содержимое файла /etc/hosts.allow.tetims-sshd-access и добавить IP-адрес в / etc / hosts без возможности восстановления. разрешать.
источник
Возможно, вы захотите посмотреть и на денихотов .
К сведению: OpenSSH 6.7 прекращает поддержку tcpwrappers , а это значит, что denyhosts, вероятно, не является решением для новых установок.
источник
Сделайте себе одолжение и отключите пароль для входа. Используйте исключительно ключи аутентификации (например, 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.
источник
другое решение - просто перенести ssh на другой порт. эти черви довольно глупы.
источник
Другой вариант может потребовать, чтобы все ssh-соединения были проверены сертификатом и вообще покончили с паролями.
Я использую Denyhosts, но обнаружил, что регулярно подключаюсь удаленно только из нескольких мест, поэтому я заблокировал все подключения к порту 22, кроме как из любого другого места, и использую стук портов, чтобы я мог подключиться к ноутбуку из любого места, если мне нужно ,
источник
Любое решение, которое включает автоматическую блокировку IP-адресов после нескольких сбоев, создает риск отказа в обслуживании. Пока существует хорошая политика паролей для снижения эффективности атак методом перебора или словарных атак, я бы не стал слишком беспокоиться о них.
Если вы ограничите пользователей / группы только теми, кому в первую очередь следует разрешить вход в ssh, и отключите вход в систему как root, вы должны быть более чем достаточно защищены. И, если этого недостаточно, всегда есть аутентификация на основе ключей.
источник
Честно говоря, если вам нужно запустить SSH (и на порту 22), вы не можете избежать этого. Если вы должны принять пароли, вы в еще худшей форме.
Лучше всего настроить программное обеспечение для анализа логов, чтобы исключить логи SSH. Затем запустите отдельный экземпляр, чтобы просмотреть только журналы SSH, и используйте procmail, чтобы отфильтровать неудачные попытки. Вы могли бы даже написать сценарии для отслеживания успешных входов с IP-адресов с несколькими неудачными попытками.
Там нет никакого способа, чтобы помешать людям исследовать ваш сервер SSH. Denyhosts, fail2ban и пример iptables будут работать до определенного момента, но с дополнительной опасностью случайной блокировки законных пользователей. Лучший способ - это смириться с этим и попытаться автоматизировать процесс анализа журналов, чтобы сократить количество времени, которое вы должны обдумать.
источник
Когда вы говорите, что получаете неудачные попытки входа в систему на своем сервере Red Hat, какого рода брандмауэр он сидит и сколько людей должно войти в него. Я полагаю, что, если вы можете, вы хотите ограничить попытки брандмауэра, прежде чем они приблизятся к вашему серверу.
Если вы можете ограничить диапазон IP-адресов, которые законно нуждаются в доступе, вы сможете настроить список доступа на брандмауэре. Если вы можете ограничить трафик в брандмауэре, я бы посоветовал вам взглянуть на системы сетевого вторжения, так как кажется, что ваш сервер чем-то нацелен.
источник
Большинство веб-хостов используют APF + BFD для ip-блокировки неудачных входов SSH. В настоящее время существует CSF (межсетевой экран Configserver), который включает в себя инструмент под названием LFD, который делает то же самое и многое другое, включая блокировку IP-адресов из определенных стран, которым вы не хотите получать доступ к вашему серверу (например, Корея, Китай и т. Д., Где 99% моих SSH-зондов кажется, происходят из).
источник
Я использовал fail2ban, и это мне очень помогло.
источник
Если вам нужно решить эту проблему на нескольких хостах, вы можете проверить OSSEC: http://www.ossec.net/main/ossec-architecture
Это позволит вам настроить несколько агентов из централизованного местоположения для автоматического реагирования на атаки методом перебора (вместе с любым другим шаблоном, который вы можете извлечь из журналов).
Очень хороший кусок программного обеспечения :)
источник
Другой вариант, похожий на DenyHosts, - это sshutout http://www.techfinesse.com/sshutout/sshutout.html.
источник