Вопрос или проблема
Я использую эти правила в /etc/ufw/before.rules
# Ограничение до 20 одновременных соединений на порту 80 с одного IP
-A ufw-before-input -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
-A ufw-before-input -p tcp --syn --dport 443 -m connlimit --connlimit-above 20 -j DROP
# Ограничение до 20 соединений на порту 80 каждые 2 секунды с одного IP
-A ufw-before-input -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A ufw-before-input -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 2 --hitcount 20 -j DROP
-A ufw-before-input -p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set
-A ufw-before-input -p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 2 --hitcount 20 -j DROP
Я хочу добавить правило, которое заставит локальные IP-адреса системы не подвергаться ограничению соединений или скорости. Например, у меня много cron задач, которые подключаются к серверу внутри сервера. Мне нужно предотвратить их сбои, когда одновременно выполняется слишком много задач.
ОБНОВЛЕНИЕ С РЕШЕНИЕМ: Мне кажется, что нужно было просто добавить больше правил в before.rules вместо командной строки ufw, чтобы переопределить ограничение соединений для конкретных IP. Я не могу пока ответить на свой вопрос.
Я просто добавил эти правила выше правил connlimit:
-A ufw-before-input -p tcp --dport 80 -s 127.0.0.1 -j ACCEPT
-A ufw-before-input -p tcp --dport 443 -s 127.0.0.1 -j ACCEPT
Я нашел другое решение с использованием iptables.
Команда iptables для ограничения соединений:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP
Вы можете исключить один IP:
iptables -A INPUT -p tcp --syn --dport 80 -d ! 127.0.0.1 -m connlimit --connlimit-above 20 -j DROP
Надеюсь, это будет полезно для вас.
Во-первых, вы не предоставили достаточно информации, чтобы мы могли дать вам конкретный ответ.
Во-вторых, это правила ufw. ufw — это фронтенд для iptables, и вы можете управлять правилами из командной строки, используя ufw
, или через графический интерфейс, gufw.
Использование iptables напрямую будет конфликтовать с вашими правилами ufw, поэтому используйте один инструмент или другой.
Вам нужно опубликовать ваши правила ufw. В общем, вам нужно будет разрешить свою локальную сеть перед правилами, которые вы указали. Как вы управляете своими правилами ufw? Командная строка? Gufw?
Для ufw что-то вроде этого
sudo ufw allow from 192.168.0.0/24
Смотрите также:
http://blog.bodhizazen.com/linux/firewall-ubuntu-servers/
https://help.ubuntu.com/community/UFW
А для iptables http://bodhizazen.com/Tutorials/iptables
Ответ или решение
Чтобы разрешить определённым IP-адресам проходить мимо ограничений по количеству подключений, установленных с помощью connlimit
в UFW (Uncomplicated Firewall), вам нужно добавить правила, которые будут указывать на то, что для этих IP-адресов следует игнорировать ограничения. Вот как это можно сделать на практике.
1. Добавление правил в файле конфигурации UFW
Когда вы создаёте правила для UFW, важно размещать их в правильном порядке. Правила, разрешающие трафик от определённых IP-адресов, должны располагаться выше правил, которые устанавливают ограничения. Это гарантирует, что соединения от разрешённых IP не будут блокироваться в последующих правилах. Вам необходимо отредактировать файл /etc/ufw/before.rules
и добавить следующие строки:
# Разрешить подключения от локального IP
-A ufw-before-input -p tcp --dport 80 -s 127.0.0.1 -j ACCEPT
-A ufw-before-input -p tcp --dport 443 -s 127.0.0.1 -j ACCEPT
# Другие локальные IP (например, `192.168.1.100`)
-A ufw-before-input -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
-A ufw-before-input -p tcp --dport 443 -s 192.168.1.100 -j ACCEPT
2. Перезапуск UFW
После внесения изменений в файл вы должны перезапустить UFW, чтобы новые правила вступили в силу. Это можно сделать с помощью команды:
sudo ufw reload
3. Использование iptables для исключения IP-адресов
Если вы предпочитаете работать напрямую с iptables
, вы можете добавить правила, исключающие определённые IP-адреса от ограничений. Например, если вы хотите, чтобы IP-адрес 127.0.0.1
не подпадал под ограничения, вы можете использовать следующие команды:
iptables -A INPUT -p tcp --syn --dport 80 -d ! 127.0.0.1 -m connlimit --connlimit-above 20 -j DROP
4. Рекомендации
- Убедитесь, что все правила добавляются в правильном порядке, чтобы избежать блокировки легитимного трафика.
- Проверьте текущие правила с помощью команды
sudo ufw status
илиiptables -L -n -v
, чтобы убедиться, что они работают как ожидается. - Помните, что правило с наибольшим приоритетом (выше в списке) будет выполняться первым, так что размещайте свои новые правила соответственно.
Таким образом, вы можете эффективно исключить определенные IP-адреса из ограничений по количеству подключений, используя как UFW, так и iptables. Если у вас возникли дополнительные вопросы, не стесняйтесь их задавать.