IPFW

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
the_big_jump
проходил мимо
Сообщения: 2
Зарегистрирован: 2012-09-21 11:10:46

Re: IPFW

Непрочитанное сообщение the_big_jump » 2012-09-21 11:21:27

Добрый день! Ситуация следующая: в конторе стоит интернет-сервер на FreeBSD 6.2, в интернет выхожу через NAT. Как настроить файл "rc.firewall" чтобы можно было играть в "World of Tanks"? Стандартными способами открыть не получается. Что можете посоветовать?

На форуме игры вот что советуют:
"Необходимо, чтобы для лончера и клиента игры в брэндмауэре/анитивирусе/фаерволе были открыты следующие порты:

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

Для WorldOfTanks.exe необходимо открыть порты UDP диапазон с 32800 по 32900 и UDP диапазон с 20010 по 20020

Для WOTLauncher.exe и WorldOfTanks.exe TCP 3128, 8081, 8088, 53, 3128, 80, 8080, диапазон с 20000 по 25000, 32801, 32803, 443.

Для работы голосового чата, так же необходимо для WorldOfTanks.exe открыть порты UDP диапазон с 12000 по 29999, 5060, 5062, 3478, 3479, 3432, 30443.

Для WorldOfTanks.exe необходимо разрешить UDP протокол и TCP протокол

Опционально - внести в доверенную зону диапазон адресов наших серверов:

1) с 94.198.55.0 по 94.198.55.255

2) с 178.20.235.0 по 178.20.235.255

3) с 213.252.131.0 по 213.252.131.255

4) с 213.252.177.0 по 213.252.177.255

5) c 209.170.73.0 по 209.170.73.255

6) c193.110.91.0 по 193.110.91.255"

но как это применить не знаю.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

gyurza2000
лейтенант
Сообщения: 895
Зарегистрирован: 2007-07-08 23:53:20
Откуда: SPb
Контактная информация:

Re: IPFW

Непрочитанное сообщение gyurza2000 » 2012-11-12 20:17:06

День добрый, подскажите пожалуйста, какой версии IPFW стоит в FreeBSD 8.2-RELEASE on i386
Xeon X5460, RAM 8Gb, FreeBSD 13.1-RELEASE on amd64, Apache 2.4, PHP 7.3.30, MySQL 5.7, Exim 4.95_5, Dovecot 2.3.19.1

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

Re: IPFW

Непрочитанное сообщение harmless » 2012-12-18 23:29:49

gyurza2000 писал(а):День добрый, подскажите пожалуйста, какой версии IPFW стоит в FreeBSD 8.2-RELEASE on i386
3.

Jony
рядовой
Сообщения: 20
Зарегистрирован: 2010-06-07 9:17:07

IPFW

Непрочитанное сообщение Jony » 2016-02-11 12:19:21

День добрый.
Есть задача: два сетевых интерфейса на две разных сети. все выходят в инет и друг-друга не видят.
Какие правила нужно прописать на файрволе?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

IPFW

Непрочитанное сообщение Alex Keda » 2016-02-12 20:05:24

Запрет доступа ко второй сети, на интерфейсе первой
Убей их всех! Бог потом рассортирует...

Andrei12
проходил мимо
Сообщения: 6
Зарегистрирован: 2016-06-21 10:27:25

IPFW

Непрочитанное сообщение Andrei12 » 2016-08-18 9:38:51

Доброго дня всем. Есть фря 10.1 на ней впн MPD5+IPFW на другой машинке билинг (UTM) с радиусом. Не получается настроить IPFW для того чтобы кленты могли по впн (PPTP) получить доступ в инет. Подключение происходит но без доступа в инет.
Конфиг rc.conf

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

hostname="vpn6"
keymap="ru.koi8-r"

ifconfig_lo0_alias0="172.16.0.1/32"


cloned_interfaces="vlan101 vlan4020"

ifconfig_em0="up"
ifconfig_em0="inet xx.xx.214.249 netmask 255.255.255.0"
ifconfig_em0_alias0="inet xx.xx.214.180 netmask 255.255.255.0"
ifconfig_em0_alias1="inet xx.xx.214.181 netmask 255.255.255.0"
ifconfig_em0_alias2="inet xx.xx.214.182 netmask 255.255.255.0"
ifconfig_em0_alias3="inet xx.xx.214.183 netmask 255.255.255.0"
ifconfig_em0_alias5="inet xx.xx.214.184 netmask 255.255.255.0"

