>Помогите, плиз. Не могу разобраться.
>
>Файрвол составлен на основе примера из хендбука. Это только тестовый открытый вариант,
>просто убедиться что работает всё, что должно будет работать.
>
>Как с подобной конфигурацией заставить работать ftp в активном режиме? Если убрать
>keep-state из разрешающих правил, то всё прекрасно работает. Проблема решена самостоятельно.
Как выяснилось, она заключалась в этих строчках.
># ----------------------- allow inbound with limits
>$ipfw add 40000 allow ip from any to $lan in via $inet keep-state
>#$ipfw add 40000 allow tcp from any to $lan in via $inet setup keep-state #limit src-addr 5
>#$ipfw add 40100 allow udp from any to $lan in via $inet keep-state #limit src-addr 5
>#$ipfw add 40200 allow icmp from any to $lan in via $inet keep-state #limit src-addr 5
А точнее в команде 'allow', которую следовало заменить на 'skipto 60000'.
К сожалению, так и осталось загадкой, что именно мешало работе фтп в активном режиме. Очевидно, что-то из того, что должно было не заворачивалось в нат. Разбор логов не привёл к просветлению.
Сервер призван балансировать траффик и будет стоять между работающим в настоящее время сервером на win2003 и циской с инетом, а пока запущен для тестирования в локалке и обслуживает только меня. Т.к. цель - только управлять трафиком, файрвол практически полсностью открыт. Защитой и ограничение доступа будет заниматься сервер на виндах стоящий следом. Возможно, впоследствии все файрвольные заморочки будут перенесены на фрю.
Вот как выглядят конфиги. Может быть гуру выскажут свои замечания? Возможно, что-то сделано криво и требует исправления.
[srvr01] /usr/local/etc# cat natd.conf
use_sockets
same_ports
unregistered_only
instance default
alias_address 192.168.0.99
target_address 192.168.100.32
port 8668
instance exploration
alias_address 192.168.0.111
port 8670
deny_incoming
#instance vip
#alias_address x.x.x.x
#port 8669
#deny_incoming
[srvr01] /usr/local/etc# cat rc.firewall
#!/bin/sh
# ----------------------- defining variables
ipfw="/sbin/ipfw -q"
inet="fxp0"
local="fxp1"
skip="skipto 60000"
lan="192.168.100.0/24"
all="0xffffffff"
# ----------------------- init
$ipfw flush
$ipfw pipe flush
# ----------------------- defining tables for divert
$ipfw table 1 flush
$ipfw table 1 add 192.168.0.99 8668
$ipfw table 1 add 192.168.0.111 8670
$ipfw table 2 flush
$ipfw table 2 add 192.168.100.32 8668
$ipfw table 2 add 192.168.100.33 8670
# ----------------------- defining pipes & queues
$ipfw pipe 1 config bw 92Kbit/s
$ipfw queue 1 config pipe 1 weight 80 queue 100 mask $all gred 0.002/20/40/0.1
$ipfw queue 2 config pipe 1 weight 20 queue 100 mask $all gred 0.002/10/30/0.1
# ----------------------- defining tables for shaping
$ipfw table 5 flush
$ipfw table 5 add 192.168.100.32 1
$ipfw table 5 add 192.168.100.13 2
$ipfw table 6 flush
# ----------------------- loopback & antispoof & icmp
$ipfw add 00100 allow ip from any to any via lo0
$ipfw add 00200 deny log ip from any to any not antispoof in
$ipfw add 00300 deny log icmp from any to any icmptype 5,9,13,14,15,16
# ----------------------- shaping traffic
$ipfw add 10000 count ip from not 192.168.0.0/16 to any out via $local
# ----------------------- allow local & me
$ipfw add 15000 allow ip from any to any via $local
$ipfw add 15500 allow ip from me to any keep-state
# ----------------------- nat in
$ipfw add 20000 divert tablearg ip from any to table\(1\) in via $inet
# ----------------------- dynamic table check
$ipfw add 25000 check-state
# ----------------------- allow outbound with limits
$ipfw add 30000 $skip tcp from $lan to any out via $inet setup limit src-addr 15
$ipfw add 30100 $skip udp from $lan to any out via $inet limit src-addr 15
$ipfw add 30200 $skip icmp from $lan to any out via $inet limit src-addr 15
# ----------------------- allow inbound with limits
$ipfw add 40000 $skip tcp from any to any in via $inet setup limit src-addr 5
$ipfw add 40100 $skip udp from any to any in via $inet limit src-addr 5
$ipfw add 40200 $skip icmp from any to any in via $inet limit src-addr 5
# ----------------------- deny all not allowed previously
$ipfw add 50000 deny log ip from any to any
# ----------------------- nat out
$ipfw add 60000 divert tablearg ip from table\(2\) to any out via $inet
# ----------------------- allow inet
$ipfw add 65530 allow ip from any to any via $inet
# ----------------------- default deny -----------------------