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

Блокировка IP от подключения

У меня проблема с моим веб-сервером Apache, где есть IP-адрес, а не подключение к моему серверу, использование большого количества соединений и невозможность умереть, что в конечном итоге приводит к тайм-ауту моего веб-сервера. Соединение останется в состоянии SYN_SENT, если я проверю использование

netstat -netapu

Я даже очищаю свои iptables и использую основные правила, но это все равно не работает. IP будет подключен, когда я запущу свой Apache

Основные правила, которые я использую:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

iptables -A INPUT -s 89.149.244.117 -j REJECT

iptables -A OUTPUT -s 89.149.244.117 -j REJECT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

Жирная часть - это правило.

Не уверен, что это связано, но значение tcp_syncookies равно 1.

Кто-нибудь может указать на мою ошибку? Есть ли способ заблокировать это навсегда.

Можете ли вы показать нам результат

iptables-save

? Может быть, порядок правил не такой, как вы думаете. затем

iptables -A OUTPUT -s 89.149.244.117 -j REJECT

наверное следует читать:

iptables -A OUTPUT -**d** 89.149.244.117 -j REJECT

Кстати, почему REJECT, а не DROP? Затем, если вы используете модуль состояния, вы должны написать:

iptables -A INPUT  -m state --state NEW -p tcp --dport 80 -j ACCEPT

И обратите внимание, что если ваш сервер находится за балансировщиком нагрузки в режиме DSR, модуль состояния не будет работать правильно.

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

Я не знаю, как это выглядело до того, как вы добавили эти два правила, но теперь вы можете отправить первую часть трехстороннего рукопожатия (SYN), но вы не можете получить вторую часть (SYN / ACK), и это оставит соединение в состоянии SEN_SENT для каждой попытки.

Я подозреваю, что вы скопировали / вставили первое правило для создания второго и изменили INPUT на OUTPUT, но забыли изменить -s к -d. Знаю, потому что сам делал это не раз.

вам нужно попробовать утилиту "FAIL2BAN" linux, которая блокирует большинство таких атак грубой силы. Fail2Ban поддерживает защиту от атак методом перебора для ssh, apache и многих других сервисов. Если, например, IP-адрес пытается установить огромное количество одновременных подключений, fail2ban заблокирует его, автоматически добавив (а через некоторое время также удалив) этот IP-адрес с помощью iptables.