Проблема с iptables для рабочего стола Ubuntu-20.04.3

Я хочу проверить некоторые правила iptables, правило состоит в том, чтобы запрещать весь исходящий трафик, кроме DNS.
поэтому я изменил правило OUTPUT по умолчанию для таблицы фильтров на DROP с помощью этой команды.

      sudo iptables -t filter -P OUTPUT DROP

затем я добавил это правило к ACCEPT DNS-трафику.

      sudo iptables -t filter -A OUTPUT -p udp --dport 53 -o ens33 -j ACCEPT

и я запускаю эту команду, чтобы проверить политику.

      nslookup google.com

и перед запуском этой команды я запускаю wireshark на своей виртуальной машине и хосте.
затем команда nslookup потратила некоторое время и выдала мне это сообщение.

время соединения истекло; нет доступа к серверам

а wireshark (на вм и на хосте) не перехватывал никакие пакеты.

поэтому я удалил это правило и добавил другое.

      sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

и сделал то же самое, что и раньше.
то же сообщение появляется снова, но wireshark (на виртуальной машине и на хосте) перехватывает пакеты (запрос и ответ).

затем я удалил это правило и добавил следующее правило.

      sudo iptables -t filter -A OUTPUT -p udp -j ACCEPT

и сделал то же самое, что и раньше.
на этот раз команда nslookup возвращает результат, и wireshark перехватывает пакеты.

Так почему это происходит?

перед этими тестами я установил snort (на другой виртуальной машине) и попытался сбросить несколько пакетов, но это не сработало.
пакеты регистрируются, но не отбрасываются.
Я не знаю, связаны эти случаи или нет.

1 ответ

Ваш вопрос действительно хороший. Сообщений об ошибках нет, и все выглядит правильно с помощью различных инструментов запроса iptables.

Однако вам необходимо разрешить трафик к/от локального петлевого интерфейса, вот. Так что вам нужно еще одно правило. Кстати, вам не нужно -t filterчасть. Итак, я изменил сетевой интерфейс моего тестового компьютера, и я использую tcpdump вместо wireshark, и у меня есть два запущенных экземпляра, один на lo и один на моем сетевом адаптере:

      sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -o br0 -j ACCEPT
sudo iptables -P OUTPUT DROP
nslookup google.com
Server:         127.0.0.53     <<<<<<< NOTE:
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   google.com
Address: 142.251.33.78
Name:   google.com
Address: 2607:f8b0:400a:806::200e

а также:

      doug@s19:~/iptables/tmp$ cat c06.txt
2021-11-21 09:41:07.851723 IP 192.168.111.136.37847 > 192.168.111.1.53: 52661+ [1au] A? google.com. (39)
2021-11-21 09:41:07.879409 IP 192.168.111.1.53 > 192.168.111.136.37847: 52661 1/0/1 A 142.251.33.78 (55)
2021-11-21 09:41:07.884300 IP 192.168.111.136.52279 > 192.168.111.1.53: 58740+ [1au] AAAA? google.com. (39)
2021-11-21 09:41:07.899157 IP 192.168.111.1.53 > 192.168.111.136.52279: 58740 1/0/1 AAAA 2607:f8b0:400a:806::200e (67)

а также:

      doug@s19:~/iptables/tmp$ cat l01.txt
2021-11-21 09:41:07.850815 IP 127.0.0.1.51470 > 127.0.0.1.51470: UDP, length 1
2021-11-21 09:41:07.851625 IP 127.0.0.1.46738 > 127.0.0.53.53: 31736+ A? google.com. (28)
2021-11-21 09:41:07.879486 IP 127.0.0.53.53 > 127.0.0.1.46738: 31736 1/0/0 A 142.251.33.78 (44)
2021-11-21 09:41:07.884223 IP 127.0.0.1.35841 > 127.0.0.53.53: 58878+ AAAA? google.com. (28)
2021-11-21 09:41:07.899259 IP 127.0.0.53.53 > 127.0.0.1.35841: 58878 1/0/0 AAAA 2607:f8b0:400a:806::200e (56)

Так почему сервер кажется локальным? По умолчанию Ubuntu запускает локальный резолвер для буферизации DNS-записей и тому подобного:

      doug@s19:~$ sudo ss -tulpn | grep ":53"
Netid  State  Recv-Q  Send-Q         Local Address:Port  Peer Address:Port                         Process
udp    UNCONN  0       0              127.0.0.53%lo:53            0.0.0.0:*      users:(("systemd-resolve",pid=834,fd=12))
tcp    LISTEN  0       4096           127.0.0.53%lo:53            0.0.0.0:*      users:(("systemd-resolve",pid=834,fd=13))

см. также результаты sudo systemctl status systemd-resolvedи соответствующие справочные страницы .

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