Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» FreeBSD + ipfw rules

Автор: AlexeiUttinov
Дата сообщения: 27.02.2007 14:02
Ребята большая просьба о помощи.

Имеем FreeBsd 6.2 2 сетевухи, одна к провайдеру другая в локалку.

Задача сделать шлюз с нат, и выпускать через него пользователей локальной сети в инет + поставить фаервол, дабы из внешней сети не повадно было делать все что хочешь.

Дописал в конфиге ядра

options DUMMYNET

options TCP_DROP_SYNFIN

options SC_DISABLE_REBOOT

options IPFIREWALL

options IPFIREWALL_VERBOSE

options IPFIREWALL_VERBOSE_LIMIT=100

options IPFIREWALL_FORWARD

options IPDIVERT

options BRIDGE

и скомпилил с новыми параметрами. Здесь все ок.

в rc.conf дописал:

firewall_enable="YES"

firewall_script="/etc/rc.firewall"

firewall_type="open"

firewall_quiet="YES"

firewall_logging="YES"

natd_enable="YES"

natd_interface="xl1"

natd_flags=""

tcp_drop_synfin="YES"

clear_tmp_enable="YES"

inetd_enable="NO"

если выбираю правило open, то инет работает у всех и все ок. У клиентов ip адреса раздаются по dhcp, также dhcp прописывает днс локального доменного сервака и шлюз к вряхе.

если выбираю правило simple в скрипте rc.firewall, то инет перестает работать.

[Ss][Ii][Mm][Pp][Ll][Ee])
############
# This is a prototype setup for a simple firewall. Configure this
# machine as a DNS and NTP server, and point all the machines
# on the inside at this machine for those services.
############

# set these to your outside interface network and netmask and ip
oif="xl1"
onet="10.28.2.0"
omask="255.255.255.0"
oip="10.28.2.126"

# set these to your inside interface network and netmask and ip
iif="xl0"
inet="192.168.10.0"
imask="255.255.255.0"
iip="192.168.10.250"

setup_loopback

# Stop spoofing
${fwcmd} add deny all from ${inet}:${imask} to any in via ${oif}
${fwcmd} add deny all from ${onet}:${omask} to any in via ${iif}

# Stop RFC1918 nets on the outside interface
#${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 172.16.0.0/12 via ${oif}
${fwcmd} add deny all from any to 192.168.0.0/16 via ${oif}

# Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
# DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
# on the outside interface
${fwcmd} add deny all from any to 0.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 169.254.0.0/16 via ${oif}
${fwcmd} add deny all from any to 192.0.2.0/24 via ${oif}
${fwcmd} add deny all from any to 224.0.0.0/4 via ${oif}
${fwcmd} add deny all from any to 240.0.0.0/4 via ${oif}

# Network Address Translation. This rule is placed here deliberately
# so that it does not interfere with the surrounding address-checking
# rules. If for example one of your internal LAN machines had its IP
# address set to 192.0.2.1 then an incoming packet for it after being
# translated by natd(8) would match the `deny' rule above. Similarly
# an outgoing packet originated from it before being translated would
# match the `deny' rule below.
case ${natd_enable} in
[Yy][Ee][Ss])
if [ -n "${natd_interface}" ]; then
${fwcmd} add divert natd all from any to any via ${natd_interface}
fi
;;
esac

# Stop RFC1918 nets on the outside interface
#${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif}
${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif}

# Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
# DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E)
# on the outside interface
${fwcmd} add deny all from 0.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 169.254.0.0/16 to any via ${oif}
${fwcmd} add deny all from 192.0.2.0/24 to any via ${oif}
${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif}
${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif}

# Allow TCP through if setup succeeded
${fwcmd} add pass tcp from any to any established

# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag

# Allow setup of incoming email
${fwcmd} add pass tcp from any to ${oip} 25 setup

# Allow setup of SSH
${fwcmd} add pass tcp from any to ${oip} 22 setup
${fwcmd} add pass tcp from any to ${iip} 22 setup


# Allow access to our DNS
${fwcmd} add pass tcp from any to ${oip} 53 setup
${fwcmd} add pass udp from any to ${oip} 53
${fwcmd} add pass udp from ${oip} 53 to any

# Allow access to our WWW
${fwcmd} add pass tcp from any to ${oip} 80 setup
${fwcmd} add pass tcp from any to ${iip} 80 setup

