ufw route allow in on wg0 out on wg0 to 10.0.0.6/32

Я использую WireGuard VPM для обратного подключения к домашнему серверу через внешний узел входа. На этом узле входа я пытаюсь добавить правило брандмауэра с помощью ufw. Его цель - разрешить маршрутизацию только к одному и только одному определенному IP (10.0.0.6).

Итак, базовая установка такова:

10.0.0.1    entry node (publicly available, responsible for routing packets inside the VPN)
10.0.0.6    home server (should be reachable for any machine in the VPN)
10.0.0.13   any other peer (should not be reachable for other peers, therefor the ufw rule)

Маршрутизация пакетов через узел входа работает нормально, но правило брандмауэра не запрещает другие целевые IP.

Моя установка выглядит следующим образом:

user@host:~$ sudo ufw route allow in on wg0 out on wg0 to 10.0.0.6/32
Rule added

->

user@host:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
...
[firewall rules]
...

10.0.0.6 on wg0        ALLOW FWD   Anywhere on wg0  

(Примечание: я удалил другие правила. Они не связаны с маршрутизацией, только правила ALLOW IN / LIMIT IN)

Вышеприведенный вывод четко показывает Default: ... deny (routed), в то время как следующий вывод утверждает политику "ACCEPT" во всех цепочках.

user@host:~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Удивительно, но следующая команда показывает другое:

user@host:~$ sudo iptables -L
Chain INPUT (policy DROP)
...        

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ufw-before-logging-forward  all  --  anywhere             anywhere            
ufw-before-forward  all  --  anywhere             anywhere            
ufw-after-forward  all  --  anywhere             anywhere            
ufw-after-logging-forward  all  --  anywhere             anywhere            
ufw-reject-forward  all  --  anywhere             anywhere            
ufw-track-forward  all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
...

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

Что бы я ни пробовал до сих пор, я все еще могу пинговать, например, 10.0.0.13 с домашнего сервера.

user@home-server:~$ ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=58.0 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=51.7 ms

Я ожидал, однако, что этот пакет ping не маршрутизируется и поэтому возвращает таймаут или что-то подобное.

Мой вопрос в том, ожидается ли такое поведение, и если да, то как мне создать соответствующее правило в ufw?

Как ни странно, я не смог найти ответ в далекой интернет-сети. Но это должно быть просто, поэтому я снова погрузился в manpage ufw. Если у вас есть идеи, дайте мне знать!

-1
задан 29 April 2021 в 04:51
1 ответ

Это ожидаемое поведение. Попробуйте использовать для проверки что-нибудь другое, кроме ping. Например, если у вас есть веб-сервер, работающий на порту 80 порта 10.0.0.13, попробуйте запустить curl 10.0.0.13 на домашнем сервере (10.0 .0.6).

Ваша команда UFW ufw route allow in on wg0 out on wg0 to 10.0.0.6/32 верна. Это позволит пересылать все входящие пакеты, отправленные на интерфейс wg0 хоста и предназначенные для 10.0.0.6, через интерфейс wg0 на 10.0. 0,6 . UFW также автоматически устанавливает правило брандмауэра, которое разрешает обратное для уже установленных соединений (т.е. пересылать пакеты обратно из 10.0.0.6 к исходному источнику установленного соединения).

UFW также всегда разрешает пересылку определенных типов пакетов ICMP (таких как тип 8, «эхо-запрос», используемый запросами ping) через все интерфейсы хоста. Таким образом, независимо от установленных вами правил UFW, ваш входной узел будет пересылать пакеты с ping на любые другие хосты, к которым он может подключиться.

Чтобы запретить UFW пересылать (IPv4) пакеты ping по умолчанию, отредактируйте файл /etc/ufw/before.rules и закомментируйте (т.е. добавьте # в начало этой строки:

#-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

Для ping по IPv6 отредактируйте файл /etc/ufw/before6.rules и закомментируйте следующие строки:

#-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-request -j ACCEPT
#-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-reply -j ACCEPT

Затем перезапустите UFW (например, sudo systemctl перезапустите ufw).

Используйте sudo iptables-save | grep -i forward, чтобы проверить правила iptables (IPv4), которые теперь применяются к вашей цепочке FORWARD. Перед комментированием приведенной выше строки вывод будет выглядеть следующим образом:

:FORWARD DROP [0:0]
:ufw-after-forward - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-reject-forward - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-track-forward - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-logging-forward - [0:0]
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-skip-to-policy-forward -j DROP
-A ufw-user-forward -d 10.0.0.6/32 -i wg0 -o wg0 -j ACCEPT

После комментирования строки и перезапуска UFW вывод больше не должен содержать -A ufw-before-forward -p icmp -m icmp - -icmp-type 8 -j ПРИНЯТЬ правило .

1
ответ дан 11 May 2021 в 23:55

Теги

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