Настройка шлюзов типа Manad под FreeBSD

В настоящее время реализован manad для шлюзов под управлением FreeBSD. Скачать его можно здесь. Необходимо установить его на вашем шлюзе (предварительно потребуется установить Perl) и добавьте в автозапуск.

На вкладке Типы правил добавим два типа правила для данного типа шлюза. Допустим, мы предоставляем доступ двух типов: 10-мегабитный и 128-килобитный. Добавляем в типах правил две записи.

speed=10000000

и

speed=128000

images/download/attachments/43386089/gate_type_rules.png

На вкладке Команды в типе шлюза пишем :

[DEFAULT]
<LOOP>
pipe {P0} config bw ${speed}
pipe {P1} config bw ${speed}
add {N0} pipe {P0} ip from any to {A} out
add {N0} pipe {P1} ip from {A} to any in
</LOOP>
[/DEFAULT]

images/download/attachments/43386089/manad_bsd_rules.png
На вкладке Правила в типе шлюза добавляем оба новых правила:

images/download/attachments/43386089/gate_type_rules.png

Как видно из примера команды Manad включает в себя подстановки адреса вида {A}, а также другие виды подстановок вида {XN}, где X - латинская буква, а N - цифра. Подстановка адреса осуществляется биллингом перед отсылкой команд, либо при сохранении правила для договора, в зависимости от используемого вида правила (пользовательское/типизированное). Подстановки вида {XN} отправляются на manad вместе с командами для определения номеров пайпов и правил.

Подстановки вида {NET} и {NET_MASK} заменяются на выбранные сети для тегов <LOOP_NET> и <LOOP_NET_MASK>. О том, как это происходит читайте обработку правил Manad.

После создания типа шлюза Manad, типов правил и команд для него необходимо определить конкретные адреса шлюзов на вкладке Шлюзы.

images/download/attachments/43386089/gate_manad.png

На вкладке Конфигурация шлюзов типа Manad ничего указывать не нужно.

Для добавления пользователя на шлюз откройте договор на вкладке модуля IPN - Шлюзы.

images/download/attachments/43386089/ipn_31.gif

Затем нажмите кнопку Добавить и произведите выбор шлюза. При этом отобразятся только те шлюзы, на которые клиент ещё не был заведён.

images/download/attachments/43386089/manad_add.png

Если выбранный шлюз был типа Manad, то откроется редактор правил договора Manad.

images/download/attachments/43386089/manad_contact.png

Слева в выпадающем списке можно выбрать тип правила, в дереве справа - адреса и сети, на которые оно применяется. В области Команды отображается текст команд, которые будут отправлены на шлюз. При этом, если выбран тип "Пользовательский", то область Команды редактируемая и правило сохраняется в точно таком же виде в БД. Т.е. в этом случае вы можете установить клиенту любые команды, не завязываясь на типе.

Если же выбран тип правила и список адресов, то в базе сохраняется только это сочетание, а текст команд вычисляется динамически в момент отправки на шлюз. При этом выглядит оно так, как отображено в области Команды. Использование типов позволяет более просто менять команды для многих пользователей, просто поправив шаблон в типе.

Для создания пользовательского правила на основании шаблонного выбирается тип правила, адреса, после чего тип правила переключается в "Пользовательский". После чего текст правила может быть изменён.

images/download/attachments/43386089/ipn_manad_user.png

После настройки биллинга необходимо произвести настройку самого ipfw и установку manad на шлюз.

Доступ клиентам разрешается путём добавления динамических правил файрвола с номером менее 20000.

Предварительно в файле /etc/rc.firewall добавьте правило, запрещающее всем пакетам проход через шлюз. Кроме того, в нашем случае нужно добавить адрес NAT-сервера для того, чтобы мы сами могли выходить в сеть.

Другим решением является изменение структуры сети с установкой шлюза между клиентами и магистралью провайдера.

Ниже приведена конфигурация, подходящая для нашей сети:

Код
fw="/sbin/ipfw -q"
 
# flush out the list before we begin.
${fw} -f flush
 
# localhost spoofprotect
${fw} add 10 pass all from any to any via lo0
${fw} add 10 deny all from any to 127.0.0.0/8
${fw} add 10 deny all from 127.0.0.0/8 to any
 
# deny netbios stuff
${fw} add 20 deny tcp from any to any 135-139,445,593
${fw} add 20 deny udp from any to any 135-139,445
 
#ssh,telnet, ftp только с адреса NAT сервера
${fw} add 30 pass tcp from 14.3.3.8 to me 20-23
${fw} add 30 pass tcp from me 20-23 to 14.3.3.8
 
# manad - доступ к манаду сервера биллинга
${fw} add 40 pass tcp from 14.3.3.8 to me 4567
${fw} add 40 pass tcp from me 4567 to 14.3.3.8
 
###############################################
# Запрет на всякий трафик из нашей сети 14.3.3.0
###############################################
${fw} add 20000 deny all from any to 14.3.3.8/24
${fw} add 20000 deny all from 14.3.3.8/24 to any
 
## Здесь manad будет добавлять свои правила, открывающие доступ клиентам
 
${fw} add 30000 pass all from any to any