# Reject&Log all setup of incoming connections from the outside
${fwcmd} add deny log tcp from any to any in via ${oif} setup

# Allow setup of any other TCP connection
${fwcmd} add pass tcp from any to any setup

# Allow DNS queries out in the world
${fwcmd} add pass udp from ${oip} to any 53 keep-state

# Allow NTP queries out in the world
${fwcmd} add pass udp from ${oip} to any 123 keep-state

${fwcmd} add pass icmp from any to any icmptypes 0,8,11

# Everything else is denied by default, unless the
# IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel
# config file.
;;

Что можно сделать? Только пожалуйста подробно. Что добавить, а что удалить в правилах. Заранее спасибо
Автор: hosterr
Дата сообщения: 21.06.2007 15:06
У меня стоит FreeBSD 6.1-RELEASE в качестве роутера
Конфиг фаервола:
cmd="/sbin/ipfw"
lan_ip="192.168.100.10" #-IP-шлюза
lan_if="192.168.100.0/24"
our_lan="192.168.0.0/16"
out_ip="66.66.66.66" #-внешний IP-адрес
out_if="rl0" #-внешний интерфейс.

#---------------------------------------------------------------------
$cmd add 15 fwd 127.0.0.1:3128 tcp from $our_lan to any 80 #форвард под прозрачный прокси
#---------------------------------------------------------------------

Нат подбрасываю отдельно, через rc.conf и natd.con
natd_program="/sbin/natd" # path to natd, if you want a different one.
natd_enable="YES" # Enable natd (if firewall_enable == YES).
natd_interface="rl0" # Public interface or IPaddress to use.
natd_flags="-f /etc/natd.conf" # Additional flags for natd.

Трафик я режу такими правилами:
# Config for 192.168.100.120 [XXX]
$cmd add 60107 pipe 60107 all from 192.168.100.120 to any 25,80,110,443 via $out_if
$cmd add 60107 pipe 60107 all from any 25,80,110,443 to 192.168.100.120 via $out_if
$cmd pipe 60107 config bw 32Kbit/s

Так вот у меня проблемка вылезла - трафик не режется на 80 порту, на всех остальных портах отлично...
В принципе можно и SQUIDом резать, через delay_pools, но хочеться разобраться почему...
Автор: savnick
Дата сообщения: 24.09.2007 15:39
Подскажите, плиз!
Есть шлюз на FreeBSD 6.2 с двумя сетевухами. vr0 (192.168.1.1) смотрит в локалку, к rl0 (192.168.0.2) подключен ADSL модем (192.168.0.1) в режиме роутера (nat - SUA only). на шлюзе крутится apache, squid, ftp. Возникла необходимость пускать некоторые компы по http в обход squid...

в ipfw добавляю такое правило:

${fwcmd} add fwd 192.168.0.1 tcp from (ip из локалки) to any http

до него разрешается DNS и локальный www, все работает

после него - разрешение для шлюза посылать пакеты куда угодно и все..

пробую с локального ip зайти по http мимо прокси - не пускает...
Что я еще не указал??
Автор: YuroN
Дата сообщения: 24.09.2007 17:03

Цитата:
Возникла необходимость пускать некоторые компы по http в обход squid...


Цитата:
${fwcmd} add fwd 192.168.0.1 tcp from (ip из локалки) to any http

в этой строке ты пересылаешь запросы 80-х портов на IP модема что врядли будет нормально работать..
как у тебя сделано непонятно - скорее всего у тебя 80 портом локального IP и стоит прокси
и у клиентов он указан в броузере.

вот рабочий конфиг форварда на прокси (прозрачный прокси):
Все что адресует <адрес клиента> на 80 порт то все форвардит на <адрес прокси> на порт 3128


Код: ipfw add 10 fwd <адрес прокси>,3128 tcp from <адрес клиента> to any 80
Автор: savnick
Дата сообщения: 26.09.2007 11:06
Клиенты настроены следующим образом:
адрес по dhcp
в качестве шлюза - машина с freebsd
в инет все ходят через прокси на шлюзе (squid, авторизация из домена), ICQ через прокси тоже без проблем работает

вот rc.conf с шлюза (оставил тока то, что имеет отношение к сети)
defaultrouter="192.168.0.1"
hostname="bla.bla.local"
gateway_enable="YES"

