Всем привет!Не удается "пробросить" порт 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Прошу помощи, заранее благодарю.
>Не вижу открытого порта:
>netstat -anp | grep 3389А вы и не должны его видеть если у вас на локальной машине ничего не слушает этот порт.
>Вывод iptables -L:
а так же iptables -t nat -nvL
а вообще вы прибывали подключатся через проброс?
upd.>Chain FORWARD (policy DROP)
>target prot opt source destinationправило для форварда пакетов добавьте
1. Запускаем тцпдамп на внешнем инфтерфейсе. Смотрим - приходят ли пакеты на внешний интерфейс.
2. Запускаем тцпдамп на внутреннем интерфейсе. Смотрим - уходят ли пакеты во внутреннюю сеть.
3. По результатам наблюдений думаем и пробуем понять причину. Ну, про то, что они в форварде должны быть разрешены - Вам уже сказали.
Спасибо, буду пробовать!
Решение нашел, все работает: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>Есть ли способы более оптимального подхода?
> Есть ли способы более оптимального подхода?Ну - не то, чтобы с точки зрения оптимальности, а с точки зрения безопасности - я бы предложил ограничить список IP, с которых разрешен вход на порт 3389. Ключом -s, естественно. Но это Вам решать, приемлем ли для Вас этот способ.
>> Есть ли способы более оптимального подхода?
> Ну - не то, чтобы с точки зрения оптимальности, а с
> точки зрения безопасности - я бы предложил ограничить список IP, с
> которых разрешен вход на порт 3389. Ключом -s, естественно. Но это
> Вам решать, приемлем ли для Вас этот способ.Спасибо! :)