У меня проблема с моим веб-сервером 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.