LINUX.ORG.RU

iptables проброс портов, помогите разобраться с мистикой.

 , ,


1

1

Доброго времени суток!

Имеется Debian Stretch cat /etc/debian_version

9.4

uname -a

Linux srv-vpn2 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux

На сервере 4 сетевых интерфейса:

ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever

2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:50:56:a4:84:33 brd ff:ff:ff:ff:ff:ff inet 192.168.10.21/24 brd 192.168.10.255 scope global ens192 valid_lft forever preferred_lft forever

3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:50:56:a4:1e:e8 brd ff:ff:ff:ff:ff:ff inet 11.22.33.44/19 brd 11.22.33.55 scope global ens224 valid_lft forever preferred_lft forever

4: ens256: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:50:56:a4:1b:49 brd ff:ff:ff:ff:ff:ff inet 10.10.2.4/29 brd 10.10.2.7 scope global ens256 valid_lft forever preferred_lft forever

5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 172.16.124.1 peer 172.16.124.2/32 scope global tun0 valid_lft forever preferred_lft forever

Где: ens192 это LAN, ens224 WAN, ens256 DMZ, tun0 сеть для VPN клиентов.

Мне нужно настроить проброс для :80 и :443 порта к серверу который находится в DMZ 10.10.2.5, с ip адресов филиалов 1.1.1.1 и 2.2.2.2.

Проброс с ip 1.1.1.1 работает корректно, а с ip 2.2.2.2 пробрасывается только порт 80, 443 порт режектится на шлюзе.

Делал проброс для роутера который в и-нет через сим карту ходит, все работает. (узнавал внешний ip роутера 3.3.3.3, прописывал в правила, тестировал, все ок).

Если открыть проброс для любого source, то тоже всё работает хорошо. Отрывал всему и-нету таким правилами:

-A PREROUTING -i ens224 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5

-A PREROUTING -i ens224 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5

А если задать нужные source (1.1.1.1, 2.2.2.2, 3.3.3.3), то c 2.2.2.2 443 порт режектится, 80-й работает норм.

-A PREROUTING -i ens224 -s 2.2.2.2 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5:80

-A PREROUTING -i ens224 -s 2.2.2.2 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5:443

Запускал tcpdump на шлюзе при запросе сайта по 443 порту пишет reject 443 порта.

Если смотреть access логи на 10.10.2.5, то обращение по 443 с 2.2.2.2 до сервера не доходит при ограниченном доступе, 80 порт открыт нормально в логах обращение вижу, с другого офиса и с мобильного роутера запросы ходят нормально, в access логах все есть. Web сервер nginx.

Уже и в гугле на эту тему читал, и доки проброса смотрел, правила правил по разному, апдейты ставил, ребутил, - ничего не помогает. Помогите разобраться плиз!!!

Ну и сами правила iptables: ----------------------------------------------------------------

iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target prot opt source destination

DNAT tcp  — 1.1.1.1 0.0.0.0/0 tcp dpt:80 to:10.10.2.5:80

DNAT tcp  — 1.1.1.1 0.0.0.0/0 tcp dpt:443 to:10.10.2.5:443

DNAT tcp  — 2.2.2.2 0.0.0.0/0 tcp dpt:80 to:10.10.2.5:80

DNAT tcp  — 2.2.2.2 0.0.0.0/0 tcp dpt:443 to:10.10.2.5:443

DNAT tcp  — 3.3.3.3 0.0.0.0/0 tcp dpt:80 to:10.10.2.5:80

DNAT tcp  — 3.3.3.3 0.0.0.0/0 tcp dpt:443 to:10.10.2.5:443

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Chain POSTROUTING (policy ACCEPT)

target prot opt source destination

SNAT all  — 172.16.124.0/24 0.0.0.0/0 to:192.168.10.21

SNAT all  — 172.16.124.0/24 0.0.0.0/0 to:10.10.2.4

SNAT all  — 172.16.124.0/24 0.0.0.0/0 to:1.1.1.1

SNAT all  — 10.10.2.5 0.0.0.0/0 to:1.1.1.1

