Denyhosts vs fail2ban vs iptables - лучший способ предотвратить грубые входы в систему?

62

Я настраиваю сервер LAMP и должен предотвратить SSH / FTP / и т. Д. попытки входа в систему методом грубой силы не удаются. Я видел много рекомендаций как для denyhosts, так и для fail2ban, но сравнений мало. Я также читал, что правило IPTables может выполнять ту же функцию.

Почему я выбрал бы один из этих методов по сравнению с другим? Как люди на сервере справляются с этой проблемой?

spiffytech
источник

Ответы:

53

IIRC, DenyHosts будет только наблюдать за вашей службой SSH. Если вам это нужно и для защиты других сервисов, Fail2ban определенно станет лучшим выбором. Можно настраивать просмотр практически любого сервиса, если вы хотите настроить его конфигурацию, но в этом нет необходимости, поскольку более новые версии Fail2ban включают наборы правил, которые подходят для многих популярных серверных демонов. Преимущество использования fail2ban сверх простого ограничения скорости iptables заключается в том, что он полностью блокирует злоумышленника на определенный период времени, а не просто снижает скорость, с которой он может взломать ваш сервер. Я использовал fail2ban с отличными результатами на ряде производственных серверов и никогда не видел, чтобы один из этих серверов был взломан перебором с тех пор, как я начал его использовать.

Рон
источник
3
Обратите внимание, что DenyHosts будет блокировать другие сервисы - главное отличие состоит в том, что fail2ban использует iptables, тогда как DenyHosts использует hosts.deny, некоторые сервисы не смотрят файлы хостов, такие как Apache.
jammypeach
Чтобы добавить другой вариант в таблицу, я недавно обнаружил, что конфигуратор брандмауэра ufw также позволяет вам применять (не настраиваемое) ограничение скорости к любому порту TCP или UDP. Если вы уже используете UFW, это может быть хорошим вариантом вместо настройки и запуска дополнительного демона.
spiffytech
Первое, что нужно сделать, чтобы предотвратить грубые нарушения, - это использовать достаточно надежный пароль (или даже вообще отключить аутентификацию пароля :). Ограничение скорости (в одиночку) является слабым для этого. Я не пробовал альтернативы, но сам использую fail2ban и нашел довольно полезным отразить ботов, пытающихся проверить пароли.
Петр Гладких
По моему опыту, fail2ban нужно немного больше работы, чтобы он действительно что-то делал. Напротив, вы можете просто установить RPM-пакет denyhosts и запустить его, чтобы защитить свой сервер, пока вы работаете с более сложными опциями. Я определенно согласен, что fail2ban «лучше», но для легкой защиты нельзя победить денихотов.
Ральф Болтон
21

лучший способ предотвратить грубые входы в систему?

Не позволяйте им добраться до вашей машины в первую очередь! Есть много способов остановить попытки перебора до того, как они попадут на ваш хост или даже на уровне SSH.

Сказав это, защита вашей операционной системы с помощью что-то вроде fail2ban - отличная идея. Fail2ban немного отличается от DenyHosts, хотя они играют в одном пространстве. Fail2ban использует iptables.

http://en.wikipedia.org/wiki/Fail2ban

Fail2ban похож на DenyHosts ... но в отличие от DenyHosts, который ориентирован на SSH, fail2ban может быть настроен для мониторинга любой службы, которая записывает попытки входа в файл журнала, и вместо использования /etc/hosts.deny только для блокировки IP-адресов / хостов , fail2ban может использовать Netfilter / iptables и TCP Wrappers /etc/hosts.deny.

Существует ряд важных методов обеспечения безопасности, которые следует учитывать для предотвращения грубых входов в систему:

SSH:

  • Не разрешать пользователю root вход в систему
  • Не разрешать пароли ssh (используйте аутентификацию с закрытым ключом)
  • Не слушайте на каждом интерфейсе
  • Создайте сетевой интерфейс для SSH (например, eth1), который отличается от интерфейса, с которого вы обслуживаете запросы (например, eth0)
  • Не используйте общие имена пользователей
  • Используйте список разрешений и разрешайте только пользователям, которым требуется доступ по SSH
  • Если вам требуется доступ в Интернет ... Ограничьте доступ к конечному набору IP-адресов. Один статический IP-адрес идеален, однако его блокировка до xx0.0 / 16 лучше, чем 0.0.0.0/0.
  • Если возможно, найдите способ подключения без доступа к Интернету, таким образом вы можете запретить весь интернет-трафик для SSH (например, с помощью AWS вы можете получить прямое соединение в обход Интернета, оно называется Direct Connect)
  • Используйте программное обеспечение, как fail2ban, чтобы поймать любые атаки грубой силы
  • Убедитесь, что ОС всегда обновлена, в частности, пакеты безопасности и ssh

