Подробное руководство по ipfw nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mak_v_
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение mak_v_ » 2011-11-30 12:42:51

vadim64, учил-учил меня....а к 4-му десятку все никак не научусь слеши лепить :-)
Но установки ББ не деют отредактировать по прошествии......

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

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение vadim64 » 2011-11-30 12:50:23

ну согласитесь, форматированные сообщения удобнее смотреть
информативнее чтоли они...
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение mak_v_ » 2011-11-30 12:57:01

Не спорю, но запостил и закрыл на автомате, а сейчас уж возможность редактировать отсутствует

mr.yaky
рядовой
Сообщения: 12
Зарегистрирован: 2010-07-25 19:12:16

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение mr.yaky » 2011-12-01 12:37:44

vadim64 писал(а):покажите сам конфиг фаервола, я же не вижу что там у вас за опции ната
в первом моем сообщении вылаживал также

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

# ipfw nat show config
ipfw nat 2 config log same_ports redirect_addr 192.0.172.2 203.0.113.19
ipfw nat 1 config if bce0 log deny_in same_ports reset \
redirect_port tcp 192.0.2.110:35300 35300

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение vadim64 » 2011-12-01 19:56:06

покажите, пожалуйста, как выглядит вывод ipfw show, если вы ставите правила второго экземпляра ната раньше первого
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

nashvill
проходил мимо
Сообщения: 3
Зарегистрирован: 2011-12-05 16:13:57

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение nashvill » 2011-12-05 16:20:00

Прошу совета:
Нужно натить очень приличную пачку серых блоков в паблики.
Сейчас используется PF который не устраивает тем, что однопоточный, однако умеет одной строчкой натить много-много серых в один блок пабликов.
В случае с ipfw nat можно натить только в один IP, при необходимости натить в несколько (запустив по отдельному инстансу под каждый паблик) - такой вариант сильно увеличивает количество строк (правил) в ipfw, что приводит к большой деградации производительности (на синтетических тестах при 254х nat instances я получил почти пятикратное падение производительности).
Вопрос - есть ли пути решения данной проблемы? Либо какое приемлимое количество юзверей можно натить в один IP без возникновения у них проблем?
Пока у меня появилась лишь мысль генерить "дерево" за счет пачки skipto, но мне это кажется все же не совсем удачным решением.

nashvill
проходил мимо
Сообщения: 3
Зарегистрирован: 2011-12-05 16:13:57

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение nashvill » 2011-12-07 12:50:45

Собственно solved.
Применение tablearg к nat решило проблему.

Впрочем, теперь возникла другая странность - достаточно высокая нагрузка по прерываниям для на мой взгляд не столь большого трафика.
У кого-нибудь есть удачный опыт тюнинга ix (ixgbe) карточек ?

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение vadim64 » 2011-12-07 20:05:08

nashvill писал(а):Собственно solved.
Применение tablearg к nat решило проблему.

Впрочем, теперь возникла другая странность - достаточно высокая нагрузка по прерываниям для на мой взгляд не столь большого трафика.
У кого-нибудь есть удачный опыт тюнинга ix (ixgbe) карточек ?
поделитесь, как именно вы реализовали с помощью tablearg
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

nashvill
проходил мимо
Сообщения: 3
Зарегистрирован: 2011-12-05 16:13:57

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение nashvill » 2011-12-07 20:34:02

vadim64 писал(а):
nashvill писал(а):Собственно solved.
Применение tablearg к nat решило проблему.

Впрочем, теперь возникла другая странность - достаточно высокая нагрузка по прерываниям для на мой взгляд не столь большого трафика.
У кого-нибудь есть удачный опыт тюнинга ix (ixgbe) карточек ?
поделитесь, как именно вы реализовали с помощью tablearg
Принцип:
Создаем две таблицы, в первую мы добавляем блок серых и номер ната в который будем натить, а во вторую добавляем белый IP в который мы натим и номер ната.
таким образом блок серых и один паблик ссылаются на один и тот же NAT instance.

