Kernel nat непонятки

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-02 14:26:46

Сразу извиняюсь за возможно глупый вопрос, но не бейте ногами. Раз уж человек обратился, значит для него это важно и непонятно.
Суть вот в чем.
Есть набор правил ipfw, в котором используется kernel nat

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

proxy# ipfw show
00100             8          4088           allow ip from any to any via lo0
00110             8          4088           deny ip from any to 127.0.0.0/8
00120             0               0           deny ip from 127.0.0.0/8 to any
00130      58375    6395396            deny ip from any to any not verrevpath in
00150             0          0                deny ip from any to 10.0.0.0/8 via em0
00200             0          0                deny ip from any to 172.16.0.0/12 via em0
00400             0          0                deny ip from any to 192.168.0.0/16 via em0
00500             0          0                deny ip from any to 0.0.0.0/8 via em0
00600             0          0                deny ip from any to 169.254.0.0/16 via em0
00700             0          0                deny ip from any to 192.0.2.0/24 via em0
00800        4048     113344            deny ip from any to 224.0.0.0/4 via em0
00900             0          0                deny ip from any to 240.0.0.0/4 via em0
01000        3424     165629            fwd 192.168.14.56,2121 tcp from 192.168.14.0/24 to not me dst-port 20,21 in via
01050           25       1542              nat 1 tcp from any to any dst-port 3389 via tun0
01050             0          0                allow tcp from any to 192.168.14.1 dst-port 3399 via xl0
01100   1019418  530603564          nat 2 ip4 from any to any via tun0
01200             0          0                deny ip from 10.0.0.0/8 to any via em0
01300             0          0                deny ip from 172.16.0.0/12 to any via em0
01400             0          0                deny ip from 192.168.0.0/16 to any via em0
01500             0          0                deny ip from 0.0.0.0/8 to any via em0
01600             0          0                deny ip from 169.254.0.0/16 to any via em0
01700             0          0                deny ip from 192.0.2.0/24 to any via em0
01800             0          0                deny ip from 224.0.0.0/4 to any via em0
01900             0          0                deny ip from 240.0.0.0/4 to any via em0
01950             0          0                check-state
02500      69309   19335140           allow ip from 192.168.14.0/24 to me dst-port 22,2121 in via xl0 keep-state
02600        3661     206593            allow ip from any 21 to 192.168.14.0/24 out via xl0 keep-state
02650           38       2142              allow ip from any to 192.168.14.0/24 dst-port 3389 out via xl0 keep-state
02700 21647959 1426105514         allow ip from 192.168.14.0/24 to me dst-port 80,81,3128 in via xl0 keep-state
02800     204629  103297671         allow ip from 192.168.14.0/24 to me dst-port 137-139,445 in via xl0 keep-state
02900       12695    1753860          allow ip from 192.168.14.0/24 to 192.168.14.255 dst-port 137-139,445 in via xl0
03000         2286     326779           allow ip from 192.168.14.0/24 to any dst-port 53 in via xl0 keep-state
03100     130176   96742445          allow ip from 192.168.14.0/24 to any dst-port 110,995,25,465 in via xl0 keep-st
03300     225999   60603009          allow ip from 192.168.14.0/24 to me dst-port 40000-65534 in via xl0
03400         8036    2353503          allow ip from me to any out xmit xl0
03500            30       1338             allow icmp from any to any in recv xl0
03900       17532    2010068          deny log logamount 10000 ip from any to any
65535              0          0               deny ip from any to any
B что удивительно это все РАБОТАЕТ !
НО я не могу понять почему? Ведь, как бы, я не разрешал соединения через tun0 или внешний интерфейс (может есть какое-то неявное разрешение). Помогите разобраться с этим, я подозреваю что это все от kernel nat. Объясните как правила идут через него, так же как и через natd или по-другому. Система FreeBSD 7.0, стоят Squid, Samba, Frox, ProFTPd.
У меня не кривые руки, я просто пока еще мало знаю.

Хостинговая компания 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/

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: Kernel nat непонятки

Непрочитанное сообщение Morty » 2008-10-02 20:28:59

А что не должно работать ?

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-02 21:06:59

