Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2008-11-15 17:06:21

Копирайты себе не клею так как все собирал по кускам из разных примеров и помощи других колег с этого сайта!!!
Всем огромное спасибо за помощь! :drinks:
Все началось с того что я и еще один человек решили сделать с нашей сети нормальную, полнофункциональную сеть!
Первое что пришло в голову - это заменить шлюз :
- поставить на него "правильную ось, тобиш FreeBSD";
- настроить на нем нормальный фаервол:
- для раздачи инета для сети,
- для распределения скорости и приоритетов юзверям,
- для скрытия сети от провайдера - козла(ну сейчас про него говорить не буду, так как не заслуживает он нашего времени чтоб мы про него говорили).
Ну так про что я ....
Остановился я на такой вот связке:
FreeBSD 7.0 p5 (для получения такой версии смотрим как обновиться у Лиса - http://www.lissyara.su/?id=1161 только с маленьким уточнение все делаем не cvsup'om a csup'om)
+
IPFW - http://www.freebsd.org/cgi/man.cgi?quer ... ormat=html
+
NATD

Для начала пересоберем ядро для включения IPFW+PIPE+NAT+DUMMYNET:
включаем такие опции в файл конфигурации ядра(у меня он /usr/src/sys/i386/conf/BC-GOLD)

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

options         IPFIREWALL                              # включаем файрволл
options         IPFIREWALL_VERBOSE               # логгинг пакетов, если в правиле 
                                                                   # написано `log`
options         IPFIREWALL_VERBOSE_LIMIT=5 # ограничение логов (повторяющихся)
options         IPFIREWALL_FORWARD            # перенаправление (форвардинг) пакетов
options         IPDIVERT                                 # NAT (трансляция адресов)
options         DUMMYNET                              # шейпер для ограничения скорости 
                                                                  # интернета пользователям
ну и конечно же отключаем все то что нам не нужно ...... про это писать думаю в этом разделе не стоит, так как это уже описал Лис - http://www.lissyara.su/?id=1072
После всех этих манипуляций делаем следующее:
записываем в /etc/rc.conf

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

ifconfig_nfe0="inet 10.0.0.1  netmask 255.255.255.0" # СЕТЕВАЯ КОТОРАЯ СМОТРИТ В НАШУ ЛОКАЛЬНУЮ СЕТЬ
linux_enable="YES"
ifconfig_rl0="inet 192.168.1.18  netmask 255.255.255.0" # СЕТЕВАЯ КОТОРАЯ СМОТРИТ В МОЕМ ВАРИАНТЕ В СЕТЬ ПРОВА
router_flags="-q"
router="/sbin/routed"
router_enable="YES"
gateway_enable="YES"
defaultrouter="192.168.1.1" # шлюз провайдера через который получаем инет
firewall_enable="YES"	# включаем фаерволл
firewall_script="/etc/firewall.conf" # скрипт с правилами фаерволла
firewall_logging="YES" # включаем логирование
natd_enable="YES" 	# ВКЛЮЧАЕМ ТРАНСЛЯЦИЮ АДРЕСОВ
natd_interface="rl0" # ИНТЕРФЕЙС НА КОТОРОМ ТРАНСЛИРУЕМ (ВНЕШНИЙ!!!)
natd_flags="-m -u "  # ЭТИ ПАРАМЕТРЫ ЧЕСНО УКРАЛ У ЛИСА, НО ВСЕ ЖЕ ОПИШУ
					 # -m пытаемся не менять номер порта
					 # -u транслировать только адреса частных сетей
Теперь сами правила фаерволла за пример брался конфиг Лиса - но даже и у него могут быть ошибки(все мы люди)
Поехали
/etc/firewall.conf

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

#!/bin/sh

#########################################
FwCMD="/sbin/ipfw "            # иcпoлняeмый бинapник IPFW
FwTable="/sbin/ipfw -q table " # кoммaндa table
LanOut="rl0"                   # внeшняя ceтeвaя кapтa
NetOut="192.168.1.0/24"        # внeшняя ceть
IpOut="192.168.1.18"           # внeшний IP
LanIn="nfe0"                   # внyтpeнняя ceтeвaя кapтa
NetIn="10.0.0.0/24"            # лoкaльнaя ceть
ip_lan="10.0.0"                # пpимep внyтpeнниx aдpecoв
IpIn="10.0.0.1"                # внyтpeнний IP
#########################################
############### CLEAN ALL ###############
# cбpacывaeм вce пpaвилa
${FwCMD} -f flush
# cбpacывaeм вce тpyбы
${FwCMD} -f pipe flush
# cбpacывaeм вce oчepeди
${FwCMD} -f queue flush

################ Tables #################
# В етой части конфига мы создаем таблицы адресов чтоб вручную их не заносить
# для клиентов со скоростью в 256К
for i in `grep "^[1-9]" /etc/tables/256`
do
    ${FwTable} 1 add ${i}
done
# для клиентов со скоростью в 512К
for i in `grep "^[1-9]" /etc/tables/512`
do
    ${FwTable} 2 add ${i}
done
# для клиентов со скоростью в 1М
for i in `grep "^[1-9]" /etc/tables/1024`
do
    ${FwTable} 3 add ${i}
done
# для клиентов со скоростью в 2М
for i in `grep "^[1-9]" /etc/tables/2048`
do
    ${FwTable} 4 add ${i}
done
# для клиентов со скоростью в 4М
for i in `grep "^[1-9]" /etc/tables/4096`
do
    ${FwTable} 5 add ${i}
done
# тут заносим всех кому разрешен нет в одну таблицу
for i in `grep "^[1-9]" /etc/tables/256` `grep "^[1-9]" /etc/tables/512` `grep "^[1-9]" /etc/tables/1024` `grep "^[1-9]" /etc/tables/2048` `grep "^[1-9]" /etc/tables/4096`
do
    ${FwTable} 0 add ${i}
done

# у Лиса есть такой вот пункт в конфиге но нет занисение динамических правил в таблицу(keep-state)
# значит он(пункт) нам не нужен
# но пока писал подумал что при перегрузке фаерволла это правило не пропустит во время временных
# задержек при добавлении правил в фаерволл, так как нет динамических правил
# так что можно оставить(кто хочет)
# пpoвepяeм cтaтичecкyю тaблицy
#${FwCMD} add check-state

# paзpeшaeм вce нa пeтлe
${FwCMD} add allow ip from any to any via lo0

# пoдcчитывaeм тpaфик ceти
${FwCMD} add count ip from ${NetIn} to any

# зaпpeщaeм пeтлe лeзть кyдaтo
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# зaпpeщaeм внyтpeнниe пaкeты нa внeшнeм интepфeйce
${FwCMD} add deny ip from ${NetIn} to any in via ${LanOut}

# зaпpeщaeм внeшниe пaкeты нa внyтpeннeм интepфeйce
${FwCMD} add deny ip from ${NetOut} to any in via ${LanIn}

# pyбaeм чacтныe ceти кoтopыe лoмятcя cнapyжи
# не забываем убрать со списка ту подсеть которая у прова - ато не получим инет
${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}

# pyбaeм aвтoкoнфигypиpoвaннyю ceть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}

# pyбaeм мyльтикacт
${FwCMD} add deny ip from any to 224.0.0.0/4 in via ${LanOut}
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}

# pyбaeм фpaгмeнтиpoвaнныe icmp пaкeты
${FwCMD} add deny icmp from any to any frag

# pyбaeм широковещательные icmp на внешнем интерфейсе и пишeм в лoг
${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}

# тpaнcляция ceтeвыx aдpecoв
${FwCMD} add divert natd ip from ${NetIn} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}

# pyбaeм чacтныe ceти - опять же не забываем про сеть прова
${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}

# pyбaeм aвтoкoнфигypиpoвaннyю ceть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}

# pyбaeм мyльтикacт
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut}

# разрешаем icmp эxo-зaпpoc, эxo-oтвeт, вpeмя жизни пaкeтa иcтeклo
# для работы кс(вывод списка серверов) необходимы еще и такие 3 типа icmp как 3,4,10
${FwCMD} add allow icmp from any to any icmptypes 0,3,4,8,10,11

################# PIPES #################
# этот раздел посвящен нарезанию скорости юзерам 
# при таком подходе
# mask dst-ip 0xffffffff - mask src-ip 0xffffffff - каждому клиенту из соответствующей таблицы будет выдана соответствующая скорость
# in - out добавляем для того чтобы пакеты не попадали в трубы дважды
# (есть гении которые в нете пишут, что какието ламеры писали шейпер DUMMYNET, так как он режет скорость не правильно)
# все правильно!!! просто читать нужно внимательно 
###############  256Kbit/s ##############
${FwCMD} add pipe 1 ip from not ${NetIn} to table\(1\) out
${FwCMD} pipe 1 config bw 256000bit/s mask dst-ip 0xffffffff
${FwCMD} add pipe 2 ip from table\(1\) to not me in
${FwCMD} pipe 2 config bw 256000bit/s mask src-ip 0xffffffff
###############  512Kbit/s ##############
${FwCMD} add pipe 3 ip from not ${NetIn} to table\(2\) out
${FwCMD} pipe 3 config bw 512000bit/s mask dst-ip 0xffffffff
${FwCMD} add pipe 4 ip from table\(2\) to not me in
${FwCMD} pipe 4 config bw 512000bit/s mask src-ip 0xffffffff
################  1Mbit/s ###############
${FwCMD} add pipe 5 ip from not ${NetIn} to table\(3\) out
${FwCMD} pipe 5 config bw 1000000bit/s mask dst-ip 0xffffffff
${FwCMD} add pipe 6 ip from table\(3\)  to not me in
${FwCMD} pipe 6 config bw 1000000bit/s mask src-ip 0xffffffff
################  2Mbit/s ###############
${FwCMD} add pipe 7 ip from not ${NetIn} to table\(4\) out
${FwCMD} pipe 7 config bw 2000000bit/s mask dst-ip 0xffffffff
${FwCMD} add pipe 8 ip from table\(4\) to not me in
${FwCMD} pipe 8 config bw 2000000bit/s mask src-ip 0xffffffff
################ 4Mbit/s ################
${FwCMD} add pipe 9 ip from not ${NetIn} to table\(5\) out
${FwCMD} pipe 9 config bw 4000000bit/s mask dst-ip 0xffffffff
${FwCMD} add pipe 10 ip from table\(5\) to not me in
${FwCMD} pipe 10 config bw 4000000bit/s mask src-ip 0xffffffff
############### END PIPES ###############

# paзpeшaeм ycтaнoвлeнныe coeдинeния
${FwCMD} add allow tcp from any to any established

# DNS - 4 если у нас на шлюзе стоит свой ДНС-сервер
${FwCMD} add allow udp from any to ${IpOut} 53 in via ${LanOut}
${FwCMD} add allow udp from ${IpOut} 53 to any out via ${LanOut}
${FwCMD} add allow udp from any 53 to ${IpOut} in via ${LanOut}
${FwCMD} add allow udp from ${IpOut} to any 53 out via ${LanOut}

# cинxpoнизaцию вpeмeни
${FwCMD} add allow udp from any to any 123 via ${LanOut}

#  TCP DNS
${FwCMD} add allow tcp from any to ${IpOut} 53 in via ${LanOut} setup

# web если у нас на шлюзе стоит веб-сервер
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}

# ssh - для удаленного подключения к серверо (можно поменять порт в правеле но!!! вначале перенастройте под нужный порт sshd-сервер)
${FwCMD} add allow tcp from any to ${IpOut} 22 in via ${LanOut} setup

# POP - почта
${FwCMD} add allow tcp from any to ${IpOut} 110,25 via ${LanOut}

# мaccивный FTP
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}

# COUNTER-STRIKE
${FwCMD} add allow udp from any 27000-27025 to ${NetIn} in via ${LanOut}
${FwCMD} add allow udp from any 27000-27025 to ${NetIn} out via ${LanIn}
${FwCMD} add allow udp from ${NetIn} to any 27000-27025 in via ${LanIn}
${FwCMD} add allow udp from ${IpOut} to any 27000-27025 out via ${LanOut}

# блoкиpyeн вce и зaнocим в лoг
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} setup

# paзpeшaeм вxoдящий тpaфик ceти нa внyтpeннeм интepфeйce
${FwCMD} add allow ip from ${NetIn} to ${NetIn} in via ${LanIn}

# paзpeшaeм иcxoдящий тpaфик ceти нa внyтpeннeм интepфeйce
${FwCMD} add allow ip from ${NetIn} to ${NetIn} out via ${LanIn}

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

# Тут разрешаем юзверям инет, которым он разрешен
${FwCMD} add allow tcp from table\(0\) to not ${NetIn} in via ${LanIn} setup

# зaпpeщaeм вce и вceм(лог добавил для просмотра что где режется (cat /var/log/security))
${FwCMD} add deny log ip from any to any
Перегружаем фаерволл

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

