Страница 1 из 2
kernel nat ipfw VPN PPTP
Добавлено: 2013-11-07 14:43:43
CTOPMbI4
Приветствую гуру уникса.
Вообщем задача есть сервер на фряхе.
2 сетевухи
em1 смотрит в мир.
em0 в локалку там крутиться сетка 192.168.0.0/24
на самой фряхе поднимаются несколько туннелей до удаленных офисов. посредством mpd5. тип туннеля pptp.
Далее нужно разрешить пользователям локалки так же пробрасывать ВПН туннели то тех же удаленных серверов с теме же ип адресами.
Почитав доки по pptp gre ipfw . так и не понял. возможно так реализовать или нет?
вот правила фаера
Код: Выделить всё
#************************reset
${fwcmd} -f flush
#${fwcmd} -f pipe flush
#${fwcmd} -f queue flush
${fwcmd} -f table 0 flush
config nat interface
#deny in config nat
${fwcmd} nat 1 config ip External_ip same_ports reset
#*********Rules to Server GRE
${fwcmd} add 110 pass log tcp from any to me 1723 in via ${em1}
${fwcmd} add 120 pass log ip from me to any out via ${em1}
${fwcmd} add 130 pass gre from any to me in via ${em1}
#*********Nat out , LAN net to Rules
${fwcmd} add 150 nat 1 ip from 192.168.0.0/24 to any out via ${em1}
#*****************************nat rules in
${fwcmd} add 300 nat 1 ip from any to Externall_ip in via ${wan_int}
${fwcmd} add 65000 deny log all from any to any
Если поставить правила ната выше правил для сервера то туннели с фряхи не поднимаются. если ниже то с фряхи туннели поднимаются , с компов в локалке ВПН НЕ поднимаются выдает ошибку 619. по tcpdump-у видно что не проходят gre пакеты внутрь локалки.
Возможно решить данную проблему ? и если возможно то каким образом?
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 5:36:31
CTOPMbI4
не у кого нет вариантов?
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 6:41:43
lazhu
убрать правило 110, вместо него
Код: Выделить всё
nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 7:05:30
CTOPMbI4
lazhu писал(а):убрать правило 110, вместо него
Код: Выделить всё
nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.
Дело в том что с самого сервера так же поднимаются туннели. да и если поставить deny_in то вообще ничего не работает.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 7:56:21
CTOPMbI4
Тобишь VPN сервера нет в локалке. Есть шлюз на фряхе с которого и происходит соединение до внешних серверов и потом уже машрутизируется в локалку. соответственно для юзверов из локалки сделан нат для выхода в инет.
Но еще нужно для некоторых товарищей поднимать доп. ВПН. до тех же серверов. для доступа к определенным ресурсам.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 8:07:31
lazhu
CTOPMbI4 писал(а):lazhu писал(а):убрать правило 110, вместо него
Код: Выделить всё
nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.
Дело в том что с самого сервера так же поднимаются туннели. да и если поставить deny_in то вообще ничего не работает.
Так для того и делается редирект, чтобы локальные сервисы работали при deny_in
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 8:50:15
CTOPMbI4
хм.. куда делается проброс то? сам на себя что ли?
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 9:15:48
lazhu
CTOPMbI4 писал(а):хм.. куда делается проброс то? сам на себя что ли?
Да.
Правда, насколько я понял, в данном случае туннель устанавливается исходящий, так что локальный порт 1723 вообще не при делах. Если известны ip pptp-серверов, можно занести их в таблицу и прописать
Код: Выделить всё
add allow ip from table\(1\) to any in via em1
до ната.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 10:22:58
CTOPMbI4
Вот переделал. нат поставил раньше разрешения для сервера.
тут сложность заключается в входящих соединениях gre.
если исходящие можно фильтровать по ип адресу. тобишь локалки. и ип адресу сервера. то входящий gre пакет приходит на сервер на один и тот же ип адрес.
и дальше какое правило будет первым либо нат либо для сервера. то и будет работать.
какие варианты как решить эту траблу?
как то поставить established до правил ната для ип сервера.
Код: Выделить всё
${fwcmd} nat 1 config ip external_ip same_ports reset
*********Nat out , LAN net to Rules
${fwcmd} add 50 nat 1 ip from 192.168.0.0/24 to any out via ${wan_int}
#*****************************nat rules in
${fwcmd} add 100 nat 1 ip from any to external_ip in via ${wan_int}
#to server
${fwcmd} add 110 pass tcp from "table(2)" to me 1723 in via ${wan_int}
${fwcmd} add 120 pass ip from me to any out via ${wan_int}
${fwcmd} add 130 pass gre from "table(2)" to me in via ${wan_int}
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-08 12:20:22
CTOPMbI4
Код: Выделить всё
add allow ip from table\(1\) to any in via em1
до ната
Если поставить до правил ната. то тогда пакеты предназначенные для ПК в локалке. не будут доходить.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-09 11:00:35
gumeniuc
CTOPMbI4 писал(а):
Далее нужно разрешить пользователям локалки так же пробрасывать ВПН туннели то тех же удаленных серверов с теме же ип адресами.
Поясните, пожалуйста, на конкретном примере с адресами чего Вы хотите добиться.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-09 11:37:51
CTOPMbI4
Все до банальности просто.
FreeBSD 9.1
em1 External_ip
em0 192.168.0.0/24
Поднят mpd5 в качестве клиента.
C FreeBSD должны быть подняты туннели до внешних удаленных офисов с внешними ип адресами.
Юзверы с локалки 192.168.0.0/24 должны иметь инет через NAT который поднят на FreeBSD. + должны иметь возможность поднимать туннели до тех же
удаленных офисов.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-10 22:32:28
kharkov_max
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-12 16:57:28
CTOPMbI4
сегодня проверил.
ВПН поднялись с сервера.
Но нат корректно не работает.
тобишь с стороны клиентских ПК пакеты натятся. приходят обратно на внешний интерфейс. обратно из ната не работает.
поставил
убрал
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-12 17:32:40
kharkov_max
Ну как бы без конфигов тяжело что то говорить и обсуждать.
Выкладывайте конфиг ipfw - посмотрим ...
Только покажите весь ipfw
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 6:07:23
CTOPMbI4
Прошу весь конфиг.
Код: Выделить всё
#!/bin/sh
fwcmd="/sbin/ipfw"
#***********************Lans net
wan_lan="Externall_ip/30"
lan_net="192.168.1.0/24"
#***********************interfaces
lan_int="em0"
wan_int="em1"
ng0_int="ng0"
ng1_int="ng1"
ng2_int="ng2"
#***********************ip to interface
wan_ip="External_ip"
lan_ip="192.168.1.1"
#************************tables
#**********table local net
${fwcmd} table 1 add 10.0.0.0/8
#${fwcmd} table 1 add 192.168.0.0/16
${fwcmd} table 1 add 172.16.0.0/12
${fwcmd} table 1 add 169.254.0.0/16
${fwcmd} table 1 add 240.0.0.0/4
${fwcmd} table 1 add 224.0.0.0/4
#************************table VPN remote offices
${fwcmd} table 2 add VPN_ip1/32
${fwcmd} table 2 add VPN_ip2/32
${fwcmd} table 2 add VPN_ip3/32
#************************reset
${fwcmd} -f flush
#${fwcmd} -f pipe flush
#${fwcmd} -f queue flush
${fwcmd} -f table 0 flush
#************************access loopback
${fwcmd} add 10 pass all from any to any via lo0
#************************deny loopback 127.0.0.0/8 to all
${fwcmd} add 20 deny log all from any to 127.0.0.0/8
${fwcmd} add 30 deny log all from 127.0.0.0/8 to any
#************************diamond shit shild to brut pass
${fwcmd} add 40 deny not icmp from "table(0)" to me
#************************shild to WAN interface rfc (LAN)
${fwcmd} add 50 deny all from "table(1)" to any in via ${wan_int}
${fwcmd} add 60 deny all from any to "table(1)" in via ${wan_int}
#*************************deny on tcp state flags shild to bruts nmaps
${fwcmd} add 70 deny log tcp from any to any not established tcpflags fin
${fwcmd} add 80 deny log tcp from any to any tcpflags fin,syn,rst,psh,ack,urg
${fwcmd} add 90 deny log tcp from any to any tcpflags !fin,!syn,!rst,!psh,!ack,!urg
#*************************deny spoofing attack
${fwcmd} add 91 deny ip from any to any not verrevpath in
#*************************deny rules to WAN INT, netbios and etc
${fwcmd} add 95 deny log all from any to any 23,67,68,3128,137-139,81,445 via ${wan_int}
${fwcmd} add 96 deny ip from 10.0.0.0/16 to any in via ${ng0_int}
#*************************deny icmp type only
${fwcmd} add 97 pass icmp from any to me in via ${wan_int} icmptype 3,8,12
${fwcmd} add 98 deny icmp from amy to me in via ${wan_int}
#*****************************nat config + redirect ports
# config nat interface
#deny in config nat
${fwcmd} nat 1 config ip Ext_ip same_ports \
redirect_port udp 192.168.1.100:50555 50555 \
redirect_port udp 192.168.1.100:20010-20020 20010-20020
#*********Rules LAN INT Alloy all to Local int
${fwcmd} add 100 allow all from any to any via ${lan_int}
#*****************************Nat rules out
${fwcmd} add 150 nat 1 ip from 192.168.1.0/24 to any out via ${wan_int}
#*****************************nat rules in
${fwcmd} add 200 nat 1 ip from any to Externall_ip in via ${wan_int}
#****************************rules from server
${fwcmd} add 400 add pass ip from me to any out via ${wan_int}
${fwcmd} add 410 add pass gre from me to any out via ${wan_int}
${fwcmd} add 420 add pass tcp from "table(2)" 1723 to me in via ${wan_int}
${fwcmd} add 430 add pass gre from "table(2)" to me in via ${wan_int}
#************************* ng interfaces all access
#ng0
# establlished
${fwcmd} add 1000 allow all from any to any via ${ng0_int}
#int ng1
${fwcmd} add 1010 allow all from any to any via ${ng1_int}
#int ng2
${fwcmd} add 1020 allow all from any to any via ${ng2_int}
# deny all to not allow
${fwcmd} add 65000 deny log all from any to any
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 9:39:14
kharkov_max
Ну как минимум Ваш конфиг, отличается от того что я Вам показал.
В вашу схему особо не вникал т.к. это из разряда найди 10 отличий ...
Еще раз проверте, а еще лучше повторите то что есть и все заработает ...
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 10:18:46
CTOPMbI4
Если упустить всякие запрещающие правила.
все сводится к этим правилам
Код: Выделить всё
#обьявляем нат без deny_in
${fwcmd} nat 1 config ip Ext_ip same_ports
*****************************натим исходящую локалку
${fwcmd} add 150 nat 1 ip from 192.168.1.0/24 to any out via ${wan_int}
это правило отрабатывает норм.
#*****************************натим входящие пакеты
${fwcmd} add 200 nat 1 ip from any to Externall_ip in via ${wan_int}
вот тут проблема. не работает!!!
тобишь пакеты доходят и дальше ничего.
#****************************тут правила до самого сервера
они норм работают.
${fwcmd} add 400 add pass ip from me to any out via ${wan_int}
${fwcmd} add 410 add pass gre from me to any out via ${wan_int}
${fwcmd} add 420 add pass tcp from "table(2)" 1723 to me in via ${wan_int}
${fwcmd} add 430 add pass gre from "table(2)" to me in via ${wan_int}
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 10:39:49
kharkov_max
Ну да это так, все сводится к этим правилам.
Теперь найдите отличия, от моих правил )))
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 11:34:54
CTOPMbI4
kharkov_max писал(а):Ну да это так, все сводится к этим правилам.
Теперь найдите отличия, от моих правил )))
скиньте точный готовый конфиг. без лишних правил запретов. именно эту часть.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 12:04:26
kharkov_max
Код: Выделить всё
${fw} nat 1 config ip ${ext_gateway_ip} same_ports
# =============Разрешаем шлюзу создавать VPN подключения ================
${fw} add allow tcp from ${ext_gateway_ip} to any 1723 out via ${ext_if}
${fw} add allow gre from ${ext_gateway_ip} to table\(5\) out via ${ext_if}
${fw} add allow tcp from any 1723 to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow gre from table\(5\) to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow all from { 192.168.0.1,192.168.0.2 } to any out via mpd5
${fw} add allow all from any to { 192.168.0.1,192.168.10.2 } in via mpd5
# ========================================================================
# ====================== NAT VPN в инет ======================================================
${fw} add nat 1 tag 8 tcp from table\(3\) to any 1723 out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from table\(3\) to any out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from ${ext_gateway_ip} to any out via ${ext_if}
${fw} add allow tcp from ${ext_gateway_ip} to any 1723 out via ${ext_if} tagged 8
${fw} add allow gre from ${ext_gateway_ip} to any out via ${ext_if} tagged 8
${fw} add nat 1 tag 8 tcp from any 1723 to ${ext_gateway_ip} in via ${ext_if}
${fw} add nat 1 tag 8 gre from any to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow tcp from any 1723 to table\(3\) in via ${ext_if} tagged 8
${fw} add allow gre from any to table\(3\) in via ${ext_if} tagged 8
# ============================================================================================
Вставте этот блок вместо своих правил, ну и конечно подправте под свои переменные и IP.
table5 - куда шлюз может строить VPN на внешние VPN серверы (мне так было нужно !!!)
table3 - кто из локальной сети может строить VPN наружу в инет
ext_gateway_ip - внешний IP, или несколько IP шлюза
mpd5 - VPN интерфейс который который поднял шлюз с внешним VPN сервером.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 12:08:49
CTOPMbI4
подождите вы говорили что правила ната должны быть первыми. а потом уже разрешение для сервера.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 12:15:06
CTOPMbI4
у вас в этом конфиге наоборот. сначала правила для шлюза а потом уже нат.
вся проблема заключается именно в входящем пакете. так как в нем содержится
ип адрес сервера в качестве dst ip.
цитирую вас в вашей статье.
Правила nat фильтрации должны быть первыми, потом правила для mpd5 клиента, а потом правила для mpd5 сервера.
Таким образом возврящаясь от сервера пакет для mpd5 клиента попадает в nat (т.к. он первый в правилах), nat видит что у него нет исходящего пакета, пакет не натит, но пропускает по правилам дальше. Далее пакет попадает в правила для mpd5 клиента.
Для этого нужно поставить параметр one_pass=0 в ноль
таким образом пакет пойдет на след правило после ната. и тут уже можно для него подставить нужные правила.
Настроил именно как вы сказали. Но не заработало.
Либо я что то не понимаю.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 12:16:03
kharkov_max
CTOPMbI4 писал(а):подождите вы говорили что правила ната должны быть первыми. а потом уже разрешение для сервера.
Да, вы правы.
Глянул только что рабочий конфиг там такой порядок.
Код: Выделить всё
${fw} nat 1 config ip ${ext_gateway_ip} same_ports
# ====================== NAT VPN в инет ======================================================
${fw} add nat 1 tag 8 tcp from table\(3\) to any 1723 out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from table\(3\) to any out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from ${ext_gateway_ip} to any out via ${ext_if}
${fw} add allow tcp from ${ext_gateway_ip} to any 1723 out via ${ext_if} tagged 8
${fw} add allow gre from ${ext_gateway_ip} to any out via ${ext_if} tagged 8
${fw} add nat 1 tag 8 tcp from any 1723 to ${ext_gateway_ip} in via ${ext_if}
${fw} add nat 1 tag 8 gre from any to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow tcp from any 1723 to table\(3\) in via ${ext_if} tagged 8
${fw} add allow gre from any to table\(3\) in via ${ext_if} tagged 8
# ============================================================================================
# =============Разрешаем шлюзу создавать VPN подключения ================
${fw} add allow tcp from ${ext_gateway_ip} to any 1723 out via ${ext_if}
${fw} add allow gre from ${ext_gateway_ip} to table\(5\) out via ${ext_if}
${fw} add allow tcp from any 1723 to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow gre from table\(5\) to ${ext_gateway_ip} in via ${ext_if}
${fw} add allow all from { 192.168.0.1,192.168.0.2 } to any out via mpd5
${fw} add allow all from any to { 192.168.0.1,192.168.10.2 } in via mpd5
# ========================================================================
# ============== Правила для VPN сервера, если нужно =======================
# =======================================================================
Сори за неточность, а Вам респект за бдительность.
Re: kernel nat ipfw VPN PPTP
Добавлено: 2013-11-13 12:16:45
kharkov_max
цитирую вас в вашей статье.
Это не статья а просто записка, мысли в слух .... ))))