Morty писал(а):А что не должно работать ?
В моемпонимании, чтобы все работало нужно разрешить входящие/исходящие на сервер из моей сети и исходящие/ходящие с сервера в интернет, а тут получается я разрешаю только входящие из моей сети и нет явного разрешения к интернет.
А вообще болше всего ка работает kernel nat, как пакеты идут через него
У меня не кривые руки, я просто пока еще мало знаю.

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: Kernel nat непонятки

Непрочитанное сообщение Morty » 2008-10-02 21:24:04

в 7ой , в штатном скрипте /etc/rc.firewall почти такая же реализация как у тебя и тоже все работает
посмотри скрипт, там везде где кернел нат и , старый(внешний демон нат) везде в скрипте юзаеться
только одно правило

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-02 21:37:14

Меня cмущали правила типа этого

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

 allow ip from 192.168.14.0/24 to any dst-port 110,995,25,465 in via xl0 keep-state
Вроде как разрешены только из локальной сети входящие через внутренний интерфейс. Я так понимаю происходит следующее (поправьте если не так):
при проверке почты пакет доходит до этого правила проходит через внутренний интерфейс, потом по таблице маршрутизации направляется в tun0, где его "перехватывает" nat и заменяет адрес внутренней сети на внешний адрес tun0, а дальше по какому правилу проходит пакет ? Получается что по этому же правилу он не пройдет при выходе из шлюза, т.к. адрес источника уже другой.
Получается что должно быть правило типа:

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

allow ip from me to any out via ${ext_if} 
вот что меня смущает.
У меня не кривые руки, я просто пока еще мало знаю.

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: Kernel nat непонятки

Непрочитанное сообщение Morty » 2008-10-02 22:10:54

эм...чето слегка в ступор меня поставил - перечитал ман по ipfw
единственная мысл что в голову пришал
сконфигурить нат
тоесть до

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

 nat 2 ip4 from any to any via tun0
добавить

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

nat 2 config [i]тут опции разные попробовать[/i]
идея таже как и в 6ой natd, в мане глянь
там де same_ports , unreg_only
Тоесть попробовать нечто в виде

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

nat 2 config ip 2.2.2.2 same_ports бла бла бла
проникнуться только нада, мне думаеть что фишка конкретно в работе самого ната , не столько фаера

ps: завтра еще раз сутра прочитаю може лучше пойму :smile:

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-02 22:21:32

Morty писал(а): проникнуться только нада, мне думаеть что фишка конкретно в работе самого ната , не столько фаера
Вот и я тоже так думаю, что дело в нате. Нормального описания работы kernel nat не нашел, приходится методом тыка осваивать его.
Потому что с обычным natd все поддается логике, а тут ка-то все немного не так получается.
З.Ы. завтра выложу сам конфиг вместе с конфигурацией nat-a.
У меня не кривые руки, я просто пока еще мало знаю.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Kernel nat непонятки

Непрочитанное сообщение dikens3 » 2008-10-02 22:27:22

К примеру PPPoE подключение имеет свой прозрачный нат.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: Kernel nat непонятки

Непрочитанное сообщение f_andrey » 2008-10-02 22:32:02

TeXNiC писал(а):Меня cмущали правила типа этого

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

 allow ip from 192.168.14.0/24 to any dst-port 110,995,25,465 in via xl0 keep-state
Вроде как разрешены только из локальной сети входящие
Советую почитать что нибудь расширеное про динамическое создание правил keep-state для начала например посмотрите вот тут пример
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 7:32:42

dikens3 писал(а):К примеру PPPoE подключение имеет свой прозрачный нат.
Я использовал nat в PPPoE, но хочу настроить в ipfw.
f_andrey писал(а): Советую почитать что нибудь расширеное про динамическое создание правил keep-state для начала например посмотрите вот тут пример
Прочитал, там используется divert на natd и все-равно есть правило которое явно разрешает исходящий трафик с шлюза через внешнюю сетевуху.
Вот конфиг фаера:

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

