Назад | Перейти на главную страницу

Предотвращение - большое количество неудачных попыток входа с IP

Я использую сервер CentOS 6.3 и в настоящее время получаю электронные письма с заголовком «Большое количество неудачных попыток входа в систему с IP-адреса» с моего сервера каждые 15 минут или около того.

Конечно, с настройкой ниже это должно означать, что только человек, использующий (мой статический IP-адрес), должен иметь возможность даже попытаться войти в систему?

Если это так, то где эти удаленные неизвестные пользователи пытаются войти в систему, которая генерирует эти электронные письма?

Текущие меры безопасности:

sshd_config

user@static.ip.address

hosts.allow

ALL : <Static IP>

hosts.deny

ALL : ALL

iptables

iptables -I INPUT -s <Static IP> -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 22 -j REJECT

Я бы использовал Fail2Ban и укажите его в свой файл журнала ssh. Таким образом, если вы получаете указанное количество неудачных попыток с одного и того же IP-адреса, fail2ban автоматически добавляет правило брандмауэра для отбрасывания пакетов с этих IP-адресов в течение указанного вами периода времени.

Спереди одна маленькая деталь. Записи журнала, которые вы видите, выглядят так, как будто они происходят из hosts.deny, так как sshd "TCP-wrapped" (обычно в Linux). Подробную информацию смотрите man tcpd.

Используя правила брандмауэра, вы можете лучше настроить то, что попадает в журнал (sys). Так что это место для внесения вашего статического IP-адреса в белый список и в черный список для всех остальных.

Если вы хотите преобразовать существующие правила в iptables вы можете использовать следующий сценарий оболочки (замените PORTS и MYIP с переменными, соответствующими вашим потребностям):

#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
for port in $PORTS; do
        $IPT -I INPUT -p tcp --dport $port -s $MYIP -j ACCEPT
done

... или короче:

#!/bin/bash
IPT="echo /sbin/iptables"
MYIP=1.2.3.4
PORTS="22 443 8080"
$IPT -P INPUT DROP
$IPT -I INPUT -p tcp -m multiport --dports ${PORTS// /,} -s $MYIP -j ACCEPT

... или двумя жестко запрограммированными строками:

/sbin/iptables -P INPUT DROP
/sbin/iptables -I INPUT -p tcp -m multiport --dports 22,443,8080 -s 1.2.3.4 -j ACCEPT

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

Также имейте в виду, что вы можете промыть INPUT таблицу перед установкой политики, используя iptables -X INPUT.

Вышеупомянутое, объясненное в нескольких словах, устанавливает политику по умолчанию для INPUT стол к DROP а затем разрешает только TCP-соединения с указанными портами ($PORTS) с данного IP ($MYIP).


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

Я использовал следующие netfilter rules, как указано мной в более ранней публикации на ServerFault: Нормально ли получать сотни попыток взлома в день?

Я не буду здесь повторять правила, потому что они уже существуют на этот сайт. Однако вы должны помнить, что вы все равно будете получать сообщения журнала, пока IP-адрес не будет автоматически помещен в tarpit. В общем, я не думаю, что вам нужно так сильно беспокоиться о количестве попыток, учитывая сам ваш звук sshd конфигурация. Отрегулируйте время защиты от брезента, чтобы злоумышленники задержали нападавших дольше или начали действовать быстрее, но помните, что не блокируйте себя.

Кроме того, в недавнем прошлом я испытал и очень полюбил sshguard. Хотя многие сравнивают его с Fail2Ban, я думаю, что его область применения намного шире (также не ограничиваясь sshd). Этот инструмент может использовать различные средства для анализа журналов (непосредственно или после того, как средство системного журнала помещает его в файл) и различные средства для блокировки (например, netfilter/iptables).

Всякий раз, когда люди проявляли упорство в своих попытках, я ставил полные блокировки (брандмауэр).

Если раздражают только записи журнала, вы настраиваете logcheck (или другой инструмент), чтобы отфильтровать их или изменить порт, на который sshd связывает. Однако с точки зрения безопасности я считаю это змеиным маслом.

При такой конфигурации sshd будет по-прежнему сообщать о неудачных попытках в следующих строках:

Dec  3 00:56:35 servername sshd[31242]: refused connect from li471-78.members.linode.com (50.116.13.78)
Dec  3 00:56:40 servername sshd[31244]: refused connect from li471-78.members.linode.com (50.116.13.78)

Возможно, ваше предупреждение в журнале срабатывает по этому поводу? Проверьте свои журналы, чтобы убедиться, что это так.

Вы можете избавиться от этого, изменив чувствительность / шаблон поиска вашей функции оповещения.

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

Возможно, вас взломали.

Сделать rpm -Vv keyutils-libs как root на вашем сервере.

Вы видите 5? В таком случае одна из библиотек была заменена атакующей версией.

Более подробную информацию об атаке (возможно, с использованием cPanel) можно найти Вот.

Я использую это лицо, чтобы ограничить доступ к некоторым портам на моих серверах:

-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSHACCESS --rsource 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 20 --name SSHACCESS --rsource -j DROP

ты можешь играть с --seconds и --hitcounts чтобы соответствовать вашему контексту.

Также вы можете использовать более сложные правила, например, выбивание портов. в этом случае вы отправляете запросы (это может быть ping, tcp, telnet или что угодно), а затем система открывает, например, порт SSH на несколько секунд только для этого IP-адреса, и вы можете выполнить ssh на сервере. проверьте эту ссылку, чтобы реализовать это с iptables

это простой порт, постукивающий по порту 1000:

-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1000 -m recent --set --name KNOCKING --rsource
-A INPUT -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 5 --name KNOCKING --rsource -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP

теперь вы можете использовать ssh на своем сервере следующим образом:

telnet <ip> 1000 ; ssh <ip>

если вам нужна дополнительная помощь, дайте мне знать.

вы также можете использовать -m connlimit, чтобы ограничить количество неправильных попыток замедлить злоумышленников, как они объясняют здесь: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/.

Добавление исключений и / или разных таймингов для разных IP-блоков возможно и просто.

Я бы также подумал об изменении порта sshd по умолчанию на что-то необычное.

К счастью, у меня есть ситуация с местным интернет-провайдером, и я знаю, что мой платный статический IP-адрес будет никогда изменить без предварительного уведомления, так как мне нужно только внести изменения на сервер из этого места, поэтому я могу заблокировать весь доступ SSH за пределами этого места через iptables и более высокий порт ssh.

Поэтому я применил следующее изменение в sshd_config:

#example
Port 40000

а также создал iptables запись с моим статическим IP-адресом и портом ssh:

iptables -A INPUT -p tcp -s 1.1.1.1 --dport 40000 -j ACCEPT

Пока что, похоже, это помогло!