LINUX.ORG.RU
ФорумAdmin

Помогите понять работу iptables

 ,


0

1

Привет. Есть на сервере VPN Wireguard, в docker запущен DNS сервер pi-hole. Наружу проброшены порты 53 и 80 из докера, что бы DNS был доступен и его админка. Мне нужно что бы днс и админка были доступны только внутри VPN сети. Сейчас VPN отключен. Делаю с своего локалхоста

dig -t A ya.ru @<pi-hole-server-ip>

он отвечает нормально, резолвит адрес. Но я не понимаю почему, в правилах все кроме VPN и SSH закрыто вроде. При этом делаю на самом серваке куда я по ssh подключился

dig -t A ya.ru @<wireguard-interface-ip>
dig -t A ya.ru @<pi-hole-server-ip>
dig -t A ya.ru @127.0.0.1

не овечает. Одновременно такое

curl http://<pi-hole-server-ip>:80

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

# Generated by iptables-save v1.8.7 on Thu Aug 10 08:30:46 2023
*filter
:INPUT DROP [195:10870]
:FORWARD DROP [26:1870]
:OUTPUT ACCEPT [6821:537827]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp ! --dport 56777 -j DROP
-A INPUT -i eth0 -p udp -m udp ! --dport 51820 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 56777 -m recent --update --seconds 60 --hitcount 6 --name SSH --mask 255.255.255.255 --rsource -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 56777 -m recent --set --name SSH --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 51820 -j ACCEPT
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o br-a34535bd1500 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-a34535bd1500 -j DOCKER
-A FORWARD -i br-a34535bd1500 ! -o br-a34535bd1500 -j ACCEPT
-A FORWARD -i br-a34535bd1500 -o br-a34535bd1500 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-a34535bd1500 -o br-a34535bd1500 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-a34535bd1500 -o br-a34535bd1500 -p tcp -m tcp --dport 53 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-a34535bd1500 -o br-a34535bd1500 -p udp -m udp --dport 53 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i br-a34535bd1500 ! -o br-a34535bd1500 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o br-a34535bd1500 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Thu Aug 10 08:30:46 2023
# Generated by iptables-save v1.8.7 on Thu Aug 10 08:30:46 2023
*nat
:PREROUTING ACCEPT [68541:9815794]
:INPUT ACCEPT [41:2701]
:OUTPUT ACCEPT [2043:106845]
:POSTROUTING ACCEPT [2014:104848]
:DOCKER - [0:0]
-A PREROUTING -i eth0 -p udp -m multiport --dports 123,1194 -j REDIRECT --to-ports 51820
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a34535bd1500 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.2/32 -d 172.18.0.2/32 -p tcp -m tcp --dport 80 -j MASQUERADE
-A POSTROUTING -s 172.18.0.2/32 -d 172.18.0.2/32 -p tcp -m tcp --dport 53 -j MASQUERADE
-A POSTROUTING -s 172.18.0.2/32 -d 172.18.0.2/32 -p udp -m udp --dport 53 -j MASQUERADE
-A DOCKER -i br-a34535bd1500 -j RETURN
-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i br-a34535bd1500 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.18.0.2:80
-A DOCKER ! -i br-a34535bd1500 -p tcp -m tcp --dport 53 -j DNAT --to-destination 172.18.0.2:53
-A DOCKER ! -i br-a34535bd1500 -p udp -m udp --dport 53 -j DNAT --to-destination 172.18.0.2:53
COMMIT
# Completed on Thu Aug 10 08:30:46 2023

На всякий случай маршрутизация

default via 193.42.36.1 dev eth0 onlink 
10.156.12.0/24 dev wg0 proto kernel scope link src 10.156.12.1 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.18.0.0/16 dev br-a34535bd1500 proto kernel scope link src 172.18.0.1 
193.42.36.0/24 dev eth0 proto kernel scope link src 193.42.36.76 

Там еще wireguard запущен, так что есть таблицы маршрутизации его стандартные.

★★

Последнее исправление: leave (всего исправлений: 1)

Как выяснилось для того что бы дебажить iptables не надо ничего ставить, есть простая трассировка, можно хоть все, хоть, что надо

iptables -t raw -A OUTPUT -p icmp -j TRACE
iptables -t raw -A PREROUTING -p icmp -j TRACE
xtables-monitor --trace

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

i3draven ★★
() автор топика
Ответ на: комментарий от i3draven

Так же, может кто искать будет. За счет нормального трассировщика я за 10 минут нашел ответ. Суть в MTU, когда поставил 1200, все запахало. Сам ответ нашел тут: https://superuser.com/questions/1558828/tcp-handshake-failed-after-forward-lan-connection-through-vpn Как только понял, что ACK проходит, а потом тишина нагуглить не составило труда. Чуть позже просто ICMP на серваке разрешу.

А спецов с гонором не люблю я, не стоят они того как себя ведут.

i3draven ★★
() автор топика
Последнее исправление: i3draven (всего исправлений: 1)