У меня выделенный сервер с 32 ГБ ОЗУ. Все работает хорошо, пока некоторые игроки не пришли на мой сервер. У меня было очень высокое использование полосы пропускания восходящей линии связи (более 150 Мбит / с). Я посмотрел на netstat с помощью следующей команды:
netstat -an | grep tcp | awk '{print $5}' | cut -f 1 -d : | sort | uniq -c | sort -n
Он показывает тысячи соединений для нескольких IP-адресов: я использовал следующие допустимые правила для ограничения соединений на IP:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT
Я сохранил эти правила и эти правила являются первыми в списке в iptables. Я перезапустил систему, чтобы закрыть все соединения и восстановил правила iptable. Поставьте сервер в онлайн. Сервер был почти мертв, и снова были тысячи соединений. У меня установлен UFW, и открыта только пара портов.
Что я могу сделать, чтобы остановить это? Как можно убить установленные соединения на IP? КСТАТИ. все ips замаскированы и поддельные.
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
1 CLOSING
1 established)
1 Foreign
2 SYN_SENT
7 FIN_WAIT2
16 LISTEN
21 CLOSE_WAIT
48 LAST_ACK
209 SYN_RECV
284 FIN_WAIT1
772 ESTABLISHED
35426 TIME_WAIT
Попробуйте это:
/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --set
/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
первая строка будет Наблюдать IP, соединяющийся с Вашим интерфейсом eth.
вторая строка проверит, является ли соединение новым в течение прошлых 60 секунд и если поток пакетов выше, чем десять, и раз так это отбросит соединение.
Для блокирования IP-адреса необходимо ввести:
/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
, Если Вы просто хотите блокировать доступ к одному порту от IP, необходимо ввести:
/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port 25 -j DROP
вышеупомянутое правило отбросит все пакеты, прибывающие из IP xxx.xxx.xxx.xxx для портирования 25.