Всем привет, это мое первое сообщение на форуме, до этого как-то справлялся, но тут впал в ступор. Мне по наследству от предыдущего сисадмина достался шлюз построенный на FreeBSD и с фаерволом PF. Была поставлена задача запретить доступ к интернету некоторым пользователям. Решил обойтись надстройками политик на PF, конкретнее - закрыть все, что проходит по протоколу TCP определенным IP-адресам. После добавления:table <bedguys> { 192.168.0.100 }
...
block quick on $ext_if proto tcp from <bedguys>не помогло, пробовал добавлять сразу после "block all", а также после "pass all", результат один и тот же...
Подскажите, пожалуйста, где я ошибся?
Ниже приведен полный конфиг PF'а:ugm = "192.168.0.0/24"
zlk = "192.168.2.0/24"
suk = "192.168.25.0/24"
openvpn = "10.0.0.0/8"
int_if = "sis0"
ext_if = "tun0"
ovpn_if = "tun1"
mail_server = "192.168.0.2/32"
mail_ports = "80"
mail_smtp = "25"
icmp_types = "{ echoreq, unreach }"table <trusted> { $ugm, $suk, $zlk, $ext_if, $openvpn, $mail_server }
table <bedguys> { 192.168.0.100 }set block-policy drop
set skip on lo0scrub in all
rdr on tun0 proto { tcp, udp } from any to $ext_if port $mail_ports -> $mail_server port $mail_ports
rdr on tun0 proto { tcp, udp } from any to $ext_if port $mail_smtp -> $mail_server port $mail_smtpnat on $ext_if from <trusted> to any -> ($ext_if)
antispoof quick for $ext_if
block all
block quick on $ext_if inet proto tcp from <bedguys>
block quick on $ext_if inet proto tcp to <bedguys>pass out on $ext_if from $ext_if to any keep state
pass out on $ext_if from <trusted> to any keep state
pass in log on $ext_if proto { tcp, udp } from any to $mail_server port $mail_ports keep state
pass in log on $ext_if proto { tcp, udp } from any to $mail_server port $mail_smtp keep state
pass in log on $ext_if proto { tcp, udp } from any to 192.168.0.8 port 3389 keep state
pass in on $ext_if proto udp from any to $ext_if port 1194 keep state
pass out on $ext_if proto udp from any to $ext_if port 1194 keep state
pass on $ovpn_if from <trusted> to any keep state
pass log inet proto icmp all icmp-type $icmp_types
pass allинтерфейсы:
(смотрит в локалку) sis0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether XX:XX:XX:XX:XX:XX
inet 192.168.0.5 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
(смотрит в инет) vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether XX:XX:XX:XX:XX:XX
inet XXX.XXX.XXX.XXX netmask 0xffffff00 broadcast XXX.XXX.XXX.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
(не используется) rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether XX:XX:XX:XX:XX:XX
inet 192.16.111.5 netmask 0xffffff00 broadcast 192.16.111.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> metric 0 mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33204
(pppoe) tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
inet XXX.XXX.XXX.XXX --> YYY.YYY.YYY.YYY netmask 0xffffffff
Opened by PID 452
tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
inet 10.0.0.1 --> 10.0.0.2 netmask 0xffffffff
Opened by PID 834
>[оверквотинг удален]
>
>rdr on tun0 proto { tcp, udp } from any to $ext_if port $mail_ports -> $mail_server port $mail_ports
>rdr on tun0 proto { tcp, udp } from any to $ext_if port $mail_smtp -> $mail_server port $mail_smtp
>
>nat on $ext_if from <trusted> to any -> ($ext_if)
>
>antispoof quick for $ext_if
>
>block all
>block quick on $ext_if inet proto tcp from <bedguys>тут ip источника уже будет ip ext_if
>[оверквотинг удален]
>
>pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33204
>(pppoe) tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
> inet XXX.XXX.XXX.XXX --> YYY.YYY.YYY.YYY netmask 0xffffffff
> Opened by PID 452
>
>tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
> inet 10.0.0.1 --> 10.0.0.2 netmask 0xffffffff
> Opened by PID 834
>
>[оверквотинг удален]
>
>pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33204
>(pppoe) tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
> inet XXX.XXX.XXX.XXX --> YYY.YYY.YYY.YYY netmask 0xffffffff
> Opened by PID 452
>
>tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
> inet 10.0.0.1 --> 10.0.0.2 netmask 0xffffffff
> Opened by PID 834
>запрещайте на внутреннем интерфейсе
>запрещайте на внутреннем интерфейсечестно говоря, не понял в чем моя ошибка, не могли бы вы объяснить подробнее.
P.S. PF, если честно, первый раз в глаза вижу, BSD второй) до этого администрировал дебиан и на мой взгляд с iptables все куда проще, хотя это уже дело привычки.
>>запрещайте на внутреннем интерфейсе
>
>честно говоря, не понял в чем моя ошибка, не могли бы вы
>объяснить подробнее.в том что не хотите понять что на ext_if сначала выполнится nat (snat в аналогии с iptables), а потом уже пакет попадет на правила фильтров.
если фильтровать на внутреннем интерфейсе , то это будет до nat и ip еще не будут изменены>
>P.S. PF, если честно, первый раз в глаза вижу, BSD второй) до
>этого администрировал дебиан и на мой взгляд с iptables все куда
>проще, хотя это уже дело привычки.одинаково, главное порядок прохождения знать