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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
crx
рядовой
Сообщения: 10
Зарегистрирован: 2010-06-02 13:29:50

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

Непрочитанное сообщение crx » 2010-07-01 12:03:35

Эх... если бы я был силён в нем... :smile:
Мне все-же кажется что проблема больше не в mpd а в ipfw.

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

C:\Users\Crx>tracert 10.0.0.26

Трассировка маршрута к 10.0.0.26 с максимальным числом прыжков 30

  1     2 ms     3 ms     2 ms  89.252.56.96.freenet.com.ua [89.252.56.96]  {- внешний айпи сервера.}
  2   168 ms    12 ms     3 ms  10.0.0.26

Трассировка завершена.


C:\Users\Crx>tracert 10.0.0.200

Трассировка маршрута к 10.0.0.200 с максимальным числом прыжков 30

  1    14 ms     2 ms     2 ms  89.252.56.96.freenet.com.ua [89.252.56.96]
  2     *        *        *     Превышен интервал ожидания для запроса.
  3     *        *        *     Превышен интервал ожидания для запроса.
  4     *        *        *     Превышен интервал ожидания для запроса.
  5     *     ^C
вот так вот странно.

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-07-01 12:07:03

А какие диапазоны IP используются в локальной сети и выдаются VPN клиентам?

LAN 10.0.0.0/24
VPN 10.0.0.210-10.0.0.220
?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

crx
рядовой
Сообщения: 10
Зарегистрирован: 2010-06-02 13:29:50

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

Непрочитанное сообщение crx » 2010-07-01 12:13:24

Угу
LAN 10.0.0.0/24 (реально dhcp выдает от 10.0.0.10 до 10.0.0.200, все что ниже 10.0.0.10 всякая статика типа шлюза и файл-помойки)
VPN от 10.0.0.210 до 10.0.0.220

ну внешний айпи и так вроде указан...

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-07-01 12:18:06

MPD работает в режиме моста или рутера?

Просто получается, что все адреса из одной подсети, и винда в локальной сети наверное думает что VPN клиент там же и не шлет ответ через рутер, а пытается напрямую. Дать для VPN юзеров отдельные диапазон IP (10.0.1.0/24) нельзя?

в настроеках тех принтеров которые пингуются какая IP маска?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

crx
рядовой
Сообщения: 10
Зарегистрирован: 2010-06-02 13:29:50

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

Непрочитанное сообщение crx » 2010-07-01 13:25:25

Получилось. Вывел vpn клиентов в другую сетку и разрешил трафику между подсетями.
У принтеров была маска 255.255.255.0

Спасибо огромное за помощь, за статью и за качественную поддержку начинающих нубов типа меня :drinks:

krokozjabr
ефрейтор
Сообщения: 57
Зарегистрирован: 2010-05-01 21:27:02

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

Непрочитанное сообщение krokozjabr » 2010-07-14 21:36:30

ситуация хост freebsd на нём qemu и уго надо вывести на улицу бьюсь уже 11:03
serv это хост
drag qemu
делал сначала так

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

ipfw  nat 4 config log if wl0  same_ports  redirect_port tcp 192.168.138.2:7778 7778
[root@serv ~]# ipfw add  nat 4 ip from any to me 7777,7778,7779

с сервера к qemu есть а с улице ошибка по таймоуту но ipfw show показывает
хорошо сбрасываем файр
и пишим

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

ipfw nat 2 config  redirect_port tcp  192.168.138.2:7777-7779 7777-7779 same_ports
 ipfw add  nat 2 ip from any to any 7777,7778,7779
и тут уже интересно улица ругаеться

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

ssh:connect to host x.x.x.x port 7778 Connection refused
на обоих фря и пинги с хоста идут к quemu и подключения от хоста по ssh работают

kozzak
проходил мимо
Сообщения: 1
Зарегистрирован: 2010-01-14 13:43:03

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

Непрочитанное сообщение kozzak » 2010-07-19 10:47:26

Здравствуйте. Подскажите как на основе примера №2 правильно добавить ограничения на доступ пользователям сети к определенным сервисам + открыть нужные порты снаружи.
Есть набор рабочих правил по портам, но вот резать скорость никак не выходит.
Система FreeBSD 7.2 RELEASE под VMWare для проверки.
Ядро собрано с опциями (указываю только то что добавил/удалил):

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

cpu             I686_CPU
ident           GENERIC
# makeoptions   DEBUG=-g
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=50
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=2
options         DUMMYNET
options         HZ="1000"
options         IPFIREWALL_FORWARD

options         NETGRAPH
options         NETGRAPH_ETHER
options         NETGRAPH_SOCKET
options         NETGRAPH_TEE
options         NETGRAPH_MPPC_ENCRYPTION
Правило firewall

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

#!/bin/sh
# /etc/firewall

