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

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/ OUTPUTpolicy на DROPничего не работает. Я предполагаю, что это потому, что пакеты WireGuard UDP, полученные на, wg0отбрасываются политикой?
  2. Если я все равно установлю политику и добавлю правило для ALLOWтрафика от/до wg0, то результатом будет то, что контейнер не сможет подключиться ни к чему через eth0, а будет принимать только FORWARDтрафик от wg0?
  3. Правило, разрешающее RELATED,ESTABLISHEDтрафик через, wg0должно соответствовать только трафику, который является ответом на TCP:445 или ICMP:echo-request. Нет необходимости быть более конкретным (например, соответствующий порт/протокол), верно?
  4. Правило ALLOW, регулирующее эхо-ответы, не нужно, поскольку менее конкретное правило, разрешающее RELATED,ESTABLISHEDтрафик выше, будет соответствовать ему, верно?
  5. При всей фильтрации в FORWARDцепочке я предполагаю, что мне не нужно фильтровать цепочку natтаблиц POSTROUTING, поскольку любой трафик, который не предназначен для NAS ни по TCP:445, ни по ICM:echo-request, в любом случае не дойдет "до этого места". Это верно?

решение1

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

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

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

Схема обработки iptables

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

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

Связанный контент