На деле:
ipfw table 1 add 192.168.0.0/24 1
ipfw table 1 add 192.168.1.0/24 2
ipfw table 1 add 192.168.2.0/24 3
ipfw table 2 add a.b.c.1/32 1
ipfw table 2 add a.b.c.2/32 2
ipfw table 2 add a.b.c.3/32 3

получаем 192.168.0.0/24 натится в a.b.c.1, 192.168.1.0/24 натится в a.b.c.2 и т.п.

сами правила описываем в ipfw так:

ipfw add 100 nat tablearg ip from table(1) to any out xmit ${ext}
ipfw add 200 nat tablearg ip from any to table(2) in recv ${ext}

pom
рядовой
Сообщения: 14
Зарегистрирован: 2010-12-31 15:08:44

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение pom » 2011-12-12 16:21:40

Нужна помощь в решении проблемы с клиентом Windows 7 выходящим в интернет через freebsd ipfw nat. Четко локализовать проблему не могу. Проявляется в отсутствии на компе с Windows 7 доступа к ресурсам интернета работающим через ipfw nat (аська, дропбокс, почта и т.п.), при этом сайты доступны (прозрачное проксирование). Проявляется обычно после перезагрузки клиента, но не всегда! То есть может работать нормально несколько перезагрузок, а может и на работающем выходные компе в понедельник обнаружиться. Лечится обычно сменой айпи на другой, но опять таки не всегда помогает, иногда просто проходит само через время. :st: Пока выглядит как порча. :crazy: :ROFL:

pom
рядовой
Сообщения: 14
Зарегистрирован: 2010-12-31 15:08:44

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение pom » 2011-12-12 16:29:02

Вдогонку:
Клиенты на вин ХР и линуксе работают абсолютно нормально.
Роутер на FreeBSD 8.2, pppoe поднимается mpd5, правила ipfw ниже:

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

fw="/sbin/ipfw -q add"
mx="{ xxx or xxx }"
/sbin/ipfw -q -f flush

$fw 10 pass all from any to any via lo0
$fw 20 deny all from any to 127.0.0.0/8
$fw 30 deny ip from 127.0.0.0/8 to any

$fw 90 allow all from any to any via rl1

$fw 100 deny all from any to 0.0.0.0/8 via ng0
$fw 110 deny all from any to 169.254.0.0/16 via ng0
$fw 120 deny all from any to 192.0.2.0/24 via ng0
$fw 130 deny all from any to 224.0.0.0/4 via ng0
$fw 140 deny all from any to 240.0.0.0/4 via ng0

$fw 150 skipto 300 all from 192.168.10.247 to any
$fw 160 skipto 300 all from 192.168.10.0/24 to 192.168.20.0/24
$fw 170 skipto 300 all from 192.168.20.0/24 to 192.168.10.0/24
$fw 180 skipto 300 all from ${mx} 25 to 192.168.10.0/24
$fw 190 skipto 300 all from 192.168.10.0/24 to ${mx} 25
$fw 200 skipto 300 all from ${mx} 25 to 192.168.100.0/24
$fw 210 skipto 300 all from 192.168.100.0/24 to ${mx} 25
$fw 220 deny all from any to any 25,135-139,445
$fw 230 skipto 300 all from any 20,21,22,80,222,123,110,443,465,995,5190-5193,2042,3128,2121,1723,3389,3379,3398,3390,3590,8291,8000,4499,15178,5577 to 192.168.10.0/24 via ng0
$fw 240 skipto 300 all from any 587,81,8080,8088,4398,1494,1604,9704,7002,7060,7777,8008,9199,3399,3350,3392,5222,3395,4498,2222,3589,45000-60000 to 192.168.10.0/24 via ng0
$fw 250 deny all from any to 192.168.10.0/24 via ng0

$fw 300 deny all from any to me zebra,bgpd

$fw 310 allow all from any to me 20,21,80,222,53,123,45000-50000 via ng0
$fw 320 allow icmp from any to me icmptypes 8 in recv ng0

$fw 2000 fwd 192.168.10.1,3128 tcp from 192.168.10.0/24 to any http out via ng0
$fw 2100 fwd 192.168.100.1,3128 tcp from 192.168.100.0/24 to any http out via ng0

