LINUX.ORG.RU
ФорумAdmin

iptables проброс порта снаружи на комп в локальной сети

 


0

1

День добрый имеем шлюз на Debian (раздаем пользователям в локалке интернет squid, sams2 и т.п.) c настроенным фаерволом iptables.

eth1 - подключен кабель от провайдера с интернетом

ppp0- интернет с белым статическим ip 77.*.*.55 центрального офиса

eth0- локалка с ip 192.168.3.125 (шлюз)

77.*.*.40 - белый ip удаленного офиса

Необходимо пробросить порт tcp 4000 с ppp0 (На него будут стучатся клиенты из удаленного офиса для подключения к серверу терминалов) на ip 192.168.3.131 порт 3389.

192.168.3.131 сервер терминалов на Windows в локальной сети главного офиса, к которому необходимо подключаться по rdp клиентам из удаленного офиса

#!/bin/bash                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                              
modprobe ip_tables                                                                                                                                                                                                                                                             
modprobe ip_conntrack                                                                                                                                                                                                                                                          
modprobe ip_conntrack_ftp                                                                                                                                                                                                                                                      
modprobe ip_conntrack_irc                                                                                                                                                                                                                                                      
modprobe iptable_nat                                                                                                                                                                                                                                                           
#этот модуль позволяет работать с ftp в пассивном режиме                                                                                                                                                                                                                       
modprobe ip_nat_ftp                                                                                                                                                                                                                                                            
modprobe ip_nat_irc                                                                                                                                                                                                                                                            
#очистка цепочек                                                                                                                                                                                                                                                               
iptables -F INPUT                                                                                                                                                                                                                                                              
iptables -F FORWARD                                                                                                                                                                                                                                                            
iptables -F OUTPUT                                                                                                                                                                                                                                                             
iptables -t nat -F PREROUTING                                                                                                                                                                                                                                                  
iptables -t nat -F POSTROUTING                                                                                                                                                                                                                                                 
iptables -t mangle -F                                                                                                                                                                                                                                                          
#Запрет всего
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#разрешаем все входящие пакеты на интрефейс замыкания на себя иначе ничего не работает 
iptables -A INPUT -i lo -j ACCEPT

#РАЗРЕШЕНЫ ТОЛЬКО ВХОДЯЩИЕ СОЗДАННЫЕ НАШИМИ ИСХОДЯЩИМИ
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Правила повышающие безопасность
#Блочим входящие tcp соединения не syn пакетом (либо ошибка либо атака)
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT

#Фильтруем ICMP по типам

#iptables -A INPUT -p icmp -j ACCEPT
#iptables -A OUTPUT -p icmp -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT

iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT

#Запрещаем пинги из локальной сети 
#iptables -I FORWARD -s 192.168.3.0/24 -p icmp -j DROP

#Разрешаем принимать dns запросы на 53 udp и tcp порт от сервера горгаза 192.168.3.74

#iptables -A INPUT -i eth0 -s 192.168.3.127 -p udp --dport 53  -j ACCEPT
#iptables -A INPUT -i eth0 -s 192.168.3.127 -p tcp --dport 53  -j ACCEPT

#Разрешаем использование dns на 192.168.3.125
iptables -A INPUT -i eth0 -p udp --dport 53  -j ACCEPT

#разрешаем доступ из локальной сети на порты 22(ssh),3128 прокси squid,80 - apache веб морды

iptables -A INPUT -i eth0 -p tcp -m multiport --dport 22,80,53,3128,4000 -j ACCEPT

#Разрешаем запросы на сервер времени 
iptables -A INPUT -i eth0 -p udp --dport 123 -j ACCEPT

#подстройка mtu без этого правила компы ходящие мимо прокси не открывают некоторые сайты
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS  --clamp-mss-to-pmtu 

#Разрешаем хождение через цепочку форвард пакетов идущих в ответ на пакеты с eth0
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Маскарадим то что прошло через цепочку forward
iptables -t nat -I POSTROUTING -s 192.168.3.0/24 -o ppp0 -j MASQUERADE

Собственно с фаерволом не работал больше года много успел забыть 
Думаю делать так 

1)Разрешаем доступ 4000 порту на ppp0 с ip филиала

iptables -A INPUT -i ppp0 -s 77.*.*.40 -p tcp --dport 4000 -j ACCEPT

2)iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 4000 -j DNAT --to-destination 192.168.3.131:3389 

3)iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 3389 -d 192.168.3.131 -j SNAT --to-source 192.168.3.125:4000

4)iptables -A FORWARD -d 192.168.3.131 -i ppp0 -p tcp -m tcp --dport 3389 -j ACCEPT


Нужно ли еще разрешать хождение ответных пакетов через FORWARD
от 192.168.3.131 к ppp0? Или достаточно указанного ранее правила iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

 

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

Имеете в виду что этих 2 вух правил достаточно вместо того что нагородил я ?

2)iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 4000 -j DNAT –to-destination 192.168.3.131:3389

3)iptables -t nat -A POSTROUTING -o eth0 -p tcp –dport 3389 -d 192.168.3.131 -j SNAT –to-source 192.168.3.125:4000

4)iptables -A FORWARD -d 192.168.3.131 -i ppp0 -p tcp -m tcp –dport 3389 -j ACCEPT

drac753 ★★ ()
Последнее исправление: drac753 (всего исправлений: 2)
Ответ на: комментарий от drac753

2)iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 4000 -j DNAT –to-destination 192.168.3.131:3389
3)iptables -t nat -A POSTROUTING -o eth0 -p tcp –dport 3389 -d 192.168.3.131 -j SNAT –to-source 192.168.3.125:4000
4)iptables -A FORWARD -d 192.168.3.131 -i ppp0 -p tcp -m tcp –dport 3389 -j ACCEPT

Если у локалки за eth0 этот шлюз указан в маршруте по умолчанию, тогда правило 3) не нужно. Оно нужно только если RDP сервер не знает куда отвечать тем IP, с которых к нему приходят запросы. Порт в –to-source - это лишнее.

Правило 4) тоже лишнее, лучше первым правилом в filter FORWARD иметь такое:

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT

Т.е. в итоге должно хватить такого:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4000 -j DNAT --to 192.168.3.131:3389
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT

spirit ★★★★★ ()