
Итак ТУ:
Есть 2 канала в инет и 3 группы пользователей.
1 группа - ходит в инет по 1 каналу куда угодно
2 группа - ходит в инет по 2 каналу, НО у них пропускается только почта и www
3 группа - ходит в инет по 2 каналу КУДА угодно.
Собственно возникли проблемы с 3-ей группой.
Итак имеем:
И конфиг файрвола13:46 Sergey.Poleckiy@sunrt [/etc]uname -a
FreeBSD sunrt.dinp.local 8.0-STABLE FreeBSD 8.0-STABLE #3: Mon Apr 26 16:43:46 MSD 2010 Sergey.Poleckiy@sunrt.dinp.local:/usr/obj/usr/src/sys/sunrt amd64
Пояснения:13:32 Sergey.Poleckiy@sunrt [/etc]cat -n /etc/pf.conf
1 #/etc/pf.conf
2 #
3 ext_if_a = "igb0" # Внешний интерфейс 3Мбита
4 ext_gw_a = "192.168.1.1" # Шлюз в инет на 3Mбита
5 #
6 ext_if_b = "igb1" # Внешний интерфейс 512 Кбит
7 ext_gw_b = "192.168.2.1" # Шлюз в инет 512 Кбит
8 #
9 int_if = "em0" # Внутренний интерфейс
10 #
11 # Table для выхода в инет
12 table <inet2000> persist file "/usr/local/etc/pf.table/inet2000" # ip-адреса пользователей канала 3Мбита
13 table <servers> persist file "/usr/local/etc/pf.table/servers" # ip-адреса серверов
14 table <inet512> persist file "/usr/local/etc/pf.table/inet512" # ip-адреса пользователей канала 512Кбит
15 table <inet512all> persist file "/usr/local/etc/pf.table/inet512all" # ip-адреса пользователей канала 512Кбит
16 # они могут ходить ВЕЗДЕ
17 #
18 # Списки для выхода в инет
19 list_out_2000 = "{ <inet2000> <servers> }"
20 list_out_512 = "{ <inet512> }"
21 list_out_512all = "{ <inet512all> }"
22 #
23 mail_port = "{ pop3 pop3s smtp smtps imap imap3 imaps }"
24 dns_port = domain
25 www_port = "{ http https }"
26 #
27 icmp_types="{ echoreq, unreach}" ## разрешенные типы icmp сообщений.
28 ## Первое необходимо для работы UNIX traceroute (для win tracert этого
29 ## не требуется), а второе нужно когда пытаемся коннектиться
30 ## к хосту, который в дауне.
31 #----------------------------------------------------------------------------------------
32 set timeout interval 10
33 set timeout frag 30
34 set limit { frags 10000, states 50000 }
35 set optimization conservative
36 set block-policy return
37 set state-policy if-bound
38 #----------------------------------------------------------------------------------------
39 # Нормализация трафика
40 scrub in all
41 #----------------------------------------------------------------------------------------
42 # Включаем очереди на внешних интерфейсах
43 # Очередь на 3Мбитах
44 #altq on $ext_if_a cbq bandwidth 2.7Mb qlimit 500 queue { dnsmail_a, other_a, mail_a }
45 altq on $ext_if_a cbq bandwidth 2.7Mb qlimit 1000 queue { dnsmail_a, other_a }
46 queue dnsmail_a bandwidth 50% priority 7 cbq(red borrow)
47 #queue mail_a bandwidth 30% priority 4 cbq(borrow)
48 queue other_a bandwidth 50% priority 5 cbq(red borrow) { www_ext_a, no_www_a }
49 queue www_ext_a bandwidth 70% priority 3 cbq(red borrow)
50 queue no_www_a bandwidth 30% priority 1 cbq(default red borrow)
51 #
52 # Очередь на 512Кбитах
53 altq on $ext_if_b cbq bandwidth 2.7Mb qlimit 1000 queue { dns_b, other_b, dnsmail_b }
54 queue dnsmail_b bandwidth 50% priority 5 cbq(red borrow)
55 #queue mail_b bandwidth 30% priority 4 cbq(borrow)
56 queue other_b bandwidth 50% priority 3 cbq(borrow red) { www_ext_b, no_www_b }
57 queue www_ext_b bandwidth 70% priority 2 cbq(red borrow)
58 queue no_www_b bandwidth 30% priority 1 cbq(default red borrow)
59
60 #----------------------------------------------------------------------------------------
61 set skip on lo0
62 #----------------------------------------------------------------------------------------
63 #
64 # NAT на 2 канала
65 nat on $ext_if_a inet from $list_out_2000 to any -> ( $ext_if_a )
66 nat on $ext_if_b inet from $list_out_512 to any -> ( $ext_if_b )
67 nat on $ext_if_b from $list_out_512all to any tag LAN_512ALL_NAT -> ( $ext_if_b )
68 #----------------------------------------------------------------------------------------
69 # Блокируем ВСЁ!!!
70 block in
71 block out
72 #----------------------------------------------------------------------------------------
73 # Разрешаем ВСЁ со шлюза во внутреннюю сеть
74 pass out on $int_if to $int_if:network:0
75 #
76 # Разрешаем вход с определённых компьютеров на шлюз
77 pass in on $int_if from $list_out_2000 to $int_if
78 pass in on $int_if from $list_out_512 to $int_if
79 pass in on $int_if from $list_out_512all to $int_if
80 #
81 # Переписываем шлюз по умолчанию на внешних интерфейсах взависимости от имени компьютера
82 pass in on $int_if route-to ( $ext_if_a $ext_gw_a) from $list_out_2000
83 pass in on $int_if route-to ( $ext_if_b $ext_gw_b) from $list_out_512
84 pass in on $int_if route-to ( $ext_if_b $ext_gw_b) from $list_out_512all
85 #----------------------------------------------------------------------------------------
86 #
87 # правила фильтрации исходящего трафика на 3Мбитах
88 #
89 # разрешаем почту
90 pass out quick on $ext_if_a inet proto { tcp udp } from any to any port $mail_port flags S/SA keep state queue dnsmail_a
91 # разрешаем dns запросы
92 pass out quick on $ext_if_a inet proto { tcp udp } from any to any port $dns_port flags S/SA keep state queue dnsmail_a
93 # разрешаем пинги в очереди DNS-а
94 #pass out quick on $ext_if_a inet proto icmp keep state queue dnsmail_a
95 pass out on $ext_if_a inet proto icmp all icmp-type $icmp_types keep state queue dnsmail_a
96 pass out on $ext_if_a inet proto udp from any to any port 33433 >< 33626 keep state queue dnsmail_a
97 # разрешаем www запросы
98 pass out quick on $ext_if_a inet proto { tcp udp } from any to any port $www_port flags S/SA keep state queue www_ext_a
99 # разрешаем всё остальное
100 pass out on $ext_if_a inet from any to any keep state queue no_www_a
101 #----------------------------------------------------------------------------------------
102 #
103 # правила фильтрации исходящего трафика на 512Kбитах
104 #
105 # разрешаем почту
106 pass out quick on $ext_if_b inet proto { tcp udp } from any to any port $mail_port flags S/SA keep state queue dnsmail_b
107 # разрешаем dns запросы
108 pass out quick on $ext_if_b inet proto { tcp udp } from any to any port $dns_port flags S/SA keep state queue dnsmail_b
109 # разрешаем пинги в очереди DNS-а
110 #pass out quick on $ext_if_b inet proto icmp keep state queue dns_b
111 pass out on $ext_if_b inet proto icmp all icmp-type $icmp_types keep state queue dnsmail_b
112 pass out on $ext_if_b inet proto udp from any to any port 33433 >< 33626 keep state queue dnsmail_b
113 # разрешаем www запросы
114 pass out quick on $ext_if_b inet proto { tcp udp } from any to any port $www_port flags S/SA keep state queue www_ext_b
115 # разрешаем всё остальное
116 #pass out on $ext_if_b inet from any to any keep state queue no_www_b tagged LAN_512ALL_NAT
117 pass out on $ext_if_b inet from any to any keep state queue no_www_b
118 #----------------------------------------------------------------------------------------
119 #
120 # Переписываем шлюз по умолчанию при роутинге пакетов между внешними интерфейсами
121 pass out on $ext_if_a route-to ($ext_if_b $ext_gw_b) from $ext_if_b
122 pass out on $ext_if_b route-to ($ext_if_a $ext_gw_a) from $ext_if_a
67 строка - натим и помечаем все пакеты идущие в инет по таблице
если убрать комментарий со 116 строки и закомментировать 117, то работа идет только по почте и www.
Кто-то работал с метками? Если да - помогите пожалуйста, что-то я не допонимаю.
Заранее спасибо!