ipfw + ipfw nat

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-02-26 9:20:21

Здравствуйте!

Имеется:

Код: Выделить всё

[root@gw ~]# uname -a
FreeBSD gw.somedomain.tld 7.0-RELEASE-p5 FreeBSD 7.0-RELEASE-p5 #0: Wed Dec  3 10:33:44 MSK 2008     root@gw.somedomain.tld:/usr/obj/usr/src/sys/GWSPB-2008-12-03  i386
Не могу разобраться с ipfw nat на серваке. Проблема в том, что ipfw nat весело пускает на сервак абсолютно все, если ему не сказать deny_in. Если поставить deny_in - в таком случае, если правила ната расположены в начале списка правил ipfw - firewall начинает блокировать все. Если правила ната опустить в конец списка правил - наблюдаются странные глюки. В моем случае это тормоза непонятные при серфинге нета через нат и еще нат отказывается пропускать vpn на pptp с внутренней сетки наружу. Я думал что это происходит из-за того, что gre пакеты с удаленного pptp сервака приходят на мой gw и не попадают в nat, так как прописаны правила для mpd. Попробовал для конкретного удаленного ip прописать skipto до правил ната - толку ноль. У меня так и не получилось заставить все это работать. Прошу помочь с настройкой файрвола, указать что у меня неверно настроено и т.д. Буду благодарен за любую помощь.

Вообще, мне бы хотелось услышать ваши советы по составлению конфига фаера, как сделать. Сначала что-то разрешать, потом нат, потом deny all? Или как-то иначе... Приведу скрипт, который работает на данный момент на серваке. При этом существует проблема, что нат пускает все.

У меня на серваке 2 канала в инет. Из внешних доступных сервисов: почтовик, ftp, openvpn (2 и один старый), ну и mpd5.

P.S. Простите за поток сознания, болею я... :)

Код: Выделить всё

#!/bin/sh

ipfw='/sbin/ipfw -q'
#out_if="em1"
#out_mask="255.255.255.252"
#out_ip="xxx.xxx.xxx.xxx"
out_if="em2"
out_mask="255.255.255.252"
out_ip="yyy.yyy.yyy.yyy"

in_if="em0"
in_net="10.10.1.0"
in_mask="255.255.0.0"
in_ip="10.10.1.1"

mpd_vpn="ng*"

vpn="tun0"
vpn_chel="tun3"

boss1="10.10.1.30/32"
boss2="10.10.1.31/32"
sklad_dc="10.10.2.30"
flanker="10.10.1.61/32"
S0000="10.10.1.10/32"
S0070="10.10.1.101/32"
S0070_bank_client="5080,465,110,25"
S0070_uralsib="995,465"
S0095="10.10.1.102/32"
S0095_pressol="9005"
S0050="10.10.1.103/32"
S0050_ports="110,25,1723"
S0050_out_peer="213.182.169.11"
S0068="10.10.1.104/32"

ts1="10.10.1.70/32"
ts2="10.10.1.71/32"
ts3="10.10.1.72/32"
buhg1="10.10.1.51/32"

spb_net="10.10.1.0/24"
spb_whnet="10.10.2.0/24"

${ipfw} flush
${ipfw} add 100 check-state

# Deny access to unrouteable networks
${ipfw} add 200 reject all from any to 10.0.0.0/8 in via ${out_if}
${ipfw} add 300 reject all from any to 172.16.0.0/12 in via ${out_if}
${ipfw} add 400 reject all from any to 192.168.0.0/16 in via ${out_if}
${ipfw} add 500 reject all from any to 0.0.0.0/8 in via ${out_if}
${ipfw} add 600 reject all from any to 169.254.0.0/16 in via ${out_if}
# Multicast
${ipfw} add 700 reject all from any to 224.0.0.0/4 in via ${out_if}
${ipfw} add 800 reject all from any to 240.0.0.0/4 in via ${out_if}
# Deny access from unrouteable networks
${ipfw} add 900 reject all from 10.0.0.0/8 to any in via ${out_if}
${ipfw} add 1000 reject all from 172.16.0.0/12 to any in via ${out_if}
${ipfw} add 1100 reject all from 192.168.0.0/16 to any in via ${out_if}
${ipfw} add 1200 reject all from 0.0.0.0/8 to any in via ${out_if}
${ipfw} add 1300 reject all from 169.254.0.0/16 to any in via ${out_if}
# Multicast
${ipfw} add 1400 reject all from 224.0.0.0/4 to any in via ${out_if}
${ipfw} add 1500 reject all from 240.0.0.0/4 to any in via ${out_if}
# ICMP
${ipfw} add 1600 deny icmp from any to any frag
${ipfw} add 1700 deny icmp from any to any in icmptype 5,9,13,14,15,16,17

#${ipfw} add allow all from any to any


# Правило для сбора статистики
${ipfw} add 1800 tee 10000 all from me to any out via ${out_if}
${ipfw} add 1900 tee 10000 all from any to me in via ${out_if}
# Разрешим весь трафик через локальный интерфейс (для работы системы)
${ipfw} add 2000 allow all from any to any via lo0

#################################################################
#								#
#			NAT configuration			#
#								#
#################################################################
# NAT
${ipfw} nat 111 config ip ${out_ip} reset same_ports unreg_only

# Special users (-:
${ipfw} add 2100 nat 111 all from $S0000 to any out via ${out_if}
${ipfw} add 2200 nat 111 all from 10.10.1.211/32 to any out via ${out_if}
# All from flanker
${ipfw} add 2300 nat 111 ip from $flanker to any out via ${out_if}
# ICMP for internal users
${ipfw} add 2400 nat 111 icmp from 10.10.0.0/16 to any out via ${out_if}

# DNS for domain controllers (tcp and udp)
${ipfw} add 2500 nat 111 log udp from $boss1 to any 53 out via ${out_if}
${ipfw} add 2600 nat 111 log tcp from $boss1 to any 53 out via ${out_if}
${ipfw} add 2700 nat 111 log udp from $boss2 to any 53 out via ${out_if}
${ipfw} add 2800 nat 111 log tcp from $boss2 to any 53 out via ${out_if}
${ipfw} add 2900 nat 111 log udp from $sklad_dc to any 53 out via ${out_if}
${ipfw} add 3000 nat 111 log tcp from $sklad_dc to any 53 out via ${out_if}

