WireGuard разрешает доступ к одной службе в сети

Я запускаю сервер WireGuard на своем Raspberry Pi, используя образ https://github.com/linuxserver/docker-wireguard. Я хочу разрешить одноранговым узлам делать две вещи:

  1. Подключаться к одному NAS через SMB
  2. Пинговать тот же NAS

Я написал следующие правила iptables для архивации этого(wg0интерфейса WireGuard, eth0один «к» моей сети):

# Reset (flush) rules
iptables -t nat -F
iptables -F

# Allow WireGuard traffic
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT

# Deny any forward traffic by default
iptables --policy FORWARD DROP

# Allow SAMBA traffic to NAS
NAS="192.168.178.23/32"
iptables -A FORWARD -i wg0 -p tcp --dport 445 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP echo request
iptables -A FORWARD -i wg0 -p icmp --icmp-type 8 -d "$NAS" -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o wg0 -p icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT tunnel IP to internal IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Они работают, поэтому при подключении через WireGuard я могу пропинговать и подключить NAS через SMB, но я не могу пропинговать любую другую службу в сети или получить доступ к HTTP-интерфейсу NAS.

Однако у меня есть несколько вопросов, чтобы точно понять, что я сделал.:

  1. При установке политики INPUT/ OUTPUTна DROPничего не работает. Я предполагаю, что это связано с тем, что пакеты WireGuard UDP, полученные на wg0, отбрасываются политикой?
  2. Если я все равно установлю политику и добавлю правило к ALLOWтрафику из/в wg0, эффектом будет то, что контейнер не сможет подключиться ни к чему через eth0и только FORWARDтрафик из wg0?
  3. Правило, разрешающее RELATED,ESTABLISHEDтрафик через wg0, должно соответствовать только трафику, полученному в ответ на TCP:445 или ICMP:echo-запрос. Нет необходимости быть более конкретным здесь (, например. соответствующий порт/протокол), верно?
  4. Правило ALLOWдля эхо-ответов не требуется, потому что менее конкретное правило, разрешающее RELATED,ESTABLISHEDтрафик над ним, будет совпадать перед ним, верно?
  5. Со всей фильтрацией в цепочке FORWARDя предполагаю, что мне не нужно фильтровать цепочку natтаблиц POSTROUTING, потому что любой трафик, который не предназначен для NAS по любой TCP:445 или ICM:echo-request не зайдут так далеко. Это правильно?
0
задан 15 September 2021 в 11:38
1 ответ

Кратко отвечу на ваши вопросы:

  1. Да
  2. Используются цепочки INPUT/OUTPUTдля подключений к/от локальных сокетов на все интерфейсы (lo, eth0, wg0и т. д. ). Обычно вы не хотите блокировать весь исходящий трафик по умолчанию, потому что в конечном итоге вы потратите время на устранение неполадок, которые вы обычно считаете само собой разумеющимся (DNS, DHCP, NTP, различные процессы, использующие петлевые соединения и т. д.)
  3. Да. Обычно можно просто разрешить все RELATED,ESTABLISHEDбез каких-либо дополнительных условий (, если вы уже разрешили соединение в одну сторону, симметричные ответы, идущие в обратном направлении, тоже должны быть приемлемыми)
  4. Да
  5. Да

I думаю, что эта блок-схема обработки iptables также поможет вам лучше понять, как это работает:

iptables Processing Flowchart

Вот как я бы написал ваши правила:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# INPUT chain of filter table:

# drop known bad packets
iptables -A INPUT -m state --state INVALID -j DROP
# accept responses to established connections
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accept ICMP packets
iptables -A INPUT -p icmp -J ACCEPT
# accept loopback connections
iptables -A INPUT -i lo -J ACCEPT
# accept connections to WireGuard listen port
iptables -A INPUT -p udp --dport 51820 -J ACCEPT

# FORWARD chain of filter table:

# drop known bad packets
iptables -A FORWARD -m state --state INVALID -j DROP
# forward responses to established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# forward ICMP packets from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p icmp -J ACCEPT
# forward SMB connections from WireGuard network to NAS
iptables -A FORWARD -i wg0 -d 192.168.178.23 -p tcp --dport 445 -J ACCEPT

# POSTROUTING chain of nat table:

# masquerade all packets forwarded to LAN
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
1
ответ дан 18 September 2021 в 00:52

Теги

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