URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5591
[ Назад ]

Исходное сообщение
"FreeBsd Ipfw"

Отправлено DevSet , 24-Май-21 14:52 
Приветствую форумчане!
Прошу помощи в FreeBsd есть довольно много вопросов касательно Ipfw.
1. Нужно ли пересобрать ядро в FreeBSD 13 чтобы включить поддержку ipfw?
В 9 версии пересобрал  с такими параметрами:
# ipfw
options IPFIREWALL
options IPFIREWALL_NAT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options LIBALIAS
options DUMMYNET
options ROUTETABLES=2

Нужно ли сейчас так заморачиваться?

2. Верно ли я понимаю  при параметре options IPFIREWALL_NAT, Nat работает ядерно, а при options DIVERT работает  через демон Natd?

3. Нужно ли включать  в ядре options LIBALIAS при ядерном нате на FreeBsd 13?

4. Если у кого то  есть  пример правил  с сетью  DMZ скиньте пожалуйста не совсем понимаю  реализацию  в плане правил.
Спасибо.


Содержание

Сообщения в этом обсуждении
"FreeBsd Ipfw"
Отправлено dl , 24-Май-21 19:12 
Можно не пересобирать

sysrc firewall_enable="YES"
или ручками в rc.conf

настройка логов через:
sysctl net.inet.ip.fw.verbose
sysctl net.inet.ip.fw.verbose_limit

Ядерный нат:
IN-KERNEL NAT
     ipfw [-q] nat number config config-options


"FreeBsd Ipfw"
Отправлено Сергей , 24-Май-21 23:24 
Да уже начиная с 8-мой пересобирать не надо было,
Посмотрите дефолтный /etc/rc.firewall, по моему там все просто расписано...

"FreeBsd Ipfw"
Отправлено arachnid , 25-Май-21 16:36 
как уже сказали выше, нет, не нужно - все можно загрузить модулям

kldload ipfw, ipfw_nat (модуль libalias подгрузится самостоятельно) - только осторожно - по умолчанию ipfw закрыт - deny all from any to any

2. не совсем - модули могут быть загружены и одновременно. divert просто перенапрявляет пакеты демону natd

3. нет

4. схему приложи - накидаю примерно


"FreeBsd Ipfw"
Отправлено DevSet , 27-Май-21 13:42 
Сейчас конфиг такой:
rc.conf
Internet  
ifconfig_em0="inet 1.1.1.1 netmask 255.255.255.248"  
Alias internet ftp  
ifconfig_em0_alias0="inet 1.1.2.1 netmask 255.255.255.255"  
Local Network  
ifconfig_em1="inet 192.168.1.10 netmask 255.255.255.0"  
DMZ  
ifconfig_em2="inet 192.168.2.10 netmask 255.255.255.0"  

Правила

#!/bin/sh  

#reset rules  
ipfw -q -f flush  

#-------main network-------
#macro  
net="em0"  
lan="em1"  
dmz="em2"  
cmd="ipfw -q add"  
skip="skipto 2000"  

#kernel nat 1 config  
ipfw -q nat 1 config if $net same_ports unreg_only \  
redirect_port tcp 192.168.2.31:21 21 \  
redirect_port tcp 192.168.2.31:20 20 \  
redirect_port tcp 192.168.2.31:30000-31000 30000-31000 \  
redirect_port tcp 192.168.1.58:443 443 \  
redirect_port tcp 192.168.2.60:25 25  

#-------rules network -------
#allow networks  
$cmd 0001 allow all from any to any via $lan  
$cmd 0002 allow all from any to any via $dmz  
$cmd 0004 allow all from any to any via lo0  

#kernel nat 1 in  
$cmd 0040 nat 1 ip from any to any in via $net  

#dinamic rules  
$cmd 0050 check-state  

#-------out network-------
#allow trafic from gate out  
$cmd 0060 $skip tcp from any to any out via $net setup keep-state  
$cmd 0061 $skip udp from any to any out via $net keep-state  
$cmd 0062 $skip icmp from any to any out via $net keep-state  

#exchange trafic out  
$cmd 0070 $skip tcp from 192.168.1.58 443 to any  
$cmd 0071 $skip tcp from 192.168.2.60 25 to any  

#dmz ftp trafic out  
$cmd 0072 $skip tcp from 192.168.2.31 20,21,30000-31000 to any  

#-------in network-------
#exchange trafic in  
$cmd 0130 allow tcp from any to 192.168.1.58 443  
$cmd 0131 allow tcp from any to 192.168.2.60 25  

#dmz ftp trafic in  
$cmd 0130 allow tcp from any to 192.168.2.31 20,21,30000-31000  

#-------end network-------
#deny all  
$cmd 0500 deny log all from any to any in via $net  
$cmd 0510 deny log all from any to any out via $net  

#kernel nat 1 out  
$cmd 2000 nat 1 ip from any to any out via $net  
$cmd 3000 allow ip from any to any  

#deny all other  
$cmd 4000 deny log all from any to any  


"FreeBsd Ipfw"
Отправлено DevSet , 27-Май-21 13:52 
Проблема в том что  не работает  редирект и не работает  ftp из  интернета по адресу 1.1.1.1 (вымышленный)
Схема
https://ibb.co/BghYSMt


"FreeBsd Ipfw"
Отправлено arachnid , 31-Май-21 17:39 
> Проблема в том что  не работает  редирект и не работает
>  ftp из  интернета по адресу 1.1.1.1 (вымышленный)
> Схема
> https://ibb.co/BghYSMt

и gateway_enable="yes" в /etc/rc.conf есть?

ps. у вас там правила ната не совсем корректно прописаны, но точнее скажу, когда вы приведете вывод ipfw