# Исключения, nat определенных портов и ip для пользовательских программ
# For pressol web site working (Some work for pressol from S0095)
${ipfw} add 3100 nat 111 all from $S0095 to any $S0095_pressol out via ${out_if}
# VTB Rostov bank-client
${ipfw} add 3200 nat 111 tcp from $S0070 to 195.151.17.7 25 out via ${out_if}
${ipfw} add 3300 nat 111 tcp from $S0070 to 195.151.17.2 110 out via ${out_if}
# SMTP.DBO.VTB.RU
${ipfw} add 3400 nat 111 tcp from $S0070 to 193.164.146.13 25 out via ${out_if}
${ipfw} add 3500 nat 111 tcp from $S0070 to 193.164.146.13 110 out via ${out_if}
# For bank client work (Bank client's on s0070.somedomain.tld)
${ipfw} add 3600 nat 111 tcp from $S0070 to any $S0070_bank_client out via ${out_if}
${ipfw} add 3700 nat 111 tcp from $S0070 to 217.195.66.228 $S0070_uralsib out via ${out_if}
# For some stuff from s0050
${ipfw} add 3800 nat 111 log logamount 0 gre from $S0050 to 213.182.169.11 out via ${out_if}
${ipfw} add 3900 nat 111 log logamount 0 tcp from $S0050 to 213.182.169.11 $S0050_ports out via ${out_if}
# Трафик из инета в обратную сторону - надо же как-то его отдавать.
${ipfw} add 4000 nat 111 ip from any to ${out_ip} in via ${out_if}

################### NAT HAPPY END ###################

# temp test
${ipfw} add 4010 deny log logamount 0 all from 77.236.252.198 to ${out_ip} 20,21 in via ${out_if}

# FTP for somepublichost.somedomain.tld
${ipfw} add 4100 allow tcp from any to ${out_ip} 20,21 in via ${out_if}
${ipfw} add 4200 allow tcp from ${out_ip} 20,21 to any out via ${out_if}

# OpenVPN
${ipfw} add 4300 allow all from any to any via ${vpn}
${ipfw} add 4400 allow udp from any to ${out_ip} 1194 in via ${out_if}
${ipfw} add 4500 allow udp from ${out_ip} 1194 to any out via ${out_if}

# VPN Челябинск
${ipfw} add 4600 allow ip from any to any via ${vpn_chel}
${ipfw} add 4700 allow all from any to any 5003

# For mpd
${ipfw} add 4800 allow tcp from any to any via ${mpd_vpn}
${ipfw} add 4900 allow icmp from any to any via ${mpd_vpn}
${ipfw} add 5000 allow log logamount 0 gre from ${out_ip} to any keep-state out via ${out_if}
${ipfw} add 5100 allow log logamount 0 tcp from any to ${out_ip} 1723 keep-state in via ${out_if}

# Forward ftp from users to frox
${ipfw} add 5200 fwd 10.10.1.1,2121 tcp from $ts1 to any 21 out via ${out_if}
${ipfw} add 5300 fwd 10.10.1.1,2121 tcp from $ts2 to any 21 out via ${out_if}
${ipfw} add 5400 fwd 10.10.1.1,2121 tcp from $ts3 to any 21 out via ${out_if}
${ipfw} add 5500 fwd 10.10.1.1,2121 tcp from $buhg1 to any 21 out via ${out_if}

# Для доступа сервера в интернет
${ipfw} add 5600 allow tcp from me to any keep-state out via ${out_if}
${ipfw} add 5700 allow icmp from me to any keep-state out via ${out_if}

# DNS
${ipfw} add 5900 allow udp from me to any 53 out via ${out_if}
${ipfw} add 6000 allow udp from any 53 to me in via ${out_if}
${ipfw} add 6100 allow tcp from me to any 53 out via ${out_if}
${ipfw} add 6200 allow tcp from any 53 to me in via ${out_if}

# NTP
${ipfw} add 6300 allow udp from me 123 to any 123 out via ${out_if}
${ipfw} add 6400 allow udp from any 123 to ${out_ip} 123 in via ${out_if}

# SMTP on em2
${ipfw} add 6500 allow tcp from any to ${out_ip} 25 in via ${out_if}
${ipfw} add 6600 allow tcp from ${out_ip} to any 25 out via ${out_if}

# SMTP on em1
${ipfw} add 6700 fwd 81.3.179.221 all from xxx.xxx.xxx.xxx to any
${ipfw} add 6800 allow tcp from any to xxx.xxx.xxx.xxx 25 in via em1
${ipfw} add 6900 allow tcp from xxx.xxx.xxx.xxx to any 25

# SMTP from flanker and no other via em0
${ipfw} add 7000 allow tcp from $flanker to me 25 in via em0
${ipfw} add 7100 allow tcp from me to $flanker 25 out via em0
${ipfw} add 7200 deny tcp from any to me 25 in via em0

# SSH
${ipfw} add 7300 allow tcp from any to me 5222 setup keep-state

# Saint-Petersburgh warehouse
${ipfw} add 7400 allow all from ${spb_net} to ${spb_whnet} out via em3
${ipfw} add 7500 allow all from ${spb_whnet} to ${spb_net} in via em3

# LAN
${ipfw} add 7600 allow ip from ${spb_net} to any via ${in_if}
${ipfw} add 7700 allow ip from any to ${spb_net} via ${in_if}

# ICMP
${ipfw} add 7800 allow icmp from any to any via ${in_if}

# Deny all another
${ipfw} add 7900 deny log logamount 10000 ip from any to any

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение zingel » 2009-02-26 12:49:00

сначала нужно нат с номерами + allow gre from any to any,
болею я... :)
чтобы не болеть внимательно прочитайте

http://www.lissyara.su/?id=1127
Z301171463546 - можно пожертвовать мне денег

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-02-26 12:55:36

zingel писал(а):сначала нужно нат с номерами + allow gre from any to any,
болею я... :)
чтобы не болеть внимательно прочитайте

http://www.lissyara.su/?id=1127
Эээ, читал и не раз. Болею собственно по-настоящему :)

