У меня АТС (телефонная система называется Астерсик), который работает с udp и tcp. Иногда я получаю недействительный запрос с некоторых IP-адресов, которые хочу заблокировать. Я не могу заблокировать эти запросы, пока не перезагрузу компьютер. Я думаю, причина в том, что UFW не блокирует установленные соединения..
Представим, что я получаю вредоносный запрос с IP-адреса 1.2.3.4
. Затем мне нужно заблокировать этот запрос, выполнив команду:
sudo ufw insert 1 deny from 1.2.3.4 to any
мне нужно insert 1
так что правило выполняется раньше других.
В любом случае, хотя я выполняю эту команду, я все равно вижу, что мой компьютер отвечает на 1.2.3.4
. Проблема в том, что соединение уже установлено, поэтому ufw не будет отбрасывать эти пакеты, пока эти соединения не будут закрыты.
Нашел временное решение:
1) открываю nano /etc/ufw/before.rules
2) Прокомментируйте строки:
(На картинке строки не комментируются. Но прокомментируйте все, что находится внутри красного кружка)
3) Перезагрузите брандмауэр ufw disable
затем ufw enable
Если я прокомментирую эти строки, мой брандмауэр будет работать так, как я хочу. Он сразу же заблокирует соединения!
Проблема в том, что комментирование этих строк приводит к тому, что мой DNS перестает работать Другими словами, когда я выполняю ping google.com
я вижу uknown host google.com
Почему dns перестает работать, когда я комментирую эти строки? Короче, мне это нужно, когда я выполняю sudo ufw insert 1 deny from 1.2.3.4 to any
Я больше не получаю запросов с этого IP !. Я не могу позволить себе перезагружать компьютер каждый раз, когда хочу заблокировать IP-адрес.
Тоно,
ufw - это интерфейс для iptables. По сути, вы спрашиваете, почему DNS перестает работать, когда вы перестаете принимать связанные, установленные соединения. conntrack отслеживает ваши соединения. Если трафик соответствует записи в conntrack, то он установлен. Если установленное соединение создает новое соединение, оно становится связанным. Если трафик новый и не установлен или не связан, то он новый.
Если соединение уже установлено, вам нужно вставить инструкцию отбрасывания в начало цепочки. Отредактируйте /etc/ufw/before.rules, чтобы у вас был раздел блокировки перед правилами, которые вы прокомментировали. Добавить запись -A ufw-before-input -s 1.2.3.4 -j DROP
там. Затем используйте sudo ufw reload
.
Если у вас все еще есть проблемы с этим, подумайте об использовании iptables вместо ufw, потому что ufw является интерфейсом для iptables и не включает все его варианты.
https://www.cyberciti.biz/faq/how-to-block-an-ip-address-with-ufw-on-ubuntu-linux-server/
UDP - это протокол без отслеживания состояния, но ядро Linux по-прежнему отслеживает IP и номера портов для него в течение 30 секунд, чтобы определить установленный и связанный трафик. (30 секунд или значение в /proc/sys/net/netfilter/nf_conntrack_udp_timeout
) - Ссылка ServerFault: Iptables: "-p udp --state ESTABLISHED"
DNS работает через UDP, поэтому, если вы отправляете DNS-запрос и закомментировали правило, разрешающее связанный обратный трафик, вы не получите никакого ответа -> сломанный DNS.
Поскольку «состояние» UDP отслеживается в течение 30 секунд, ваша попытка вставить новое правило блокировки в начало INPUT не имеет никакого эффекта. "ufw-before-input" происходит первым и разрешает УСТАНОВЛЕННЫЙ трафик, прежде чем ваше правило INPUT увидит его и ОТКЛЮЧИТЕ.
Чтобы исправить это, вам необходимо:
Используйте что-то вроде conntrack, чтобы удалить отслеживаемую запись UDP для хоста, который вы хотите заблокировать, затем добавьте правило блокировки в брандмауэр. Установленного или связанного соединения не будет, поэтому блокировка вступит в силу немедленно. например Удалить определенные записи conntrack?
Измените правила брандмауэра так, чтобы вы выполняли УСТАНОВЛЕННОЕ, СВЯЗАННОЕ правило в правилах INPUT после ваших DROP, вместо того, чтобы делать это сначала.
Я не могу позволить себе перезагружать компьютер каждый раз, когда хочу заблокировать IP-адрес
Но вы можете позволить себе фильтровать 4 миллиарда IP-адресов по одному, блокируя их вручную? Это кажется неразумным. Используйте устройство IPS, используйте fail2ban.