Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  ipfw nat
  Использование csup
  UTF-8 console
  dump/restore
  hast carp zfs ucarp cluster
  ng_nat
  Wi-FI роутер + DHCP + DNS
  backup/restore & ZFS
  Обновление ОС и портов через SVN.
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> настройка —> IPFW

IPFW - штатный файрволл FreeBSD

Автор: lissyara.


    В составе FreeBSD есть штатный файрволл - IPFW. К сожалению, раздел хандбука, ему посвящённый, до сих пор не переведён... зато в английской части эта тема неплохо окучена :) Кстати, во многом именно по этому начинающим он тяжело даётся - сам помню, как ковырялся почти две недели, пытаясь настроить его - ничё не получалось... Зато потом был миг озарения, когда я пришёл утром на работу, и, неторопясь, набрал все правила, придумывая их находу из головы. После чего отправил комп в перезагрузку и пошёл курить - абсолютно уверенный что всё работает. И оно работало. Это был момент перехода количества в качество...
   Эта статья является скорее кратким переводом той аглицкой статьи из хандбука, щедро разбавленное собственным видением происходящего :)
   Итак. Для включения файрволла придётся пересобрать ядро со следующими опциями:
options         IPFIREWALL               # собственно файрволл
options         IPFIREWALL_VERBOSE       # логгинг пакетов, если в правиле 
                                         # написано `log`
options         IPFIREWALL_VERBOSE_LIMIT=5 # ограничение логов (повторяющихся) - на 
                                           # случай атак типа флудинга
                                           # (я, правда, 100 ставлю)
options         IPFIREWALL_FORWARD       # перенаправление (форвардинг) пакетов
                                         # например, для прозрачного прокси
options         IPDIVERT                 # если нужен NAT (трансляция адресов)
options         DUMMYNET                 # если понадобится ограничивать скорость 
                                         # инета пользователям (обычно - да :))
options         IPFIREWALL_DEFAULT_TO_ACCEPT  # дефолтовое правило (последнее)
                                           # будет разрешающим (во всех других)
                                           # случаях - запрещающее

Кстати, ядро можно и не пересобирать - достаточно загрузить модуль при старте системы, для этого внесём строку firewall_enable="YES" в файл /etc/rc.conf и после перезагрузки файрволл заработает. Никто, кстати, не мешает сделать это и находу, без перезагрузки (советую подумать, если вы сидите на машине, по ssh прежде чем выполнять - по дефолту будет одно правило - запрещено всё), загрузив соответствующий модуль:
%su
/usr/home/lissyara/>kldload ipfw
/usr/home/lissyara/>ipfw show
65535 0 0 deny ip from any to any
/usr/home/lissyara/>

Управляется загруженный на ходу файрволл также как и обычный, некоторые специфические опции включаемые в ядро при статической сборке есть в sysctl:
/usr/home/lissyara/>sysctl -a | grep ip.fw
net.inet.ip.fw.enable: 1
net.inet.ip.fw.one_pass: 1
net.inet.ip.fw.debug: 1
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.verbose_limit: 1000
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_count: 0
net.inet.ip.fw.dyn_max: 1000
net.inet.ip.fw.static_count: 294
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_grace_time: 10
/usr/home/lissyara/>

Это был вывод с тестовой машины. Кстати ipfw, статически собранный в ядре, также прекрасно рулится через sysctl:
/usr/home/lissyara/>sysctl net.inet.ip.fw.verbose_limit=10
net.inet.ip.fw.verbose_limit: 1000 -> 10
/usr/home/lissyara/>sysctl -a | grep ip.fw.verbose_
net.inet.ip.fw.verbose_limit: 10
/usr/home/lissyara/>

Учтите - эти изменения живут ровно до первой перезагрузки, если хотите чтобы они остались насовсем, то читайте тут. Вообще, глубокий смысл вкомпиляции файрволла в ядро - на мой взгляд, повышение быстродействия, и опции недоступные через sysctl.
   Если собирали ядро без опции IPFIREWALL_DEFAULT_TO_ACCEPT, или грузили его модулем, то изначально правило только одно - запрещающее. В rc.conf есть несколько опций касающихся файрволла:
firewall_enable="YES" - если файрволл грузится модулем
firewall_type="/etc/rc.firewall" - файл с правилами файрволла
firewall_logging="YES" - единственное что делает эта строка - устанавливает значение net.inet.ip.fw.verbose равным 1. Не забудте поставить лимиты, через sysctl.
   Для просмотра установленных правил файрволла есть следующие команды (а если быть точным - ключи, потому как для всего используется одно приложение):
ipfw list - показывает список правил
ipfw show - тоже показывает список правил, но вместе с числом пакетов и байт, что попали под эти правила. Очень удобно при отдладке - смотрим на чём зарубаются пакеты.
ipfw zero - обнуление всех счётчиков. Если вести в виде ipfw zero №_правила то будет обнулён только счётчик правила с этим номером.
   Вот пример простого файрволла для обычнейшей ситуации - сервер организации, одним интерфейсом смотрит в локалку, другим торчит наружу, на нём крутится почта, и работает www сервер:
#!/bin/sh

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

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

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

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

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


# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас 
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
# рубим фрагментированные icmp
${FwCMD} add deny icmp from any to any frag
# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}

# а тут собственно файрволл и начался:

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


# пропускаем траффик через трансляцию сетевых адресов (NAT)
${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}

# разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)
${FwCMD} add allow udp from any 53 to any via ${LanOut}
# разрешаем DNS входящий снаружи - если на этой машине работает named
# и держит какую-то зону. В остальных случаях - не нужно
${FwCMD} add allow udp from any to any 53 via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}
# разрешаем ftp снаружи (оба правила - для пасивного режима)
# для узнавания портранджа по которому будет работать, лезем в 
#/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} 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}
# разрешаем некоторые типы ICMP траффика - эхо-запрос, 
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
# открываем снаружи 80 порт - если у нас есть WWW сервер на машине
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
# открываем снаружи 25 порт (SMTP) если на машине крутится почта
#${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
# открываем снаружи 22 порт - если надо будет ходить на машину по ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
# открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP)
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}
# открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
# по поводу следующих трёх правил, для tcp, udp и icmp - их можно
# заменить одним правилом:
#${FwCMD} add allow ip from any to any via ${LanIn}
# но для удобства наладки и контроля происходящего я предпочитаю три отдельных
# правила, хотя могут быть грабли - например протокол gre не пройдёт - 
# придётся стругать отдельное правило для него, типа 
#${FwCMD} add allow gre from any to any via ${LanIn}
# итак:
# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow tcp from any to any via ${LanIn}
# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow udp from any to any via ${LanIn}
# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow icmp from any to any via ${LanIn}
# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny ip from any to any

Такой вот несложный, и логически понятный файрволл. Надо заметить, что для внутренней локалки в этом фаере всё разрешено. Все могут ходить в инет и пользоваться всеми сетевыми службами. Если такой необходимости нет, то можно сделать чуть иначе:
#!/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

По файрволлам всё. Да, забыл - это всё описано для статически скомпиленных в ядро файрволлов, если грузите модулем - могут быть некоторые отличия (Хотя, с какого перепугу?). Также, необходимо заметить, что сам файл файрволла, по сути является shell-скриптом,  - со всеми вытекающими плюсами - типа регулировка траффика день/ночь, в последнем примере...
   Осталось объяснить - что такое NAT и как его поднять. NAT - это Network Address Translation - подделка сетевых адресов, если по нашему. Есть т.н. частные сети - диапазоны IP-адресов которые запрещено применять в интернете, и они применяются организациями (ну, и, частными лицами) для адресации внутренних сетей организации. Но - несмотря на то, что сеть внутренняя - сотрудники хотят шариться по инету, смотреть порнушку и т.д. :) К тому же, `белых` (не частных) IP адресов не так уж и много - всем не выдашь, одних китайцев полтора миллиарда, а вот IP-шников всего 256*4=4294967296 (4 миллиарда, с копейками, в идеале. минус частные сети, минус всякие америкосовские институты, да вояки заграбаставшие себе по нескольку сетей класса A), поэтому приходится применять частные адреса. Для того чтобы все пользователи серых адресов могли ходить в инет и существует NAT - он подделывает адрес отправителя, как будто пакет шёл от машины, на которой крутится NAT, а не от машины в частной сети. Ответ тоже приходит на эту машину, и всё тот же NAT разбирает кому он предназначен, снова подделывает адрес, будто он шёл не ему, а машине с частным адресом.
   Итак. Для выполнения вышеописанных `фокусов` с IP адресами в FreeBSD существует natd - Network Address Translation daemon - демон. Для его запуска надо пересобрать ядро со следующими опциями:
options         IPDIVERT

После чего добавляем следующие строки в /etc/rc.conf:
natd_enable="YES" # собственно запуск natd
natd_interface="fxp0"   # интерфейс на котором он будет работать (тот, 
                        # который смотрит в инет)
natd_flags="-m -u"      # флаги :
                        # -u - транслировать только адреса частных сетей
                        # т.е. по RFC 1918:
                        # 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16
                        # -m - попробовать оставить тот же номер порта что и был,
                        # с этим флагом протоколы, типа RPC лучше пашут.

Вот теперь всё. :)
P.S. Для просмотра pipe, которые уже есть в системе, пользуйтесь командой
ipfw pipe show



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=277.

размещено: 2006-01-18,
последнее обновление: 2006-05-22,
автор: lissyara

оценить статью:

MONSTR-SHEFF, 2006-01-25 в 15:52:25

У меня ядро как есть, за пускаю фаервол через rc.conf как написано,
firewall_enable="YES" - если файрволл грузится модулем
firewall_script="/etc/rc.firewall" - файл с правилами
firewall_logging="YES"
но сеть как была закрыта так и есть закрыта правили взял из первого примера. Где? и Что? не так не пойму по команде sh /etc/rc.firewall он запускается (вобщем я ни фига не понял от 4ей попы яйца )  НУЖНА СРОЧНО ПОМОЩЬ!!!

lissyara, 2006-01-25 в 16:19:03

Создай тему в форуме - не надо тут спамить :)
Кнопку отправить надо жать один раз, а не долбить по три :)
Насчёт вопроса:
firewall_type="/etc/rc.firewall"
а не
firewall_script="/etc/rc.firewall"
Это не моя ошибка, а хандбука... Причём навыерно даже не ошибка - надо сравнить как оно в разных версиях FreeBSD - может поменяли...

DeadLoco, 2006-02-16 в 12:08:10

В скрипте настоятельно рекомендую заменить вот эту строку:

FwCMD="/sbin/ipfw"

На вот эту:

FwCMD="/sbin/ipfw -q  "

Ключ "-q" подавляет вербозный вывод при отработке команды ipfw, что нехорошо при запуске скрипта с терминала, если первой командой скрипта стоит флаш, а файрволл по умолчанию блокирующий.

Вообще, общеупотребительно добрый совет: прописывая в переменную имя программы, ВСЕГДА добавляйте пару пробелов в конце. Например:

FwCMD="/sbin/ipfw   "

Этим вы гарантируетесь, что все последующие переменные будут восприняты, как аругменты, а не получится, что-то вроде ipfqadd.

dsa, 2006-02-17 в 0:08:12

# открываем снаружи 25 порт (SNMP) если на машине крутится почта
опечаточка вышла 25 - SMTP порт :)

lissyara, 2006-02-17 в 9:02:09

пьяная была, не помню :)))

На самом деле, о чём думаешь - о том и пишешь. А за ошибку - спасибо! Щас поправлю.

StepaniDOS, 2006-03-31 в 10:42:40

работы NAT обязательно присутствие строки gateway_enable="YES" в rc.conf
по крайней мере для 6-ки

nikola, 2006-04-20 в 18:36:14

firewall_type="/etc/rc.firewall" в 5.3 неработает выдаёт ошибку о неправилном аргументе FwCMD="/sbin/ipfw". Ей нужен firewall_script="/etc/rc.firewall"

Dmitry, 2006-06-06 в 7:43:21

День добрый!
установил FreeBSD_6, на фре имеется 2 интерфейса - внутренняя и внешняя сеть; пересобрал ядро. В ядре включил IPFIREWALL_DEFAULT_TO_ACCEPT. Но фря ни как не хочет выпускать во внешнюю сеть. :(
Что только не пробовал - и ipnat и natd ни в какую
подскажите пожалуйста, что делаю не так? и как можно исправить такую беду???

Marshall, 2006-07-02 в 18:32:29

А зачем в примере "простого файрволла для обычнейшей ситуации" еще вот эта строка:
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}
?
Просто я как-то без нее всю жизнь обходился

P.S.
ИМХО вообще-то проще пользовать IPNAT

Sergey, 2006-07-12 в 22:55:10

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

видимо можно заменить на одну:
${FwCMD} add allow all from any to any via ${LanIn}

Статья интересная, спасибо большое. Правда я настраивал по другой, http://www.bsdportal.ru/kb.php?mode=article&k=76.

Да еще, по личному опыту. На машину хожу по ssh и поначалу открыл стандартный 22 порт. В логах была куча попыток авторизации. неудачных естественно =) Чтобы юные дарования, освоившие nmap шли лесом повесил ssh на нестандартный порт. Попыток авторизации больше нет =)

maxim, 2006-09-12 в 16:29:06

Грамотная статья, но но не нашел как сделать так чтобы на одной машине крутилось два NAT-а (бывает же у людей несколько сетевых карт на машине). Я это решил так
в /etc новый файл rc.local
natd -p 8668 -n xl0
natd -p 8778 -n xl1
а в firewall вместо natd написал 8668 и 8778

ita, 2006-09-28 в 10:15:25

${FwCMD} add allow tcp from ${ip_lan}.100 to not ${NetIn} in via ${LanIn} setup
не хочет у меня работать такое правило.
работает
${FwCMD} add allow tcp from ${ip_lan}.100 to any via ${LanIn} setup

reLax, 2006-12-09 в 9:10:18

Не работало правило ${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 80 via ${LanOut} . Заработало только в таком виде - ${FwCMD} add fwd ${IpIn},3128 tcp from ${NetIn} to any 80 via ${LanIn}

Олег, 2007-01-19 в 5:37:56

Искренне благодарен !!!!
Таких как ты не много!

sergio, 2007-01-25 в 19:08:20

Для FreeBSD 6.0:
В /etc/rc.conf должно быть:
firewall_script="/etc/rc.firewall"

Ванёк, 2007-02-02 в 12:19:39

${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}
Вторая строчка безсмысленна, я када то то наступил уже на эти грабли =) Это хорошо работает только если у тебя ести 1 белый адрес на сетку, а если тебе нужно вывеси в инет сервак, который лежит в локалке (тупой начальник не захотел дать 2 метра кабеля и свитч =) урод... ) Например:
IpOut="222.222.222"
${FwCMD} add divert 8868 ip from ${NetIn}.111 to any out via ${LanOut}
${FwCMD} add divert 8868 ip from any to ${IpOut}.1 in via ${LanOut}
${FwCMD} add divert 8869 ip from ${NetIn}.222 to any out via ${LanOut}
${FwCMD} add divert 8869 ip from any to ${IpOut}.2 in via ${LanOut}
Ничего не работает =) Всмысле юзеры с нета не видят сервак из твоей локалки... В большинстве мануалов приведен именно такой пример (почему не знаю), в строчках
${FwCMD} add divert 8868 ip from any to ${IpOut}.1 in via ${LanOut} и ${FwCMD} add divert 8869 ip from any to ${IpOut}.2 in via ${LanOut} нужно ставить in via ${LanIn} вместо ${LanOut}. Это логически понятно, но новички могут запутатся... Надеюсь кому то поможет =)

Ванёк, 2007-02-02 в 13:23:42