# сетевуха, к которой подключен adsl модем(роутер)
ifconfig_rl0="inet 192.168.0.2 netmask 255.255.255.0"
# сетевуха, смотрящая в локалку
ifconfig_vr0="inet 192.168.1.1 netmask 255.255.255.0"

linux_enable="YES"
sshd_enable="YES"
usbd_enable="YES"

dhcpd_enable="YES"
dhcpd_ifaces="vr0"

named_enable="YES"

winbindd_enable="YES"
winbindd_flags="-d 3"

squid_enable="YES"

apache_enable="YES"

vsftpd_enable="YES"

tcp_extension="NO"
tcp_drop_synfin="YES"

firewall_enable="YES"
firewall_type="bla"


а вот rc.firewall (только начал настраивать, так что еще на все что нужно разрешено)

    oif="rl0"
    onet="192.168.0.0"
    omask="255.255.255.0"
    oip="192.168.0.2"

    iif="vr0"
    inet="192.168.1.0"
    imask="255.255.255.0"
    iip="192.168.1.1"

    ${fwcmd} add pass all from any to any via lo0

    ${fwcmd} add deny icmp from any to any frag

    ${fwcmd} add pass icmp from any to any

    ${fwcmd} add pass udp from any to any 53
    ${fwcmd} add pass udp from any 53 to any

    ${fwcmd} add pass tcp from ${inet}:${imask} to ${iip} 80 via ${iif}
    ${fwcmd} add pass tcp from ${iip} 80 to ${inet}:${imask} via ${iif}
    ${fwcmd} add deny tcp from any to ${oip} 80 in via ${oif}

    ${fwcmd} add pass tcp from ${inet}:${imask} to ${iip} 22 via ${iif}

    ${fwcmd} add forward 192.168.0.1 tcp from 192.168.1.2 to any http

    ${fwcmd} add pass ip from me to any

пинги при таком конфиге ходят отовсюду на ура, dns резолвиться ... вот задачка - как мимо проксика пустить ICQ и веб трафик с некоторых компов... ну еще и smtp и pop3

Автор: Coffeinik
Дата сообщения: 01.10.2007 00:17
Не могли бы вы пояснить, почему без правила

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

доступ по ftp отсутствует


${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}

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

(взято из http://www.lissyara.su/?id=1127)
Автор: YuroN
Дата сообщения: 01.10.2007 08:26
savnick
Тебе нужно NAT включить

/etc/rc.conf
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="192.168.0.2"
natd_flags="-f /etc/natd.conf"

/etc/natd.conf
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes

скомпилить ядро с параметрами
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET

и уже тогда IPFW рулить натом
# natd -f /etc/natd.conf -n <внешний интерфейс>
# ipfw add divert natd all from any to any via <внешний интерфейс>
Автор: savnick
Дата сообщения: 01.10.2007 10:00

YuroN

Цитата:
Тебе нужно NAT включить

NAT работает на ADSL роутере ZyXEL P-660RU EE (192.168.0.1) ... вот до меня и не доходит как их состыковать .... может вырубить его на роутере и действительно рулить на шлюзе?? или модно какнить подружить??


Цитата:
скомпилить ядро с параметрами
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET


все скомпилено за исключением options IPFIREWALL_DEFAULT_TO_ACCEPT

NAT на роутере настроен по умолчанию...
All ports All ports 0.0.0.0

Автор: YuroN
Дата сообщения: 01.10.2007 10:28
вообщем так можно построить:
Клиент --- NAT маршрутизатор --- NAT маршрутизатор --- internet
Клиент --- маршрутизатор --- NAT маршрутизатор --- internet

тебе выбирать как строить и где рулить. зайди на сайт www.opennet.ru там много инфы на эту тему.

а по поводу твоих настроек IPFW могу только гадать:

Цитата:
${fwcmd} add pass all from any to any via lo0

${fwcmd} add deny icmp from any to any frag

${fwcmd} add pass icmp from any to any

${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any

${fwcmd} add pass tcp from ${inet}:${imask} to ${iip} 80 via ${iif}
${fwcmd} add pass tcp from ${iip} 80 to ${inet}:${imask} via ${iif}
${fwcmd} add deny tcp from any to ${oip} 80 in via ${oif}

${fwcmd} add pass tcp from ${inet}:${imask} to ${iip} 22 via ${iif}

${fwcmd} add forward 192.168.0.1 tcp from 192.168.1.2 to any http

${fwcmd} add pass ip from me to any


попробуй поиграться добавляя порты для POP3, SMTP, ICQ....
каждый порт - 4 правила где Xport тот порт кторый ты хочешь форвардить.


${fwcmd} add pass tcp from ${inet}:${imask} to ${iip} Xport via ${iif}
${fwcmd} add pass tcp from ${iip} Xport to ${inet}:${imask} via ${iif}
${fwcmd} add deny tcp from any to ${oip} Xport in via ${oif}
${fwcmd} add forward 192.168.0.1 tcp from 192.168.1.2 to any Xport

Автор: klimusu
Дата сообщения: 28.02.2008 16:23
имеется nat на freebsd, стоит ipfw
2 сетевухи в бридже
net.link.ether.bridge.enable=1
net.link.ether.bridge.ipfw=1
net.link.ether.bridge.config=rl0,xl0

rl0 внутренний
xl0 внешний (на этом интерфейсе демон висит)

правила:
00001 allow all from any to any
01601 divert 8668 ip from 192.168.0.0/24 to any out xmit xl0
01602 divert 8668 ip from any to INETIP

сида по ssh на нате пингую все нужные мне адреса, а вот комп в сети 192.168.0.0/24 не пингует почему то.
что может быть?
Автор: evle
Дата сообщения: 22.08.2008 19:43
klimusu
allow после дивертов надо ставить, а не до. Иначе до ната дело не дойдёт.

savnick
Если шлюзом по-умолчанию назначен ADSL-роутер, умеющий делать NAT своими силами, то, по-идее, можно обойтись без ната на фре. Поскольку defaultrouter="192.168.0.1" уже и так ADSL-роутер, то никакой форвард тут нафиг не нужен, нужно просто пропустить пакет и ответ на него. Как-то так:

${fwcmd} add allow tcp from 192.168.1.2 to any 80 out xmit ${oif} keep-state
Если нужны ещё и udp, придётся городить комплект из двух правил, на выход и на вход пакета.
Если нужно будет много рулить, то лучше действительно поднять нат на фре.




Вопрос по новому ядерному нату из 7-ки. (FreeBSD 7.0-STABLE #2: Wed Jul 9 15:00:07)

Код:
ipfw nat 1 config if rl0 same_ports\
redirect_port tcp a.b.c.10:3389 3387\
redirect_port tcp a.b.c.7:3389 3390\
redirect_port tcp a.b.c.192:3389 3391\
redirect_port tcp a.b.c.188:3389 3398\
redirect_port tcp a.b.c.4:3389 3304\
redirect_port tcp a.b.c.76:3389 3376\
redirect_port tcp a.b.c.191:3389 3395\
redirect_port tcp a.b.c.146:3389 3394\
redirect_port tcp a.b.c.92:3389 3397\
redirect_port tcp a.b.c.188:40300-40303 40300-40303\
redirect_port tcp a.b.c.146:40100-40120 40100-40120\
redirect_port tcp a.b.c.76:40400-40410 40400-40410\
redirect_port tcp a.b.c.92:40200-40210 40200-40210\
redirect_port tcp a.b.c.191:40500-40502 40500-40502\
redirect_port tcp a.b.c.187:40900-40910 40900-40910\
redirect_port tcp a.b.c.176:40604 40604\
redirect_port tcp a.b.c.202:40620 40620\
redirect_port tcp a.b.c.143:40640 40640\
redirect_port tcp a.b.c.80:40660 40660\
redirect_port tcp a.b.c.177:40680 40680
Автор: tankistua
Дата сообщения: 23.08.2008 09:23
в ipfw в 7-ке появился нат ? круто - а я на pf перелез чисто из-за этого :)

а если так ?

ipfw nat 1 config if rl0 same_ports redirect_port tcp a.b.c.10:3389 3387
ipfw nat 2 config if rl0 same_ports redirect_port tcp a.b.c.7:3389 3390

ну и т.д. или как-то так - я еще ман не читал :)

Кстати - natd нонче тоже ядерный.
Автор: evle
Дата сообщения: 23.08.2008 14:01
tankistua

Цитата:
в ipfw в 7-ке появился нат ?

Да, появился, если ядро с его поддержкой перебрать.

Цитата:
а если так ?

Так можно попробовать, и на первый взгляд оно так даже работает при простой разбивке на два экземпляра, но жить с этим будет неудобно, потому как для каждого ната нужно ещё точку входа определять:
${FwCMD} add 240 nat 1 ip from any to ${IpOut} in recv ${LanOut}

Цитата:
Кстати - natd нонче тоже ядерный.

А он об этом знает? :-)
Ну да, он использует libalias, но сам при этом остаётся в пользовательском режиме, со всеми вытекающими: переключение контекстов, необходимость гонять пакеты через divert, который теряет теги и прочие внутренние атрибуты.
Автор: tankistua
Дата сообщения: 23.08.2008 18:44
ну такое дело - говорю ж не читал маны :)