Заявка:

  • Убедитесь, что ваше приложение всегда обновлено, в частности пакеты безопасности
  • Заблокируйте страницы приложения "admin". Многие из приведенных выше советов относятся и к административной области вашего приложения.
  • Пароль Защитите вашу область администратора, что-то вроде htpasswd для веб-консоли спроецирует любые основные уязвимости приложений и создаст дополнительный барьер для входа
  • Заблокируйте права доступа к файлам. «Загрузите папки» известны тем, что они являются точками входа для всякого рода неприятных вещей.
  • Подумайте о том, чтобы поместить ваше приложение в частную сеть и использовать только балансировщик внешней нагрузки и панель переключения (это типичная настройка в AWS с использованием VPC).
Дрю Хури
источник
1
Не могли бы вы пояснить утверждение: «Существует множество способов остановить попытки перебора до того, как они доберутся до вашего хоста или даже на уровне SSH». Мне особенно интересно, есть ли у вас какие-либо предложения для машин, на которых вы не можете контролировать внешние сети. Спасибо!
Кевин Кин
7

Я использую правила iptables для ограничения скорости новых подключений с одного и того же IP-адреса (главным образом, по SSH, но и для FTP это тоже подойдет). На мой взгляд, преимущество по сравнению с «fail2ban» и другими подобными инструментами состоит в том, что маршрут iptables происходит полностью в режиме ядра и не зависит от каких-либо инструментов пользовательского режима для привязки / анализа файлов журнала.

Сотни неудачных логинов SSH

Если вы можете это сделать, ограничение адресов источника, которые могут обращаться к рассматриваемым протоколам, очевидно, также поможет.

С SSH вы действительно должны использовать проверку подлинности сертификата и не принимать пароли в любом случае.

Эван Андерсон
источник
@ mc0e - я не подписан.
Эван Андерсон
7

ДРУГОЙ БОЛЬШОЙ СПОСОБ ЗАЩИТИТЬ SSH (я использовал это в течение десятилетия или лучше) - использовать последние библиотеки в iptables изначально (в зависимости от вашего дистрибутива).
По сути, это может быть использовано как стук порта, встроенный в iptables. Это избавит вас от головной боли. До тех пор, пока вы можете tcp connect (telnet - это один из способов. Я также использовал ssh-клиенты и указывал их на порт. Все, что будет делать tcp-соединение с указанным номером порта. Я смотрю на вас, Putty!) Из клиент, инициирующий соединение ssh, вы можете использовать это.

Ниже приведен пример, в котором iptables будет иметь открытый порт 22 для вашего хоста, когда вы будете использовать telnet с вашего хоста на сервер через порт 4103. Затем вы можете использовать telnet для порта 4102 или 4104, чтобы закрыть открытие sed. Причина как для 4102, так и для 4104 состоит в том, чтобы не открывать простое сканирование tcp 22. Только tcp-соединение (telnet) с портом 4103 позволит вам войти.

Наслаждайтесь!

Ох, и я предпочитаю Fail2Ban. Больше гибкости, и мне нравится, что бан происходит в iptables, а не в tcpwrappers.

SSH ПОРТНОКИНГ

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP
Джефф Мур
источник
6

Еще одно различие между Fail2ban и Denyhosts заключается в том, что Denyhosts может делиться списком блокировки с другими пользователями Denyhosts. С Fail2ban вы можете заблокировать только те IP-адреса, которые ваш сервер видел раньше - с помощью Denyhosts, попытка грубой силы может даже не попасть на ваш сервер, если кто-то еще видел это, и список блокировки загружается на ваш сервер перед атакующим добирается до вашего компьютера.

Еще одно отличие состоит в том, что Fail2ban использует iptables, а Denyhosts использует tcpwrappers. Другие уже упоминали об этой разнице, но есть пара замечаний, которые стоит упомянуть.

В iptables ограничено количество IP-адресов, которые вы можете эффективно заблокировать. Вероятно, это одна из причин, по которой Fail2ban не имеет механизма для совместного использования списков блокировки.

Другой эффект заключается в том, что когда iptables заменяется на nftables, Fail2ban, вероятно, перестанет работать или его необходимо переписать. Denyhosts, вероятно, продолжит работать.

Таким образом, оба имеют свои преимущества и недостатки. Мне нравятся оба; для себя я использую Denyhosts, потому что обычно я хочу защитить только SSH, и мне нравится делиться списком блокировки.

Кевин Кин
источник
5

Что касается Fail2Ban, то следует отметить, что он использует на 10 МБ больше памяти, чем DenyHosts. Так что, если вы используете 128 МБ VPS, вы можете посмотреть на это. Кроме того, out-of-the-box fail2ban настроен только на SSH, что означает, что без изменений в конфигурации - DenyHosts делает то же самое с меньшим объемом памяти.