Совсем забыл... Демон nat'a запускается с ключём redirect_address {белый ip} {локальный ip} ну и port соответственно 8868 и 8869

Any, 2007-02-09 в 9:19:06

${fwcmd} add divert 8668 ip from any to any via bfe0

Mikle, 2007-02-12 в 10:49:01

firewall_script="/etc/rc.firewall" #название скрипта
firewall_type="SIMPLE" #название группы правил в скрипте,их
                      #может быть несколько

Меня когда то учили, что в целях оптимизации по правилу нужно пропускать пакет setup, типа:
${FwCMD} add allow tcp from ${IPany} 1024-65535 to ${IPout} 22 in via ${LanOut} setup
остальные пакеты пойдут по правилу established. Соответственно правило established должно находится выше всех разрешающих правил. Это для нагруженных серверов, ес-но.
Из минусов - статистика по правилам будет некорректна.

KaMa-CyTpA, 2007-03-02 в 19:01:30

Сорри, только что проверил - многие серверы КС с порта 27010 начинаются.
Ну это так. Просто.

OMG!, 2007-04-01 в 5:45:33

Цитата (http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html):
Enable the firewall:
firewall_enable="YES"

Эта строка должна быть обязательна, а не "если файрволл грузится модулем", как у вас в статье. Благодарю, из-за этого сегодня сервер (естественно, просто тестовый, на живом я бы тысячу раз перед пересбокой ядра подумал =)) ушёл в даун. Тем не менее, спасибо за ваш труд. Жаль, что такие неточности исправляются только 21 комментарием =\

OMG!, 2007-04-01 в 5:47:09

*** "обязательна" следует читать как "обязательно" ^^

hz, 2007-05-28 в 11:37:51

# рубаем мультикастовые рассылки
${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}

два раза подряд чтоб уж наверняка =)
видимо в первом или во втором правиле имелось в виду LanIn

lissyara, 2007-05-28 в 15:25:22

Советую обратить внимание на то, что между ними, и перечитать man ipfw - это взято именно оттуда, насколько я помню.

Reshek, 2007-06-14 в 6:03:52

Почему-то если эта строка всё портит. ТЕ firewall , начинает блокировать всё что поступает с внешнего интерфейса.
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}
А СТАТЬЯ СУПЕР!

rootd, 2007-06-14 в 15:23:43

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

А разве вот это правило не позволит пользователям юзать инет и асю и вообще любые tcp подключения ?

rootd, 2007-06-26 в 16:38:54

 "Кстати, ядро можно и не пересобирать - достаточно загрузить модуль при старте системы, для этого внесём строку firewall_enable="YES" в файл /etc/rc.conf и после перезагрузки файрволл заработает."

Потратил час пока не понял что FORWARD работает только с пересборкой ядра...

Ckopnuo, 2007-07-18 в 17:48:38

Так все правила пишутся в /etc/rc.firewall? Или куда? Просто после пересборки ядра файлик этот уже есть и он не пустой...Получается надо оттуда все удалить и написать свои правила?
Спасибо

Ckopnuo, 2007-07-19 в 11:41:32

Сорри, все, понял уже:)

begemoto, 2007-07-24 в 21:09:22

если есть check-state должен быть keep-state или limit, а их то я в этом конфиге и не вижу.  
например:
${FwCMD} add allow tcp from ${ip_lan}.151 to not ${NetIn} in via ${LanIn} setup

а какое правило разрешает обратные пакеты? Или я не догоняю?

lissyara, 2007-07-24 в 21:43:36

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

*DEAD*Zmey, 2007-07-25 в 14:20:00

lissyara, спасибо огромное за все те материалы, которые у Вас здесь выложены! На мой взгляд - Мегасайт (по классификации Гоблина :D)
Многие из статей попробовал, и очень многое выручило. :)


В строке "# Разрешаем весь траффик по внутреннему интерфейсу (петле)"
  ${FwCMD} add allow ip from any to any via lo0
разрешаем всё через lo0, или, что тоже самое
  ${FwCMD} add allow all 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

Мы уже разрешили ВЕСЬ трафик, в первом правиле, так что "Запреты" наверное можно убрать? Ну и соответственно потому и "не рубится". Или я не прав?

lissyara, 2007-07-25 в 14:29:03

Прав. Надо правила местами поменять :)

begemoto, 2007-07-25 в 21:16:22

так все таки зачем check-state?

и еще: почему не обьеденить правила:
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
и
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}

в одно:
${FwCMD} add deny ip from 10.0.0.0/8 to any via ${LanOut}


lissyara, 2007-07-25 в 22:06:18

когда будешь ковырять - почему что-то не работает - удобней когда так.
=============
и прочти наконец текст в окошке для ввода комментов, до того как стираешь его.

skoval, 2007-08-13 в 11:07:57

По-моему в явном виде тут никто так и не написал про firewall_type и firewall_script.
В хендбуке написано, что в firewall_type  помимо параметров для /etc/rc.firewall (open, simple etc.) можно указать абсолютный путь к файлу с правилами для фаервола, т.е.
add block in all
add block out all
а в firewall_script указывается абсолютный путь к командам для /bin/sh, т.е.
ipfw add block in all
ipfw add block out all.
Это два основных способа написания своих правил для фаервола.

Nadz Goldman, 2007-08-20 в 12:22:05

Фря 6.0
IPFW+NAT
Ядро собрано с опциями:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET
options IPFIREWALL_DEFAULT_TO_ACCEPT

Но все правила, в которых указана опция SETUP попросту неработают.

urgor, 2007-08-21 в 14:06:22

> Мы уже разрешили ВЕСЬ трафик, в первом правиле,
Мы разрешили на интерфейсе lo, а для пакетов что пришли на него с fxp0 отработают запреты....
2 liss: ничего менять не надо, у тя все прально...

Kolesya, 2007-09-07 в 17:19:40

>hz, 2007-05-28 в 11:37:51
>
># рубаем мультикастовые рассылки
>${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}

>два раза подряд чтоб уж наверняка =)
>видимо в первом или во втором правиле имелось в виду >LanIn

224 и 240 не совпадают :) так что Лис правильно написал

kolesya, 2007-09-07 в 19:44:10

[b]Статья Лиса, последний пример(типа не самый простой файрвол)
># Разрешаем траффик внутренней сети на внутреннем >интерфейсе (входящий)
>${FwCMD} add allow ip from any to ${NetIn} in via ${LanIn}
># Разрешаем траффик внутренней сети на внутреннем интерфейсе (исходящий)
>${FwCMD} add allow ip from ${NetIn} to any out via ${LanIn}

Если у когото успользуется чтот типа tun-интерфейс(VPN и т.д.), правила приведенные выше,при условии что сети доверенные,  нужно поменять на:

VPNNet="10.1.2.0/24"
VPNIf="tun0"
...
${FwCMD} add allow ip from any to ${NetIn},${VPNNet} in via ${LanIn}
${FwCMD} add allow ip from ${NetIn},${VPNNet} to any out via ${LanIn}

${FwCMD} add allow ip from any to ${NetIn},${VPNNet} in via ${VPNIf}
${FwCMD} add allow ip from ${NetIn},${VPNNet} to any out via ${VPNIf}

barsykoff, 2007-09-12 в 14:15:57

А разве не оптимальней было сделать так:
1. Разрешить трафик по локальной сети и петле
2. NAT, fwd
3. Разрешить некоторый трафик снаружи
4. Запретить все.
Ведь тогда не надо писать так много запретов...

Kolesya, 2007-10-02 в 20:39:08

> barsykoff, 2007-09-12 в 14:15:57
Если можно подробнее

torki, 2007-10-18 в 1:15:16

lissyar-e, опять земной поклон! Статья супер! Спасибы множественные! Хвати пить пиво, обеспеч себе старость(шутка). Пиши Книгу, материал уже набрался!

artem, 2007-11-16 в 18:19:28

Из мелочей: обновление подправленного файла rc.firewall-
#root#>sh /etc/rc.firewall
я пока не догадался reboot писал :)

lisergey, 2007-11-16 в 18:59:59

по идее, еще правильне обновлять правила фаервола так
# /etc/rc.d/ipfw restart &

этот вариант проверит и переменные из /etc/rc.conf
и при необходимости запустит NAT, и правильно выберет скрипт для фаервола в зависимости от того, как он прописан в /etc/rc.conf

в простейшем же случае это будет эквивалентно тому же самому
# sh /etc/rc.firewall

f0s, 2007-12-06 в 17:10:30

курил сегодня хендбук... там написано следующее:

# Deny all inbound traffic from non-routable reserved address spaces
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif          
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif


а у теб в статье тоже самое от них к any, но не 'in', a 'out' почему-то

artem, 2007-12-21 в 14:32:28

советую еще почитать здесь особенно про DUMMYNET

smilealex, 2007-12-21 в 14:44:05

2artem... вот я туп.. и? уважаемый.. неужели труда составляет выразить своё пренебрежение выкладыванием ссылки вместо обоснованного комментария с доводами и примерами?
Честь имею!
ЗЫ пусть к стыду - но по ссылке даже не пройдусь, ибо довольствуюсь малым.

lissyara, 2007-12-21 в 15:12:23

Он ТИЦ и ПР сайта своего повышает...
Чтоб ссылки дороже продавались =)
Тока вот неучёл, что специально для таких я ссылки сделал через редирект.
===========
оффтоп - по меркам интернета и поисковиков, эта конкретная страница - очень жирная. По запросу IPFW - она в первой пятёрке всех крупных поисковиков. Периодически на первое место лезет, но ниже пятёрки - не падает.
Вот поэтому, такой ерундой и занимаются.
=============
"Остапа понесло" :)

artem, 2008-01-10 в 16:04:22

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

Reshek, 2008-01-10 в 16:38:33

Ну и где линк?

DarkHost, 2008-01-15 в 15:44:30

Jail на машине c ipfw не хочет пускать по SSH, хотя стот allow ip from 195.14.56.XXX to me 22. На основную машину войти могу, в Jail-нет. Порт открытый вижу, а при генерации DSA ключа - замирает и отваливается по timeout(логи).

KaMa-CyTpA, 2008-02-29 в 15:39:54

Народ!
В 7 IPFW переделан сильно насколько я понял.
Правила по поводу НАТ-а не работают - ну это на сайте написано что тни просто НАТ в IPFW включили.
А вот форвардинг у меня тоже типа обломался почему-то...
Буит описалово аль как?

Reshek, 2008-02-29 в 15:51:01

Да. Интересно. Иду ковырять 7-ку.

dimts, 2008-03-02 в 13:05:10

В коментах тут увидел про перезагрузку правил.
Правильно перезапускать их этим скриптом:
/usr/share/examples/ipfw/change_rules.sh
только не забудьте дать права на выполнение

ffzema, 2008-04-10 в 11:29:05

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

${FwCMD} add 140 deny ip from 127.0.0.0/8 to any
#следующим 2 правилам нужно сделать так чтоб пропускалось следующее за ними правило
#!!!!!!!!!!!! проверить

${FwCMD} add 145 skipto 160 ip from ${AllIp} to ${ErTelecom} out via ${LanOut} #Разрешаем соединение с сервером р-телекома
${FwCMD} add skipto 110 ip from ${ErTelecom} to ${AllIp}  #Разрешаем соединение сервера р-телекома с компами

#Разрешил в инет, если нужно еще кому, то нужно добавить через запятую его ip адрес или лучше прописать в переменной
#${FwCMD} add 150 deny ip from not ${AllowIp} to any out via ${LanOut}  # Этим адресам можно в инет



# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться не откуда на нём.
# рубим частные сeти
${FwCMD} add 160 deny ip from any to 10.0.0.0/8 in via ${LanOut}

artem, 2008-04-10 в 14:11:43

 а текст прочитать осилил прежде чем стереть??
 для тебя повторю:
Для вопросов есть форум!

Z-16-H, 2008-04-11 в 5:06:14

Кому интересно, нашёл более-менее правильно переведённый MAN по IPFW. Правда для FreeBSD 4.4.

http://www.unixdoc.ru/index.php?mode=2&podmode=1&arcicle_id=32

http://ln.ua/~openxs/projects/man/uman110.html

pwlad, 2008-04-17 в 8:34:56

>barsykoff, 2007-09-12 в 14:15:57
>А разве не оптимальней было сделать так:
>1. Разрешить трафик по локальной сети и петле
>2. NAT, fwd
>3. Разрешить некоторый трафик снаружи
>4. Запретить все.
>Ведь тогда не надо писать так много запретов...

Действительно, ведь последнее правило запрещает всё, что не разрешено.
Или я чего-то не догоняю?

Black, 2008-06-03 в 17:06:44

Большое спасибо lissyara !!!

KnyaZ, 2008-06-06 в 13:51:24

Респект и уважуха автору

Sun, 2008-07-29 в 8:29:14

Ребят а кто-то из вас книги по BSD читал или нет? Тем более если вы по английски читать не можете, хандбук например - как вы бсд то юзать будете?? OMG :)

cheshire_cat, 2008-09-05 в 0:53:20

Во втором конфиге два раза повторяются строчки

# открываем снаружи 20,21 порт - для активного FTP
${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup

eXo, 2008-10-03 в 12:31:42

А я так и не понял... открываю файл /etc/rc.firewall для редактирования правил а там такая околесица написана... все удалить и внести вышесказанное или под ним дописать????
И еще у мен PPPoE ADSL инет с динамическим IP как для него правила переделать???

kottyara, 2008-10-03 в 12:56:11

В поле "внешнего" айпи вводится адрес сетевой карточки, которая "смотрит" на ADSL модем (соединение Ethernet'ом). Смысл файервола - защищать комп, а не модем ;-)

Damon_X, 2008-11-19 в 13:37:55

${FwCMD} add allow tcp from ${IpOut} to any out via ${LanOut} setup
${FwCMD} add allow tcp from any to ${IpOut} in via ${LanIn} setup
Не понимаю совсем этих строчек!! Зачем они там ? кто растолкует

Rassadin, 2008-11-27 в 0:55:34

Во FreeBSD 7 ядерный NAT включается в /etc/rc.conf
firewall_nat_enable="YES"
firewall_nat_interface="if0" # if0 = внешний интерфейс
firewall_nat_flags=""  # можно вставить redirect_port, если надо пробросить.
natd_enable="NO"      # natd соответственно не нужен

В конфиге ядра должны быть
options         IPFIREWALL_NAT
options         LIBALIAS

Кажется модулем не подключить, надо пересобирать.

Rassadin, 2008-11-27 в 0:57:57

Это все, конечно, если использован штатный /etc/rc.firewall

WatchYourBalls, 2008-12-08 в 16:48:17

По причине криворукости настроить в FreeBSD 8.0-CURRENT nat через IPFIREWALL_NAT не удалось.
Поэтому попробовал сделать по вашей статье. Спасибо, всё работает отлично.

svol, 2008-12-16 в 14:39:35

в правило
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
я бы еще добавил keep-state

Zar, 2008-12-17 в 12:48:16

Ам... а только у меня skype лезет спокойно в Нет и работает? через свои порты?

ЗЫ  правило ${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 80 via ${LanOut}  
не использую.

WildVlad, 2008-12-23 в 23:55:23

Rassadin, спасибо! 5 часов потерял, не понимая почему правила с divert просто не принимают ни одного пакета.
Пересобрал ядро, поправил rc.conf - все заработало...

WildVlad, 2008-12-24 в 0:50:38

Сорри, в предыдущем сообщении не правильно сказал, не работает... еще где-то косячу.

qwe, 2009-01-14 в 7:18:35

Бред какой то, не может тут все правильно работать. тут в всех примерах все все могут.

smile, 2009-01-27 в 8:40:53

${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut} - вот это советую закрыть
мне с какого то ip адреса шли пакеты на 65535 порт,
в итоге 64гб накрутило...
по чему так получилось сейчас выясняю...
вот он расхититель казенного имущество 128.31.0.34

tite, 2009-01-29 в 4:26:33

Да тут от всего отказываться надо, файрвол дырявый!!!

GoraCIO, 2009-04-02 в 18:10:29

howto отличный,
единственное не понял: ${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}   - смысл?
лично у ся закоментил.

daggerok, 2009-05-22 в 0:55:08

# открываем снаружи 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

похоже дублекат - первая и последняя сточки одинаковы

mike, 2009-05-26 в 13:01:01

автору респект, но вот вопрос на счет почты, как быть?
подскажите плиз

Smith, 2009-08-23 в 17:51:22

Ман хороший, многое объясняет, но с NAT'ом ситауция несколько неясная.

Хендбук настоятельно рекомендует другую структуру конфига при использовании NAT - с употреблением skip to.

Кстати, глава хендбука про IPFW на русском есть здесь же, в разделе "Документация"  

ImperatorX, 2009-10-17 в 5:49:47

статья супер=)

единственно прошу добавить коммент в статью если этот роутер берёт инет с модема-роутера а там обычно сеть 192.168.1.0/24 то правила в твоём лис конфиге а конкретно:
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut} и ${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}

должны быть под коментарием иначе нет сети... =) сам долго тупил почему не не на серваке и в сети инета :D

Mike, 2010-04-29 в 11:39:26

Спасибо за конфиг!
Зачемание: вместо sysctl %var_name% | awk '{print $2}' можно писать sysctl -n %var_name%
Выдержка из man sysctl:
-n      Show only variable values, not their names.

Vsay, 2010-05-31 в 1:19:29

Афтар лох,пиши исчо.

В нормальном виде нельзя было выложить рабочий конфиг?

В примере всё через жопу и разумеется работать не будет.

artem, 2010-06-01 в 15:22:01

Так и запишем школота с ником Vsay статью не смогла осилить,
а копипаст... о горе...не заработал...плак-плак

adre, 2010-06-10 в 16:14:13

Vsya пользуйся BolgenOS. Там говрят прикрутят скоро новые фичи и нинадо больше использовать одинаковые рисунки на рабочем столе и можно будет не покупать ворд у мелкософта, т.к. поповОфис быстрее и надежнее ворда.

Vsay, 2010-07-09 в 3:04:03

Я сама писала конфиг и всё пашет, а вот по статье нет и не будет, потому что реально через жопу.

adre ,TupakOS себе поставь, там говорят даже дауны в состоянии в пасьянс раскладывать.

Alex Keda, 2010-07-09 в 7:12:31

Мадама, идите детей воспитывайте, а не выступайте с глупостями.
Эти конфиги срисованы с севреров которые до сих пор работают.
с 4.11 FreeBSD.
и конфиг файрволла на них - всё тот же, за 5 лет его даже менять не потребовалось.

Alexandr_A, 2010-07-09 в 8:13:16

Vsya, видимо тебе часто говорили, что девушка админом быть не может ты затаила большую обиду на мужчин админов и пришла полить грязью человека, который в плане ИТ-сообщества рунета сделал большое дело ввиде сие ресурса, где многие находили и находят ответы на свои вопросы.
P.S. У меня заработало ;) ИМХО: девушка не может быть админом, спасибо что помогла в этом убедиться ;) !!!

Outsider, 2010-08-31 в 13:25:22

Касательно - P1003_1B_SEMAPHORES
options         P1003_1B_SEMAPHORES   -
Поддержка семафоров POSIX. В ветке 8.1 имеет статус very xperimental...

----------------------------------------
# p1003_1b_semaphores are very experimental,
# user should be ready to assist in debugging if problems arise.
----------------------------------------

Outsider, 2010-08-31 в 13:27:29

Не в тот пост написал, это касательно сборки ядра....
(P1003_1B_SEMAPHORES)
ссори))

ups91, 2010-09-10 в 19:55:17

Приведенный конфиг файрвола достаточно точно представляет собой перевод
файла /etc.rc.firewall для случая "simple".
Автор сделал только дополнение с пайпами, контру и
еще парочку НЕ УДАЧНЫХ "исправлений" для ДНС.
Для хостов ЗА таким файрволом будет доступен ТОЛЬКО ДНС сервер на ЭТОЙ ЖЕ машине (а если его там нет - то имена развязываться НЕ БУДУТ).

ups91, 2010-09-10 в 20:07:38

2 Alex Keda: "конфиг с рабочего сервака"
Для клиентов ЗА таким файрволом будет доступен ТОЛЬКО один ДНС сервер (тот, который на этом же сервере).
Правила для выпуска обращений к внешним серверам - некорректны. Они не пропустят ответ внешнего ДНС (после ната) во внутр. сеть.  
Сравни, хотя бы с правилами для контры на внешних серверах (она так же работает по UDP но на других портах)

tak zashel, 2010-10-11 в 14:35:08

Друзья, коллеги, хорошие люди, мадам, недруги и пр.. статья еще актуальна? Стоит по ней настраивать фаер на 8.1?

Alexandr_A, 2010-10-12 в 7:16:36

tak zashel
а ты проверь, потом отпишиешься )
P.S. А че бы и не работать?!

tak zashel, 2010-10-12 в 13:55:05