WAN="le1"
WAN_IP="1.2.3.254"
LAN="le0"
LAN_IP="192.168.1.254"
lan_net="192.168.1.0/24"
vpn="192.168.1.240"
mailserv="25,143,465,993,995"

fwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f pipe flush
${fwcmd} -f queue flush

${fwcmd} add check-state

##################### Deny
# lo
${fwcmd} add allow ip from 127.0.0.0/8 to any via lo0
${fwcmd} add allow ip from any to 127.0.0.0/8 via lo0
${fwcmd} add allow ip from any to any via 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 192.168.0.0/16 in recv ${WAN}
${fwcmd} add deny ip from 192.168.0.0/16 to any in recv ${WAN}
${fwcmd} add deny ip from any to 172.16.0.0/12 in recv ${WAN}
${fwcmd} add deny ip from 172.16.0.0/12 to any in recv ${WAN}
${fwcmd} add deny ip from any to 10.0.0.0/8 in recv ${WAN}
${fwcmd} add deny ip from 10.0.0.0/8 to any in recv ${WAN}
${fwcmd} add deny ip from any to 169.254.0.0/16 in recv ${WAN}
${fwcmd} add deny ip from 169.254.0.0/16 to any in recv ${WAN}
${fwcmd} add deny ip from any to 0.0.0.0/8 in recv ${WAN}
${fwcmd} add deny ip from 0.0.0.0/8 to any in recv ${WAN}
${fwcmd} add deny ip from any to 240.0.0.0/4 in recv ${WAN}
${fwcmd} add deny ip from 240.0.0.0/4 to any in recv ${WAN}
# anti-hack from outside
${fwcmd} add deny ip from me to any in recv ${WAN}
${fwcmd} add deny ip from any to any not antispoof in
# deny icmp
${fwcmd} add deny icmp from any to any frag
${fwcmd} add deny log icmp from any to 255.255.255.255 in via ${WAN}
${fwcmd} add deny log icmp from any to 255.255.255.255 out via ${WAN}
#${fwcmd} add deny icmp from any to any in recv le1 icmptypes 5,9,13,14,15,16,17
# deny netbios MS SQL
${fwcmd} add deny ip from any 137-139,445,1433 to any
${fwcmd} add deny ip from any to any 137-139,445,1433
#################### End Deny

#Transparent proxy
${fwcmd} add fwd 127.0.0.1,3128 tcp from ${lan_net} to not me dst-port 80

${fwcmd} add allow icmp from any to any icmptypes 0,3,4,8,10,11,30
${fwcmd} add allow tcp from any to any established

#################### WAN - me
# SSH
${fwcmd} add allow tcp from any to ${WAN_IP} 22 in via ${WAN}

# DNS только если держим зону
${fwcmd} add allow tcp from any to any 53 via ${WAN} limit src-addr 30
${fwcmd} add allow udp from any to any 53 via ${WAN} limit src-addr 30
# Ответ на запрос открываем всегда
${fwcmd} add allow udp from any 53 to ${WAN_IP} via ${WAN}
# UDP
${fwcmd} add allow udp from any to any 123 via ${WAN}
# FTP
${fwcmd} add allow tcp from any to ${WAN_IP} 20,21 in via ${WAN} setup
${fwcmd} add allow tcp from any to ${WAN_IP} 49152-65535 via ${WAN}
# Mail
${fwcmd} add allow tcp from any to ${WAN_IP} ${mailserv} in via ${WAN} setup limit src-addr 20
# HTTP
${fwcmd} add allow tcp from any to ${WAN_IP} 80 in via ${WAN} setup
#OpenVPN
${fwcmd} add allow udp from any to ${WAN_IP} 1194 via ${WAN} limit src-addr 30
####################

#################### me -WAN
# разрешаем весь исходящий траффик
#${fwcmd} add allow ip from ${WAN_IP} to any out xmit ${WAN}
# SSH
${fwcmd} add allow tcp from me 22 to any

# DNS transfers to world
${fwcmd} add allow udp from me 53 to any
# DNS, NTP
${fwcmd} add allow udp from me to any 53,123
# FTP, HTTP
${fwcmd} add allow tcp from me to any 20,21,80,443,49151-65534 keep-state
####################

#################### from LAN to me
# FTP, SSH
${fwcmd} add allow tcp from ${lan_net},${vpn} to me 20,21,22,1024-65534
# DNS
${fwcmd} add allow udp from ${lan_net} to me domain via ${LAN}
${fwcmd} add allow udp from me domain to ${lan_net} via ${LAN}
# NTP
${fwcmd} add allow udp from ${lan_net} to me ntp keep-state
# HTTP
${fwcmd} add allow udp from ${lan_net},${vpn} to me http keep-state
# icmp
${fwcmd} add allow icmp from any to any via ${LAN}