"FreeBsd Ipfw"
Отправлено Devset , 01-Июн-21 08:38 
>> Проблема в том что  не работает  редирект и не работает
>>  ftp из  интернета по адресу 1.1.1.1 (вымышленный)
>> Схема
>> https://ibb.co/BghYSMt
> и gateway_enable="yes" в /etc/rc.conf есть?
> ps. у вас там правила ната не совсем корректно прописаны, но точнее
> скажу, когда вы приведете вывод ipfw
> и gateway_enable="yes" в /etc/rc.conf есть?

Есть


"FreeBsd Ipfw"
Отправлено Devset , 31-Май-21 11:57 
> как уже сказали выше, нет, не нужно - все можно загрузить модулям
> kldload ipfw, ipfw_nat (модуль libalias подгрузится самостоятельно) - только осторожно
> - по умолчанию ipfw закрыт - deny all from any to
> any
> 2. не совсем - модули могут быть загружены и одновременно. divert просто
> перенапрявляет пакеты демону natd
> 3. нет
> 4. схему приложи - накидаю примерно

Приложил


"FreeBsd Ipfw"
Отправлено arachnid , 31-Май-21 17:14 
и еще вывод команд ipfw show и ipfw nat show config

"FreeBsd Ipfw"
Отправлено Devset , 01-Июн-21 08:44 
> и еще вывод команд ipfw show и ipfw nat show config

gate-01:~ # ipfw show
00001 88144381 64989212950 allow ip from any to any via em1
00002     2620      136240 allow ip from any to any via em2
00003 31867890 18506893372 allow ip from any to any via tun0
00004      678      171322 allow ip from any to any via lo0
00010 21442036 10416892137 allow udp from any to me 1194
00011 23334762 15556716106 allow udp from me 1194 to any
00020        0           0 deny ip6 from any to any
00021        0           0 deny udp from any to any 546
00022        0           0 deny udp from any to any 547
00040 35883220 43530335534 nat 1 ip from any to any in via em0
00050        0           0 check-state :default
00060 49399902 43171443857 skipto 2000 tcp from any to any out via em0 setup keep-state :default
00061  6522916  3133645162 skipto 2000 udp from any to any out via em0 keep-state :default
00062     1778      241239 skipto 2000 icmp from any to any out via em0 keep-state :default
00070     5673     3619426 skipto 2000 tcp from 192.168.1.20 443 to any
00071      788      114095 skipto 2000 tcp from 192.168.1.21 25 to any
00130     6819      567081 allow tcp from any to 192.168.1.20 443
00131      898       68262 allow tcp from any to 192.168.1.21 25
00140        0           0 allow tcp from 192.168.1.250 to me 70000 in via em0 setup limit src-addr 2 :default
00500   132920     9709344 deny log logamount 40 ip from any to any in via em0
00510    31799     3647102 deny log logamount 40 ip from any to any out via em0
02000 20188473  2789072830 nat 1 ip from any to any out via em0
03000 55931055 46309063551 allow ip from any to any
04000        0           0 deny log logamount 40 ip from any to any
65535      754      116157 deny ip from any to any

gate-01:~ # ipfw nat show config
ipfw nat 1 config if em0 same_ports unreg_only redirect_port tcp 192.168.1.21:25 25 redirect_port tcp 192.168.1.20:443 443

С меня на пиво)


"FreeBsd Ipfw"
Отправлено arachnid , 03-Июн-21 14:04 
из того, что вижу (и на что рекомендую обращать внимание в будущем при написании) - выводы того, что мы хотим (в скрипте) и того, что получаем - отличаются. и это сразу повод смотреть в отличия более внимательно :)

плюс, если разбить правило ната на несколько, будет проще по счетчикам смотреть, что и как. ну и для упрощения понимания можно первыми ставить правила ната на уходящий от нас трафик, а потом в конце обрабатывать входящий - можно будет отказаться от skip

$int_lan="192.168.0.0/16"

ipfw nat 10 config if $net deny_in same_port reset
ipfw nat 20 config if $net redirect_port tcp 192.168.2.31:21 21 192.168.2.31:20 20 192.168.2.31:30000-31000 30000-31000
ipfw nat 30 config if $net redirect_port tcp 192.168.2.60:25 25
ipfw nat 40 config if $net redirect_port tcp 192.168.1.58:443 443


#-------rules network -------
#allow networks
$cmd 0001 allow all from any to any via $lan
# а имеет ли смысл правило 2 ? дмз же нужна, что бы изолировать сервисы, а вы разрешаете все - по хорошему вам надо разрешить пользоватлеям из локалки доступ к необходимым сервисам в дмз и доступ из дмз наружу.
$cmd 0002 allow all from any to any via $dmz
$cmd 0004 allow all from any to any via lo0

# разрешаем прохождение трафика снаружи к сервисам внутри
$cmd 0040 nat 20 tcp from any to me 20,21,30000-31000 via $net
$cmd 0041 nat 30 tcp from any to me 25 via $net
$cmd 0041 nat 40 tcp from any to me 443 via $net

# разрешаем пользователям локальной сети и дмз уходить наружу
$cmd 50 nat 10 from $int_lan to any via $net

# правила 60 и 61 не нужны. опять же, два правила можно заменить одним при использовании allow all вместо allow tcp allow udp

# и у вас тут как-то странно - вроде как почтовик то в дмз(.2), то в .1

$cmd 100 allow tcp from 192.168.1.58 443 to any keep-sate


# разрешаем пакетам снуружи попадать на нат  - оно должно быть последним перед полным запретом
$cmd 10000 nat 10 ip from any to me via $net