/sbin/ipfw nat 1 config log if ng0 reset same_ports deny_in redirect_port tcp 192.168.10.108:xxx xxx redirect_port tcp 192.168.10.15:xxx xxx redirect_port tcp 192.168.10.11:xxx xxx redirect_port tcp 192.168.10.11:60093 60093 redirect_port tcp 192.168.20.2:xxx xxx redirect_port tcp 192.168.10.15:80 8088 redirect_port tcp 192.168.10.15:xxx xxx

$fw 10000 nat 1 ip from any to any via ng0

$fw 10100 allow all from any to any

$fw 10500 allow tcp from any to me 1723
$fw 10600 allow gre from any to any

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Jonny » 2012-01-07 11:56:16

Доброго времени суток установил MPD5 в качестве клиента и сервера.

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

re0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST                                                                                                  ,WOL_MCAST,WOL_MAGIC>
        ether 00:30:67:23:c4:3f
        media: Ethernet autoselect (none)
        status: no carrier
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST                                                                                                  ,WOL_MCAST,WOL_MAGIC>
        ether 14:d6:4d:1c:9e:53
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (none)
        status: no carrier
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=82808<VLAN_MTU,WOL_UCAST,WOL_MAGIC,LINKSTATE>
        ether 00:24:01:02:59:f5
        inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1460
        inet 10.0.1.21 --> 10.0.1.1 netmask 0xffffffff
ng1: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1396
        inet 192.168.21.1 --> 192.168.21.10 netmask 0xffffffff
Как видно оба соединения ng0 (pptp подключение к провайдеру) и ng1 (pptp подключение клиента из внутренней сети) поднялись.

ipfw:

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

FwCMD="/sbin/ipfw"       # собственно где лежит бинарник ipfw
VpnOut="ng0"                 # внешний интерфейс ppp
LanOut="vr0"                  # внешний интерфейс lan
LanIn="re1"                    # внутренний интерфейс lan
IpOut="192.168.0.100"    # внешний IP адрес машины
IpIn="192.168.21.0"        # внутренняя подсеть IP ppp-клиентов
NetMask="24"                 # маска сети (если она разная для внешней
NetOut="10.0.1.0"           # ip адрес ppp соединения с провайдером