################### from me to LAN
# FTP, HTTP to LAN
${fwcmd} add allow tcp from ${LAN_IP} 20,21,80,443,1024-65534 to ${lan_net} via ${LAN} keep-state
###################

#################### LAN -WAN
# MAIL, ICQ
${fwcmd} add allow tcp from ${lan_net} to any 25,80,110,143,443,465,587,993,995,5190 out via ${WAN}
${fwcmd} add allow tcp from any 25,80,110,143,443,465,587,993,995,5190 to ${lan_net} via ${WAN}

# FTP
${fwcmd} add allow tcp from ${lan_net} to any 20,21,1024-65535 via ${LAN} keep-state
${fwcmd} add allow tcp from ${lan_net} to any 1024-65535 via ${LAN}
${fwcmd} add allow tcp from any 20,21,1024-65535 to ${lan_net} 1024-65535 via ${LAN}

# SSH, RDP, Radmin
${fwcmd} add allow tcp from ${lan_net} to any 22,3389,4899 via ${LAN} keep-state
${fwcmd} add allow tcp from any 22,3389,4899 to ${lan_net} via ${LAN}




${fwcmd} pipe 1 config bw 1Mbit/s queue 60 gred 0.002/10/30/0.1
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1
${fwcmd} pipe 2 config bw 1Mbit/s queue 60 gred 0.002/10/30/0.1
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1
# NAT
${fwcmd} nat 1 config log if ${WAN} reset same_ports deny_in
${fwcmd} add queue 1 ip from any to any out xmit ${WAN}
${fwcmd} add nat 1 ip from any to any via ${WAN}
${fwcmd} add queue 2 ip from any to any in recv ${WAN}


${fwcmd} add deny log all from any to any
Значение /etc/sysctl.conf net.inet.ip.fw.one_pass=0
Вывод правил:

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

#ipfw show
00100     0        0 check-state
00200     0        0 allow ip from 127.0.0.0/8 to any via lo0
00300     0        0 allow ip from any to 127.0.0.0/8 via lo0
00400     0        0 allow ip from any to any via lo0
00500     0        0 deny ip from any to 127.0.0.0/8
00600     0        0 deny ip from 127.0.0.0/8 to any
00700     0        0 deny ip from any to 192.168.0.0/16 in recv le1
00800     0        0 deny ip from 192.168.0.0/16 to any in recv le1
00900     0        0 deny ip from any to 172.16.0.0/12 in recv le1
01000     0        0 deny ip from 172.16.0.0/12 to any in recv le1
01100     0        0 deny ip from any to 10.0.0.0/8 in recv le1
01200     0        0 deny ip from 10.0.0.0/8 to any in recv le1
01300     0        0 deny ip from any to 169.254.0.0/16 in recv le1
01400     0        0 deny ip from 169.254.0.0/16 to any in recv le1
01500     0        0 deny ip from any to 0.0.0.0/8 in recv le1
01600     0        0 deny ip from 0.0.0.0/8 to any in recv le1
01700     0        0 deny ip from any to 240.0.0.0/4 in recv le1
01800     0        0 deny ip from 240.0.0.0/4 to any in recv le1
01900     0        0 deny ip from me to any in recv le1
02000     0        0 deny ip from any to any not antispoof in
02100     0        0 deny icmp from any to any frag
02200     0        0 deny log logamount 50 icmp from any to 255.255.255.255 in via le1
02300     0        0 deny log logamount 50 icmp from any to 255.255.255.255 out via le1
02400     1      229 deny ip from any 137-139,445,1433 to any
02500     0        0 deny ip from any to any dst-port 137-139,445,1433
02600     0        0 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to not me dst-port 80
02700     0        0 allow icmp from any to any icmptypes 0,3,4,8,10,11,30
02800   228    29854 allow tcp from any to any established
02900     0        0 allow tcp from any to 1.2.3.254 dst-port 22 in via le1
03000     0        0 allow tcp from any to any dst-port 53 via le1 limit src-addr 30
03100     2      140 allow udp from any to any dst-port 53 via le1 limit src-addr 30
03200     0        0 allow udp from any 53 to 1.2.3.254 via le1
03300     0        0 allow udp from any to any dst-port 123 via le1
03400     0        0 allow tcp from any to 1.2.3.254 dst-port 20,21 in via le1 setup
03500     0        0 allow tcp from any to 1.2.3.254 dst-port 49152-65535 via le1
03600     0        0 allow tcp from any to 1.2.3.254 dst-port 25,143,465,993,995 in via le1 setup limit src-addr 20
03700     0        0 allow tcp from any to 1.2.3.254 dst-port 80 in via le1 setup
03800     0        0 allow udp from any to 1.2.3.254 dst-port 1194 via le1 limit src-addr 30
03900     0        0 allow tcp from me 22 to any
04000     0        0 allow udp from me 53 to any
04100     0        0 allow udp from me to any dst-port 53,123
04200     0        0 allow tcp from me to any dst-port 20,21,80,443,49151-65534 keep-state
04300     2      128 allow tcp from 192.168.1.0/24,192.168.1.240 to me dst-port 20,21,22,1024-65534
04400     0        0 allow udp from 192.168.1.0/24 to me dst-port 53 via le0
04500     0        0 allow udp from me 53 to 192.168.1.0/24 via le0
04600     0        0 allow udp from 192.168.1.0/24 to me dst-port 123 keep-state
04700     0        0 allow udp from 192.168.1.0/24,192.168.1.240 to me dst-port 80 keep-state
04800     0        0 allow icmp from any to any via le0
04900    11     1050 allow tcp from 192.168.1.254 20,21,80,443,1024-65534 to 192.168.1.0/24 via le0 keep-state
05000     0        0 allow tcp from 192.168.1.0/24 to any dst-port 25,80,110,143,443,465,587,993,995,5190 out via le1
05100     0        0 allow tcp from any 25,80,110,143,443,465,587,993,995,5190 to 192.168.1.0/24 via le1
05200 26187 25583298 allow tcp from 192.168.1.0/24 to any dst-port 20,21,1024-65535 via le0 keep-state
05300     0        0 allow tcp from 192.168.1.0/24 to any dst-port 1024-65535 via le0
05400     0        0 allow tcp from any 20,21,1024-65535 to 192.168.1.0/24 dst-port 1024-65535 via le0
05500     0        0 allow tcp from 192.168.1.0/24 to any dst-port 22,3389,4899 via le0 keep-state
05600     0        0 allow tcp from any 22,3389,4899 to 192.168.1.0/24 via le0
05700     0        0 queue 1 ip from any to any out xmit le1
05800     0        0 nat 1 ip from any to any via le1
05900     0        0 queue 2 ip from any to any in recv le1
06000     0        0 deny log logamount 50 ip from any to any
65535     0        0 deny ip from any to any
Проверка правил pipe

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