ifconfig_em1="up"
ifconfig_vlan101="10.10.xxx.xxx netmask 255.255.0.0 vlan 101 vlandev em1 up"
ifconfig_vlan4020="172.20.xx.xx netmask 255.255.255.224 vlan 4020 vlandev em1 up"

defaultrouter="xx.xx.214.1"

sshd_enable="YES"

static_routes="dns ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 ar9 ar11"
route_dns="172.20.1.1 172.20.xx.xx"
route_ar1="10.1.0.0/16 172.20.xx.xx"
route_ar2="10.2.0.0/16 172.20.xx.xx"
route_ar3="10.3.0.0/16 172.20.xx.xx"
route_ar4="10.4.0.0/16 172.20.xx.xx"
route_ar5="10.5.0.0/16 172.20.xx.xx"
route_ar6="10.6.0.0/16 172.20.xx.xx"
route_ar7="10.7.0.0/16 172.20.xx.xx"
route_ar8="10.8.0.0/16 172.20.xx.xx"
route_ar9="10.9.0.0/16 172.20.xx.xx"
route_ar11="10.11.0.0/16 172.20.xx.xx"
gateway_enable="YES"

dumpdev="AUTO"

mpd_enable="YES"
mpd_flags="-b"

dnsmasq_enable="YES"

firewall_enable="YES"
firewall_nat_enable="YES"
firewall_logging="YES"
firewall_script="/etc/ipfw.sh"

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
конфиг ipfw.sh

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

#!/bin/sh

ipfw=echo
ipfw=ipfw
add="$ipfw add"

$ipfw -q -f flush

IF_WAN=xx.xx.214.249
IF_LAN101=vlan101
IF_LAN=vlan4020

IP_NAT1=xx.xx.214.249

$ipfw nat 1 config ip $IP_NAT1
$add 1 deny all from "table(0)" to any via $IF_WAN
#$add 5 fwd 127.0.0.1,3128 tcp from 172.18.0.0/32 to "table(1)" dst-port 80
#$ipfw nat 5 config ip 10.10.240.119 redirect_port tcp 127.0.0.1:80 80
$add 10 allow ip from any to any via lo0
$add 11 allow all from xx.xx.2.10 53 to me #DNS
$add 12 allow all from me to xx.xx.2.10 53 #DNS
$add 15 allow icmp from any to me
$add 20 skipto 10000 ip from any to any in recv $IF_WAN
$add 30 skipto 20000 ip from any to any out xmit $IF_WAN
$add 40 skipto 30000 ip from any to any in recv vlan4020
$add 41 skipto 30000 ip from any to any in recv vlan101
$add 50 skipto 40000 ip from any to any in recv "ng*"
$add 60 allow ip from any to any out
$add 70 deny log ip from any to any
$add 10020 check-state
$add 10100 nat 1 ip from any to $IP_NAT1
$add 11000 deny log ip from any to any
$add 20000 nat 1 ip from 172.16.0.0/16 to any
$add 20001 nat 1 ip from 172.17.0.0/16 to any
$add 21000 allow ip from me to any keep-state
$add 22000 deny log ip from me to any
$add 30000 allow ip from any to me
$add 31000 deny log ip from any to any
$add 40000 deny ip from any to any dst-port 35691
$add 40010 deny tcp from any to 'table(10)' dst-port 80
$add 41020 allow ip from 172.16.0.0/16 to any
$add 41021 allow ip from 172.17.0.0/16 to any
$add 41050 deny log ip from any to any
конфиг mpd.conf

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

startup:
        log +PHYS2
        set console self 127.0.0.1 5005
        set console open
        set radsrv peer xx.xx.0.4 D3S6c5
        set radsrv self xx.xx.255.112 3799
        set radsrv open

default:
        load pptp_server

pptp_server:
####################################################
        set iface up-script /usr/local/etc/mpd5/if-up.sh
#####################################################
# Create clonable bundle template named B
        create bundle template B
        set iface enable proxy-arp
        set iface enable netflow-in
        set iface enable netflow-out
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
# Specify IP address pool for dynamic assigment.
        set ipcp ranges 172.16.0.1/32 0.0.0.0/0
        set ipcp dns 172.16.0.1
        set bundle dipsable compression
        #set ccp yes mppc
        #set mppc yes e40
        #set mppc yes e128
        #set mppc yes stateless
# Create clonable link template named L
        create link template L pptp
# Set bundle template to use
        set link action bundle B
# Multilink adds some overhead, but gives full 1500 MTU.
        set link enable multilink
        set link yes acfcomp protocomp
        set link no pap chap
        set link enable chap
# We can use use RADIUS authentication/accounting by including
# another config section with label 'radius'.
        load radius
        set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation.
        set link mtu 1460
# Configure PPTP
        set pptp self xx.xx.255.112
# Allow to accept calls
        set link enable incoming
На фря 8 все работает а во 10 нет. Ядро пересобрал вот с такими опциями
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"

lazhu
сержант
Сообщения: 254
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW

Непрочитанное сообщение lazhu » 2016-08-19 9:33:25

Каша какая-то в скрипте файрвола. Такой нигде работать не будет. Это что?
Andrei12 писал(а):

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

ipfw=echo
ipfw=ipfw
А это?
Andrei12 писал(а):

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

IF_WAN=xx.xx.214.249
IP_NAT1=xx.xx.214.249
IF_WAN должен содержать имя интерфейса.
Зачем столько лишних правил? 20-50 абсолютный мусор.
Зачем натить входящие пакеты при использовании стэйтов? Вы уж или крестик снимите, или трусы наденьте. 10100, 21000 не нужны; 20000, 20001 keep-state
И разрешите весь локальный трафик, он из своих сеток никуда не денется.

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

for int_if in "lo0 lan1 lan2 pptp"; do ipfw add allow all from any to any via ${int_if}; done

Andrei12
проходил мимо
Сообщения: 6
Зарегистрирован: 2016-06-21 10:27:25

IPFW

Непрочитанное сообщение Andrei12 » 2016-08-19 12:24:27

lazhu,
lazhu писал(а): Каша
Да согласен каша. Но предыдущий админ оставил мне в наследство именно это на freebsd 8.3 и как это не странно все работает. Решил попробовать сам сделать ВПН сервер но на фря 10.1 поставил MPD5 написал конфиг mpd.conf впн поподнялся в secret.conf добавил юзера все работает. Но юзеры подключаются через радиус с билингом добавил параметры радиуса. Дальше настройка ipfw вот тут и затык. Файл правил не рабочий от предыдущего админа, свой согласно мана (выложу позже тоже не заработал) не пускает клиентов в инет. Но всеравно СПАСИБО думал уже не кто не ответит СПАСИБО!!!!!!

alexmrrc
рядовой
Сообщения: 23
Зарегистрирован: 2011-08-15 15:27:36

IPFW

Непрочитанное сообщение alexmrrc » 2016-08-20 22:28:36

Вопрос по шейпингу посредством ipfw.
В организации есть общий канал, порядка 80Мбит, в некоторых локальных подсетях установлены роутеры\точки доступа wi-fi, используемые адреса у которых хотелось бы ограничить по скорости), ну и чтобы на обычных проводных пользователей ограничения ни коем образом не сказывались.
Предполагаю реализовать следующим образом (пока с использованием одной таблицы, у каждого адреса точки должны быть свои 512Кбит):

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

#!/bin/sh

        fwcmd="/sbin/ipfw"

        ${fwcmd} -f flush
        ${fwcmd} -f pipe flush
#       ${fwcmd} -f queue flush
        ${fwcmd} table 1 flush

#       ${fwcmd} pipe 1 config bw 512Kbit/s buckets 128 mask dst-ip 0x000000ff
#       ${fwcmd} pipe 2 config bw 512Kbit/s buckets 128 mask src-ip 0x000000ff
        ${fwcmd} pipe 1 config bw 512Kbit/s buckets 128 mask dst-ip 0xffffffff
        ${fwcmd} pipe 2 config bw 512Kbit/s buckets 128 mask src-ip 0xffffffff
        ${fwcmd} add 11 pipe 1 ip from any to table\(1\) out
        ${fwcmd} add 12 pipe 2 ip from table\(1\) to any in
        ${fwcmd} table 1 add 192.168.0.200
        ${fwcmd} table 1 add 192.168.2.30
        ${fwcmd} table 1 add 192.168.0.222
        ${fwcmd} table 1 add 192.168.9.30
        
        ...