но надо попробовать. в ipfw больше всего меня бесило отсутствие нат-а
Автор: tolyn77
Дата сообщения: 17.09.2008 11:19
здравствуйте

хочу сделать счетчики и по считать по портам сколько человек скачал пишу правила

#общий
count tcp from 10.0.0.31 to any in recv fxp0
count tcp from any to 10.0.0.31 out xmit fxp0
#фтп
count tcp from 10.0.0.31 to any 21 in recv fxp0
count tcp from any 21 to 10.0.0.31 out xmit fxp0
#телнет
count tcp from 10.0.0.31 to any 23 in recv fxp0
count tcp from any 23 to 10.0.0.31 out xmit fxp0
#почта
count tcp from 10.0.0.31 to any 25 in recv fxp0
count tcp from 10.0.0.31 to any 110 out xmit fxp0
#новости
count tcp from 10.0.0.31 to any 119 in recv fxp0
count tcp from any 119 to 10.0.0.31 out xmit fxp0
#прокси
count tcp from 10.0.0.31 to any 3128 in recv fxp0
count tcp from any 3128 to 10.0.0.31 out xmit fxp0
#базы
count tcp from 10.0.0.31 to any 3306 in recv fxp0
count tcp from any 3306 to 10.0.0.31 out xmit fxp0
#апач
count tcp from 10.0.0.31 to any 8101 in recv fxp0
count tcp from any 8101 to 10.0.0.31 out xmit fxp0

ну что то мне не нравиться как считает, может кто может помочь, в частности почта совсем не такие значения
я хочу замеры от сервера до клиента и обратно.
заранее благодарен
Автор: demon1981
Дата сообщения: 24.09.2008 11:48
народ не подскажете в общих чертах как трафик считать общий?
какой-то конкретный набор правил. чтобы потом логи уже чем-то парсить можно было
Автор: YuroN
Дата сообщения: 17.10.2008 15:51
tolyn77

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


Цитата:
count tcp from 10.0.0.31 to any 8101 in recv fxp0
count tcp from any 8101 to 10.0.0.31 out xmit fxp0

вот у тебя два значения будет. делаешь скрипт на AWK чтоб оно только выдавало в результате:

57432
345656
proxy

и потом с помощью MRTG рисовать графики указав как тагрет на файл скрипта

это не подсчёт, но уже что-то можно увидеть
Автор: lkrotish
Дата сообщения: 05.11.2008 09:27
Здравствуйте!

Необходима помощь в составлении правил для IPFW.

Схема: 30 машин,
необходимо:
1) Кто-то не имеет доступа к инету, может только принимать и отправлять почту (сервак свой) и свободно пользоваться локалкой.

2) У кого-то инет только через проксю. Скорость ограниченная.

3) У кого-то неограниченный доступ ко всем сетевым сервисам.
Автор: klimusu
Дата сообщения: 05.11.2008 10:06
lkrotish
я бы создал несколько таблиц и добавил в них адреса
ipfw table 1 add 192.168.1.1-10 - адреса пункта 1
ipfw table 2 add 192.168.1.11-20 - адреса пункта 2
ipfw table 3 add 192.168.1.21-30 - адреса пункта 3

а потом уже создавал правила
разрешить только локальную сеть
ipfw add allow tcp from table\(1\) to 192.168.1.x
ipfw add allow tcp from 192.168.1.x to table\(1\)
по поводу почты если порты smtp и pop3, то что-то вроде
ipfw add allow tcp from table\(1\) to mailserver 25,110
ipfw add allow tcp from mailserver 25,110 to table\(1\)
запретить все адресам из таблицы 1
ipfw add deny all from table\(1\) to any

ну и конечно чтобы после перезагрузки все сохранялось либо поправить /etc/rc.firewall, либо написать скрипт.
Автор: NewUse
Дата сообщения: 09.11.2008 01:09
Уважаемые фрумчане, подскажите, пожайлуста!!