#ipfw pipe show
00001:   1.000 Mbit/s    0 ms   60 sl. 0 queues (1 buckets)
          GRED w_q 0.001999 min_th 10 max_th 30 max_p 0.099991
00002:   1.000 Mbit/s    0 ms   60 sl. 0 queues (1 buckets)
          GRED w_q 0.001999 min_th 10 max_th 30 max_p 0.099991
q00001: weight 1 pipe 1   60 sl. 0 queues (64 buckets)
          GRED w_q 0.001999 min_th 10 max_th 30 max_p 0.099991
q00002: weight 1 pipe 2   60 sl. 0 queues (64 buckets)
          GRED w_q 0.001999 min_th 10 max_th 30 max_p 0.099991
Подскажите как правильно указать правила.
СПС

yuryd2006
проходил мимо
Сообщения: 3
Зарегистрирован: 2010-05-05 14:54:18

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

Непрочитанное сообщение yuryd2006 » 2010-07-22 12:59:36

Тонкий вопрос, если natd и ipfw nat на одном libalias построены - есть ли выигрыш в загрузке системы ? Реально подтвержденный на траффике хотя-бы под 100мбит и 30000-40000 pps.

Аватара пользователя
Dog
лейтенант
Сообщения: 723
Зарегистрирован: 2006-09-21 10:34:36
Откуда: Kharkiv, Ukraine
Контактная информация:

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

Непрочитанное сообщение Dog » 2010-07-22 13:06:38

ipfw nat - kernel level
natd - user level.
Дальше можно не объяснять.
Oh my God, they killed init! Bastards!

yuryd2006
проходил мимо
Сообщения: 3
Зарегистрирован: 2010-05-05 14:54:18

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

Непрочитанное сообщение yuryd2006 » 2010-07-22 13:14:49

Dog писал(а):ipfw nat - kernel level
natd - user level.
Дальше можно не объяснять.
Обьяснять не надо, дьявол всегда кроется в деталях... Мне бы цифры загрузки увидеть, ничего более...

Аватара пользователя
Dwolfix
рядовой
Сообщения: 28
Зарегистрирован: 2010-06-02 7:44:38
Откуда: Орск
Контактная информация:

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

Непрочитанное сообщение Dwolfix » 2010-07-28 7:31:48

После обновления через freebsd-update с 8.0 до 8.1-RELEASE не работает kernel nat. Обновление прошло без сбоев. Пересобрал уже ядро с опциями для включения nat. Не помогает. Кто-нибудь сталкивался с подобным?
Бороться за знания, терзать препятствия, аки волк!

favt
рядовой
Сообщения: 20
Зарегистрирован: 2008-03-06 9:47:45

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