Xeoncross
источник
2
Попробуйте добавить «ulimit -s 256» в / etc / default / fail2ban. Снизил 10МБ в моей системе.
Пкоч
3

denyhosts для ssh. fail2ban является более полным (HTTP, FTP и т. д.). Оба используют iptables за кулисами.

Игнасио Васкес-Абрамс
источник
И «denyhosts», и «fail2ban» используют iptables для выполнения своего «блокирующего» поведения, но они не используют iptables для ограничения скорости. Они анализируют журналы в «пользовательской стране» и действуют на основе записей журнала.
Эван Андерсон
10
@Evan, denyhosts не использует iptables (по умолчанию). Он использует TCP-обертки и обновляет ваш /etc/hosts.deny, когда система должна быть забанена.
Zoredache
@Zoredache: я исправлен. Ранее enver использовал «denyhosts», и я сделал неверное предположение о том, как он вызывает «блокирующие» функции. Тем не менее, являясь инструментом анализа / обработки логов в пользовательском пространстве, я бы предпочел использовать решение «denyhosts», строго основанное на iptables.
Эван Андерсон
1

Вместо того, чтобы возиться с утомительными настройками iptables или fail2ban, почему бы не сделать так, чтобы открытое сообщество сделало всю работу за вас, а вместо этого использовало CSF / LFD? Я настоятельно рекомендую это выше всех других упомянутых вариантов. Посмотрите http://configserver.com/cp/csf.html, что он может сделать для ваших серверов. CSF не требует панели управления, он предлагает простой пользовательский интерфейс для тех, кто не хочет делать это с помощью оболочки. И это много стабильных надежных нерезидентных perl-скриптов.

Бен
источник
8
Это больше похоже на рекламу, и затмевает фактический вопрос.
Дрю Хури
Ну нет, я не замутил фактический вопрос. Я передал альтернативу, которая помешала бы вам даже заняться этим вопросом. Серьезно, CSF / LFD - это не просто еще одна система управления брандмауэром, она возникла именно из-за проблем, возникающих здесь. Почему никто не хочет развиваться? Это сэкономит вам много времени, потому что другие уже решили это. Вот почему CSF существует.
Бен
Что бы ни стоило, как человеку, который ценит возможность заработка моего времени, если цена правильная, я бы предпочел иметь решение «подключи и работай» для такого рода вещей, даже если оно стоит несколько долларов. Таким образом, мне не нужно тратить время на изучение вещей, которые мне действительно безразличны, но я осознаю важность защиты.
Дэвид
1

Похоже, что fail2ban не имеет механизма для распознавания успешного входа в ssh и сброса количества ошибок.

Стандартный фильтр для sshd (по крайней мере, при моей установке Debian) фиксирует счетчик ошибок для каждого ключа ssh, который клиент представляет, который сервер отклоняет. Некоторые пользователи предоставляют много ключей при каждом входе в систему и регулярно блокируются, несмотря на то, что их вход был успешным после прохождения нескольких ключей.

В результате вышесказанного я сейчас думаю о том, чтобы отойти от fail2ban. В этом отношении, по крайней мере, лучше денегостов. Однако, по-видимому, он больше не является хорошим вариантом и больше не поддерживается в более поздних версиях Debian (некоторые обсуждения на https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- Debian / )

У меня нет хорошего решения здесь.

mc0e
источник
Существует аналогичная проблема, если вы используете аутентификацию LDAP. Слишком много успешных входов в систему приведет к блокировке: bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
Майк
Чтобы запретить отображение всех ключей, покажите своим пользователям, как указать ключ, который будет использоваться в их файле ~ / .ssh / config.
BillThor
0

На самом деле, я думаю, что denyHost способен предотвратить множество других сервисов, кроме сервиса sshd. В его конфигурационном файле /etc/denyhosts.confесть несколько строк кода:

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

поэтому, если мы установим BLOCK_SERVICEпеременную, ALLкак указано выше, мы сможем посмотреть наш сервис ssh.

MathNoob
источник
0

Denyhosts версия 3.0: Каждый раз, когда IP-адрес появляется в файле журнала, Denyhosts открывает файл hosts.deny и считывает все, что соответствует адресу. Каждый раз. Ничто не кешируется в памяти. Если у вас огромный файл hosts.deny и вы подвергаетесь множеству проверок (много записей в файле журнала), Denyhosts становится процессором, считывающим данные и перечитывающим файл hosts.deny для каждого отображаемого IP-адреса. Фигово.

Если вы включите поддержку iptables, Denyhosts будет создавать огромные, медленные списки заблокированных IP-адресов. Denyhosts не использует ipset или nftables для создания эффективных карт IP.

Ян Д. Аллен
источник