[Ss][Ii][Mm][Pp][Ll][Ee])
	# set these to your outside interface network and netmask and ip
	mytun=tun*
	oif="em0"
	# set these to your inside interface network and netmask and ip
	iif="xl0"
	inet="192.168.14.0"
	imask="255.255.255.0"
	iip="192.168.14.56"
            bcast="192.168.14.255"
	${fwcmd} add 100 pass all from any to any via lo0
	${fwcmd} add 110 deny all from any to 127.0.0.0/8
	${fwcmd} add 120 deny ip from 127.0.0.0/8 to any
	# 	Stop spoofing
	${fwcmd} add 130 deny ip from any to any not verrevpath in
	# Stop RFC1918 nets on the outside interface
	${fwcmd} add 150 deny all from any to 10.0.0.0/8 via ${oif}
	${fwcmd} add 200 deny all from any to 172.16.0.0/12 via ${oif}
	${fwcmd} add 400 deny all from any to 192.168.0.0/16 via ${oif}
	# Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
	# DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
	# on the outside interface
	${fwcmd} add 500 deny all from any to 0.0.0.0/8 via ${oif}
	${fwcmd} add 600 deny all from any to 169.254.0.0/16 via ${oif}
	${fwcmd} add 700 deny all from any to 192.0.2.0/24 via ${oif}
	${fwcmd} add 800 deny all from any to 224.0.0.0/4 via ${oif}
	${fwcmd} add 900 deny all from any to 240.0.0.0/4 via ${oif}
	#		Forward to transparent ftp proxy
	${fwcmd} add 1000 fwd 192.168.14.56,2121 tcp from ${inet}:${imask} to not me 20,21 in via ${iif}
	# 	redirect port to WTS
	${fwcmd} nat 1 config if tun0 log redirect_port tcp 192.168.14.1:3389 3389
	${fwcmd} add 1050 nat 1 tcp from any to any 3389 via ${mytun}
	${fwcmd} add 1050 allow tcp from any to 192.168.14.1 3399 via ${iif}
	# 		NAT
	${fwcmd} nat 2 config if ${mytun} log
	${fwcmd} add 1100 nat 2 ip4 from any to any via ${mytun}

	# Stop RFC1918 nets on the outside interface
	${fwcmd} add 1200 deny all from 10.0.0.0/8 to any via ${oif}
	${fwcmd} add 1300 deny all from 172.16.0.0/12 to any via ${oif}
	${fwcmd} add 1400 deny all from 192.168.0.0/16 to any via ${oif}
	# Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
	# DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
	# on the outside interface
	${fwcmd} add 1500 deny all from 0.0.0.0/8 to any via ${oif}
	${fwcmd} add 1600 deny all from 169.254.0.0/16 to any via ${oif}
	${fwcmd} add 1700 deny all from 192.0.2.0/24 to any via ${oif}
	${fwcmd} add 1800 deny all from 224.0.0.0/4 to any via ${oif}
	${fwcmd} add 1900 deny all from 240.0.0.0/4 to any via ${oif}
	${fwcmd} add 1950 check-state
	#  incoming from/to my network
	# server resources
	${fwcmd} add 2500 allow all from ${inet}:${imask} to me 22,2121 in via ${iif} keep-state
	${fwcmd} add 2600 allow all from any 21 to ${inet}:${imask} out via ${iif} keep-state
	${fwcmd} add 2650 allow all from any to ${inet}:${imask} 3389 out via ${iif} keep-state
	${fwcmd} add 2700 allow all from ${inet}:${imask} to me 80,81,3128 in via ${iif} keep-state
	${fwcmd} add 2800 allow all from ${inet}:${imask} to me 137-139,445 in via ${iif} keep-state
	${fwcmd} add 2900 allow all from ${inet}:${imask} to ${bcast} 137-139,445 in via ${iif}
	# Internet resources
	${fwcmd} add 3000 allow all from ${inet}:${imask} to any 53 in via ${iif} keep-state
	${fwcmd} add 3100 allow all from ${inet}:${imask} to any 110,995,25,465 in via ${iif} keep-state
	${fwcmd} add 3300 allow all from ${inet}:${imask} to me 40000-65534 in via ${iif}
	${fwcmd} add 3400 allow all from me to any out xmit ${iif}
	${fwcmd} add 3500 allow icmp from any to any in recv ${iif}
	${fwcmd} add 3900 deny log logamount 10000 all from any to any
