ubuntu-server, iptables, rdp на несколько машин и локальной сети
«живу» я в одной конторе в качестве программиста, начальство решило не тратится на админа (нафига, если уже есть один «компьютерщик»?) с горем пополам, не без помощи гугля, я поднял сервер, локальную сеть настроил.. в общем суть не в этом. поставлена задача настроить rdp на несколько машин. на одну машину я нагуглил способ:
iptables -t nat -I PREROUTING —dst x.x.x.x -p tcp —dport 3389 -j DNAT —to-destination 192.168.0.151:3389
iptables -t nat -I POSTROUTING -p tcp —dst 192.168.0.151 —dport 3389 -j SNAT —to-source x.x.x.x
iptables -I FORWARD -i eth0 —dst 192.168.0.151 -j ACCEPT
работает, но вот как это же сделать на несколько машин? догадываюсь что нужно открыть ещё несколько портов и назначить форвардинг на определенный ip из локали. верно, или нет? направьте на путь истинный.. простите за столь ламерский вопрос, но у меня немного квалификация другая, и у гугля ничего толком выпросить не получается, может кто делал подобное?
Пока ты не разберёшся с тем, что значат все эти опции (PREROUTING, POSTROUTING, FORWARD, INPUT, OUTPUT . —dst —dport -j . ), любой ответ кроме как man iptables будет неверным.
Как только ты поймёшь что делают приведённые тобой же команды станет понятно какие ещё дописать для других компов. Тебе же работать.
Эхх. у меня примерно такая ситуация на работе. стукни мне в джаббер. (Jid в профиле) я тебе по пробую помочь а ты мож мне поможешь.. взаимно выручка
[code]
iptables -t nat -I PREROUTING —dst x.x.x.x -p tcp —dport 3389 -j DNAT —to-destination 192.168.0.151:3389
[/code]
просто в этой строке для каждой машины надо указать свой dport, через который и нужно к ней обращаться извне.
В твоём случае достаточно
iptables -t nat -A PREROUTING -p --tcp --dport 3389 -i -j DNAT --to-destination 192.168.0.151:3389
Обязательно -i или -d , иначе, не надо забывать, что при обращении на 3389 порт _из локалки_ будет перенаправление на 192.168.0.151:3389. Это типичная ошибка новичков.
Ну и далее по аналогии, только меняй —dport, например
iptables -t nat -A PREROUTING -p --tcp --dport 3390 -i -j DNAT --to-destination 192.168.0.152:3389
iptables -t nat -A POSTROUTING -o -j SNAT --to-source
В FORWARD можешь пока ничего не писать, чай у тебя, наверняка там ACCEPT. Ну а далее для тюненга таки man iptables, а лучше http://ru.wikipedia.org/wiki/Iptables.
ошибок нет, но nmap показывает порт 3390 как filtered хотя таким же способом открылся 3389 и через него rdp работает.
# Generated by iptables-save v1.4.4 on Fri Aug 19 21:28:37 2011 *filter :INPUT ACCEPT [195322:184796543] :FORWARD ACCEPT [541693:350521783] :OUTPUT ACCEPT [129848:8937149] -A INPUT -p tcp -m tcp --dport 3390 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3390 -j ACCEPT -A FORWARD -d 192.168.0.150/32 -i eth0 -j ACCEPT -A FORWARD -d 192.168.0.151/32 -i eth0 -j ACCEPT COMMIT # Completed on Fri Aug 19 21:28:37 2011 # Generated by iptables-save v1.4.4 on Fri Aug 19 21:28:37 2011 *nat :PREROUTING ACCEPT [79979:6412323] :OUTPUT ACCEPT [6762:619788] :POSTROUTING ACCEPT [3624:305928] -A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 3390 -j DNAT --to-destination 192.168.0.150:3389 -A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.151:3389 -A POSTROUTING -d 192.168.0.150/32 -p tcp -m tcp --dport 3390 -j SNAT --to-source x.x.x.x -A POSTROUTING -d 192.168.0.151/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source x.x.x.x -A POSTROUTING -o eth0 -j MASQUERADE -A POSTROUTING -o eth0 -j SNAT --to-source x.x.x.x COMMIT # Completed on Fri Aug 19 21:28:37 2011
вот что в ответ. а nmap говорит
3389/tcp open microsoft-rdp Microsoft Terminal Service 3390/tcp filtered unknown
-A POSTROUTING -d 192.168.0.150/32 -p tcp -m tcp --dport 3390 -j SNAT --to-source x.x.x.x -A POSTROUTING -d 192.168.0.151/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source x.x.x.x -A POSTROUTING -o eth0 -j MASQUERADE
Всё правильно, хм, предлагаю использовать tcpdump и посмотреть нет ли фаервола на 150
порт открылся. не знаю даже, от того ли что я пересоздал через iptables-restore и ребутнулся или от того что убрал строчки выше. -A POSTROUTING -o eth0 -j MASQUERADE не трогал, думаю он тут не причем. или же от того что 150 комп был выключен :D. решил извратится и попытался каскадом добраться через этот же rdp на 116 комп. а вот он то и не разрешил удаленное соединение. а я все на iptables грешил.
Проброс портов для удаленного рабочего стола (RDP) через iptables
Код: Выделить всё #!/bin/bash
EXT_IP=»xxx.xxx.xxx.xxx» # внешний, реальный IP-адрес шлюза;
INT_IP=»xxx.xxx.xxx.xxx» # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
FAKE_PORT=$1 # Вначале передаём скрипту «неправильный» порт на внешнем интерфейсе,
LAN_IP=$2 # затем — локальный адрес сервера
SRV_PORT=$3 # и в конце — реальный порт для подключения к серверу
# Здесь опять надо сделать проверку ввода данных, потому что операции всё ещё серьёзные.
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp —dport $FAKE_PORT -j DNAT —to-destination $LAN_IP:$SRV_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j SNAT —to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp —dport $SRV_PORT -j DNAT —to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j ACCEPT
ПРОБРОС ПОРТА:
EXT_IP=»xxx.xxx.xxx.xxx» # внешний, реальный IP-адрес шлюза;
INT_IP=»xxx.xxx.xxx.xxx» # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
LAN_IP=$1 # Локальный адрес сервера передаём скрипту первым параметром,
SRV_PORT=$2 # а тип сервера, в смысле какой порт (или набор портов) открывать — вторым
# Здесь желательно сделать проверку ввода данных, потому что операции достаточно серьёзные.
iptables -t nat -A PREROUTING —dst $EXT_IP -p tcp —dport $SRV_PORT -j DNAT —to-destination $LAN_IP
iptables -t nat -A POSTROUTING —dst $LAN_IP -p tcp —dport $SRV_PORT -j SNAT —to-source $INT_IP
iptables -t nat -A OUTPUT —dst $EXT_IP -p tcp —dport $SRV_PORT -j DNAT —to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j ACCEPT
Как пробросить RDP порт через NAT, используя iptables?
Доброе время суток, либо мои знания скудны и ограничены, либо одно из двух.
Необходимо пробросить RDP порт через NAT. Использую rinetd — все просто и работает, но идет подмена источника, в логах вместо ip клиента указывается ip шлюза. Мучался с iptables — пошерстил сеть, не понимаю..
#!/bin/bash # LAN interface IF0="eth0" # WAN interface 1 IF1="eth1" # IP WAN interface 1 IP1="110.120.130.205" # gateway 1 P1="110.120.130.254" # LAN netmask P0_NET="10.0.0.0/24" # WAN1 netmask P1_NET="110.120.130.0/24" #################### # Очищаем правила iptables -F iptables -F -t nat iptables -F -t mangle iptables -X iptables -t nat -X iptables -t mangle -X # Запрещаем все, что не разрешено iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Разрешаем localhost и локалку iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i $IF0 -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -o $IF0 -j ACCEPT # Разрешаем пинги iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Разрешаем все исходящие подключения сервера iptables -A OUTPUT -o $IF1 -j ACCEPT # Разрешаем установленные подключения iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # Отбрасываем неопознанные пакеты iptables -A INPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP # Отбрасываем нулевые пакеты iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Закрываемся от syn-flood атак iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP # Разрешаем доступ из локалки наружу iptables -A FORWARD -i $IF0 -o $IF1 -j ACCEPT # Закрываем доступ снаружи в локалку iptables -A FORWARD -i $IF1 -o $IF0 -j REJECT # Переадресация 80 и 443 портов на прозрачный сквид iptables -t nat -A PREROUTING -p tcp -m tcp -s 10.0.0.0/24 --dport 443 -j REDIRECT --to-ports 3443 iptables -t nat -A PREROUTING -p tcp -m multiport -s 10.0.0.0/24 --dports 80,81,82,88,1080,3127,3128,7900,8000,8080,8081,8088,8123,8888,9090 -j REDIRECT --to-ports 3080 # Включаем NAT iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE # Открываем порты iptables -A INPUT -i $IF1 -p tcp --dport 55555 -j ACCEPT iptables -A INPUT -i $IF1 -p tcp --dport 55554 -j ACCEPT iptables -A INPUT -i $IF0 -p tcp --dport 123 -j ACCEPT iptables -A INPUT -i $IF0 -p udp --dport 123 -j ACCEPT # Открываем доступ к web серверу iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT # Сохраняем правила /sbin/iptables-save > /etc/iptables.rules iptables-restore < /etc/iptables.rules
iptables -t nat -A PREROUTING -p tcp -m tcp -d 110.120.130.205 --dport 55554 -j DNAT --to-destination 10.0.0.10:3389 iptables -t nat -A POSTROUTING -p tcp -m tcp -d 10.0.0.10 --sport 3389 -j SNAT --to-source 110.120.130.205:55554
iptables -t nat -A PREROUTING -d 110.120.130.205 -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.10:3389 iptables -t filter -A FORWARD -m state --state NEW -p tcp --dport 3389 -j ACCEPT
Ни в одном случае не взлетело
Оценить 1 комментарий