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

» FreeBSD + ipfw rules

Автор: 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
оно, кто?
если про правила - один из вариантов конфига ипфв, имеет право на существование, почему нет... и хочется разобраться
если про сетку - есть необходимость некоторым машинам в локалке - разрешить все сервисы
Автор: vovanj7
Дата сообщения: 25.02.2009 12:19
вот это зачем ?

Цитата:

$cmd 126 $skip ip from 192.168.1.0/24 to any out via $wan_if setup $ks


если можно сначала все разрешить всем, кому надо, а в конце поставить запрещающее правило

$cmd 450 deny log ip from any to any

вот тут толково расписано
http://www.lissyara.su/?id=1127
Автор: ugh
Дата сообщения: 25.02.2009 21:07
Решено*

# Разрешаем всем доступ наружу
$cmd 126 $skip ip from 192.168.1.0/24 to any out via $wan_if setup $ks

убрать setup
Автор: dPod
Дата сообщения: 10.03.2009 22:34
lkrotish
Как раз всё это стоит, но что-то непускает!
Автор: xsash
Дата сообщения: 30.06.2010 08:16
случайно запретитил кроме "моего круга" еще и сам яндекс

ipfw add 1100 deny all from any to 213.180.204.0/24

убивал правило, разрешал.... блин, как обратно то разрешить?
Автор: Eye_Bass
Дата сообщения: 11.03.2011 21:12
Freebsd 8.1
проблема с ipfw - никак не могу подключить форвардинг.

ipfw2 (+ipv6) initialized, divert loadable, rule-based forwarding disabled, default to deny....

ядро собрано с options IPFIREWALL_FORWARD

соответственно правила с fwd не работают:
ipfw: getsockopt(IP_FW_ADD): Invalid argument

Куда копать?
Автор: Alukardd
Дата сообщения: 12.03.2011 00:39
Eye_Bass
так а вы форвардинг в принципе разрешили?
либо в /etc/rc.conf gateway_enable="YES", либо в /etc/sysctl.conf net.ipv4.conf.default.forwarding=1

p.s. ИМХО, надо оставлять по направлению только 1 тему с шапкой, а остальные полочить(не удалять). А то блин куча мусора получается. Создали уже тут тему для фаеров никсовых, так давайте в ней и разбираться с вопросами, а то потом нужную инфу не найдешь. В тему по vpn хоть пытаемся народ спихивать для централизации, надо по всем вопросам так сделать.
Если в той теме я мало внимания в шапке уделил фре, то давайте из этой темы туда перенесём инфу.
Автор: Eye_Bass
Дата сообщения: 12.03.2011 11:03
вопрос снимается -> просто пересобрал ядро еще раз:
make -C /usr/src kernel KERNCONF="myGen"
Автор: tomahome
Дата сообщения: 09.02.2012 16:11
а кто может подсказать что не так в моем скрипте
мне нада разрешить 3 человекам ходить куда хозотят и как захотят (открыть пасивный фтп)
я написал
allallow="ttg046.tt-g.local,ttg001.tt-g.local,ttg070.tt-g.local"
ext_if="re1" #(смотрит в интернет)
int_if="re0" #(смотрив в лан)

#Allow All Разрешить все
${fwcmd} add 00217 allow all from ${allallow} to any in via ${int_if}
${fwcmd} add 00218 allow all from ${allallow} to any out via ${ext_if}

${fwcmd} add 00219 allow all from any to ${allallow} in via ${int_if}
${fwcmd} add 00220 allow all from any to ${allallow} out via ${ext_if}

${fwcmd} add 01000 deny tcp from any to any via ${ext_if}
${fwcmd} add 01001 deny udp from any to any via ${ext_if}

но никуда их не пускает . если закоментировать 2 нижних то соответственно все ок.
Автор: solodorik
Дата сообщения: 20.07.2012 13:42
Доброго всем дня! Подскажите пожалуйста правила для ipfw от брутфорса.
sshguard, fail2ban, bruteblock и другие подобные утилиты не подходят, слишком долго работают.
Скрипт лучше, но правило работает быстрее.
Защиты портов уже используется.

Автор: Laterport
Дата сообщения: 26.11.2012 09:28
Доброго времени суток всем. Сталкиваюсь периодически с проблемой, по большей части конечно из-за невнимательности, но все же хочу понять причину и способ, чтобы подобное предотвращать. Имеется небольшой firewall.conf, который работает верой и правдой. Вот недавно редактировал его и допустил ошибку, какие то символы нечаянно ввел, что-то типа этого - ":%:%5", собственно не заметил и выполнил ipfw restart. Вся, система стала недоступной, сайт недоступен, SSH тоже. Какова причина? Почему какие-то символы являются причиной блокировки всего вообще? Работал я естественно удаленно, теперь ждать вечера, зализать локально и исправлять. Как подобное предотвращать, например при наличии ошибок игнорировать их или не обрабатывать?

Страницы: 1234567891011

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


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