ipfw zero && /etc/rc.d/ipfw forcerestart
harmless# ipfw zero && /etc/rc.d/ipfw forcerestart
Accounting cleared.
net.inet.ip.fw.enable: 1 -> 0
Stopping natd.
Waiting for PIDS: 3364, 3364, 3364, 3364, 3364.
Starting natd.
Loading /lib/libalias_cuseeme.so
Loading /lib/libalias_ftp.so
Loading /lib/libalias_irc.so
Loading /lib/libalias_nbt.so
Loading /lib/libalias_pptp.so
Loading /lib/libalias_skinny.so
Loading /lib/libalias_smedia.so
Flushed all rules.
Flushed all pipes.
Flushed all pipes.
00100 allow ip from any to any via lo0
00200 count ip from 10.0.0.0/24 to any
00300 deny ip from any to 127.0.0.0/8
00400 deny ip from 127.0.0.0/8 to any
00500 deny ip from 10.0.0.0/24 to any in via rl0
00600 deny ip from 192.168.1.0/24 to any in via nfe0
00700 deny ip from any to 10.0.0.0/8 in via rl0
00800 deny ip from any to 172.16.0.0/12 in via rl0
00900 deny ip from any to 0.0.0.0/8 in via rl0
01000 deny ip from any to 169.254.0.0/16 in via rl0
01100 deny ip from any to 224.0.0.0/4 in via rl0
01200 deny ip from any to 240.0.0.0/4 in via rl0
01300 deny icmp from any to any frag
01400 deny log icmp from any to 255.255.255.255 in via rl0
01500 deny log icmp from any to 255.255.255.255 out via rl0
01600 divert 8668 ip from 10.0.0.0/24 to any out via rl0
01700 divert 8668 ip from any to 192.168.1.18 in via rl0
01800 deny ip from 10.0.0.0/8 to any out via rl0
01900 deny ip from 172.16.0.0/12 to any out via rl0
02000 deny ip from 0.0.0.0/8 to any out via rl0
02100 deny ip from 169.254.0.0/16 to any out via rl0
02200 deny ip from 224.0.0.0/4 to any out via rl0
02300 deny ip from 240.0.0.0/4 to any out via rl0
02400 allow icmp from any to any icmptypes 0,8,11
....
02700 pipe 1 ip from not 10.0.0.0/24 to table(1) out
02800 pipe 2 ip from table(1) to not me in
02900 pipe 3 ip from not 10.0.0.0/24 to table(2)
03000 pipe 4 ip from table(2) to not me
03100 pipe 5 ip from not 10.0.0.0/24 to table(3)
03200 pipe 6 ip from table(3) to not me
03300 pipe 7 ip from not 10.0.0.0/24 to table(4)
03400 pipe 8 ip from table(4) to not me
03500 pipe 9 ip from not 10.0.0.0/24 to table(5)
03600 pipe 10 ip from table(5) to not me
03700 allow tcp from any to any established
03800 allow udp from any to 192.168.1.18 dst-port 53 in via rl0
03900 allow udp from 192.168.1.18 53 to any out via rl0
04000 allow udp from any 53 to 192.168.1.18 in via rl0
04100 allow udp from 192.168.1.18 to any dst-port 53 out via rl0
04200 allow udp from any to any dst-port 123 via rl0
04300 allow tcp from any to 192.168.1.18 dst-port 53 in via rl0 setup
04400 allow tcp from any to 192.168.1.18 dst-port 80 via rl0
04500 allow tcp from any to 192.168.1.18 dst-port 22 in via rl0 setup
04600 allow tcp from any to 192.168.1.18 dst-port 110,25 via rl0
04700 allow tcp from any to 192.168.1.18 dst-port 49152-65535 via rl0
04800 allow udp from any 27000-27025 to 10.0.0.0/24 in via rl0
04900 allow udp from any 27000-27025 to 10.0.0.0/24 out via nfe0
05000 allow udp from 10.0.0.0/24 to any dst-port 27000-27025 in via nfe0
05100 allow udp from 192.168.1.18 to any dst-port 27000-27025 out via rl0
05200 deny log tcp from any to 192.168.1.18 in via rl0 setup
05300 allow ip from 10.0.0.0/24 to 10.0.0.0/24 in via nfe0
05400 allow ip from 10.0.0.0/24 to 10.0.0.0/24 out via nfe0
05500 allow ip from 192.168.1.18 to any out xmit rl0
05600 allow tcp from table(0) to not 10.0.0.0/24 in via nfe0 setup
05700 deny log ip from any to any
Firewall rules loaded.
Firewall logging enabled.
net.inet.ip.fw.enable: 0 -> 1
и смотрим что у нас вышло

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

