Как Ограничить Соединения с 1 подключением на 5 секундах? (IPTABLES)

Я веду сервер в игре, которые повредили AntyCheat и если существует много подключений в одно время, это повреждает целый сервер, и никто не может соединиться. Таким образом, решением для него являются предельные соединения в одно время к 1 подключению на 5 секундах с помощью IPTables. Это должно быть похожим: 1 плеер-> 5 секунд-> 2 плеера-> 5 секунд (Если одно подключение, это должно остановить другие подключения на 5 секунд),

2
задан 23 November 2018 в 23:53

2 ответа

Для этого ответа в качестве примера протокол является tcp, и другая информация была взята из комментариев. Корректируйтесь соответственно.

Этот первый пример даст в среднем 5 секунд между соединениями только:

sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp -m limit --limit 12/minute --dport 12871 -j ACCEPT
sudo iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 12871 -j DROP

Этот второй пример потребует точно 5 секунд между попытками подключения без любой другой попытки НОВОГО подключения во время этого 5 секунд. т.е. попытка во время тех 5 секунды сбросит счетчик времени.

sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --update --hitcount 1 --seconds 5 --name LIMIT_NEW_RATE -j DROP
sudo iptables -A INPUT -i eth0 --protocol tcp --destination-port 12871 -m state --state NEW -m recent --mask 0.0.0.0 --set --name LIMIT_NEW_RATE -j ACCEPT

Необходимо будет определить, куда это правило должно пойти в полном контексте правил iptables.

1
ответ дан 2 December 2019 в 03:30

Используя connlimit и limit модуль:

sudo iptables -A INPUT -p tcp --syn -i eth0 --dport 12871:12881 -m connlimit --connlimit-above 1 --connlimit-mask 24 -j REJECT --reject-with tcp-reset    
sudo iptables -A INPUT --dport 12871:12881 -m state --state RELATED,ESTABLISHED -m limit --limit 12/minute --limit-burst 1 -j ACCEPT 
sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 12871:12881 -i eth0 -m state --state NEW,RELATED,ESTABLISHED -m recent --update --seconds 5 --hitcount 1 -j DROP

Затем примените новые правила:

sudo iptables-save > /etc/iptables/rules.v4

Установите персистентный iptables пакет:

sudo apt install iptables-persistent
sudo service netfilter-persistent reload

Примечание:

  • Измените имя интерфейса на Ваш
  • Добавьте свой диапазон портов
  • Это добавляет к существующему правилу, таким образом, можно использовать -I поместить эти правила в передней стороне.
1
ответ дан 2 December 2019 в 03:30

Другие вопросы по тегам:

Похожие вопросы: