IPFW
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
- Сообщения: 2
- Зарегистрирован: 2012-09-21 11:10:46
Re: IPFW
Добрый день! Ситуация следующая: в конторе стоит интернет-сервер на 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"
но как это применить не знаю.
На форуме игры вот что советуют:
"Необходимо, чтобы для лончера и клиента игры в брэндмауэре/анитивирусе/фаерволе были открыты следующие порты:
Необходимо, чтобы для лончера и клиента игры были открыты следующие порты:
Для 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
Тарифы на хостинг в России, от 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/
Тарифы на виртуальные сервера (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/
-
- лейтенант
- Сообщения: 895
- Зарегистрирован: 2007-07-08 23:53:20
- Откуда: SPb
- Контактная информация:
Re: IPFW
День добрый, подскажите пожалуйста, какой версии 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
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- проходил мимо
- Сообщения: 6
- Зарегистрирован: 2016-06-21 10:27:25
IPFW
Доброго дня всем. Есть фря 10.1 на ней впн MPD5+IPFW на другой машинке билинг (UTM) с радиусом. Не получается настроить IPFW для того чтобы кленты могли по впн (PPTP) получить доступ в инет. Подключение происходит но без доступа в инет.
Конфиг rc.conf
конфиг ipfw.sh
конфиг mpd.conf
На фря 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"
Конфиг 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"
Код: Выделить всё
#!/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
Код: Выделить всё
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
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"
-
- сержант
- Сообщения: 252
- Зарегистрирован: 2013-08-10 14:28:38
- Контактная информация:
IPFW
Каша какая-то в скрипте файрвола. Такой нигде работать не будет. Это что?
Зачем столько лишних правил? 20-50 абсолютный мусор.
Зачем натить входящие пакеты при использовании стэйтов? Вы уж или крестик снимите, или трусы наденьте. 10100, 21000 не нужны; 20000, 20001 keep-state
И разрешите весь локальный трафик, он из своих сеток никуда не денется.
А это?Andrei12 писал(а):Код: Выделить всё
ipfw=echo ipfw=ipfw
IF_WAN должен содержать имя интерфейса.Andrei12 писал(а):Код: Выделить всё
IF_WAN=xx.xx.214.249 IP_NAT1=xx.xx.214.249
Зачем столько лишних правил? 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
-
- проходил мимо
- Сообщения: 6
- Зарегистрирован: 2016-06-21 10:27:25
IPFW
lazhu,
Да согласен каша. Но предыдущий админ оставил мне в наследство именно это на freebsd 8.3 и как это не странно все работает. Решил попробовать сам сделать ВПН сервер но на фря 10.1 поставил MPD5 написал конфиг mpd.conf впн поподнялся в secret.conf добавил юзера все работает. Но юзеры подключаются через радиус с билингом добавил параметры радиуса. Дальше настройка ipfw вот тут и затык. Файл правил не рабочий от предыдущего админа, свой согласно мана (выложу позже тоже не заработал) не пускает клиентов в инет. Но всеравно СПАСИБО думал уже не кто не ответит СПАСИБО!!!!!!
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2011-08-15 15:27:36
IPFW
Вопрос по шейпингу посредством ipfw.
В организации есть общий канал, порядка 80Мбит, в некоторых локальных подсетях установлены роутеры\точки доступа wi-fi, используемые адреса у которых хотелось бы ограничить по скорости), ну и чтобы на обычных проводных пользователей ограничения ни коем образом не сказывались.
Предполагаю реализовать следующим образом (пока с использованием одной таблицы, у каждого адреса точки должны быть свои 512Кбит):
Корректно ли это? Т.е. каждый из заданных в table 1 адресов получит не более 512Kbit/s на прием и передачу, маска 0xffffffff – на каждый адрес своя очередь/скорость трубы, использование очередей (queue) и выставление приоритетов (weight) тут не нужны же?
Нумерация правил add 11, add 12 идут до всех последующих, в т.ч. и правил natd-а?
Ну и хоть адреса у точек имеют прямой доступ наружу
в отличие от обычных рабочих мест пользователей, но переменную sysctl net.inet.ip.fw.one_pass все же выставить в 0, чтобы после прохождения шейпинга применялась и последующая цепочка правил.
В организации есть общий канал, порядка 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
...
Нумерация правил add 11, add 12 идут до всех последующих, в т.ч. и правил natd-а?
Ну и хоть адреса у точек имеют прямой доступ наружу
Код: Выделить всё
${fwcmd} add pass all from 192.168.0.200 to any keep-state
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2011-08-15 15:27:36
IPFW
Тогда какая же маска в pipe config-е задаст заданное ограничение скорости на каждый из адресов, занесенных в table 1?Alex Keda писал(а):На всех полмегабита будет
Отправлено спустя 14 минут 28 секунд:
Исходил я из описания задания масок, поправьте, если это неверно.
Код: Выделить всё
0x000000ff - распределение между активными юзерами
0x00000000 – одна очередь/скорость трубы на всех
0xffffffff – на каждого юзера своя очередь/скорость трубы
-
- рядовой
- Сообщения: 20
- Зарегистрирован: 2010-06-07 9:17:07
IPFW
Хочу организовать резервный канал, чтобы автоматом на него переключался в случае падения основного.
Нашел скрипт переключения, скрипт отрабатывает, но резервный канал не поднимается.
Честно говоря запутался немного. Нужен пинок в нужную сторону.
что сделал:
rc.conf
ядро
rc.firewall
Вроде все указал.
XXX.XXX.XXX.177 - шлюз основного канала
XXX.XXX.XXX.180 - адрес
ААА.ААА.ААА.1 - шлюз резервного канала
ААА.ААА.ААА.2 - адрес
Итак, что получилось. Скрипт в кроне отрабатывает каждые 2 минуты и если основной канал упал меняет шлюз по умолчанию и перезапускает скрипт файрвола с новым шлюзом по умолчанию и новым внешним интерфейсом.
это работает. НО!
при переключении на резерв инета нет.
пакеты в нужные правила попадают....
root@FreeBSD:~ # ipfw show
повторю - с такими настройками основной канал работает, нужно запустить резервный.
прошу помощи! Думаю решение заинтересует многих.
Отправлено спустя 1 час 15 минут 50 секунд:
в общем разобрался я.
все работает с такими настройками файрвола:
Отправлено спустя 34 секунды:
в общем разобрался я.
все работает с такими настройками файрвола:
Нашел скрипт переключения, скрипт отрабатывает, но резервный канал не поднимается.
Честно говоря запутался немного. Нужен пинок в нужную сторону.
что сделал:
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"
Код: Выделить всё
#!/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
в общем разобрался я.
все работает с такими настройками файрвола:
Код: Выделить всё
#!/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
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
На сервере крутится веб-сервер. Необходимо поставить страницу-заглушку для плохих ребят
Ядро
Правило ipfw
не работает
комманда
выдаёт ровным счётом ничегo. ipfw не воспринимает комманду fwd
Код: Выделить всё
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
Код: Выделить всё
${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
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
Просто
и перевод строки.
Комманда 90-ое правило не выводит, как будто его и не было. Все остальные правила файервола работают на ура
Код: Выделить всё
ipfw:
и перевод строки.
Комманда
Код: Выделить всё
ipfw show
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
Без кавычек имеем
Таблица 50 содержит хороших ребят (плохих больше чем хороших) 
Код: Выделить всё
/etc/rc.firewall: 252: Syntax error: "(" unexpected

-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
Убрал скобки, кавычки
Проблема осталось. IPFW в упор не видит 90ое правило с форвардингом
Код: Выделить всё
${fw} 00090 fwd log 127.0.0.1,1111 tcp from not table 50 to any dst-port 80 via ${LanBusiness}
-
- сержант
- Сообщения: 227
- Зарегистрирован: 2017-01-10 14:37:13
IPFW
а как дела с IPFIREWALL_FORWARD ?
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
Эту опцию ядра убрали после 10.0
https://habr.com/ru/post/212813/
При попытке сборки ядра:
https://habr.com/ru/post/212813/
При попытке сборки ядра:
Код: Выделить всё
unknown option "IPFIREWALL_FORWARD"
-
- проходил мимо
IPFW
экранируйте скобки
Код: Выделить всё
table\(50\)
беда не в том, что убрали..
беда в том, что добавили.. глюков..

зато бхив появился

-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
C форвардингом всё ок
Код: Выделить всё
sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
-
- проходил мимо
- Сообщения: 8
- Зарегистрирован: 2010-12-21 0:29:47
IPFW
Выяснилось что fwd не дружит с логированием. Правило без log работает.
Дичь какая-то
Код: Выделить всё
${fw} 00090 fwd 127.0.0.1,1111 tcp from not table\(50\) to me 80 via ${LanBusiness} keep-state