# Сбрасываем все правила:
${FwCMD} -f flush

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :)
# так что без него и правда - никуда.
${FwCMD} add allow ip from any to any via lo0

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 (вот честно - ни
# одного пакета по этим правилам не зарубилось за всё время... Может в этом
# моё счастье? :))
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# рубаем мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}

# рубим фрагментированные icmp
${FwCMD} add deny icmp from any to any frag

# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}

# NAT
${FwCMD} nat 1 config if ${LanOut} same_ports
${FwCMD} add 430 nat 1 ip from ${NetIn}/${NetMask} to any out via ${LanOut}
${FwCMD} add 440 nat 1 ip from any to ${IpIn}/${NetMask} in via ${LanOut}

${FwCMD} add allow ip from any to any
помогите написать минимальные правила для доступа в интернет.

mia
проходил мимо
Сообщения: 5
Зарегистрирован: 2009-12-15 9:48:49

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение mia » 2012-01-11 15:39:59

Добрый день.
тестовый шлюз FreeBSD - 9 Release - XENHVM + в ядро добавлены опции ipfw
win2008R2 - 192.168.0.99
win7 - 192.168.2.48
клиент коннектится на 192.168.2.249

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

# cat /etc/firewall
nat 3 config ip 192.168.2.249 redirect_port tcp 192.168.0.99:3389 192.168.2.249:3389
add nat 3 ip from any to 192.168.2.249 3389
add nat 3 tcp from 192.168.0.99 3389 to any

nat 2 config ip 192.168.2.249 same_ports
add nat 2 all from 192.168.0.0/24 to 192.168.0.99

nat 1 config log if xn1 reset same_ports deny_in redirect_port tcp 192.168.2.249:22 22
add nat 1 ip from any to any via xn1

add  allow all from any to any
tcpdump "локалка" шлюз

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

tcpdump -npi xn0 port 3389
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on xn0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:53:56.812384 IP 192.168.2.48.63633 > 192.168.0.99.3389: Flags [S], seq 2844189919, win 8192, options [mss 1460,sackOK,TS val 129964942 ecr 0], length 0
15:53:56.812777 IP 192.168.0.99.3389 > 192.168.2.48.63633: Flags [S.], seq 1049893249, ack 2844189920, win 8192, options [mss 1460,sackOK,TS val 189011974 ecr 129964942], length 0
15:53:59.817424 IP 192.168.2.48.63633 > 192.168.0.99.3389: Flags [S], seq 2844189919, win 8192, options [mss 1460,sackOK,TS val 129965242 ecr 0], length 0
15:53:59.821298 IP 192.168.0.99.3389 > 192.168.2.48.63633: Flags [S.], seq 1049893249, ack 2844189920, win 8192, options [mss 1460,sackOK,TS val 189012275 ecr 129964942], length 0
15:54:05.821457 IP 192.168.2.48.63633 > 192.168.0.99.3389: Flags [S], seq 2844189919, win 8192, options [mss 1460,sackOK,TS val 129965843 ecr 0], length 0
15:54:05.827390 IP 192.168.0.99.3389 > 192.168.2.48.63633: Flags [S.], seq 1049893249, ack 2844189920, win 8192, options [mss 1460,sackOK,TS val 189012876 ecr 129964942], length 0
tcpdump - "мир"

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

tcpdump -npi xn1 port 3389
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on xn1, link-type EN10MB (Ethernet), capture size 65535 bytes
16:26:38.385409 IP 192.168.2.48.64002 > 192.168.2.249.3389: Flags [S], seq 1805686117, win 8192, options [mss 1460,sackOK,TS val 130161093 ecr 0], length 0
16:26:38.385902 IP 192.168.2.249.3389 > 192.168.2.48.64002: Flags [S.], seq 201336867, ack 1805686118, win 8192, options [mss 1460,sackOK,TS val 189208134 ecr 130161093], length 0
16:26:41.385326 IP 192.168.2.249.3389 > 192.168.2.48.64002: Flags [S.], seq 201336867, ack 1805686118, win 8192, options [mss 1460,sackOK,TS val 189208434 ecr 130161093], length 0
16:26:41.389480 IP 192.168.2.48.64002 > 192.168.2.249.3389: Flags [S], seq 1805686117, win 8192, options [mss 1460,sackOK,TS val 130161393 ecr 0], length 0
16:26:47.388680 IP 192.168.2.48.64002 > 192.168.2.249.3389: Flags [S], seq 1805686117, win 8192, options [mss 1460,sackOK,TS val 130161993 ecr 0], length 0
16:26:47.391149 IP 192.168.2.249.3389 > 192.168.2.48.64002: Flags [S.], seq 201336867, ack 1805686118, win 8192, options [mss 1460,sackOK,TS val 189209035 ecr 130161093], length 0

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

ipfw show
00100    0      0 allow ip from any to any via lo0
00200    0      0 deny ip from any to 127.0.0.0/8
00300    0      0 deny ip from 127.0.0.0/8 to any
00400    0      0 deny ip from any to ::1
00500    0      0 deny ip from ::1 to any
00600    0      0 allow ipv6-icmp from :: to ff02::/16
00700    0      0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800    0      0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900    0      0 allow ipv6-icmp from any to any ip6 icmp6types 1
01000    0      0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
01100    3    168 nat 3 ip from any to 192.168.2.249 dst-port 3389
01200    6    336 nat 3 tcp from 192.168.0.99 3389 to any
01300    4    224 nat 2 ip from 192.168.0.0/24 to 192.168.0.99
01400  378  33646 nat 1 ip from any to any via xn1
01500 1681 331364 allow ip from any to any
65535   82  23448 deny ip from any to any
Подскажите, почему не устанавливается соединение.

Devapath
проходил мимо
Сообщения: 1
Зарегистрирован: 2011-07-14 10:30:43

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Devapath » 2012-01-28 13:24:27

Подскажите, как правильно ограничивать исходящий из внутренней сети трафик (в контексте ВТОРОГО примера). На внутреннем или на внешнем интерфейсе?

gardener
рядовой
Сообщения: 18
Зарегистрирован: 2012-01-25 19:11:14

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение gardener » 2012-01-28 21:05:33

Прошу прощения, если баян, нет возможности листать весь тред.

При составлении документации нужно уделить внимание вопросу совместного использования "ядреного" ната, сохраненного состояния и возможно и шейпера.
Я, как новичок, порядком намучился без примеров и подробной документации. Поэтому было бы очень полезно затронуть и этот вопрос.

Например, понятно дело, что если правило allow сопровождается keep-state, то при движении пакета в обратном направлении и прохождении правила check-state будет выполнено вышеуказанное правило. НО! Если это обратный пакет, то в случае с НАТом (рассматривается случай когда исходящие натятся на выходе, а входящие на входе) он должен быть транслирован(!). То есть правило должно быть для обратного пакета не allow, а nat.
Я вышел из ситуации сохранением состояния на правилах skipto, с дальнейшим разделением на исходящие и входящие и выполнением соответствующих правил: allow или nat (не забыв при этом установить one_pass в 0).

Если нужно будет выложу свои громоздкие и сложные правила. :oops:

sfefelov@mail.ru
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sfefelov@mail.ru » 2012-03-26 15:54:02

Есть кто настроил 2 канала нормально?
цель простая есть 2 канала tun0 и tun1

для tun0 Все настроено и работает,
хочется ip 192.168.0.10 пустить по второму каналу tun1, только что-то пакеты все равно усердно идут на tun0...
Идеи мысли, уже все на что мозгов хватило перебрал,
настроено все через kernel nat... кто готов помочь, пришлю литинги
связь через sfefelov@mail.ru будет быстрее

PunKHS
рядовой
Сообщения: 10
Зарегистрирован: 2012-05-08 13:29:07

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение PunKHS » 2012-06-11 9:51:33

Вот такой вот конфиг:

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

FwCMD="/sbin/ipfw"      # собственно где лежит бинарник ipfw
LanOut="tun0"           # внешний интерфейс
LanIn="alc0"            # внутренний интерфейс
IpOut="ВнешняяIP"   # внешний IP адрес машины
IpIn="192.168.1.34"     # внутренний IP машины
#IpIn="192.168.1.100"   # внутренний IP машины
NetMask="24"            # маска сети (если она разная для внешней 
                        # и внутренней сети - придётся вводить ещё 
                        # одну переменную, но самое забавное, что 
                        # можно и забить - оставить 24 - всё будет 
                        # работать, по крайней мере я пробовал - 
                        # работаало на 4-х машинах, в разных сетях, 
                        # с разными масками - настоящими разными! но - 
                        # это неправильно.)
NetIn="192.168.1.0"     # Внутренняя сеть
NetOut="83.221.217.0"   # Внешняя сеть

# Сбрасываем все правила:
${FwCMD} -f flush

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${FwCMD} add allow ip from any to any via lo0

# Попытки lo0 куда-то лезть и откуда-то лезть на lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# Частные сeти
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}

# Рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}

# Рубим мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}

# Рубим фрагментированные icmp
${FwCMD} add deny icmp from any to any frag

# Рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}

# Отправляем всех на squid (в данном случае - прокси прозрачный)
#${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}

# KERNEL NAT
${FwCMD} nat 1 config ip ${IpOut} unreg_only same_ports log \
redirect_port tcp 192.168.1.205:25 25 \
redirect_port tcp 192.168.1.205:143 143 \
redirect_port tcp 192.168.1.205:110 110 \
redirect_port tcp 192.168.1.205:3000 3000 \
redirect_port tcp 192.168.1.198:443 443 \
redirect_port tcp 192.168.1.201:3389 3389

#25,143,110,3000 - mail
#443 - Bank
#3389 - RDP

${FwCMD} add nat 1 all from ${NetIn}/${NetMask} to any
${FwCMD} add nat 1 all from any to ${IpOut}

# Рубим траффик к частным сетям через внешний интерфейс
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}

# Рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}

# Рубим мультикастовые рассылки
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}

# Разрешаем все установленные соединения
${FwCMD} add allow tcp from any to ${IpOut} established

# Разрешаем весь исходящий траффик (серверу-то в инет можно? :))
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

# Разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)
${FwCMD} add allow udp from any 53 to any via ${LanOut}