harmless# ipfw -at list
00100   0     0                         allow ip from any to any via lo0
00200 105  9849 Sat Nov 15 16:03:02 2008 count ip from 10.0.0.0/24 to any
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 10.0.0.0/24 to any in via rl0
00600   0     0                         deny ip from 192.168.1.0/24 to any in via nfe0
00700   0     0                         deny ip from any to 10.0.0.0/8 in via rl0
00800   0     0                         deny ip from any to 172.16.0.0/12 in via rl0
00900   0     0                         deny ip from any to 0.0.0.0/8 in via rl0
01000   0     0                         deny ip from any to 169.254.0.0/16 in via rl0
01100   4   112 Sat Nov 15 16:01:30 2008 deny ip from any to 224.0.0.0/4 in via rl0
01200   0     0                         deny ip from any to 240.0.0.0/4 in via rl0
01300   0     0                         deny icmp from any to any frag
01400   0     0                         deny log icmp from any to 255.255.255.255 in via rl0
01500   0     0                         deny log icmp from any to 255.255.255.255 out via rl0
01600  30  1384 Sat Nov 15 16:02:34 2008 divert 8668 ip from 10.0.0.0/24 to any out via rl0
01700  22  2408 Sat Nov 15 16:02:33 2008 divert 8668 ip from any to 192.168.1.18 in via rl0
01800   0     0                         deny ip from 10.0.0.0/8 to any out via rl0
01900   0     0                         deny ip from 172.16.0.0/12 to any out via rl0
02000   0     0                         deny ip from 0.0.0.0/8 to any out via rl0
02100   0     0                         deny ip from 169.254.0.0/16 to any out via rl0
02200   0     0                         deny ip from 224.0.0.0/4 to any out via rl0
02300   0     0                         deny ip from 240.0.0.0/4 to any out via rl0
02400   0     0                         allow icmp from any to any icmptypes 0,8,11
02500   0     0                         pipe 100 ip from 91.192.153.82 20,21 to 10.0.0.0/24
02600   0     0                         pipe 1000 ip from 10.0.0.0/24 to 91.192.153.82 dst-port 20,21
02700  22  2408 Sat Nov 15 16:02:33 2008 pipe 1 ip from not 10.0.0.0/24 to table(1) out
02800  39  2485 Sat Nov 15 16:03:01 2008 pipe 2 ip from table(1) to not me in
02900   0     0                         pipe 3 ip from not 10.0.0.0/24 to table(2)
03000   0     0                         pipe 4 ip from table(2) to not me
03100   0     0                         pipe 5 ip from not 10.0.0.0/24 to table(3)
03200   0     0                         pipe 6 ip from table(3) to not me
03300   0     0                         pipe 7 ip from not 10.0.0.0/24 to table(4)
03400   0     0                         pipe 8 ip from table(4) to not me
03500   0     0                         pipe 9 ip from not 10.0.0.0/24 to table(5)
03600   0     0                         pipe 10 ip from table(5) to not me
03700 140 13564 Sat Nov 15 16:03:02 2008 allow tcp from any to any established
03800   0     0                         allow udp from any to 192.168.1.18 dst-port 53 in via rl0
03900   0     0                         allow udp from 192.168.1.18 53 to any out via rl0
04000   0     0                         allow udp from any 53 to 192.168.1.18 in via rl0
04100   0     0                         allow udp from 192.168.1.18 to any dst-port 53 out via rl0
04200   0     0                         allow udp from any to any dst-port 123 via rl0
04300   0     0                         allow tcp from any to 192.168.1.18 dst-port 53 in via rl0 setup
04400   0     0                         allow tcp from any to 192.168.1.18 dst-port 80 via rl0
04500   0     0                         allow tcp from any to 192.168.1.18 dst-port 22 in via rl0 setup
04600   0     0                         allow tcp from any to 192.168.1.18 dst-port 110,25 via rl0
04700   0     0                         allow tcp from any to 192.168.1.18 dst-port 49152-65535 via rl0
04800   0     0                         allow udp from any 27000-27025 to 10.0.0.0/24 in via rl0
04900   0     0                         allow udp from any 27000-27025 to 10.0.0.0/24 out via nfe0
05000   0     0                         allow udp from 10.0.0.0/24 to any dst-port 27000-27025 in via nfe0
05100   0     0                         allow udp from 192.168.1.18 to any dst-port 27000-27025 out via rl0
05200   0     0                         deny log tcp from any to 192.168.1.18 in via rl0 setup
05300   9  1101 Sat Nov 15 16:03:01 2008 allow ip from 10.0.0.0/24 to 10.0.0.0/24 in via nfe0
05400   0     0                         allow ip from 10.0.0.0/24 to 10.0.0.0/24 out via nfe0
05500   0     0                         allow ip from 192.168.1.18 to any out xmit rl0
05600   0     0                         allow tcp from table(0) to not 10.0.0.0/24 in via nfe0 setup
05700   0     0                         deny log ip from any to any
65535   0     0                         deny ip from any to any
и смотрим на трубы

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