SNAT tcp  — 0.0.0.0/0 10.10.2.5 tcp dpt:80 to:10.10.2.5:80

SNAT tcp  — 0.0.0.0/0 10.10.2.5 tcp dpt:443 to:10.10.2.5:443

iptables -L -n -v

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

0 0 ACCEPT all  — lo * 0.0.0.0/0 0.0.0.0/0

47 1880 REJECT all  — * * 0.0.0.0/0 0.0.0.0/0 state INVALID reject-with icmp-port-unreachable

7602 1215K ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

183 11906 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 limit: avg 1/sec burst 10

1 60 ACCEPT tcp  — ens192 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW

1 70 ACCEPT udp  — * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 state NEW

6215 1664K REJECT all  — * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

6346 4508K ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

81 5400 ACCEPT all  — * * 172.16.124.0/24 0.0.0.0/0

0 0 ACCEPT all  — * * 192.168.10.0/24 172.16.124.0/24

0 0 ACCEPT tcp  — * * 10.10.2.2 172.16.124.0/24 tcp dpt:4307

0 0 ACCEPT tcp  — * * 10.10.2.2 172.16.124.0/24 tcp dpt:40443

0 0 ACCEPT icmp — * * 10.10.2.2 172.16.124.0/24 icmptype 8

0 0 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW

1 60 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW

0 0 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW,RELATED,ESTABLISHED

2 104 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW,RELATED,ESTABLISHED

0 0 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

0 0 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:443

15 1014 ACCEPT all  — ens256 ens224 10.10.2.5 0.0.0.0/0

14 840 REJECT all  — * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 5393 packets, 2506K bytes)

pkts bytes target prot opt in out source destination

----------------------------------------- cat /etc/iptables.rules

# Generated by iptables-save v1.6.0 on Thu Jan 11 15:19:52 2018 *nat

:PREROUTING ACCEPT [3514:328059]

:INPUT ACCEPT [9:594]

:OUTPUT ACCEPT [38:2636]

:POSTROUTING ACCEPT [38:2636]

-A POSTROUTING -s 172.16.124.0/24 -o ens192 -j SNAT --to-source 192.168.10.21

-A POSTROUTING -s 172.16.124.0/24 -o ens256 -j SNAT --to-source 10.10.2.4

-A POSTROUTING -s 172.16.124.0/24 -o ens224 -j SNAT --to-source 1.1.1.1

-A POSTROUTING -s 10.10.2.5/32 -o ens224 -j SNAT --to-source 1.1.1.1

# Probros ports 80.443 1.1.1.1 --> 10.10.2.5 i obratno.

-A PREROUTING -i ens224 -s 1.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5:80

-A PREROUTING -i ens224 -s 1.1.1.1 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5:443

#-A PREROUTING -i ens224 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5

#-A PREROUTING -i ens224 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5

# probros portov

-A PREROUTING -i ens224 -s 2.2.2.2 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5:80

-A PREROUTING -i ens224 -s 2.2.2.2 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5:443

-A PREROUTING -i ens224 -s 3.3.3.3 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5:80

-A PREROUTING -i ens224 -s 3.3.3.3 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5:443

-A POSTROUTING -o ens224 -d 10.10.2.5 -p tcp --dport 80 -j SNAT --to-source 10.10.2.5:80

-A POSTROUTING -o ens224 -d 10.10.2.5 -p tcp --dport 443 -j SNAT --to-source 10.10.2.5:443

COMMIT

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [118:15351]

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec --limit-burst 10 -j ACCEPT

-A INPUT -i ens192 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT

-A INPUT -p udp -m udp --dport 1194 -m state --state NEW -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

-A FORWARD -s 172.16.124.0/24 -j ACCEPT

-A FORWARD -s 192.168.10.0/24 -d 172.16.124.0/24 -j ACCEPT

-A FORWARD -s 10.10.2.2/32 -d 172.16.124.0/24 -p tcp --dport 4307 -j ACCEPT

-A FORWARD -s 10.10.2.2/32 -d 172.16.124.0/24 -p tcp --dport 40443 -j ACCEPT

-A FORWARD -s 10.10.2.2/32 -d 172.16.124.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT

# Probros portov

-A FORWARD -i ens224 -o ens256 -s 1.1.1.1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT

-A FORWARD -i ens224 -o ens256 -s 1.1.1.1 -p tcp --syn --dport 443 -m conntrack --ctstate NEW -j ACCEPT

-A FORWARD -i ens224 -o ens256 -p tcp --syn --dport 80 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

-A FORWARD -i ens224 -o ens256 -p tcp --syn --dport 443 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT

-A FORWARD -i ens224 -o ens256 -p tcp --dport 80 -j ACCEPT

-A FORWARD -i ens224 -o ens256 -p tcp --dport 443 -j ACCEPT

# Allow inet from 10.10.2.5

-A FORWARD -i ens256 -s 10.10.2.5 -o ens224 -j ACCEPT

-A FORWARD -j REJECT --reject-with icmp-port-unreachable

COMMIT

Помогите разобраться почему 443 порт блочится!!!

на вскидку разхница есть:

0 0 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW

1 60 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW

0 0 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW,RELATED,ESTABLISHED

те с 1.1.1.1 80 443 пропускаем, затем со всех пропускам 80, а вот с про 2.2.2.2 443 ничего нет.

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

Для 443 порта аналогичное правило прописано:

iptables -L -n -v

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

0 0 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW

1 60 ACCEPT tcp  — ens224 ens256 1.1.1.1 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW

0 0 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ctstate NEW,RELATED,ESTABLISHED

2 104 ACCEPT tcp  — ens224 ens256 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ctstate NEW,RELATED,ESTABLISHED

WinsentVega ()

tcpdump -i ens224 ip src 2.2.2.2

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on ens224, link-type EN10MB (Ethernet), capture size 262144 bytes 14:52:34.740322 IP 2.2.2.2.49272 > 11.22.33.44.https: Flags , seq 2256253977, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

14:52:34.990590 IP 2.2.2.2.49273 > 11.22.33.44.https: Flags , seq 914723743, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

14:52:37.739400 IP 2.2.2.2.49272 > 11.22.33.44.https: Flags , seq 2256253977, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

14:52:37.994223 IP 2.2.2.2.49273 > 11.22.33.44.https: Flags , seq 914723743, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

14:52:43.737561 IP 2.2.2.2.49272 > 11.22.33.44.https: Flags , seq 2256253977, win 8192, options [mss 1460,nop,nop,sackOK], length 0

14:52:43.995330 IP 2.2.2.2.49273 > 11.22.33.44.https: Flags , seq 914723743, win 8192, options [mss 1460,nop,nop,sackOK], length 0

14:52:55.990241 IP 2.2.2.2.49274 > 11.22.33.44.https: Flags , seq 2289917018, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

14:52:58.996687 IP 2.2.2.2.49274 > 11.22.33.44.https: Flags , seq 2289917018, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0

WinsentVega ()

Решилось.

Проблема как началась с мистики так ею и закончилась. Начал пробовать различные варианты конфига дальше. Прописал 2 source в каждое правило.

-A PREROUTING -i ens224 -s 1.1.1.1,2.2.2.2 -p tcp --dport 80 -j DNAT --to-destination 10.10.2.5:80

-A PREROUTING -i ens224 -s 1.1.1.1,2.2.2.2 -p tcp --dport 443 -j DNAT --to-destination 10.10.2.5:443

Заработало, ура)) Ради эксперимента вернул как было, на каждый source своё правило, тоже работает. Для чистоты эксперимента ребутнул сервер и пк клиента, - работает.

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

Спасибо всем ответившим.

WinsentVega ()
Ответ на: комментарий от gobot

Да можно было не ребутить, сначала ребутил после установки апдейтов на ОС. После решения проблемы ребутнул что бы понять вернется этот неведомый баг или нет. Т.к. неполадка немного не типичная была.

WinsentVega ()
Ответ на: комментарий от anonymous

Да не, бывает нужно проверить чтобы вся «автозагрузка» встала нормально и все стартануло корректно. Без перезагруза не проверишь, а это нужно если сервер человек настраивал клиенту под ключ

gobot ★★★ ()