Вопрос возник после прочтения мана по ipfw,из мана понял что эти управляющие функции keep-state, setup, established позволяют управлять инициацией соединения, но в каких случая что следует применять так и не разобрался

Какие функции из keep-state, setup, established когда следует использовать?

Для конкретикм:
как правильно прописать правило для разрешения установления соединения от пользователя внутренней сети к внешнней по протоколу http, и разрешение получения ответа именно на этот запрос, а не просто входящие соединения по http. И аналогично по другим распространённым протоколам, таким как ftp, https, smpt, pop3, ssh, и т.д.

Автор: lkrotish
Дата сообщения: 10.11.2008 07:29
Выкладываю конфиг файрволла, прошу прокомментировать..
цель: разрешить всем инет через прокси, на неё принудительно заворачивается,
всем разрешить аську, и избранным доступ ко всем сетевым службам.

Проблема: последние правила не срабатывают,
т.е. ни у кого не работает аська и и у избранных весь интернет. В чём может быть проблема?..

#!/bin/sh

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw" # бинарник IPFW

LanOut="xl0" # Внешняя сетевуха
NetOut="222.222.222.220/28" # внешняя сеть
IpOut="222.222.222.222" # Внешний IP

LanIn="rl0" # внутренняя сетевуха
NetIn="192.168.1.0/24" # Внутренняя сеть
ip_lan="192.168.1" # Шаблон внутреннего адреса
# нужен для ввода разрешений на инет

# сбрасываем все правила
${FwCMD} -f flush
# сбрасываем все pipe
${FwCMD} -f pipe flush
# сбрасываем очереди
${FwCMD} -f queue flush

# Не знаю, пригодится ли кому это - по ночам охрана повадилась шариться в инете
# и качать музончик, порнушку смотреть... 3 гига трафика за ночь... Поэтому ночью
# траффик ограничиваем (скорость) - причём жестоко режем
# для этого в конфиге ядра должна быть строка
# options DUMMYNET
# соответственно в crontab надо добавить запись типа sh /etc/rc.firewall
# с запуском в 22.01 и 8.01 ))
# Также не забудте поставить в sysctl переменную net.inet.ip.fw.one_pass в 0,
# иначе все пакеты будут выпадать из файрволла после трубы - а это дыра.
chour=`date '+%H'`
if [ ${chour} -lt 8 ]; then
${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn}
${FwCMD} pipe 1 config bw 33600 bit/s
fi
if [ ${chour} -ge 22 ]; then
${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn}
${FwCMD} pipe 1 config bw 33600 bit/s
fi

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот 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 ${NetIn} to any in via ${LanOut}
# рубим пакеты `типа от внешней сети, но на внутреннем интерфейсе`
${FwCMD} add deny ip from ${NetOut} to any in via ${LanIn}

# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные с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 224.0.0.0/4 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} to any 80 via ${LanOut}

# Делаем NAT (трансляцию сетевых адресов) всему, что не ушло на squid
${FwCMD} add divert natd ip from ${NetIn} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}

# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${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 deny ip from 240.0.0.0/4 to any out via ${LanOut}

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

# Разрешаем траффик внутренней сети на внутреннем интерфейсе (входящий)
${FwCMD} add allow ip from any to ${NetIn} in via ${LanIn}
# Разрешаем траффик внутренней сети на внутреннем интерфейсе (исходящий)
${FwCMD} add allow ip from ${NetIn} to any out via ${LanIn}

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

# DNS - 4 правила. (если на машине есть DNS сервер - иначе надо всего два)
${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}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}