harmless# ipfw pipe list
00001: 256.000 Kbit/s    0 ms   50 sl. 1 queues (64 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  8 ip           0.0.0.0/0            10.0.0.8/0       26     3155  0    0   0
00002: 256.000 Kbit/s    0 ms   50 sl. 1 queues (64 buckets) droptail
    mask: 0x00 0xffffffff/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
 16 ip          10.0.0.8/0             0.0.0.0/0       50     4170  0    0   0
00003: 512.000 Kbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00004: 512.000 Kbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00005:   1.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00006:   1.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00007:   2.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00008:   2.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00009:   4.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
00010:   4.000 Mbit/s    0 ms   50 sl. 0 queues (64 buckets) droptail
Последний раз редактировалось harmless 2008-11-17 12:50:10, всего редактировалось 3 раза.

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

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2008-11-15 17:07:13

Жду комментариев и поправлений! :smile:
:drinks:

_ShamaN_
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-11-01 14:16:16

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение _ShamaN_ » 2009-11-01 19:55:45

Спасибо за этот труд :)
у нас та же ситуация, хотим устроить раздачу инета по вайфай но опыта работы в freebsd в этой области минимум, поэтому что либо собирать по кускам затруднительно.
пока что есть пара вопросов:
1) каким боком сделать привязку айпи к маку? пока что в мыслях поставить dhcp сервер и в зависимости от мака выдавать айпи. хотя я вроде видел что ipfw вместо айпи с маками работает...
2) Соединение с провайдером идет с помощью pppoe, и не факт что шлюз по умолчанию будет статикой, что писать в rc.conf в данном случае?
3) при подключении к нету поднимется интерфейс, он получается и будет смотрящим наружу?
4) в вашем примере в /etc/tables/* просто записаны соответствующие адреса?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2009-11-02 2:47:39

отвечу 2.11.09 когда буду на роботе. Сейчас жутко хочу спать ;-)

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

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение Гость » 2009-11-02 10:12:24

спасибо за отклик, чет только после отправки вопросов заметил что в теме почти год не писали :)

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2009-11-02 14:50:59

_ShamaN_ писал(а):Спасибо за этот труд :)
у нас та же ситуация, хотим устроить раздачу инета по вайфай но опыта работы в freebsd в этой области минимум, поэтому что либо собирать по кускам затруднительно.
пока что есть пара вопросов:
....
Постараюсь вам помочь :)
1) каким боком сделать привязку айпи к маку? пока что в мыслях поставить dhcp сервер и в зависимости от мака выдавать айпи. хотя я вроде видел что ipfw вместо айпи с маками работает...
Есть несколько способов:
  • посредствами самого ipfw нарезать скорость по мак адресу(но как для меня - это не удобно)

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

         { MAC | mac } dst-mac src-mac
                 Match packets with a given dst-mac and src-mac addresses, speci-
                 fied as the any keyword (matching any MAC address), or six groups
                 of hex digits separated by colons, and optionally followed by a
                 mask indicating the significant bits.  The mask may be specified
                 using either of the following methods:
    
                 1.      A slash (/) followed by the number of significant bits.
                         For example, an address with 33 significant bits could be
                         specified as:
    
                               MAC 10:20:30:40:50:60/33 any
    
                 2.      An ampersand (&) followed by a bitmask specified as six
                         groups of hex digits separated by colons.  For example,
                         an address in which the last 16 bits are significant
                         could be specified as:
    
                               MAC 10:20:30:40:50:60&00:00:00:00:ff:ff any
    
                         Note that the ampersand character has a special meaning
                         in many shells and should generally be escaped.
    
                 Note that the order of MAC addresses (destination first, source
                 second) is the same as on the wire, but the opposite of the one
                 used for IP addresses.
    
    посредством маленького скрипта
    /etc/rc.d/arp.sh

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

    #!/bin/sh
    arp -d -a -i vr0 > /dev/null
    arp -f /etc/arp.list
    плюс таблицы соответствий
    /etc/arp.list

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

    #10.0.0.2      хх:хх:хх:хх:хх:хх       only    #  () понимает и коменты
    10.0.0.6        yy:yy:yy:yy:yy:yy       only    # Andrey ()
    
2) Соединение с провайдером идет с помощью pppoe, и не факт что шлюз по умолчанию будет статикой, что писать в rc.conf в данном случае?
Для этого вам нужен будет не kernel NAT (поправте если не прав - все это будет происходить например в mpd5)
3) при подключении к нету поднимется интерфейс, он получается и будет смотрящим наружу?
Да!
4) в вашем примере в /etc/tables/* просто записаны соответствующие адреса?
Да!
Там записаны списки адресов разбитые на категории по скоростям в /etc/tables/256 список со скоростью 256Кб и так далее

_ShamaN_
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-11-01 14:16:16

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение _ShamaN_ » 2009-11-02 15:48:56

Спасибо :) вроде потихонечку въезжаю :)
по поводу arp пока всё понятно, на этом форуме темку про него нашел.
а если без настроек у клиента делать? он автоматом получает адрес в сети (пусть dhcp) но в зависимости от мака адрес будет из соответствующего диапазона? arp как я понял просто отбрасывает пакеты от "левых" машин.
а вот по поводу "2) Соединение с провайдером идет с помощью pppoe, и не факт что шлюз по умолчанию будет статикой, что писать в rc.conf в данном случае?"
с провом соединяется сам маршрутизатор, остальные только в wifi сети находятся.
mpd5 это ж pppoe сервер, он разве мне поможет?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2009-11-02 16:07:02

_ShamaN_ писал(а):Спасибо :) вроде потихонечку въезжаю :)
по поводу arp пока всё понятно, на этом форуме темку про него нашел.
а если без настроек у клиента делать? он автоматом получает адрес в сети (пусть dhcp) но в зависимости от мака адрес будет из соответствующего диапазона? arp как я понял просто отбрасывает пакеты от "левых" машин.
а вот по поводу "2) Соединение с провайдером идет с помощью pppoe, и не факт что шлюз по умолчанию будет статикой, что писать в rc.conf в данном случае?"
с провом соединяется сам маршрутизатор, остальные только в wifi сети находятся.
mpd5 это ж pppoe сервер, он разве мне поможет?
У вас есть статические IP на сетевой карте которая подключается в сеть провайдера и там есть шлюз по умолчанию. его и пишите в rc.conf!
Теперь приступим к mpd5
есть замечательная статья dikens3'a http://www.lissyara.su/?id=1330
там есть настрайка mpd для вашего случая, только с одним отличием - у вас 1 канал!

_ShamaN_
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-11-01 14:16:16

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение _ShamaN_ » 2009-11-02 16:27:09

Я правильно понял что от туда мне нужно взять скрипты "выдирания" шлюза и перезапуска файрвола?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2009-11-02 17:05:29

_ShamaN_ писал(а):Я правильно понял что от туда мне нужно взять скрипты "выдирания" шлюза и перезапуска файрвола?
Абсолютно верно + настройку мпд5

_ShamaN_
проходил мимо
Сообщения: 4
Зарегистрирован: 2009-11-01 14:16:16

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение _ShamaN_ » 2009-11-02 17:22:33

Ура, я не тупой :Yahoo!:
Спасибо :) на неделе буду экспериментировать, наверное еще вопросы появятся :)

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

Re: Проба пера IPFW+NATD+PIPE+TABLE для корпоративных сетей

Непрочитанное сообщение harmless » 2009-11-02 17:28:57

_ShamaN_ писал(а):Ура, я не тупой :Yahoo!:
Спасибо :) на неделе буду экспериментировать, наверное еще вопросы появятся :)
Лучше не экспериментировать! (Из личного опыта)
Почитайте статьи на данном рессурсе и, думаю, вам будет понятно логику Ферволла :)