проверил.. второй пример.. что-то пользователей сети не пускает в инет через сквид.. (правда правила чуть изменил).. открыл порт для openfire, заработал через инет... открыл также 1194 для openvpn - не заработал...
Сканировал NMAPом, порт для openfirе видит, а 1194 нет

Alexandr_A, 2010-10-13 в 2:57:00

tak zashel
Думаю пора писать на форум )

Fobos, 2010-12-20 в 19:04:17

Запустил сей конфиг на фре 8.1, работает всё как бы, но за этим фаерволом из венды невозможно подк.ючиться в ВПН по РРТР, непонятно как то, по правилас gre не идут вооще никакие пакеты.

gpnoz, 2011-01-03 в 1:58:49

Товарищщи! все тут правильно и все работает. просто обратите внимание на регистр. т.е {FwCMD} в штатном rc.firewall пишется {fwcmd}. обращайте внимание на мелкие недочеты. как описано, так и работает.

Для вопросов есть форум!

tokito, 2011-07-13 в 12:40:12

уже неделю мучаюсь с натом , не хочет он раздавать инет по сети :(
перепробовал уже кучу инструкций:(

Fobos, 2011-07-14 в 0:17:00

Какая версия ОС?

time, 2011-08-28 в 18:33:04

я не совсем понял, вот это правило

${FwCMD} add allow udp from any 53 to any via ${LanOut}

разрешает с локального порта 53 отправлять udp пакеты в любых направлениях?

Fobos, 2011-08-29 в 0:15:13

С любого хоста за натом разрешает отправлять запросы на 53ий порт любого хоста вне сети, вообще то говря правило лишнее, но на всякий случай типа.

time, 2011-09-20 в 11:46:18

вот не понимаю, это правильно значит что с удаленного 53 порта можно коннектиться к любым локальным портам моей тачки? это ведь не дело!

tehnikpc, 2011-11-28 в 21:13:09

"Учтите - эти изменения живут ровно до первой перезагрузки, если хотите чтобы они остались насовсем, то читайте тут."-а что собственно читать, то, что просто нужно прописать нужное значение в /etc/sysctl.conf? Странно.

tehnikpc, 2011-11-28 в 21:19:28

Зачем делать открытый фаерволл тоже не пойму.

bilcic, 2011-12-14 в 20:29:26

если внешний адресс выдется провайдером по DHCP то

IpOut=`ifconfig $LanOut | grep inet | awk \'{print $2}\'`

SkiNNi, 2012-01-10 в 11:57:17

 я только начинаю разбираться в BSD, так что может глупый вопрос но:
${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


первое правило разве не разрешает выходить всем пакетам через lo0? И до остальных не доходит?

SkiNNi , 2012-01-10 в 11:59:23

Извеняюсь было уже спрошенно и отвеченно. Удалите плиз. :(

Vsey, 2012-06-25 в 12:29:31

Alex Keda,Alexandr_A,adre,artem Вы криворукие балбесы.

Конфиг фаервола приведённый выше мало того что раком написан так ещё и не рабочий.

Alex Keda, 2012-06-25 в 19:36:07

эх вася, вася...
высокоинтеллектуальный вы наш пионер на каникулах...
прочтите комментарий от 2007-07-25 в 14:29:03

а статья от 2006 года. прошло больше шести лет, и файрволл этот, в этой же конфигурации работаеет на этой же машине.

учитесь вася, читать комментарии, думать.
а комбинацию Ctrl+C && Ctrl+V лучше сразу забыть.

tehnikpc, 2012-07-30 в 8:24:42

"разрешаем весь исходящий траффик"
Правило просто шикарное. Может тогда просто сразу сделать "${FwCMD} add allow ip from any to any"?

МОРЖ, 2014-11-29 в 0:44:29

Alex Keda - ТЫ ОЛЕНЬ

Alex Keda, 2014-11-29 в 0:50:00

вот честное слово, мне - похуй =)

возраст детских обид на дурачков из интернета - давно уже прошёл. да и не было его наверное, иначе бы закрыл камменты ещё на первом таком комментарии, лет 8 назад.

2admin2, 2014-12-24 в 19:49:26

Т2овар2ищ2щи2! 2Это 2пол2я для вв2ода ком2мент2ар2иев к 2статье, 2а не для 2воп2рос2ов. 22Сю2да пиш2ите2 н2ай2де2нны2е 2баги2, и2ли ка2к2ие-т2о2 2фи2чи :2)2
Д2л2я2 воп2ро2сов2 ес2ть2 фо2рум2!

Alex Keda, 2014-12-24 в 19:51:21

Гот честное слово, мне - похуй =)

возраст детских обид на дурачков из интернета - давно уже прошёл. да и не было его наверное, иначе бы закрыл камменты ещё на первом таком комментарии, лет 8 назад.


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-22, Mufanu
named 9.7.0

Система доменных имен (Domain Name Service, DNS) - одна из тех незаметных, закулисных программ, которым не уделяется и половины того внимания, которого они заслуживают.
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS

Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs

Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD

Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC

Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat

Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot

Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless

Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение

Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга

Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff

Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 16 чел.
За последние 30 мин было: 62 человек
За сегодня было
114 показов,
31 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.2591 секунд
Из них PHP: 74%; SQL: 26%; Число SQL-запросов: 77 шт.
Исходный размер: 248088; Сжатая: 44251