У меня не кривые руки, я просто пока еще мало знаю.

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

Re: Kernel nat непонятки

Непрочитанное сообщение zingel » 2008-10-03 8:15:10

не надо конфиг, покажи

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

ipfw show
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 8:24:54

zingel писал(а):не надо конфиг, покажи

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

ipfw show
ipfw show в самом первом посте.
У меня не кривые руки, я просто пока еще мало знаю.

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

Re: Kernel nat непонятки

Непрочитанное сообщение zingel » 2008-10-03 8:53:57

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

01100   1019418  530603564          nat 2 ip4 from any to any via tun0
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 9:04:05

zingel писал(а):

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

01100   1019418  530603564          nat 2 ip4 from any to any via tun0
И в этом есть причина всего ?
Что-то логики не видно.
По-старому правило

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

ipfw add divert natd all from any to any via tun0
означало что натить все пакеты проходящие через tun0, а теперь получается что nat разрешает исходящие пакеты через tun0 ?
Что-то здесь не сходится.

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

Re: Kernel nat непонятки

Непрочитанное сообщение zingel » 2008-10-03 9:24:40

ну а в ядре у тебя по-дефолту стоит разрешать по-умолчанию всё?
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 9:27:49

В том то и дело чтов системе по дефолту

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

65535              0          0               deny ip from any to any
Да и принудительно стоит deny c логом. кого зарезали
У меня не кривые руки, я просто пока еще мало знаю.

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

Re: Kernel nat непонятки

Непрочитанное сообщение zingel » 2008-10-03 9:29:53

а вот сделай чтобы по-умолчанию все было запрещено.
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 9:35:46

zingel писал(а):а вот сделай чтобы по-умолчанию все было запрещено.
Я же написал в предидущем посте, что по-умолчанию все запрещено
У меня не кривые руки, я просто пока еще мало знаю.

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

Re: Kernel nat непонятки

Непрочитанное сообщение zingel » 2008-10-03 9:43:29

Ведь, как бы, я не разрешал соединения через tun0 или внешний интерфейс
Расскажи, в чём состоит суть проблемы, дай вывод

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

netstat -rn
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
TeXNiC
мл. сержант
Сообщения: 97
Зарегистрирован: 2007-02-06 12:17:35

Re: Kernel nat непонятки

Непрочитанное сообщение TeXNiC » 2008-10-03 9:50:48

Суть проблемы описана выше на несколько постов (примерно начиная с 5-го поста).

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

netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default             xxx.xxx.xxx.xxx        UGS         0   556633   tun0
xxx.xxx.xxx.xxx   yyy.yyy.yyy.yyy      UGH         1        0   tun0
127.0.0.1          127.0.0.1          UH          0   148939    lo0
192.168.1.0/24     link#1             UC          0        0    em0
192.168.14.0/24    link#2             UC          0        0    xl0
192.168.14.1       00:04:23:d6:38:ff  UHLW        1   348842    xl0   1199
192.168.14.2       00:03:99:8a:1a:0d  UHLW        1      466    xl0   1185
192.168.14.9       00:0a:e4:e5:dd:4f  UHLW        1     1201    xl0    813
192.168.14.56      00:01:02:0a:12:5f  UHLW        1    20496    lo0
192.168.14.101     00:19:d1:16:8b:ed  UHLW        1     2737    xl0    536
192.168.14.102     00:19:d1:44:2b:7b  UHLW        1     5443    xl0    896
192.168.14.103     00:19:d1:18:84:61  UHLW        1      768    xl0    968
192.168.14.104     00:19:d1:0f:02:0f  UHLW        1        0    xl0   1160
192.168.14.115     00:18:f3:b2:50:62  UHLW        1    19484    xl0   1160
192.168.14.255     ff:ff:ff:ff:ff:ff  UHLWb       1     3064    xl0
где
xxx.xxx.xxx.xxx - шлюз провайдера
yyy.yyy.yyy.yyy - мой ip присвоенный DHCP провайдера
У меня не кривые руки, я просто пока еще мало знаю.