Непрочитанное сообщение favt » 2010-08-02 8:02:35

Доброго всем. Что-то никак не удается построить шлюз.
Инет раздаётся посредством VPN, подключаюсь через MPD.
Вешаю NAT что на ng0, что на xl0 не хочет ничего натить, ни пинги, ни сайты.

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

favt-sv# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:0e:2e:92:1d:89
        inet 192.168.146.1 netmask 0xffffff00 broadcast 192.168.146.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
        ether 00:50:da:c0:3f:d4
        inet 10.39.238.158 netmask 0xffffffc0 broadcast 10.39.238.191
        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 1500
        inet xx.xx.xx.xxx --> 192.168.52.5 netmask 0xffffffff

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

favt-sv# more ipfw.my
#!/bin/sh
FwCMD="/sbin/ipfw"

${FwCMD} -f flush

${FwCMD} add check-state

${FwCMD} add allow ip from any to any via lo0
${FwCMD} add allow tcp from any to any established

${FwCMD} add allow tcp from any to me 1723
${FwCMD} add allow gre from any to any

${FwCMD} nat 1 config log if xl0 same_ports reset deny_in #redirect_port tcp mw:2200 2200
${FwCMD} add nat 1 ip from any to any via xl0
Помимо чтения манов и долгово их понимания, направьте в нужном направлении.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-08-03 0:39:48

На ng0 надо вешать.

По поводу "направления":

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

#!/bin/sh
FwCMD="/sbin/ipfw"

${FwCMD} -f flush
${FwCMD} add allow ip from any to any via lo0

${FwCMD} add allow ip from any to any via rl0

${FwCMD} nat 1 config log if ng0 same_ports reset deny_in
${FwCMD} add nat 1 ip from any to any via ng0

${FwCMD} add allow ip from any to any
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

favt
рядовой
Сообщения: 20
Зарегистрирован: 2008-03-06 9:47:45

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

Непрочитанное сообщение favt » 2010-08-03 7:37:59

terminus писал(а):На ng0 надо вешать.

По поводу "направления":
......
пробовал - не очень как-то работает. Есть еще одно - хочется во внутреннюю сеть ходить.
Судя по таблице маршрутов у нас пров. "снюхался" с яндексом:

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

favt-sv# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.52.5       UGS         0   871514    ng0
10.0.0.0/8         10.39.238.129      UGS         2   885235    xl0
10.39.238.128/26   link#2             U           0        0    xl0
10.39.238.158      link#2             UHS         0        0    lo0
77.88.0.0/18       10.39.238.129      UGS         0      375    xl0
хх.хх.хх.ххх       link#5             UHS         0        0    lo0
87.249.56.0/22     10.39.238.129      UGS         0        0    xl0
87.250.224.0/19    10.39.238.129      UGS         0       75    xl0
89.223.24.0/22     10.39.238.129      UGS         0        0    xl0
92.62.48.0/20      10.39.238.129      UGS         0        0    xl0
93.158.128.0/18    10.39.238.129      UGS         0      172    xl0
127.0.0.1          link#4             UH          0       67    lo0
192.168.52.5       link#5             UH          0        0    ng0
192.168.146.0/24   link#1             U           2  1463983    rl0
192.168.146.1      link#1             UHS         0        0    lo0
213.180.192.0/19   10.39.238.129      UGS         1      295   xl0
т.е. с сетки теперь пинги идут на все, но посмотреть такие сайты как ya.ru я не могу + не могу попасть во внутреннюю. Я правильно понимаю что надо поднимать 2-й NAT на xl0? И порядок следования NAT важен (т.е. сначала в правилах на ng0, а потом уже xl0)? Ну и напоследок - это всё запускать из скрипта *mpd4-up ?

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-08-03 13:57:04

Я правильно понимаю что надо поднимать 2-й NAT на xl0? И порядок следования NAT важен (т.е. сначала в правилах на ng0, а потом уже xl0)?
Ну если надо, значит надо - запускайте еще один нат на xl0. Вреда не будет, порядок не важен - два раза через наты трафик не пойдет ведь у нас там разные интерфейсы (ng0 и xl0) - система разберется.
Ну и напоследок - это всё запускать из скрипта *mpd4-up ?
Скорее всего да, так как мпд стартует уже после ната, и если запускать нат из rc.conf то он не найдет ng0...

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

#!/bin/sh
FwCMD="/sbin/ipfw"

${FwCMD} -f flush
${FwCMD} add allow ip from any to any via lo0

${FwCMD} add allow ip from any to any via rl0

${FwCMD} nat 1 config log if ng0 same_ports reset deny_in
${FwCMD} add nat 1 ip from any to any via ng0

${FwCMD} nat 2 config log if xl0 same_ports reset deny_in
${FwCMD} add nat 2 ip from any to any via xl0