Насчет сначала нат - потом деньги. Вы имеете ввиду скрипт добавления правил? То есть сначала я прописываю нат, дальше все что мне захочется? А как быть с deny_in?

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение zingel » 2009-02-26 14:31:07

ну я тоже болею, но нат нужно всегда вначале и gre тоже, это как *не убий*
Z301171463546 - можно пожертвовать мне денег

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: ipfw + ipfw nat

Непрочитанное сообщение paradox » 2009-02-26 14:45:34

были ж статьи на опен нете и еще где то
где расписано как проходит пакет по ipfw
не понимая этого
пысать правила фаервола всеравно что гадать на цветочке

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-02-26 14:53:58

Если поставить нат в начале списка правил, то ipfw nat по one_pass и без deny_in, насколько я понял, не найдя подходящей пары в своей таблице принимает пакет на внешний интерфейс и возвращает обратно в файрволл, но так как стоит one_pass то, пакет не пойдет дальше по файрволлу, где в конце указано deny, а сразу будет применено allow, что создаёт дырку в файрволле. Если же поставить deny_in, то нат в начале списка правил будет убивать весь входящий трафик. Может конечно мой больной моск что-то не так понимает, но именно это я просил разъяснить...

млиа, я понимаю как проходит пакет по ipfw, и статью сложные случаи уже почти наизусть помню...ладно, тема видать бесполезна...

спасибо.

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение zingel » 2009-02-26 15:02:52

гадать можно сколько угодно, я бы использовал tcpdump. чтобы быть увереным, за 1 минуту понять твою маршрутизацию это не очень просто, погрепай пока пакеты, а я подумаю.
Z301171463546 - можно пожертвовать мне денег

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-02-26 15:22:59

Ладно, остается только и правда tcpdump и ковыряние логов. Только вот не поиграешься особо в рабочее время на шлюзовой машине...

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-23 10:47:19