# Разрешаем DNS входящий снаружи - если на этой машине работает named
# и держит какую-то зону. В остальных случаях - не нужно
${FwCMD} add allow udp from any to any 53 via ${LanOut}

# Разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}

# Разрешаем ftp снаружи (пассивный режим)
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 50000-50100 via ${LanOut}

# Разрешаем некоторые типы ICMP траффика - эхо-запрос, 
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11

# Открываем снаружи 22 порт - если надо будет ходить на машину по ssh
#${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}

# Открываем снаружи 25 порт (SMTP) если на машине крутится почта
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}

# Открываем снаружи 80 порт - если у нас есть WWW сервер на машине
#${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}

# Открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}

# Открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP)
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}

# Открываем снаружи 443 порт(для Банк-клиента)
${FwCMD} add allow tcp from any to ${IpOut} 443 via ${LanOut}

# Открываем снаружи 10000 порт(для Webmin)
#${FwCMD} add allow tcp from any to ${IpOut} 10000 via ${LanOut}

# Разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow tcp from any to any via ${LanIn}

# Разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow udp from any to any via ${LanIn}

# Разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow icmp from any to any via ${LanIn}

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
#${FwCMD} add deny ip from any to any
#${FwCMD} add 65000 pass all from any to any

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

press# ipfw show
00100    0       0 check-state
00200  978  631026 allow ip from any to any via lo0
00300    0       0 deny ip from any to 127.0.0.0/8
00400    0       0 deny ip from 127.0.0.0/8 to any
00500    0       0 deny ip from any to 10.0.0.0/8 in via tun0
00600    0       0 deny ip from any to 172.16.0.0/12 in via tun0
00700    0       0 deny ip from any to 192.168.0.0/16 in via tun0
00800    0       0 deny ip from any to 0.0.0.0/8 in via tun0
00900    0       0 deny ip from any to 169.254.0.0/16 in via tun0
01000    0       0 deny ip from any to 240.0.0.0/4 in via tun0
01100    0       0 deny icmp from any to any frag
01200    0       0 deny log logamount 1000 icmp from any to 255.255.255.255 in v                                                                                                                               ia tun0
01300    0       0 deny log logamount 1000 icmp from any to 255.255.255.255 out                                                                                                                                via tun0
01400 2288  253242 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any dst-port 80                                                                                                                                via tun0
01500 5804 1351508 nat 1 ip from 192.168.1.0/24 to any
01600 4006 3452421 nat 1 ip from any to ВнешняяIP
01700    0       0 deny ip from 10.0.0.0/8 to any out via tun0
01800    0       0 deny ip from 172.16.0.0/12 to any out via tun0
01900    0       0 deny ip from 192.168.0.0/16 to any out via tun0
02000    0       0 deny ip from 0.0.0.0/8 to any out via tun0
02100    0       0 deny ip from 169.254.0.0/16 to any out via tun0
02200    0       0 deny ip from 224.0.0.0/4 to any out via tun0
02300    0       0 allow tcp from any to ВнешняяIP established
02400 3313  291369 allow ip from ВнешняяIP to any out xmit tun0
02500    0       0 allow udp from any 53 to any via tun0
02600    0       0 allow udp from any to any dst-port 53 via tun0
02700    0       0 allow udp from any to any dst-port 123 via tun0
02800    0       0 allow tcp from any to ВнешняяIP dst-port 21 via tun0
02900    0       0 allow tcp from any to ВнешняяIP dst-port 50000-50100 via                                                                                                                                tun0
03000    0       0 allow icmp from any to any icmptypes 0,8,11
03100    0       0 allow tcp from any to ВнешняяIP dst-port 25 via tun0
03200    0       0 allow tcp from any to ВнешняяIP dst-port 110 via tun0
03300    0       0 allow tcp from any to ВнешняяIP dst-port 143 via tun0
03400    0       0 allow tcp from any to ВнешняяIP dst-port 443 via tun0
03500 4448 3893888 allow tcp from any to any via alc0
03600   48   25040 allow udp from any to any via alc0
03700    0       0 allow icmp from any to any via alc0
03800    0       0 deny ip from any to any
65535    0       0 deny ip from any to any

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

