Сочиняю конфиг pf для машины, на которой установил FreeBSD 7.1 (ядро GENERIC). Компьютер будет работать шлюзом и фтп-сервером.
Задача такова - разрешить пользоваться шлюзом только определенным лицам(открыть для них ftp,dns,www,https). Из внешней сети разрешить доступ только к ФТП-серверу
Параметры сетевых карт:
Код: Выделить всё
fxp0: ip-адрес 192.168.1.181, маска 255.255.255.0 (играет роль внешней сети)
xl0: ip-адрес 10.10.10.2, маска 255.0.0.0 (играет роль шлюза для сети 10.10.10.х)
PF.conf
Код: Выделить всё
int_if="xl0" #internal interface
ext_if="fxp0"#external interface
internal_network="10.10.10.0/8" #внутренняя сеть
prv_hosts="{10.10.10.2,10.10.10.1}"#хосты, которым разрешено работать со шлюзом
#scrub all packets
scrub in all
scrub out all
#nat rules
nat_proto="{tcp,udp,icmp}"
nat on $ext_if proto $nat_proto from $internal_network to any ->($ext_if)
#rdr rules place here
#filter rules
ip_proto="{tcp,udp}"
icmp_allowed="echoreq"
tcp_services ="{ftp-data,ftp,domain,www,https}"
udp_services="{domain}"
#default filter policy - block all
block in all
block out all
#disable filter on loopback interface
set skip on lo
#antispoof
antispoof quick for $ext_if
antispoof quick for $int_if
#allow necessary ports and protocols
#only for prv_hosts
#allow SSH only for connect from internal network
pass in on $int_if proto tcp from $prv_hosts to $int_if port ssh
#allow ftp
#allow our ftp from internal network
pass in on $int_if proto tcp from $prv_hosts to $int_if port ftp
pass in on $int_if proto tcp from $prv_hosts to $int_if port>49151 keep state
#allow to access our ftp from external networks
pass in on $ext_if proto tcp from any to $ext_if port ftp keep state
pass in on $ext_if proto tcp from any to $ext_if port>49151 keep state
#allow dns, www, ftp,https
pass out proto tcp to any port $tcp_services keep state
pass out proto udp to any port $udp_services keep state
#allow ping
pass in inet proto icmp all icmp-type $icmp_allowed keep state
pass out inet proto icmp all icmp-type $icmp_allowed keep state
1. все ли я корректно написал. Не пооткрывал ли где лишнего?
2. непонятные моменты:
при таких правилах PF я могу с консоли FreeBSD лазить по сети 192. 168.1.х (внешняя сеть для тестирования), но с компьютера 10.10.10.2 выйти в сеть 192.168.1.х не могу (no route to host ). Где смотреть?
3. Как только я меняю правило
Код: Выделить всё
#allow dns, www, ftp,https
pass out proto tcp to any port $tcp_services keep state
pass out proto udp to any port $udp_services keep state
Код: Выделить всё
#allow dns, www, ftp,https
pass out proto tcp from $prv_hosts to any port $tcp_services keep state
pass out proto udp from $prv_hosts to any port $udp_services keep state
Вопрос:как сделать правильно, т.е. разрешить только некоторым и только то, что нужно
на всякий случай привожу rc.conf:
Код: Выделить всё
defaultrouter="192.168.1.4"
gateway_enable="YES"
hostname="changer.in.kaskad.ua"
ifconfig_fxp0="inet 192.168.1.181 netmask 255.255.255.0"
ifconfig_xl0="inet 10.10.10.1 netmask 255.0.0.0"
inetd_enable="YES"
#sshd_enable="YES"
ftpd_enable="YES"
ftpd_flags="-D -l"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="var/log/pflog"
pflog_flags=""