Написал я таки скрипт для фаера. Вроде все работает. Конфиг конечно аццкий получился, но после внимательного чтения мана и статьи про сложные случаи прохождение трафика в ipfw (читал до опупения) (http://nuclight.livejournal.com/124348.html). В итоге пришлось отказаться от one_pass=1 и разрешать нату все входящие подключения, но ставить его первым правилом для трафика, входящего с WAN, а дальше уже раскидывать пакеты. Может кому и поможет, но я не гарантирую что в данном конфиге нет косяков и т.д.

Конфиг перегружен чересчур, но у меня нет кошки, чтобы все было красиво. В итоге на шлюзе два внешних интерфейса и два внутренних, плюс два openvpn интерфейса, плюс mpd интерфейсы.

Код: Выделить всё

#!/bin/sh

ipfw='/sbin/ipfw -q    '

# Interfaces
# Link to local spb network
int0_if="em0"
int0_ip="10.10.1.1/32"

# Link to spb warehouse
int1_if="em3"
int1_ip="10.10.2.1/32"

# Link to internet from Severen
ext0_if="em2"
ext0_ip="xxx.xxx.xxx.xxx"

# Link to internet from Peterstar
ext1_if="em1"
ext1_ip="yyy.yyy.yyy.yyy"
ext1_gw="yyy.yyy.yyy.zzz"

# OpenVPN2 interface
vpn_if="tun0"

# Old openvpn for chelyabinsk
vpn_chel="tun3"

# MPD vpn interfaces
vpn_mpd='ng*'

# Table names
tRFC1918="0"
tGateways="1"
tVPN_networks="2"
tAll_lan="3"
tFTP_access="4"

# ipfw nat 111 delete


${ipfw} flush
${ipfw} table $tRFC1918 flush # Private networks
${ipfw} table $tGateways flush # Our gateways
${ipfw} table $tVPN_networks flush # Affiliates and vpn service networks
${ipfw} table $tAll_lan flush # All real client's LAN's
${ipfw} table $tFTP_access flush # Hosts that need to have ftp fproxy

# Table "zero" - RFC 1918 private networks
${ipfw} table $tRFC1918 add 10.0.0.0/8
${ipfw} table $tRFC1918 add 172.16.0.0/12
${ipfw} table $tRFC1918 add 192.168.0.0/16
# MS autoconfigured network
${ipfw} table $tRFC1918 add 169.254.0.0/16

# Our gateways
${ipfw} table $tGateways add 87.241.230.xxx # RST
${ipfw} table $tGateways add 195.68.133.xxx  # MSK
${ipfw} table $tGateways add 77.236.252.xxx # MSK WAREHOUSE
${ipfw} table $tGateways add 82.147.124.xxx  # CHEL

# Affiliates and vpn service networks
${ipfw} table $tVPN_networks add 10.10.4.0/24
${ipfw} table $tVPN_networks add 10.10.5.0/24
${ipfw} table $tVPN_networks add 10.10.6.0/24
${ipfw} table $tVPN_networks add 10.10.7.0/24
${ipfw} table $tVPN_networks add 10.10.20.0/24

# All real client's LAN's
${ipfw} table $tAll_lan add 10.10.1.0/24
${ipfw} table $tAll_lan add 10.10.2.0/24
${ipfw} table $tAll_lan add 10.10.4.0/24
${ipfw} table $tAll_lan add 10.10.5.0/24
${ipfw} table $tAll_lan add 10.10.6.0/24
${ipfw} table $tAll_lan add 10.10.7.0/24

# Hosts, that need to have access to ftp proxy (frox)
${ipfw} table $tFTP_access add 10.10.1.70/32 # TS1
${ipfw} table $tFTP_access add 10.10.1.71/32 # TS2
${ipfw} table $tFTP_access add 10.10.1.72/32 # TS3
${ipfw} table $tFTP_access add 10.10.1.51/32 # BUHG1


# Domain controllers
dc_boss1="10.10.1.30/32"
dc_boss2="10.10.1.31/32"
dc_spbwh="10.10.2.30/32"

# Networks definition
spb_net="10.10.1.0/24"
spbwh_net="10.10.2.0/24"
msk_net="10.10.4.0/24"
mskwh_net="10.10.7.0/24"
chel_net="10.10.5.0/24"
rst_net="10.10.6.0/24"
vpn_srv_net="10.10.20.0/24"

# Special hosts definition
flanker="10.10.1.61/32"		# Mail srv (allow smtp to me)
s0000="10.10.1.10/32"		# (allow all)
s0021="10.10.1.211/32"		# (allow all)
s0050="10.10.1.103/32"		# Nalogovaya (PPTP calls) + pop + smtp
s0070="10.10.1.101/32"		# Bank client UralSib: pop smtp 465/tcp 995/tcp 5080/tcp
s0095="10.10.1.102/32"		# Pressol access 9005/tcp

s0050_ports="110,25"
s0070_ports="110,25,465,995,5080"
s0095_ports="9005"

${ipfw} disable one_pass

${ipfw} add 100 check-state
# Localhost
${ipfw} add 200 allow ip from any to any via lo0
${ipfw} add 250 allow tcp from any to ${ext0_ip} 5222 keep-state in via ${ext0_if}

# Divide the traffic from multiple interfaces and directions
# Traffic from local spb network
${ipfw} add 310 skipto 1000 ip from any to any in recv ${int0_if}
# Traffic to local spb network
${ipfw} add 320 skipto 4000 ip from any to any out xmit ${int0_if}
# Traffic from spb warehouse network
${ipfw} add 330 skipto 7000 ip from any to any in recv ${int1_if}
# Traffic to spb warehouse network
${ipfw} add 340 skipto 10000 ip from any to any out xmit ${int1_if}
# Traffic from internet (main channel)
${ipfw} add 350 skipto 13000 ip from any to any in recv ${ext0_if}
# Traffic to internet (main channel)
${ipfw} add 360 skipto 16000 ip from any to any out xmit ${ext0_if}
# Traffic from internet (backup channel)
${ipfw} add 370 skipto 19000 ip from any to any in recv ${ext1_if}
# Traffic to internet (backup channel)
${ipfw} add 380 skipto 21000 ip from any to any out xmit ${ext1_if}
# Traffic from affiliates through vpn
${ipfw} add 390 skipto 24000 ip from any to any in recv ${vpn_if}
# Traffic to affiliates through vpn
${ipfw} add 400 skipto 27000 ip from any to any out xmit ${vpn_if}
# Traffic from chelyabinsk through vpn (deprecated)
${ipfw} add 410 skipto 30000 ip from any to any in recv ${vpn_chel}
# Traffic to chelyabinsk through vpn (deprecated)
${ipfw} add 420 skipto 33000 ip from any to any out xmit ${vpn_chel}
# Traffic from vpn (PPTP MPD)
${ipfw} add 430 skipto 36000 ip from any to any in recv ${vpn_mpd}
# Traffic to vpn (PPTP VPN)
${ipfw} add 440 skipto 39000 ip from any to any out xmit ${vpn_mpd}

${ipfw} add 450 deny log logamount 10000 ip from any to any

# NAT Configuration
# NAT on interface em2
${ipfw} nat 111 config ip ${ext0_ip} log reset unreg_only

# ---------------------------------------------------------#
# ---- Traffic from local spb network (in recv int0_if) ----
# ---------------------------------------------------------#
# Allow only flanker connect to exim and no one other
${ipfw} add 1000 allow tcp from ${flanker} to me 25
${ipfw} add deny log logamount 10000 tcp from any to me 25
# Allow traffic to LAN's
${ipfw} add allow ip from ${spb_net} to ${spb_net}
${ipfw} add allow ip from ${spb_net} to ${spbwh_net}
${ipfw} add allow ip from ${spb_net} to ${msk_net}
${ipfw} add allow ip from ${spb_net} to ${mskwh_net}
${ipfw} add allow ip from ${spb_net} to ${chel_net}
${ipfw} add allow ip from ${spb_net} to ${rst_net}
# Forward request to ftp sites to ftp proxy
${ipfw} add fwd 10.10.1.1,2121 tcp from table\($tFTP_access\) to any 21
# NAT and others (Allow all, Traffic that we don't need we will deny at out xmit ext0_if)
${ipfw} add allow ip from ${s0000} to any
${ipfw} add allow ip from ${s0021} to any
${ipfw} add allow ip from ${s0050} to any
${ipfw} add allow ip from ${s0070} to any
${ipfw} add allow ip from ${s0095} to any
# TEMP ######
${ipfw} add allow ip from 10.10.1.203/32 to any
# Volkov 
${ipfw} add allow ip from 10.10.1.199/32 to any
# Kotovich
${ipfw} add allow ip from 10.10.1.192/32 to any
${ipfw} add allow ip from ${dc_boss1} to any
${ipfw} add allow ip from ${dc_boss2} to any
${ipfw} add allow ip from ${dc_spbwh} to any
${ipfw} add allow ip from ${flanker} to any
# Default rule for traffic from local spb network
${ipfw} add 3999 deny log logamount 10000 all from any to any

# ---------------------------------------------------------#
# ---- Traffic to local spb network (out xmit int0_if) ----
# ---------------------------------------------------------#
# Allow traffic from LAN's
${ipfw} add 4000 allow ip from ${spbwh_net} to ${spb_net}
${ipfw} add allow ip from ${spb_net} to ${spb_net}
${ipfw} add allow ip from ${msk_net} to ${spb_net}
${ipfw} add allow ip from ${mskwh_net} to ${spb_net}
${ipfw} add allow ip from ${chel_net} to ${spb_net}
${ipfw} add allow ip from ${rst_net} to ${spb_net}
# Traffic from internet 
${ipfw} add allow ip from any to ${spb_net}
# Default rule for traffic from any to local spb network
${ipfw} add 6999 deny log logamount 10000 ip from any to ${spb_net}

# -------------------------------------------------------------#
# ---- Traffic from spb warehouse network (in recv int1_if) ----
# -------------------------------------------------------------#
# Allow traffic to spb local network only
${ipfw} add 7000 allow ip from ${spbwh_net} to ${spb_net}
# Default deny all another
${ipfw} add 9999 deny log logamount 10000 ip from any to any

# -------------------------------------------------------------#
# ---- Traffic to spb warehouse network (out xmit int1_if) ----
# -------------------------------------------------------------#
${ipfw} add 10000 allow ip from ${spb_net} to ${spbwh_net}
# Default deny all another
${ipfw} add 12999 deny log logamount 10000 ip from any to any

# ---------------------------------------------------------------#
# ---- Traffic from internet (main channel) (in recv ext0_if) ----
# ---------------------------------------------------------------#
# Deny from RFC 1918 networks
${ipfw} add 13000 deny ip from table\($tRFC1918\) to ${ext0_ip}
# Pass all trafic to NAT instance. Not NAT traffic will leave from NAT without modification.
# NAT traffic will leave from NAT with LAN dst ip.
${ipfw} add nat 111 ip from any to ${ext0_ip}
# Traffic from NAT to local net.
${ipfw} add allow ip from any to ${spb_net}
# ICMP 0 - echo reply, 8 - echo request, 11 - TTL exceeded
${ipfw} add allow icmp from any to ${ext0_ip} icmptypes 0,8,11
# FTP
# Active FTP
${ipfw} add allow tcp from any to ${ext0_ip} 20,21
# Passive FTP 60k-60,5k - ports, defined as PASV in vsftpd.conf
${ipfw} add allow tcp from any to ${ext0_ip} 60000-60500 keep-state
# SMTP
${ipfw} add allow tcp from any to ${ext0_ip} 25
# NTP
${ipfw} add allow udp from any 123 to ${ext0_ip} 123
# DNS
${ipfw} add allow udp from any 53 to ${ext0_ip}
${ipfw} add allow tcp from any 53 to ${ext0_ip}
# OpenVPN 2
${ipfw} add allow udp from table\($tGateways\) to ${ext0_ip} 1194
# OpenVPN 1 (deprecated for Chelyabinsk)
${ipfw} add allow udp from 82.147.124.90 to ${ext0_ip} 5003
# SSH
${ipfw} add allow tcp from any to ${ext0_ip} 5222 keep-state
# PPTP to MPD
${ipfw} add allow gre from any to ${ext0_ip}
${ipfw} add allow tcp from any to ${ext0_ip} 1723 keep-state
# Default rule for traffic from internet through main channel (in recv ext0_if)
${ipfw} add 15999 deny log logamount 10000 ip from any to any

# ---------------------------------------------------------------#
# ---- Traffic to internet (main channel) (out xmit ext0_if) ----
# ---------------------------------------------------------------#
# FTP
# Active FTP
${ipfw} add 16000 allow tcp from ${ext0_ip} 20,21 to any
# Passive FTP
${ipfw} add allow tcp from ${ext0_ip} 60000-60500 to any keep-state
# Forward traffic from ext1_ip to ext1_gw
${ipfw} add fwd ${ext1_gw} ip from ${ext1_ip} to any
# SMTP
${ipfw} add allow tcp from ${ext0_ip} to any 25 # Mail from me to any
${ipfw} add allow tcp from ${ext0_ip} 25 to any # Answer to mail clients
# NTP
${ipfw} add allow udp from ${ext0_ip} 123 to any 123
# DNS
${ipfw} add allow udp from ${ext0_ip} to any 53
${ipfw} add allow tcp from ${ext0_ip} to any 53
# OpenVPN 2
${ipfw} add allow udp from ${ext0_ip} 1194 to table\($tGateways\)
# OpenVPN 1 (deprecated for Chelyabinsk)
${ipfw} add allow udp from ${ext0_ip} 5003 to 82.147.124.xxx
# ICMP
${ipfw} add allow icmp from ${ext0_ip} to any
# MPD VPN
${ipfw} add allow gre from ${ext0_ip} to any
${ipfw} add allow tcp from ${ext0_ip} 1723 to any
# All from my ip
${ipfw} add allow ip from ${ext0_ip} to any keep-state
# NAT
# Special
${ipfw} add nat 111 ip from ${s0000} to any
${ipfw} add nat 111 ip from ${s0021} to any
# TEMP #
${ipfw} add nat 111 ip from 10.10.1.203/32 to any
# Volkov
${ipfw} add nat 111 ip from 10.10.1.199/32 to any
# Kotovich
${ipfw} add nat 111 ip from 10.10.1.192/32 to any
${ipfw} add nat 111 ip from ${flanker} to any
# DNS
${ipfw} add nat 111 udp from ${dc_boss1} to any 53
${ipfw} add nat 111 udp from ${dc_boss2} to any 53
${ipfw} add nat 111 udp from ${dc_spbwh} to any 53
${ipfw} add nat 111 tcp from ${dc_boss1} to any 53
${ipfw} add nat 111 tcp from ${dc_boss2} to any 53
${ipfw} add nat 111 tcp from ${dc_spbwh} to any 53
# ICMP
${ipfw} add nat 111 icmp from ${spb_net} to any
# Bank clients, nalogovaya and others
${ipfw} add nat 111 tcp from ${s0050} to any ${s0050_ports}
${ipfw} add nat 111 tcp from ${s0070} to any ${s0070_ports}
${ipfw} add nat 111 tcp from ${s0095} to any ${s0095_ports}
# PPTP from inside
${ipfw} add nat 111 gre from ${s0050} to any
${ipfw} add nat 111 tcp from ${s0050} to any 1723
# Allow all from NAT and our ip
${ipfw} add allow ip from ${ext0_ip} to any
# Default rule for traffic to internet (out xmit ext0_if)
${ipfw} add 18999 deny log logamount 10000 ip from any to any

# -----------------------------------------------------------------#
# ---- Traffic from internet (backup channel) (in recv ext1_if) ----
# -----------------------------------------------------------------#
# Deny from RFC 1918 networks
${ipfw} add 19000 deny ip from table\($tRFC1918\) to ${ext1_ip}
# ICMP 0 - echo reply, 8 - echo request, 11 - TTL exceeded
${ipfw} add allow icmp from any to ${ext1_ip} icmptypes 0,8,11
# SMTP
${ipfw} add allow tcp from any to ${ext1_ip} 25
# NTP
${ipfw} add allow udp from any 123 to ${ext1_ip} 123
# DNS
${ipfw} add allow udp from any 53 to ${ext1_ip}
# OpenVPN 2
${ipfw} add allow udp from table\($tGateways\) to ${ext1_ip} 1194
# OpenVPN 1 (deprecated for Chelyabinsk)
${ipfw} add allow udp from 82.147.124.90 to ${ext1_ip} 5003
# SSH
${ipfw} add allow tcp from any to ${ext1_ip} 5222 keep-state
# PPTP to MPD
${ipfw} add allow tcp from any to ${ext1_ip} 1723 keep-state
# Default rule for traffic from internet through backup channel (in recv ext1_if)
${ipfw} add 20999 deny log logamount 10000 ip from any to any

# ----------------------------------------------------------------#
# ---- Traffic to internet (backup channel) (out xmit ext1_if) ----
# ----------------------------------------------------------------#
# SMTP
${ipfw} add 21000 allow tcp from ${ext1_ip} to any 25
${ipfw} add allow tcp from ${ext1_ip} 25 to any
# NTP
${ipfw} add allow udp from ${ext1_ip} 123 to any 123
# DNS
${ipfw} add allow udp from ${ext1_ip} to any 53
# OpenVPN 2
${ipfw} add allow udp from ${ext1_ip} 1194 to table\($tGateways\)
# OpenVPN 1 (deprecated for Chelyabinsk)
${ipfw} add allow udp from ${ext1_ip} 5003 to 82.147.124.xxx
# MPD VPN
${ipfw} add allow gre from ${ext1_ip} to any
${ipfw} add allow tcp from ${ext1_ip} 1723 to any
# Default rule for traffic to internet (out xmit ext1_if)
${ipfw} add 23999 deny log logamount 10000 ip from any to any

# ------------------------------------------------------------ #
# ---- Traffic from affiliates through vpn (in recv tun0) ---- #
# ------------------------------------------------------------ #
${ipfw} add 24000 allow ip from table\($tVPN_networks\) to ${spb_net}
${ipfw} add allow ip from table\($tVPN_networks\) to ${vpn_srv_net}
# Defaul rule for traffic from affiliates through vpn
${ipfw} add 26999 deny ip from any to any

# ----------------------------------------------------------- #
# ---- Traffic to affiliates through vpn (out xmit tun0) ---- #
# ----------------------------------------------------------- #
# Traffic to affiliates through vpn
${ipfw} add 27000 allow ip from ${spb_net} to table\($tVPN_networks\)
${ipfw} add allow ip from ${vpn_srv_net} to table\($tVPN_networks\)
# Defaul rule for traffic to affiliates through vpn
${ipfw} add 29999 deny log logamount 10000 ip from any to any

# -------------------------------------------------------------------------- #
# ---- Traffic from chelyabinsk through vpn (deprecated) (in recv tun3) ---- #
# -------------------------------------------------------------------------- #
${ipfw} add 30000 allow ip from ${chel_net} to ${spb_net}
# Default rule for traffic from chelyabinsk through vpn
${ipfw} add 32999 deny log logamount 10000 ip from any to any

# ------------------------------------------------------------------------- #
# ---- Traffic to chelyabinsk through vpn (deprecated) (out xmit tun3) ---- #
# ------------------------------------------------------------------------- #
${ipfw} add 33000 allow ip from ${spb_net} to ${chel_net}
# Default rule for traffic to chelyabinsk through vpn
${ipfw} add 35999 deny log logamount 10000 ip from any to any

# --------------------------------------------------- #
# ---- Traffic from vpn (PPTP MPD) (in recv ng*) ---- #
# --------------------------------------------------- #
${ipfw} add 36000 allow ip from ${spb_net} to table\($tAll_lan\)
# Default rule for traffic from vpn
${ipfw} add 38999 deny log logamount 10000 ip from any to any

# -------------------------------------------------- #
# ---- Traffic to vpn (PPTP MPD) (out xmit ng*) ---- #
# -------------------------------------------------- #
${ipfw} add 39000 allow ip from table\($tAll_lan\) to ${spb_net}
# Default rule for traffic to vpn
${ipfw} add 42999 deny log logamount 10000 ip from any to any
Кто найдет косяки, недочеты и т.д. - you are welcome!

Lucky SB
рядовой
Сообщения: 28
Зарегистрирован: 2009-02-15 1:52:28

Re: ipfw + ipfw nat

Непрочитанное сообщение Lucky SB » 2009-03-23 16:31:44

Лично я прописал бы номера правил явно.
CrazyPilot писал(а):статьи про сложные случаи прохождение трафика в ipfw (читал до опупения)
Статья немного устарела ) В ней разговор про natd, а у тебя kernel nat. Вещи разные, хоть и похожие.
CrazyPilot писал(а):В итоге пришлось отказаться от one_pass=1 и разрешать нату все входящие подключения, но ставить его первым правилом для трафика, входящего с WAN, а дальше уже раскидывать пакеты.
Хм. В мане на ipfw из семерки написано