# разрешаем снаружи соединяться с 53 портом (TCP DNS)
${FwCMD} add allow tcp from any to ${IpOut} 53 in via ${LanOut} setup
# открываем снаружи 80 порт - если у нас есть WWW сервер на машине
${FwCMD} add allow tcp from any to ${IpOut} 80 in via ${LanOut} setup
# открываем снаружи 20,21 порт - для активного FTP
${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup
# разрешаем входящую почту
${FwCMD} add allow tcp from any to ${IpOut} 25 in via ${LanOut} setup
# разрешаем SSH
${FwCMD} add allow tcp from any to ${IpOut} 22 in via ${LanOut} setup
# открываем снаружи 20,21 порт - для активного FTP
${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup
# пассивный FTP
# для узнавания портранджа по которому будет работать, лезем в
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.first
# net.inet.ip.portrange.first: 49152
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last
# net.inet.ip.portrange.last: 65535
# Можно изгалиться примерно так, если есть желание, но я предпочитаю руками
#${FwCMD} add allow tcp from any to ${IpOut} \
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}


# COUNTER-STRIKE (без комментариев )
${FwCMD} add allow udp from any 27015-27025 to ${NetIn} in via ${LanOut}
${FwCMD} add allow udp from any 27015-27025 to ${NetIn} out via ${LanIn}
${FwCMD} add allow udp from ${NetIn} to any 27015-27025 in via ${LanIn}
${FwCMD} add allow udp from ${IpOut} to any 27015-27025 out via ${LanOut}

# Блокируем все остальные попытки соединения с занесением в логи
${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} setup

${FwCMD} add allow tcp from ${IpOut} to any out via ${LanOut} setup
${FwCMD} add allow tcp from any to ${IpOut} in via ${LanIn} setup

########### BEGIN USERS ###############################

# Разрешаем всем аську (ICQ)
${FwCMD} add allow tcp from ${NetIn} to any 5190 in via ${LanIn} setup

# Пользователи которым разрешён инет
${FwCMD} add allow tcp from ${ip_lan}.151 to not ${NetIn} in via ${LanIn} setup
${FwCMD} add allow tcp from ${ip_lan}.153 to not ${NetIn} in via ${LanIn} setup
${FwCMD} add allow tcp from ${ip_lan}.154 to not ${NetIn} in via ${LanIn} setup

############# END USERS #################################

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny ip from any to any
Автор: scheford
Дата сообщения: 28.11.2008 17:42
у меня такой вопрос ,раздача инета через squid как пример все работает через nat при двух сетевухаза тоже.А возможно ли сделать следующие есть одна сетевая карта через нее создается vpn соединие появляется виртуальный интерфейс ng1 через настроенный пакет mpd 4.Может это глупа а возможно этот виртуальный интерфейс подвесить как нат,или нужна как минимум 2 сетевухе.Условие только одно, только одна физ сетевуха.Просто хотел давно спросить об этом.,объясните пожайлуста
Автор: shoko
Дата сообщения: 23.01.2009 01:30
Привет спецам. В Фрюхе я новичок. Но пытаюсь сделать сам многое, Но видимо в Фрюхе Фаейрволл очент крутой или я чего то не догоняю.
мне нужно сделать Инет шлюз на для ста компьютеров. Снаружи для сервера должен быть открыт доступ только для 22 порта и для 25 порта и для днс сервера на этом сервере, нат без него ни как ))) ну и потом можно будет сквид к нему прикрутить.
Вот мой конфиг.
В ядре опции:
options IPFIREWALL # turn on firewall
options IPFIREWALL_FORWARD # FORWARD packet to another program
options IPFIREWALL_VERBOSE # connection limit mode
options IPFIREWALL_VERBOSE_LIMIT=500 # connection limit
options IPFIREWALL_NAT # ipfw kernel nat support
options LIBALIAS
options IPDIVERT # turn on nat funtion
options DUMMYNET # for routed flud info to nowhere
options HZ=1000 # how many packet we will see


потом в rc.conf конфиге :

defaultrouter="222.222.222.22"
gateway_enable="YES"
hostname="хост.домейн.локал"
ifconfig_xl0_name="wan"
ifconfig_ed1_name="lan"
ifconfig_wan="inet 222.222.222.12 up netmask 255.255.255.х"
ifconfig_wan_alias0="inet 222.222.222.13 up netmask 255.255.255.х"
ifconfig_lan="inet 172.16.20.1 up netmask 255.255.255.0"
keymap="us.iso"
named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"
sshd_enable="YES"
firewall_enable="YES"
firewall_logging="YES"
firewall_quiet="NO"
firewall_script="/etc/rc.firewall"
natd_enable="YES"
natd_interface="wan"
natd_flags="-m -u"
log_in_vain="YES"

и сам конфиг фаерволла:


cat /etc/rc.firewall
# !/bin/sh -


FwCMD="/sbin/ipfw"

LanOut="xl0"
IpOut="222.222.222.12"
Netmask="х"

LanIn="ed1"
IpIn="172.16.20.1"
NetMask="24"
NetIn="172.16.20.0"


