Приветствую форумчане!
Прошу помощи в 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 скиньте пожалуйста не совсем понимаю реализацию в плане правил.
Спасибо.
Можно не пересобирать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
Да уже начиная с 8-мой пересобирать не надо было,
Посмотрите дефолтный /etc/rc.firewall, по моему там все просто расписано...
как уже сказали выше, нет, не нужно - все можно загрузить модулямkldload ipfw, ipfw_nat (модуль libalias подгрузится самостоятельно) - только осторожно - по умолчанию ipfw закрыт - deny all from any to any
2. не совсем - модули могут быть загружены и одновременно. divert просто перенапрявляет пакеты демону natd
3. нет
4. схему приложи - накидаю примерно
Сейчас конфиг такой:
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
Проблема в том что не работает редирект и не работает ftp из интернета по адресу 1.1.1.1 (вымышленный)
Схема
https://ibb.co/BghYSMt
> Проблема в том что не работает редирект и не работает
> ftp из интернета по адресу 1.1.1.1 (вымышленный)
> Схема
> https://ibb.co/BghYSMtи gateway_enable="yes" в /etc/rc.conf есть?
ps. у вас там правила ната не совсем корректно прописаны, но точнее скажу, когда вы приведете вывод ipfw
>> Проблема в том что не работает редирект и не работает
>> ftp из интернета по адресу 1.1.1.1 (вымышленный)
>> Схема
>> https://ibb.co/BghYSMt
> и gateway_enable="yes" в /etc/rc.conf есть?
> ps. у вас там правила ната не совсем корректно прописаны, но точнее
> скажу, когда вы приведете вывод ipfw
> и gateway_enable="yes" в /etc/rc.conf есть?Есть
> как уже сказали выше, нет, не нужно - все можно загрузить модулям
> kldload ipfw, ipfw_nat (модуль libalias подгрузится самостоятельно) - только осторожно
> - по умолчанию ipfw закрыт - deny all from any to
> any
> 2. не совсем - модули могут быть загружены и одновременно. divert просто
> перенапрявляет пакеты демону natd
> 3. нет
> 4. схему приложи - накидаю примерноПриложил
и еще вывод команд ipfw show и ipfw nat show config
> и еще вывод команд ipfw show и ipfw nat show configgate-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 anygate-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С меня на пиво)
из того, что вижу (и на что рекомендую обращать внимание в будущем при написании) - выводы того, что мы хотим (в скрипте) и того, что получаем - отличаются. и это сразу повод смотреть в отличия более внимательно :)плюс, если разбить правило ната на несколько, будет проще по счетчикам смотреть, что и как. ну и для упрощения понимания можно первыми ставить правила ната на уходящий от нас трафик, а потом в конце обрабатывать входящий - можно будет отказаться от 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