Код: Выделить всё

     To let the packet continue after being (de)aliased, set the sysctl vari-
     able net.inet.ip.fw.one_pass to 0.  For more information about aliasing
     modes, refer to libalias(3) See Section EXAMPLES for some examples about
     nat usage.
Ты говоришь о том, что при one_pass=1 kernel nat пропускает ВСЕ входящие пакеты ? Не только те, которые он (de)aliased (обработал), но и те, правил на которые нету в таблице трансляций и он должен их пропускать без изменения ???
Это серъезный баг и нужен send_pr

Ты, кстати своими правилами поведение при one_pass=1, таким, каким оно должно быть согласно man

Код: Выделить всё

# Pass all trafic to NAT instance. Not NAT traffic will leave from NAT without modification.
# NAT traffic will leave from NAT with LAN dst ip.
${ipfw} add nat 111 ip from any to ${ext0_ip}
# Traffic from NAT to local net.
${ipfw} add allow ip from any to ${spb_net}
Транслируем входящий трафик.
Разрешаем все, что в локалку.

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-23 17:41:20

Lucky SB писал(а):Статья немного устарела ) В ней разговор про natd, а у тебя kernel nat. Вещи разные, хоть и похожие.
Как я понял из статьи - не суть, divert ли это демон, или сразу все в ядре. Факт что пакет уходит в nat, тот его возвращает (de)alised, либо без изменений. Если у ната не стоит в конфиге "deny in" и в системе one_pass=1 - пакет, вернувшийся с ната, сразу принимается. Причем пакет, ни каким боком не отсносящийся к нату - тоже принимается. У меня было так. Старого конфига к сожалению нет, уже переписал. Но там было именно так, я пробовал разные варианты. Без deny in нат "кушал" всё.
Lucky SB писал(а):Ты говоришь о том, что при one_pass=1 kernel nat пропускает ВСЕ входящие пакеты ? Не только те, которые он (de)aliased (обработал), но и те, правил на которые нету в таблице трансляций и он должен их пропускать без изменения ???
Это серъезный баг и нужен send_pr
Ага, пропускает. Точнее честно делает свою работу. Возвращает пакет обратно в ipfw без изменений, но так как стоит one_pass=1 и пакет пришел из "внешней" подсистемы (в терминах статьи про сложные случаи...) - к пакету сразу применяется allow. Если у него (ipfw nat) явно не указано в конфиге "deny in" и стоит one_pass=1. Дальше по правилам пакет не уходил. Может это фича, а не бага :) Вряд ли такой баг был бы никем кроме меня не замечен...
Lucky SB писал(а):Ты, кстати своими правилами поведение при one_pass=1, таким, каким оно должно быть согласно man

Код: Выделить всё

 # Pass all trafic to NAT instance. Not NAT traffic will leave from NAT without modification.
    # NAT traffic will leave from NAT with LAN dst ip.
    ${ipfw} add nat 111 ip from any to ${ext0_ip}
    # Traffic from NAT to local net.
    ${ipfw} add allow ip from any to ${spb_net}
Транслируем входящий трафик.
Разрешаем все, что в локалку.
Насчет этого не понял - такой конфиг у меня при one_pass=0.Соответственно, пакет пришедший допустим на внешний интерфейс на smtp, сначала попадает в nat, тот не находит для него соответствия у себя - пакет выходит из ната обратно без изменений - дальше я правилами разруливаю то, что мне надо и т.д.

Lucky SB
рядовой
Сообщения: 28
Зарегистрирован: 2009-02-15 1:52:28

Re: ipfw + ipfw nat

Непрочитанное сообщение Lucky SB » 2009-03-23 19:01:54

CrazyPilot писал(а):
Как я понял из статьи - не суть, divert ли это демон, или сразу все в ядре.
Код разный. Баги тоже разные могут быть ;)
CrazyPilot писал(а):Причем пакет, ни каким боком не отсносящийся к нату - тоже принимается. У меня было так.
Хм. У меня-то семерки нету рядом, чтобы проверить. Попрошу седня в фидошной эхе.
CrazyPilot писал(а):так как стоит one_pass=1 и пакет пришел из "внешней" подсистемы (в терминах статьи про сложные случаи...) - к пакету сразу применяется allow

Это неправильно.
CrazyPilot писал(а):Может это фича, а не бага :) Вряд ли такой баг был бы никем кроме меня не замечен...
Це не фича, це дырка ) Хотя много у кого стоит one_pass=0 из-за того, что шейпить юзеров надо.
CrazyPilot писал(а):Насчет этого не понял - такой конфиг у меня при one_pass=0.Соответственно
Ну судя по man ipfw именно такое поведение должно быть при one_pass=1 без дополнительного правила на пропуск трафика локалки.

Мне прям инетересно стало.... ;)

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-24 9:14:26

CrazyPilot писал(а):так как стоит one_pass=1 и пакет пришел из "внешней" подсистемы (в терминах статьи про сложные случаи...) - к пакету сразу применяется allow
Lucky SB писал(а):Это неправильно.
А вот здесь можно поподробнее? Почему неправильно? То есть правильно должно быть так: nat, не найдя в таблице трансляций соответствие для пакета, должен вернуть пакет обратно в ipfw, причем без навешивания всяких флагов? Так, как будто этот пакет и не проходил через nat?

Насчет правил...
one_pass = 1 - правило для локалки после ната не нужно. Пакет, вернувшись из ната, сразу принимается
one_pass = 0 - правило для локалки после ната нужно. Пакет, вернувшись из ната (dealiased) пойдет дальше по правилам, соответственно правило для локалки нужно.

Я на верном пути? :)

Кстати нарыл еще интересную штуку:

Если в скрипт добавления правил ipfw с его натом не ставить в начале скрипта ${ipfw} nat xxx delete и у вас уже есть нат, созданный ранее с этим номером - то начинаются странные глюки. В моем случае не резолвился dns со шлюза. Причем в логах ipfw не было никакой порнографии, просто тупо не резолвился dns. После того как добавил правило, удаляющее нат, а следующее его создающее - все просралось :-)

Lucky SB
рядовой
Сообщения: 28
Зарегистрирован: 2009-02-15 1:52:28

Re: ipfw + ipfw nat

Непрочитанное сообщение Lucky SB » 2009-03-24 15:51:35

CrazyPilot писал(а):
А вот здесь можно поподробнее? Почему неправильно? То есть правильно должно быть так: nat, не найдя в таблице трансляций соответствие для пакета, должен вернуть пакет обратно в ipfw, причем без навешивания всяких флагов? Так, как будто этот пакет и не проходил через nat?
Ну да. Он вообще его трогать не должен. Посмотрел себе в таблицы - нету - делать ничего не надо.
CrazyPilot писал(а): Насчет правил...
one_pass = 1 - правило для локалки после ната не нужно. Пакет, вернувшись из ната, сразу принимается
one_pass = 0 - правило для локалки после ната нужно. Пакет, вернувшись из ната (dealiased) пойдет дальше по правилам, соответственно правило для локалки нужно.

Я на верном пути? :)
да. Так в мане написано. а на самом деле фигня получаеться )
CrazyPilot писал(а):
Кстати нарыл еще интересную штуку:

Если в скрипт добавления правил ipfw с его натом не ставить в начале скрипта ${ipfw} nat xxx delete и у вас уже есть нат, созданный ранее с этим номером - то начинаются странные глюки. В моем случае не резолвился dns со шлюза. Причем в логах ipfw не было никакой порнографии, просто тупо не резолвился dns. После того как добавил правило, удаляющее нат, а следующее его создающее - все просралось :-)
ужас.
Рекомендовать обновиться до 7.1 я не могу. У меня 7.1-RELEASE падал в панику при загрузке в боевой сети. (
Почему я так и не смог разобраться. откатился на 6.4 и ng_nat
Обходные пути ты нашел. Все заработало )

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-24 15:56:29

