URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5144
[ Назад ]

Исходное сообщение
"Открытие порта в iptables"

Отправлено glinin , 04-Апр-13 11:25 
Всем привет!

Не удается "пробросить" порт 3389 средствами iptables для доступа к конкретному компьютеру по RDP за NAT.

Реализовал следующий скрипт:

#!/bin/bash

LO_IF="lo"
LO_NET="127.0.0.0/8"

INT_IF="eth0"
INT_NET="192.168.3.0/24"

EXT_IF="eth1"
EXT_IP="xxx.xxx.xxx.xxx"

# Delete all existing rules:
iptables -F
iptables -F FORWARD
iptables -t nat -F
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


echo 1 > /proc/sys/net/ipv4/ip_forward

# Allow loopback:
iptables -A INPUT -i $LO_IF -j ACCEPT
# Allow ping:
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# Allow SSH (5420):
iptables -A INPUT -p tcp --dport 5420 -j ACCEPT
# Allow HTTP(80),SSH(5420),SAMBA(139,445),MySQL(3306) and Squid(3128):
iptables -A INPUT -p tcp -i $INT_IF -m multiport --dports 80,139,445,3306,3128 -j ACCEPT
# Allow RDP (3389):
iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d $EXT_IP --dport 3389 -j DNAT --to-destination 192.168.3.254:3389

# Masquerade:
iptables -t nat -A POSTROUTING -o $EXT_IF -j SNAT --to-source $EXT_IP

# Defaults:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Не вижу открытого порта:
netstat -anp | grep 3389

Вывод iptables -L:
Chain INPUT (policy DROP)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:5420
ACCEPT     tcp  --  anywhere             anywhere             multiport dports http,netbios-ssn,microsoft-ds,3306,3128
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:rdp
Chain FORWARD (policy DROP)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Вывод sysctl -a | grep forward:
error: permission denied on key 'vm.compact_memory'
error: permission denied on key 'net.ipv4.route.flush'
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.default.forwarding = 0
net.ipv6.conf.lo.forwarding = 0
error: permission denied on key 'net.ipv6.route.flush'
net.ipv6.conf.eth0.forwarding = 0
net.ipv6.conf.eth1.forwarding = 0

Прошу помощи, заранее благодарю.


Содержание

Сообщения в этом обсуждении
"Открытие порта в iptables"
Отправлено КуКу , 04-Апр-13 14:11 
>Не вижу открытого порта:
>netstat -anp | grep 3389

А вы и не должны его видеть если у вас на локальной машине ничего не слушает этот порт.

>Вывод iptables -L:

а так же iptables -t nat -nvL

а вообще вы прибывали подключатся через проброс?


upd.  

>Chain FORWARD (policy DROP)
>target     prot opt source               destination      

правило для форварда пакетов добавьте


"Открытие порта в iptables"
Отправлено Дядя_Федор , 04-Апр-13 15:57 
1. Запускаем тцпдамп на внешнем инфтерфейсе. Смотрим - приходят ли пакеты на внешний интерфейс.
2. Запускаем тцпдамп на внутреннем интерфейсе. Смотрим - уходят ли пакеты во внутреннюю сеть.
3. По результатам наблюдений думаем и пробуем понять причину. Ну, про то, что они в форварде должны быть разрешены - Вам уже сказали.

"Открытие порта в iptables"
Отправлено glinin , 05-Апр-13 02:29 
Спасибо, буду пробовать!

"Открытие порта в iptables"
Отправлено glinin , 06-Апр-13 02:44 
Решение нашел, все работает:

iptables -t nat -A PREROUTING -p tcp -d  <реальный_ip> --dport 3389 -j DNAT --to-destination <ip_за_nat>:3389
iptables -A FORWARD -p tcp -i eth1 --dport 3389 -j ACCEPT
iptables -t nat -A POSTROUTING -d <ip_за_nat> -p tcp -m tcp --dport 3389 -j SNAT --to-source <реальный_ip>

Есть ли способы более оптимального подхода?


"Открытие порта в iptables"
Отправлено Дядя_Федор , 06-Апр-13 20:24 
> Есть ли способы более оптимального подхода?

Ну - не то, чтобы с точки зрения оптимальности, а с точки зрения безопасности - я бы предложил ограничить список IP, с которых разрешен вход на порт 3389. Ключом -s, естественно. Но это Вам решать, приемлем ли для Вас этот способ.



"Открытие порта в iptables"
Отправлено glinin , 07-Апр-13 03:13 
>> Есть ли способы более оптимального подхода?
>  Ну - не то, чтобы с точки зрения оптимальности, а с
> точки зрения безопасности - я бы предложил ограничить список IP, с
> которых разрешен вход на порт 3389. Ключом -s, естественно. Но это
> Вам решать, приемлем ли для Вас этот способ.

Спасибо! :)