${FwCMD} add allow ip from any to any
Последнее правило (${FwCMD} add allow ip from any to any) я привожу на всякий случай так как не знаю как у вас выставлен sysctl параметр one_pass. Если он в 1 то тогда это правило не нужно (тогда после натов трафик будет разрешаться автоматом), а если параметр в 0 то тогда трафик будет выходить из натов и возвращаться в фаервол и тогда это правило нужно. В любом случае с наружи никто через наты не пролезет так как оба работают с deny_in.

Для большей секюрности можете поиграться с правилами вида:

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

${FwCMD} add deny ip from any to 192.168.146.0/24 in recv xl0
${FwCMD} add deny ip from any to 192.168.146.0/24 in recv ng0
поставить их перед натами - чтобы никакой "левый" трафик с адресами из вашей локалки точно не залетал... Короче если нат заработает как надо, то потом фаерфол надо будет немного поднастроить для красоты.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

uasash
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-09-07 13:04:25

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

Непрочитанное сообщение uasash » 2010-09-07 13:20:32

Пробую настроить ядерный нат, проброс портов работает но возникли вопросы по поводу написания правил

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

ipfw nat 1 config log if rl0 reset same_ports deny_in  redirect_port tcp 192.168.0.24:3389 3389
ipfw add 10130 nat 1 log ip from any to any via rl0
ipfw add 10140 allow log tcp from any to 192.168.0.24 3389 via rl0
ipfw add 10150 allow log tcp from me 3389 to any out via rl0
Опытным путем выяснил что для трафика надо писать два правила одно проход внутрь локалки а другое уход с внешнего интерфейса.
Объясните пожалуйста подробнее про написания правил при использовании ядерного ната.
Вот здесь http://www.lissyara.su/articles/freebsd ... at_options разрешающих правил вообще нет, или такое правило как

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

ipfw add 10130 nat 1 log ip from any to any via rl0
должно по разрешать проходящий трафик.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-09-07 13:30:12

В машине 2 сетевухи? Если вторая которая смотрит в локальную сеть fxp0, то:

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

ipfw nat 1 config log if rl0 reset same_ports deny_in  redirect_port tcp 192.168.0.24:3389 3389

ipfw add 10121 allow all from any to any via fxp0

ipfw add 10130 nat 1 log ip from any to any via rl0
А эти вообще лишние:

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

ipfw add 10140 allow log tcp from any to 192.168.0.24 3389 via rl0
ipfw add 10150 allow log tcp from me 3389 to any out via rl0
К тому же надо учитывать влияние sysctl параметра one_pass. Если он в 1, то все ок - трафик после прохождения ната будет разрешен. Иначе после ната трафик вернется в фаервол и тогда надо добавит:

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

ipfw add 10141 allow all from any to any via rl0
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

uasash
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-09-07 13:04:25

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

Непрочитанное сообщение uasash » 2010-09-07 13:40:30

вот полностью правила на тестовой машине ale0 - локальная сеть rl0 -внешний интерфейс

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

# sysctl -a |grep one_pass
net.inet.ip.fw.one_pass: 1
# cat /etc/firewall 
#!/bin/sh
ipfw -f flush
ipfw add 100 allow ip from any to any via lo0
ipfw add 200 deny ip from any to 127.0.0.0/8
ipfw add 300 deny ip from 127.0.0.0/8 to any

ipfw add 1040 allow ip from any to any via ale0

ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv rl0
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv rl0
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv rl0
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv rl0
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv rl0
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv rl0
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv rl0
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv rl0
ipfw nat 1 config log if rl0 reset same_ports deny_in  redirect_port tcp 192.168.0.24:3389 3389
ipfw add 10130 nat 1 log ip from any to any via rl0
ipfw add 10140 allow icmp from any to any
ipfw add 10150 allow log tcp from any to 192.168.0.24 via rl0
ipfw add 10150 allow log tcp from me 3389 to any out via rl0
ipfw add 65534 deny log all from any to any
так вот если убрать правила 10150 то не работает

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-09-07 13:48:58

Система FreeBSD 8.1?
Тогда да - там поломали one_pass :smile: он не работает как должен - трафик все равно возвращается в фаервол и начинает пробегать по остальным правилам... Надо после ната ставить allow all from any to any via rl0.

Это не повлияет на безопасность так как нат работает с deny_in
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

uasash
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-09-07 13:04:25

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

Непрочитанное сообщение uasash » 2010-09-07 14:27:27

terminus писал(а):Система FreeBSD 8.1?
Тогда да - там поломали one_pass :smile: он не работает как должен - трафик все равно возвращается в фаервол и начинает пробегать по остальным правилам... Надо после ната ставить allow all from any to any via rl0.