Корректно ли это? Т.е. каждый из заданных в table 1 адресов получит не более 512Kbit/s на прием и передачу, маска 0xffffffff – на каждый адрес своя очередь/скорость трубы, использование очередей (queue) и выставление приоритетов (weight) тут не нужны же?

Нумерация правил add 11, add 12 идут до всех последующих, в т.ч. и правил natd-а?

Ну и хоть адреса у точек имеют прямой доступ наружу

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

${fwcmd} add pass all from 192.168.0.200 to any keep-state
в отличие от обычных рабочих мест пользователей, но переменную sysctl net.inet.ip.fw.one_pass все же выставить в 0, чтобы после прохождения шейпинга применялась и последующая цепочка правил.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

IPFW

Непрочитанное сообщение Alex Keda » 2016-08-31 7:26:34

На всех полмегабита будет
Убей их всех! Бог потом рассортирует...

alexmrrc
рядовой
Сообщения: 23
Зарегистрирован: 2011-08-15 15:27:36

IPFW

Непрочитанное сообщение alexmrrc » 2016-08-31 9:36:08

Alex Keda писал(а):На всех полмегабита будет
Тогда какая же маска в pipe config-е задаст заданное ограничение скорости на каждый из адресов, занесенных в table 1?

Отправлено спустя 14 минут 28 секунд:
Исходил я из описания задания масок, поправьте, если это неверно.

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

0x000000ff - распределение между активными юзерами
0x00000000 – одна очередь/скорость трубы на всех
0xffffffff – на каждого юзера своя очередь/скорость трубы

Jony
рядовой
Сообщения: 20
Зарегистрирован: 2010-06-07 9:17:07

IPFW

Непрочитанное сообщение Jony » 2016-11-11 9:27:13

Хочу организовать резервный канал, чтобы автоматом на него переключался в случае падения основного.
Нашел скрипт переключения, скрипт отрабатывает, но резервный канал не поднимается.
Честно говоря запутался немного. Нужен пинок в нужную сторону.

что сделал:
rc.conf

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

gateway_enable="YES"

hostname="FreeBSD"
ifconfig_re0="inet 192.168.1.254 netmask 255.255.255.0"
ifconfig_re1="inet XXX.XXX.XXX.180 netmask 255.255.255.248 -rxcsum -tso"
ifconfig_re2="inet AAA.AAA.AAA.2 netmask 255.255.255.252 -rxcsum -tso"

defaultrouter="XXX.XXX.XXX.177"

firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_logging="YES"
firewall_nat_enable="YES"

dummynet_enable="YES"

natd_enable="YES"

sshd_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"

webmin_enable="YES"
samba_server_enable="YES"
winbindd_enable="YES"
squid_enable="YES"

mysql_enable="YES"
apache24_enable="YES"
ядро

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

options		IPFIREWALL
options		IPFIREWALL_FORWARD
options		IPFIREWALL_VERBOSE
options		IPFIREWALL_VERBOSE_LIMIT=100
options		IPFIREWALL_NAT
options		LIBALIAS
options		IPDIVERT
options		DUMMYNET
options		ROUTETABLES=2
options		HZ="1000"
rc.firewall

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

#!/bin/sh 

PATH="/bin:/sbin:/usr/bin:/usr/sbin";

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

FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut1="re1"            # внешний интерфейс
LanOut2="re2"            # внешний интерфейс
LanIn="re0"            # внутренний интерфейс
IpOut1="XXX.XXX.XXX.180" # внешний IP адрес машины
IpOut2="AAA.AAA.AAA.2" # внешний IP адрес машины
IpIn="192.168.1.254"   # внутренний IP машины
NetMask="24"            # маска сети (если она разная для внешней 
                        # и внутренней сети - придётся вводить ещё 
                        # одну переменную, но самое забавное, что 
                        # можно и забить - оставить 24 - всё будет 
                        # работать, по крайней мере я пробовал - 
                        # работаало на 4-х машинах, в разных сетях, 
                        # с разными масками - настоящими разными! но - 
                        # это неправильно.)