${FwCMD} -f flush

${FwCMD} add check-state




${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 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}

${FwCMD} add deny icmp from any to any frag

${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}

${FwCMD} add fwd ${IpIn},2121 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}


${FwCMD} add divert natd ip from ${NetIn}/${NetMask} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}

${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 deny ip from 240.0.0.0/4 to any out via ${LanOut}


${FwCMD} add allow tcp from any to any established
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

${FwCMD} add allow udp from any 53 to any via ${LanOut}
${FwCMD} add allow udp from any to any 123 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}


# ${FwCMD} add allow tcp from any to ${IpOut} \
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}

${FwCMD} add allow icmp from any to any icmptypes 0,8,11

${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}

# ${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}

${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}

# ${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}

${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}


# ${FwCMD} add allow ip from any to any via ${LanIn}


# ${FwCMD} add allow gre from any to any via ${LanIn}

${FwCMD} add allow tcp from any to any via ${LanIn}

${FwCMD} add allow udp from any to any via ${LanIn}

${FwCMD} add allow icmp from any to any via ${LanIn}

${FwCMD} add deny ip from any to any



что сделал не так ? что нужно переделать ?

спасибо всем заранее




Автор: dPod
Дата сообщения: 18.02.2009 02:48
а какие правила нужно прописать чтоб он пропускал игры, для пирмера CS, TF2, а то чёт кроме L2, пиратии ничего непропускает!??
Автор: lkrotish
Дата сообщения: 18.02.2009 05:12
dPod
ну для примера

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

ну а дальше копайте в манах к играм, какие порты они используют. или смотрите в логах, что блокируется.
Автор: ugh
Дата сообщения: 25.02.2009 09:16
вот конфиг IPFW:

#/bin/sh
cmd="/sbin/ipfw -q add"
ipfw -q -f flush
wan_if="ng0" # внешний интерфейс
lan_if1="lnc0" # локальный интерфейс
lan_if2="lnc1" # сетка провайдера
skip="skipto 500"
ks="keep-state"

# разрешаем все через интерфейс локальной сети
$cmd 002 allow all from any to any via $lan_if1
# разрешаем все через 127.0.0.1
$cmd 003 allow all from any to any via lo0
# для поднятия vpn на
$cmd 004 allow all from any to any via $lan_if2
#Подменяем у пакетов из вне на внешнем интерфейсе адрес назначения
$cmd 100 divert natd ip from any to me in via $wan_if
$cmd 101 check-state
# Разрешаем всем доступ наружу
$cmd 126 $skip ip from 192.168.1.0/24 to any out via $wan_if setup $ks
# Разрешаем наружу все с самого сервера
$cmd 400 allow ip from me to any via $wan_if $ks
$cmd 450 deny log ip from any to any
# Обратная подмена ip адреса из локалки на внешний
$cmd 500 divert natd ip from any to any out via $wan_if
$cmd 510 allow ip from any to any

казалось бы все открыто для локалки, но
вот сислог:
1:29:21 kernel: ipfw: 450 Deny UDP 192.168.1.3:123 207.46.197.32:123 out via ng0
1:29:41 kernel: ipfw: 450 Deny ICMP:8.0 192.168.1.3 81.30.199.238 out via ng0
1:30:42 kernel: ipfw: 450 Deny P:47 192.168.1.3 92.50.149.210 out via ng0

вопрос: почему такой сислог?
Автор: vovanj7
Дата сообщения: 25.02.2009 09:39
попробуй написать
$cmd allow ip from 192.168.1.0/24 to any out via $wan_if
в соотв месте, а то такое ощущение, что не отрабатывает skip="skipto 500" и правило попадает под
$cmd 450 deny log ip from any to any
Автор: ugh
Дата сообщения: 25.02.2009 11:26
а смысл в предложеном вами правиле?
skipto же отрабатываться от этого не начнет(
Автор: vovanj7
Дата сообщения: 25.02.2009 11:30
а зачем оно вообще надо, можно полюбоваться ?
Автор: ugh
Дата сообщения: 25.02.2009 11:54
оно, кто?
если про правила - один из вариантов конфига ипфв, имеет право на существование, почему нет... и хочется разобраться
если про сетку - есть необходимость некоторым машинам в локалке - разрешить все сервисы

Страницы: 1234567891011

Предыдущая тема: Зачем нужна рабочая группа?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.