Это не повлияет на безопасность так как нат работает с deny_in
да точно поставил 8.1, но aloow all from any to any via rl0 ставить не буду потому как через этот шлюз еще и клиенты ходить будут и squid стоять, я уж лучше правил побольше напишу.
Спасибо за ответ... я вчера до 2 ночи пытался его заставить one_pass

cthtuf
рядовой
Сообщения: 13
Зарегистрирован: 2010-09-06 22:28:00
Откуда: Санкт-Петербург

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

Непрочитанное сообщение cthtuf » 2010-09-08 14:34:48

Всем привет!
Передо мной встала задача поднять шлюз, через который клиенты из интернета или выделенной сети будут подключаться к серверу.
Поднял на 7.2, установил mpd и я был счастлив, пока не понадобилось парочке пользователей, которые подключаются через vpn, раздавать интернет, а так же сделать так, чтобы шлюз мог работать со вторым,резервным каналом интернета. Опыт работы с ipfw какой-никакой есть, а вот с натом во freebsd не работал никогда.
Пока что пробую все это поднять на VirtualBox + FreeBSD 8.1
С первым примером справился успешно, 3 примера пропустил за ненадобностью и застрял на пятом.

В самом начале столкнулся с тем что ipfw ругается на то, что синтаксис скрипта неверный, и ругается он так:

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

Line 29: unrecognised option ``60''
а строка 29 это:

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

queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1
отложив очереди "на потом", решил сначала проверить будет ли работать раздача интернета через двух провайдеров.
сделал все так:
/etc/rc.conf

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

fsck_y_enable="YES"

keyrate="fast"
hostname="gw.lc"
linux_enable="YES"

firewall_enable="YES"
firewall_logging="YES"
firewall_nat_enable="YES"
dummynet_enable="YES"
firewall_type="/etc/ipfw2.rules"


gateway_enable="YES"
sshd_enable="YES"
mpd_enable="YES"

ifconfig_em0="inet 10.0.2.16 netmask 0xffffff00 -rxcsum" #первый провайдер
ifconfig_em1="inet 10.0.3.16 netmask 0xffffff00 -rxcsum" #второй
ifconfig_em2="inet 192.168.56.4 netmask 0xffffff00" #внутренняя сеть из которой клиенты подключаются к vpn
ifconfig_em3="inet 192.168.57.4 netmask 0xffffff00" #пока что не использую, но через него будет подключаться сервер
defaultrouter="10.0.2.2"

setfib1_enable="YES"
setfib1_defaultroute="10.0.3.2"
/etc/ipfw2.rules

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

add 01010 prob 0.5 skipto 1060 ip from any to any in recv em2

add 01040 setfib 0 ip from any to any via em2 keep-state
add 01050 allow ip from any to any via em2

add 01060 setfib 1 ip from any to any via em2 keep-state
add 01070 allow ip from any to any via em2

add 01075 allow ip from any to 10.0.2.16 in recv em0
add 01076 allow ip from any to 10.0.3.16 in recv em1
add 01080 deny ip from any to 192.168.0.0/16 in recv em0
add 01081 deny ip from any to 192.168.0.0/16 in recv em1
add 01090 deny ip from 192.168.0.0/16 to any in recv em0
add 01091 deny ip from 192.168.0.0/16 to any in recv em1
add 10100 deny ip from any to 172.16.0.0/12 in recv em0
add 10101 deny ip from any to 172.16.0.0/12 in recv em1
add 10110 deny ip from 172.16.0.0/12 to any in recv em0
add 10111 deny ip from 172.16.0.0/12 to any in recv em1
add 10120 deny ip from any to 10.0.0.0/8 in recv em0
add 10121 deny ip from any to 10.0.0.0/8 in recv em1
add 10130 deny ip from 10.0.0.0/8 to any in recv em0
add 10131 deny ip from 10.0.0.0/8 to any in recv em1
add 10140 deny ip from any to 169.254.0.0/16 in recv em0
add 10141 deny ip from any to 169.254.0.0/16 in recv em1
add 10150 deny ip from 169.254.0.0/16 to any in recv em0
add 10151 deny ip from 169.254.0.0/16 to any in recv em1

nat 1 config log if em0 same_ports reset deny_in
nat 2 config log if em1 same_ports reset deny_in

add 10170 nat 1 ip from any to any via em0
add 10200 nat 2 ip from any to any via em1
add 10220 allow all from any to any

add 65534 deny log logamount 1000 all from any to any
на winxp с ip 192.168.56.101 стоит шлюз 192.168.56.4
при попытке пинга адреса из интернета, ответов она не получает, однако шлюз, как я понял из tcpdump эти запросы переправляет и ответы он получает.
понял я это так:
ввел ping 8.8.8.8 на winxp
увидел tcpdump на fbsd:

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

listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
15:19:32.131082 IP 10.0.2.16 > 8.8.8.8: ICMP echo request, id 768, seq 3328, length 40
15:19:32.182515 IP 8.8.8.8 > 10.0.2.16: ICMP echo reply, id 768, seq 3328, length 40
но на winxp к сожалению:

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

Обмен пакетами с 8.8.8.8 по 32 байт:

Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Подскажите почему шлюз может не демаскировать пакет и не отправить его обратно на winxp.

со связью везде все нормально, т.к. с набором правил из первого примера:
/etc/ipfw.rules

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


add 1040 allow all from any to any via em2

nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 10.0.2.16:60022 60022
add 10130 nat 1 all from any to any via em0

add 65532 allow all from any to any
add 65534 deny log logamount 1000 all from any to any

все работает отлично

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-09-08 14:54:05

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

add 01075 allow ip from any to 10.0.2.16 in recv em0
add 01076 allow ip from any to 10.0.3.16 in recv em1
эти не нужны. с ними ответный трафик не доходит до ната.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-09-08 14:59:52

Line 29: unrecognised option ``60''
А вот это непонятно. Синтаксических ошибок нет? Должно работать... :unknown:
Система 8.1?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

cthtuf
рядовой
Сообщения: 13
Зарегистрирован: 2010-09-06 22:28:00
Откуда: Санкт-Петербург

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

Непрочитанное сообщение cthtuf » 2010-09-08 15:19:44

terminus писал(а): А вот это непонятно. Синтаксических ошибок нет? Должно работать... :unknown:
Система 8.1?
да, я тоже не понял почему он на это ругается. сверил синтаксис с предыдущими примерами - идентичен.
система - FreeBSD gw.lc 8.1-RELEASE
первоначально скрипт был таким:
/etc/ipfw2.rules

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

add 01010 prob 0.5 skipto 1060 ip from any to any in recv em2

add 01040 setfib 0 ip from any to any via em2 keep-state
add 01050 allow ip from any to any via em2

add 01060 setfib 1 ip from any to any via em2 keep-state
add 01070 allow ip from any to any via em2

add 01075 allow ip from any to 10.0.2.16 in recv em0
add 01076 allow ip from any to 10.0.3.16 in recv em1
add 01080 deny ip from any to 192.168.0.0/16 in recv em0
add 01081 deny ip from any to 192.168.0.0/16 in recv em1
add 01090 deny ip from 192.168.0.0/16 to any in recv em0
add 01091 deny ip from 192.168.0.0/16 to any in recv em1
add 10100 deny ip from any to 172.16.0.0/12 in recv em0
add 10101 deny ip from any to 172.16.0.0/12 in recv em1
add 10110 deny ip from 172.16.0.0/12 to any in recv em0
add 10111 deny ip from 172.16.0.0/12 to any in recv em1
add 10120 deny ip from any to 10.0.0.0/8 in recv em0
add 10121 deny ip from any to 10.0.0.0/8 in recv em1
add 10130 deny ip from 10.0.0.0/8 to any in recv em0
add 10131 deny ip from 10.0.0.0/8 to any in recv em1
add 10140 deny ip from any to 169.254.0.0/16 in recv em0
add 10141 deny ip from any to 169.254.0.0/16 in recv em1
add 10150 deny ip from 169.254.0.0/16 to any in recv em0
add 10151 deny ip from 169.254.0.0/16 to any in recv em1

pipe 1 config bw 512Kbit/s queue 60 gred 0.002/10/30/0.1
queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 2 config bw 512Kbit/s queue 60 gred 0.002/10/30/0.1
queue 2 config pipe 2 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 3 config bw 256Kbit/s queue 60 gred 0.002/10/30/0.1
queue 3 config pipe 3 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

pipe 4 config bw 256Kbit/s queue 60 gred 0.002/10/30/0.1
queue 4 config pipe 4 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

nat 1 config log if em0 same_ports reset deny_in
nat 2 config log if em1 same_ports reset deny_in

add 10160 queue 1 ip from any to any out xmit em0
add 10170 nat 1 ip from any to any via em0
add 10180 queue 2 ip from any to any in recv em0

add 10190 queue 3 ip from any to any out xmit em1
add 10200 nat 2 ip from any to any via em1
add 10210 queue 4 ip from any to any in recv em1

add 10220 allow all from any to any

add 65534 deny log logamount 1000 all from any to any
ошибка такая же, что была тут http://forum.lissyara.su/viewtopic.php?f=4&t=27840
может в 8.1 немного изменили синтаксис?

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

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

Непрочитанное сообщение terminus » 2010-09-08 15:30:02

terminus писал(а):

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

add 01075 allow ip from any to 10.0.2.16 in recv em0
add 01076 allow ip from any to 10.0.3.16 in recv em1
эти не нужны. с ними ответный трафик не доходит до ната.
Это помогло?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.