NetIn="192.168.1.0"    # Внутренняя сеть

natd -a ХХХ.ХХХ.ХХХ.180 -p 8668
natd -a ААА.ААА.ААА.2 -p 8778

testgw=$(netstat -rn | grep "^default" | awk '{print $2}')
if (test "ХХХ.ХХХ.ХХХ.177" = "$testgw")
    then
       LanOut=re1
       IpOut="ХХХ.ХХХ.ХХХ.180"
       echo "${LanOut}"
    else
       LanOut=re2
       IpOut="ААА.ААА.ААА.2"
       echo "${LanOut}"
fi

# Сбрасываем все правила:
${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

# Для Провайдера Цифра 1

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

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

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


# пропускаем траффик через трансляцию сетевых адресов (NAT)
${FwCMD} add divert 8668 ip from ${NetIn}/${NetMask} to any out via re1
${FwCMD} add divert 8668 ip from any to ${IpOut1} in via re1
${FwCMD} add divert 8778 ip from ${NetIn}/${NetMask} to any out via re2
${FwCMD} add divert 8778 ip from any to ${IpOut2} in via re2

# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${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}
${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

# разрешаем весь 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

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

root@FreeBSD:~ # uname -a
FreeBSD FreeBSD 9.3-RELEASE FreeBSD 9.3-RELEASE #1: Wed Nov  2 16:34:40 MSK 2016     root@FreeBSD:/usr/obj/usr/src/sys/my  i386
Вроде все указал.
XXX.XXX.XXX.177 - шлюз основного канала
XXX.XXX.XXX.180 - адрес

ААА.ААА.ААА.1 - шлюз резервного канала
ААА.ААА.ААА.2 - адрес

Итак, что получилось. Скрипт в кроне отрабатывает каждые 2 минуты и если основной канал упал меняет шлюз по умолчанию и перезапускает скрипт файрвола с новым шлюзом по умолчанию и новым внешним интерфейсом.
это работает. НО!
при переключении на резерв инета нет.
пакеты в нужные правила попадают....

root@FreeBSD:~ # ipfw show

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

00100    0      0 check-state
00200  214  25688 allow ip from any to any via lo0
00300    0      0 deny ip from any to 127.0.0.0/8
00400    0      0 deny ip from 127.0.0.0/8 to any
00500    0      0 deny ip from any to 10.0.0.0/8 in via re2
00600    0      0 deny ip from any to 172.16.0.0/12 in via re2
00700   92   4764 deny ip from any to 192.168.0.0/16 in via re2
00800    0      0 deny ip from any to 0.0.0.0/8 in via re2
00900    0      0 deny ip from any to 169.254.0.0/16 in via re2
01000    6    732 deny ip from any to 240.0.0.0/4 in via re2
01100    0      0 deny icmp from any to any frag
01200    0      0 deny log logamount 100 icmp from any to 255.255.255.255 in via re2
01300    0      0 deny log logamount 100 icmp from any to 255.255.255.255 out via re2
01400 1128  91696 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any dst-port 80 via re2
01500    0      0 divert 8668 ip from 192.168.1.0/24 to any out via re1
01600   63   3160 divert 8778 ip from 192.168.1.0/24 to any out via re2
01700   73   4000 fwd AAA.AAA.AAA.1 log logamount 100 ip from AAA.AAA.AAA.2 to any out
01800    0      0 fwd XXX.XXX.XXX.177 log logamount 100 ip from XXX.XXX.XXX.180 to any out
01900    0      0 divert 8668 ip from any to XXX.XXX.XXX.180 in via re1
02000    0      0 divert 8778 ip from any to AAA.AAA.AAA.2 in via re2
02100    0      0 deny ip from 10.0.0.0/8 to any out via re2
02200    0      0 deny ip from 172.16.0.0/12 to any out via re2
02300    0      0 deny ip from 192.168.0.0/16 to any out via re2
02400    0      0 deny ip from 0.0.0.0/8 to any out via re2
02500    0      0 deny ip from 169.254.0.0/16 to any out via re2
02600    0      0 deny ip from 224.0.0.0/4 to any out via re2
02700    0      0 deny ip from 240.0.0.0/4 to any out via re2
02800 2252 912024 allow tcp from any to any established
02900    0      0 allow ip from AAA.AAA.AAA.2 to any out xmit re2
03000    0      0 allow udp from any 53 to any via re2
03100    0      0 allow udp from any to any dst-port 53 via re2
03200    0      0 allow udp from any to any dst-port 123 via re2
03300    0      0 allow tcp from any to AAA.AAA.AAA.2 dst-port 21 via re2
03400    0      0 allow icmp from any to any icmptypes 0,8,11
03500  255  13144 allow tcp from any to any via re0
03600 4107 412772 allow udp from any to any via re0
03700    0      0 allow icmp from any to any via re0
03800   63   2016 deny ip from any to any
65535    0      0 deny ip from any to any
повторю - с такими настройками основной канал работает, нужно запустить резервный.
прошу помощи! Думаю решение заинтересует многих.

Отправлено спустя 1 час 15 минут 50 секунд:
в общем разобрался я.

все работает с такими настройками файрвола:

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

#!/bin/sh 

PATH="/bin:/sbin:/usr/bin:/usr/sbin";

FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut1="re1"            # внешний интерфейс
LanOut2="re2"            # внешний интерфейс
LanIn="re0"            # внутренний интерфейс
IpOut1="ХХХ.ХХХ.ХХХ.180" # внешний IP адрес машины
IpOut2="ААА.ААА.ААА.2" # внешний IP адрес машины
IpIn="192.168.1.254"   # внутренний IP машины

NetIn="192.168.1.0/24"    # Внутренняя сеть

natd -a ХХХ.ХХХ.ХХХ.180 -p 8668
natd -a ААА.ААА.ААА.2 -p 8778

testgw=$(netstat -rn | grep "^default" | awk '{print $2}')
if (test "ХХХ.ХХХ.ХХХ.177" = "$testgw")
    then
       LanOut=re1
#       IpOut="ХХХ.ХХХ.ХХХ.180"
       echo "${LanOut}"
    else
       LanOut=re2
#       IpOut="ААА.ААА.ААА.2"
       echo "${LanOut}"
fi
${FwCMD} flush

${FwCMD} add allow tcp from me to any out via ${LanOut} keep-state uid squid
${FwCMD} add fwd 192.168.1.254,3128 tcp from ${NetIn} to any 80 via ${LanOut}

${FwCMD} add divert 8668 ip from 192.168.1.0/24 to not me out xmit re1
${FwCMD} add divert 8668 ip from not me to ХХХ.ХХХ.ХХХ.180 in recv re1
${FwCMD} add divert 8778 ip from 192.168.1.0/24 to not me out xmit re2
${FwCMD} add divert 8778 ip from not me to ААА.ААА.ААА.2 in recv re2
${FwCMD} add allow all from any to any
Отправлено спустя 34 секунды:
в общем разобрался я.

все работает с такими настройками файрвола:

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

#!/bin/sh 

PATH="/bin:/sbin:/usr/bin:/usr/sbin";

FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut1="re1"            # внешний интерфейс
LanOut2="re2"            # внешний интерфейс
LanIn="re0"            # внутренний интерфейс
IpOut1="ХХХ.ХХХ.ХХХ.180" # внешний IP адрес машины
IpOut2="ААА.ААА.ААА.2" # внешний IP адрес машины
IpIn="192.168.1.254"   # внутренний IP машины

NetIn="192.168.1.0/24"    # Внутренняя сеть

natd -a ХХХ.ХХХ.ХХХ.180 -p 8668
natd -a ААА.ААА.ААА.2 -p 8778

testgw=$(netstat -rn | grep "^default" | awk '{print $2}')
if (test "ХХХ.ХХХ.ХХХ.177" = "$testgw")
    then
       LanOut=re1
#       IpOut="ХХХ.ХХХ.ХХХ.180"
       echo "${LanOut}"
    else
       LanOut=re2
#       IpOut="ААА.ААА.ААА.2"
       echo "${LanOut}"
fi
${FwCMD} flush

${FwCMD} add allow tcp from me to any out via ${LanOut} keep-state uid squid
${FwCMD} add fwd 192.168.1.254,3128 tcp from ${NetIn} to any 80 via ${LanOut}

${FwCMD} add divert 8668 ip from 192.168.1.0/24 to not me out xmit re1
${FwCMD} add divert 8668 ip from not me to ХХХ.ХХХ.ХХХ.180 in recv re1
${FwCMD} add divert 8778 ip from 192.168.1.0/24 to not me out xmit re2
${FwCMD} add divert 8778 ip from not me to ААА.ААА.ААА.2 in recv re2
${FwCMD} add allow all from any to any

Jony
рядовой
Сообщения: 20
Зарегистрирован: 2010-06-07 9:17:07

IPFW

Непрочитанное сообщение Jony » 2016-11-11 14:39:14

рано радовался.
не прохолят пинги на сервере при работе на резервном канале.

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-25 18:05:59

На сервере крутится веб-сервер. Необходимо поставить страницу-заглушку для плохих ребят

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

uname -a
FreeBSD hp 12.1-RELEASE FreeBSD 12.1-RELEASE PLEX01  amd64
Ядро

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

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
Правило ipfw

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

${fw} 00090 fwd log 127.0.0.1,1111 tcp from not «table(50)» to any dst-port 80 via ${LanBusiness}
не работает

комманда

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

ipfw show | grep fwd
выдаёт ровным счётом ничегo. ipfw не воспринимает комманду fwd

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35454
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

IPFW

Непрочитанное сообщение Alex Keda » 2020-04-25 18:09:21

а ручками её если дать - что говорит-то?
Убей их всех! Бог потом рассортирует...

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-26 19:45:11

Просто
и перевод строки.

Комманда

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

ipfw show
90-ое правило не выводит, как будто его и не было. Все остальные правила файервола работают на ура

snorlov
подполковник
Сообщения: 3927
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

IPFW

Непрочитанное сообщение snorlov » 2020-04-26 21:43:43

А зачем table в двойных ковычках... кроме того, если в table(50) плохие ребята живут, то зачем отправлять "хороших", а не плохих

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-26 22:16:07

Без кавычек имеем

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

/etc/rc.firewall: 252: Syntax error: "(" unexpected
Таблица 50 содержит хороших ребят (плохих больше чем хороших) :smile:

snorlov
подполковник
Сообщения: 3927
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

IPFW

Непрочитанное сообщение snorlov » 2020-04-27 0:11:49

а ведь действительно зачем table(50), раньше просто table 50 было

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-27 0:26:21

Убрал скобки, кавычки

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

${fw} 00090 fwd log 127.0.0.1,1111 tcp from not table 50 to any dst-port 80 via ${LanBusiness}
Проблема осталось. IPFW в упор не видит 90ое правило с форвардингом

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

IPFW

Непрочитанное сообщение WideAreaNetwork » 2020-04-27 6:10:07

а как дела с IPFIREWALL_FORWARD ?

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-27 14:25:03

Эту опцию ядра убрали после 10.0
https://habr.com/ru/post/212813/

При попытке сборки ядра:

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

unknown option "IPFIREWALL_FORWARD"

ыть
проходил мимо

IPFW

Непрочитанное сообщение ыть » 2020-04-27 16:09:06

ringer писал(а):
2020-04-27 0:26:21
Убрал скобки, кавычки
КОД: ВЫДЕЛИТЬ ВСЁ

${fw} 00090 fwd log 127.0.0.1,1111 tcp from not table 50 to any dst-port 80 via ${LanBusiness}
Проблема осталось. IPFW в упор не видит 90ое правило с форвардингом
экранируйте скобки

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

table\(50\)
ringer писал(а):
2020-04-27 14:25:03
Эту опцию ядра убрали после 10.0
беда не в том, что убрали..
беда в том, что добавили.. глюков.. :-o
зато бхив появился :pardon:

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-27 16:19:37

C форвардингом всё ок

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

sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1

ringer
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-12-21 0:29:47

IPFW

Непрочитанное сообщение ringer » 2020-04-27 17:07:08

Выяснилось что fwd не дружит с логированием. Правило без log работает.

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

${fw} 00090 fwd 127.0.0.1,1111 tcp from not table\(50\) to me 80 via ${LanBusiness} keep-state
Дичь какая-то