Lucky SB писал(а):да. Так в мане написано. а на самом деле фигня получаеться )
Почему фигня? Всё именно так и работает, как написано в мане.
Lucky SB писал(а):Почему я так и не смог разобраться. откатился на 6.4 и ng_nat
ng_nat - это нат с помощью netgraph?

Lucky SB
рядовой
Сообщения: 28
Зарегистрирован: 2009-02-15 1:52:28

Re: ipfw + ipfw nat

Непрочитанное сообщение Lucky SB » 2009-03-24 16:08:19

CrazyPilot писал(а):
Lucky SB писал(а):да. Так в мане написано. а на самом деле фигня получаеться )
Почему фигня? Всё именно так и работает, как написано в мане.
ну ты ж говорил, что при one_pass оно у тебя ВСЕ пакеты принимает. Независимо от того обработан он НАТ или нет.

CrazyPilot писал(а): ng_nat - это нат с помощью netgraph?
угу. У меня там сразу и ng_nat и ng_netflow в одном кустике.
В гугле полно примеров.

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-24 17:21:52

Lucky SB писал(а):
CrazyPilot писал(а):
Lucky SB писал(а):да. Так в мане написано. а на самом деле фигня получаеться )
Почему фигня? Всё именно так и работает, как написано в мане.
ну ты ж говорил, что при one_pass оно у тебя ВСЕ пакеты принимает. Независимо от того обработан он НАТ или нет.
Да, принимает...Ладно, мы видать о чём-то разном думаем (-:

sch
проходил мимо

Re: ipfw + ipfw nat

Непрочитанное сообщение sch » 2009-03-25 12:58:19

ИМХО - это фича, соответствующая задуманной логике ipfw.

можно добавить дополнительный селектор для правила входящего NAT, чтобы он принимал только пакеты в рамках установленного соединения

add nat 111 ip from any to ${ext0_ip} established

Хотя это только для TCP, но во многих случаях может сильно упростить жизнь

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-25 14:12:55

Да, а от ната udp, gre и прочего тогда надо отказаться :-)

Имхо, one_pass=1 для ipfw nat штука в большинстве случаев непригодная.

Гость
проходил мимо

Re: ipfw + ipfw nat

Непрочитанное сообщение Гость » 2009-03-25 14:20:59

Если нормально писать отдельные специальные правила NAT для разных типов исходящего трафика -- то нормально написать дополняющие правила для входящего ответного трафика.
И вроде немного правил получится?

nat 111 tcp from any to ${ext0_ip} established
nat 111 gre from any to ${ext0_ip}

UDP вещь специфическая и обычно точно известно откуда и на какой порт этот трафик приходит: ntp, dns, ipsec, что еще? Названные сервисы кстати обчычно на роутере и работают, то есть такой трафик пускать через NAT незачем -- до правил входящего NAT разрешить прием пакетов для сервисов роутера.

Подчеркиваю заранее - я не спорю с утверждением, что "one_pass=1 для ipfw nat штука в большинстве случаев непригодная"

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-25 14:39:08

Гость писал(а):nat 111 gre from any to ${ext0_ip}
При one_pass=1 такая штука у меня глючила почему-то. У меня на серваке mpd еще висит в качестве сервака - к нему клиенты нормально цеплялись. А вот pptp под натом не хотел работать. Почему - разобраться так и не смог...

Тот же днс кстати у меня активно юзается контроллерами домена, а на шлюзе нет dns.

sch
проходил мимо

Re: ipfw + ipfw nat

Непрочитанное сообщение sch » 2009-03-25 17:58:23

по поводу pptp и gre - если на шлюзе MPD в роли PPTP-сервера для внешних клиентов и изнутри сети клиент создает PPTP-линк на внешний сервер - то конечно глючить может - gre нужно терминировать на шлюзе для MPD и одновременно пропускать внутрь для клиентского компьютера...

allow gre from any to ${ext0_ip} 1723 # можно поставить и до, и после блока правил NAT
nat 111 gre from any to ${ext0_ip} not 1723

По поводу DNS - если надо транслировать ответы из Интернет на внутренние сервера:

dnslist="ip.addr.prov.dns1,ip.addr.prov.dns2"
nat 111 udp from ${dnslist} 53 to ${ext0_ip}

В общем идея остается та же - специальными правилами NAT разрешать только нужный трафик - фактически используем те же методы, что и для двухпроходного режима работы, только вместо правила allow указывается nat.

Итого блок правил для входящего NAT:

Код: Выделить всё

...
add nat 111 ip from any to ${ext0_ip} established
add nat 111 gre from any to ${ext0_ip} not 1723
add nat 111 udp from ${dnslist} 53 to ${ext0_ip}
...
allow gre from any to ${ext0_ip} 1723

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: ipfw + ipfw nat

Непрочитанное сообщение CrazyPilot » 2009-03-25 18:12:25

Да по поводу dns понятно про нат.

А вот про gre не понял?????
sch писал(а):nat 111 gre from any to ${ext0_ip} not 1723
Что за бред? Или я чего-то не понимаю, или вы. 1723 - это tcp порт, который pptp использует для инициализации vpn. GRE - отдельный протокол (не TCP) под номером 47. По-моему правило лишено смысла...Порты сокетов в контексте gre не имеют смысла.

4fssw
проходил мимо

Re: ipfw + ipfw nat

Непрочитанное сообщение 4fssw » 2009-03-25 18:34:22

да, бред - увлекся :)
похоже, что для PPTP-сервера на шлюзе и одновременно для PPTP-клиента внутри будет таки глючить в однопроходном режиме...

sch
проходил мимо

Re: ipfw + ipfw nat

Непрочитанное сообщение sch » 2009-03-25 18:39:50

4fssw писал(а):да, бред - увлекся :)
похоже, что для PPTP-сервера на шлюзе и одновременно для PPTP-клиента внутри будет таки глючить в однопроходном режиме...
а если так попробовать

nat 111 tcp from any to ${ext0_ip} not 1723 proto 47