press# netstat -na | grep LIST
tcp4       0      0 *.22                   *.*                    LISTEN
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 *.3306                 *.*                    LISTEN
tcp4       0      0 127.0.0.1.3128         *.*                    LISTEN
tcp4       0      0 *.10000                *.*                    LISTEN
tcp4       0      0 *.21                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.953          *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
tcp4       0      0 192.168.1.34.53        *.*                    LISTEN
Почему не все порты закрыты??????????????


PunKHS
рядовой
Сообщения: 10
Зарегистрирован: 2012-05-08 13:29:07

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение PunKHS » 2012-06-14 6:46:39

Байкал писал(а):потому, что нат без deny_in
с этой опцией локалку и мир вообще не видит)

gardener
рядовой
Сообщения: 18
Зарегистрирован: 2012-01-25 19:11:14

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение gardener » 2012-06-14 9:16:38

PunKHS писал(а):
Байкал писал(а):потому, что нат без deny_in
с этой опцией локалку и мир вообще не видит)
И это правильно.

Тут дело в другом, например:

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

# Открываем снаружи 10000 порт(для Webmin)
#${FwCMD} add allow tcp from any to ${IpOut} 10000 via ${LanOut}
В ответ получаем:

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

tcp4       0      0 *.10000                *.*                    LISTEN
Потому что правило FROM ANY TO VIA двунаправленное. Если открывается порт _С_наружи, то для исключения неоднозначностей нужно указывать как направление так и сторону интерфейса: IN RECV, а не VIA

А вот это откуда берется мне вообще не понятно.

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

tcp4       0      0 *.3306                 *.*                    LISTEN

PunKHS
рядовой
Сообщения: 10
Зарегистрирован: 2012-05-08 13:29:07

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение PunKHS » 2012-06-14 13:32:43

3306 - порт MySQL. Получается что тоже открыт

gardener
рядовой
Сообщения: 18
Зарегистрирован: 2012-01-25 19:11:14

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение gardener » 2012-06-14 21:16:57

не только открыт, но что удивительно, в правилах нигде не прописан.

PunKHS
рядовой
Сообщения: 10
Зарегистрирован: 2012-05-08 13:29:07

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение PunKHS » 2012-06-15 14:47:23

gardener писал(а):не только открыт, но что удивительно, в правилах нигде не прописан.
Это не удивительно! Фаер вообще не защищает сервер! Абсолютно все открыто!

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение FreeBSP » 2012-06-15 15:30:38

файер рубит пакеты на интерфейсах
это не значит что никто не может ничего слушать, это значит что пакет на прослушиваемый порт будет проанализирован файером до того как пакет попадет в систему.
это во первых.
а во вторых, onepass покажите
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
lolwut
мл. сержант
Сообщения: 123
Зарегистрирован: 2010-01-26 4:39:23

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение lolwut » 2012-06-27 1:34:29

PunKHS писал(а):Вот такой вот конфиг:

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

press# netstat -na | grep LIST
tcp4       0      0 *.22                   *.*                    LISTEN
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 *.3306                 *.*                    LISTEN
tcp4       0      0 127.0.0.1.3128         *.*                    LISTEN
tcp4       0      0 *.10000                *.*                    LISTEN
tcp4       0      0 *.21                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.953          *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
tcp4       0      0 192.168.1.34.53        *.*                    LISTEN
Почему не все порты закрыты??????????????
Потому что Вы путаете теплое с мягким! ipfw, как и вообще любой firewall, не имеет отношения к тому какие порты "слушает" Ваш софт. Совсем. Он может только закрыть доступ или не закрывать его.
Хинт:
  1. Пишем в /etc/rc.conf

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

    sshd_enable="YES"
    sshd_flags="-4 -o 'ListenAddress локальный.IP.адрес.сервера'"
    
  2. Делаем:

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

    /etc/rc.d/sshd restart
  3. Смотрим:

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

    netstat -an | grep -i listen
  4. ???
  5. ПРОФИТ!