Граница на замке Антон Карпов, toxa@cterra.ru Спецвыпуск: Хакер, номер #051, стр. 051-030-7 set block-policy drop set loginterface $ext_if scrub on $ext_if all reassemble tcp # 3. QOS RULES (queueing) ---------------------------------- # Допустим, наш канал имеет пропускную способность 1 мегабит. Определим две очереди, первой отдадим 40% канала, второй - 60%, причем первая - приоритетнее. Директива borrow определяет возможность "одалживать" канал у соседней очереди, если та свободна. В первую очередь засунем именно себя :), во вторую - оставшихся пользователей. altq on $ext_if cbq bandwidth 1024Kb queue { toxa, users } queue toxa bandwidth 40% priority 2 cbq(borrow) queue users bandwidth 60% priority 1 { deflt_users, lan_users, im_users, http_users, mail_users } # Очередь для пользователей делится на четыре канала, которые отличаются приоритетом и шириной оставшегося канала. Очевидно, что пакеты от icq- или jabber-мессенджеров желательно доставлять в первую очередь. queue deflt_users bandwidth 30% priority 2 cbq(default borrow ecn) queue im_users bandwidth 20% priority 4 cbq(borrow ecn) queue http_users bandwidth 30% priority 3 cbq(borrow ecn) queue mail_users bandwidth 20% priority 2 cbq(borrow ecn) # Далее разделим пакеты по очередям с помощью правил фильтрации. # 4. NAT/REDIRECTING RULES (translation) ------------------- # NAT'им пользователей nat on $ext_if from $subnet to any -%26gt; $ext_if # Перебрасываем все www- и ftp-соединения пользователей на squid и ftp-proxy rdr pass on $int_if proto tcp from $subnet to ! $subnet port { 80,8080} -%26gt; 127.0.0.1 port 3128 rdr on $int_if proto tcp from $subnet to any port 21 -%26gt; 127.0.0.1 port 8021 # 5. PASS/BLOCK RULES (filtering) -------------------------- pass quick on $loop_if all # Политика по умолчанию "все запрещено" block quick log from any os NMAP block all # Прием против спуфинга block in quick on $ext_if from %26lt;priv_nets%26gt; to any block out quick on $ext_if from any to %26lt;priv_nets%26gt; antispoof for $ext_if pass in on $ext_if proto tcp from any to ($ext_if) port { 22,80 } modulate state pass in on $ext_if proto tcp from any to ($ext_if) port %26gt; 49151 user proxy keep state pass in on $ext_if proto icmp from any to ($ext_if) modulate state pass out on $ext_if from ($ext_if) to any modulate state pass in quick on $int_if proto tcp from $adminbox to $int_if flags S/SA modulate state pass out quick on $int_if proto tcp from $adminbox to any flags S/SA modulate state queue toxa pass out quick on $int_if proto { udp, icmp } from $adminbox to any modulate state queue toxa # Разруливаем пакеты по очередям block quick on $int_if proto tcp from $subnet to any port { 135, 139, 445 } pass out on $int_if proto tcp from $subnet to any flags S/SA modulate state queue deflt_users pass out on $int_if proto tcp from $subnet to any port $im_ports flags S/SA modulate state queue im_users pass out on $int_if proto tcp from $subnet to any port 80 flags S/SA modulate state queue http_users pass out on $int_if proto tcp from $subnet to any port { 25,110 } flags S/SA modulate state queue mail_users pass out on $int_if proto { udp, icmp } from $subnet to any modulate state queue deflt_users |