Можно конечно пулы настроить на сквиде, но так будет несколько минусов в последующей работе...
Можно ли как то шэйпить http трафик проходящий через сквид с помощью PF?
pf.conf
Код: Выделить всё
ext_if="de1"
int_if="de0"
lo="l0"
vpn_if="tun0"
ext_ip_1 = "82.*.*.*"
lan_work = "192.168.10.0/24".
vpn_lan = "198.168.2.0/24"
table <all_user_ips> { 192.168.10.0/24 }
table <sp_user_ips> { 192.168.10.113 }
table <admin_ips> { 192.168.10.11 }
admin_ip="{ 192.168.10.11 }"
tcp_udp_out = "53"
tcp_out = "22, 25, 110, 1723"
tcp_services = "{ 113, 22 }"
icmp_types = "echoreq"
# списки приватных сетей, для блокировки их на внешнем интерфейсе
priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"
#Поведение по умолчанию для правил фильтра, когда срабатывает правило block
# в нашем случае для отброшенных пакетов TCP отсылается TCP RST, для прочих
#ICMP Unreacheble
set block-policy drop
#Нормализация входящего трафика
scrub in all
#ALTQ
#download
altq on $int_if cbq bandwidth 100Mb queue { inet_in, default_in }
queue inet_in bandwidth 10Mb { all_user_in, sp_user_in, admin_in }
queue all_user_in bandwidth 10% cbq(red, borrow)
queue sp_user_in bandwidth 30% cbq(red, borrow)
queue admin_in bandwidth 50% cbq(red)
queue default_in bandwidth 10% cbq(default)
#upload
altq on $ext_if cbq bandwidth 100Mb queue { inet_out, default_out }
queue inet_out bandwidth 10Mb { all_user_out, sp_user_out, admin_out }
queue all_user_out bandwidth 10% cbq(red, borrow)
queue sp_user_out bandwidth 30% cbq(red, borrow)
queue admin_out bandwidth 50% cbq(red)
queue default_out bandwidth 10% cbq(default)
#NAT
nat on $ext_if from $lan_work to !$lan_work -> $ext_ip_1
#Проброска портов в локалку на comp_rdr_lan
#rdr pass on $ext_if inet proto { tcp, udp } from any to ($ext_if) \
#port { $comp_rdr_port } -> $comp_rdr_lan
# по умолчанию запрещаем все
block all
#разрешаем все через локальный интерфейс
pass quick on lo0 all
#Блокируем приватные сети на внешнем интерфейсе
block drop in quick on $ext_if from $priv_nets to any
block drop out quick on $ext_if from any to $priv_nets
#Разрешаем доступ к нашему серваку снаружи к определенным портам
pass in on $ext_if inet proto tcp from any to $ext_if port $tcp_services \
flags S/SA keep state
#Натим пакеты из локалки
#nat on $ext_if from $lan_work to !$lan_work -> $ext_ip_1
#block in quick proto tcp from !<admin> to port { 21, 22 } #закрываем ftp и ssh
pass in on $int_if proto tcp from $admin_ip to $int_if port ssh
#Разрешаем входящие icmp ping
pass in inet proto icmp all icmp-type $icmp_types keep state
#Разрешаем все через туннель
pass on tun0 all
#pass on tun1 all
#Разрешить из локалки доступ к внутреннему интерфейсу и к локалке работы
pass in quick on $int_if from $int_if:network to { $int_if, $lan_work } \
keep state
#Разрешить из локалки tcp и udp на tcp_udp_out
pass in quick on $int_if inet proto { tcp, udp } from $int_if:network to any \
port { $tcp_udp_out } keep state
#Разрешить из локалки tcp на tcp_out
pass in quick on $int_if inet proto tcp from $int_if:network to any port \
{ $tcp_out } keep state
#Разрешить из локалки gre
pass in quick on $int_if inet proto gre from $int_if:network to any keep state
#Разрешить в локалку все через внутренний интерфейс
pass out on $int_if from any to $int_if:network keep state
#Разрешить наружу tcp через внешний интерфейс
pass out on $ext_if proto tcp all modulate state flags S/SA
#Разрешить наружу udp, icmp, gre через внешний интерфейс
pass out on $ext_if proto { udp, icmp, gre } all keep state
#Проброс очередей
pass in on $int_if from <all_user_ips> to !$lan_work queue all_user_out no state
pass in on $int_if from <sp_user_ips> to !$lan_work queue sp_user_out no state
pass in on $int_if from <admin_ips> to !$lan_work queue admin_out no state
pass out on $int_if from !$lan_work to <all_user_ips> queue all_user_in no state
pass out on $int_if from !$lan_work to <sp_user_ips> queue sp_user_in no state
pass out on $int_if from !$lan_work to <admin_ips> queue admin_in no state