Правила для PF - Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » UNIX » FreeBSD » Правила для PF (Правила для PF, для разных программ и сервисов.)
Правила для PF
rm-rfДата: Среда, 17.03.2010, 16:26 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 37
Репутация: 5
Статус: Offline
Здесь пишу копипасты из рабочего фаервола PF на freebsd.
Показывать буду очень подробно.



Открыть SSH из локальной сети

В макросах
int_if="192.168.1.254"
lan="192.168.1.0/24"
sshadmin="192.168.1.33"

В правилах
# SSH to this server
pass quick on $int_if inet proto tcp from $lan to $int_if port ssh
pass quick on $int_if inet proto tcp from $int_if port ssh to $lan

Комментарии
В случае жесткого контроля можно прописать в правила вместо макроса $lan макрос $sshadmin


WHOIS с сервера

В макросах
ext_if="свой внешний фейс"

В правилах
#### WHOIS SERVICES
pass out on $ext_if inet proto tcp from $ext_if to any port 43

Комментарии
Тут просто открыть порт 43 наружу с внешнего интерфейса


Открыть ICQ через PF

В макросах
int_if="внутренний фейс"
im_users="192.168.1.33"
im_ports="{443, 5190, 5222}"
ext_if="внешний фейс"

В правилах
####
#### ICQ from LAN
nat on $ext_if inet from $lan to any port $im_ports -> $ext_if
pass in on $int_if inet proto tcp from $im_users to any port $im_ports
pass out on $ext_if inet proto tcp from $im_users to any port $im_ports
pass out on $ext_if inet proto tcp from $ext_if to any port $im_ports

Комментарии
Нужно натить порты $im_ports, не забывайте про это


Клиент Steam из локальной сети через фаервол

В макросах

int_if="внутренний фейс"
ext_if="внешний фейс"
admins="ип админа"
steam_ports="{27017, 27030:27039}"

В правилах

####
#### STEAM
pass in on $int_if inet proto tcp from $admins to any port $steam_ports
pass out on $ext_if inet proto tcp from $ext_if to any port $steam_ports
pass in on $int_if inet proto udp from $admins port 5000 to any port 27017
pass out on $ext_if inet proto udp from $ext_if to any port 27017

Комментарии
Мало кому это надо, но чтоб не забыть


Доступ к игровым серверам извне

В макросах

ext_if="внешний фейс"

В правилах

####
#### L4D server
pass in quick on $ext_if inet proto {tcp,udp} from any to $ext_if port 27015 keep state
pass out quick on $ext_if inet proto {tcp,udp} from $ext_if port 27015 to any

Комментарии

Тоже может пригодиться cool

 
rm-rfДата: Пятница, 26.03.2010, 19:23 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 37
Репутация: 5
Статус: Offline
Вот мой конфиг для отладки:

Code
ext_if="re0"
int_if="age0"
lan="192.168.1.0/24"
ext_dns1="217.195.65.9"
ext_dns2="217.195.66.253"
lan="192.168.1.0/24"

nat on $ext_if from $int_if:network to any port {5190, 5222}-> ($ext_if)

#### DO NOT DELETE
block log all
pass quick on $int_if inet proto tcp from $lan to $int_if port ssh
pass quick on $int_if inet proto tcp from $int_if port ssh to $lan
#### DO NOT DELETE

#### DNS
pass out on $ext_if inet proto udp from $ext_if to any port domain
#### ICQ+JABBER
pass in quick on $int_if inet proto tcp from $lan to any port {5222, 5190}
pass out quick on $ext_if inet proto tcp from $ext_if to any port {5222, 5190}

В принципе, этого достаточно.
Сидел недавно не мог понять, почему не работает, потом вспомнил.
Часто на системах с ОС FreeBSD прописывают альясами другие внешние адреса, например:

Code
# INTERFACES
defaultrouter="192.203.162.217"
ifconfig_age0="inet 192.168.1.2 netmask 255.255.255.0"
ifconfig_re0="inet 182.203.162.219 netmask 255.255.255.248"
ifconfig_re0_alias0="inet 182.203.162.222 netmask 255.255.255.248"

Так и у меня, после перехода на фрю оказался ещё один адрес, причем основной шлюз был один для всех, старый, а второй адрес повесили для того, чтобы работали некоторые сервисы, которые запрашивают именно тот, второй.
Вот все правила прописал, а аська не работает, сидел думал.
ПФ по умолчанию брал второй адрес (который альяс), а не первый, соотв. аська отказывалась работать. С этой минимальной конфигурацией заработала. Поэтому в обычных правилах надо прописать не только $ext_if, а ещё и $ext_ip1 и $ext_ip2 и, соответственно конкретизировать правила.

 
rm-rfДата: Пятница, 26.03.2010, 20:29 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 37
Репутация: 5
Статус: Offline
Собственно, что же делать, если нужно пропустить аську для сервера, у которого два внешних адреса?
Я рассуждал так:

Запускаю tcpdump -i re0 (чтобы слушал на интерфейсе re0 - внешний). Выбираю пакеты в которых присутствует aol.com.
Начал смотреть почему не пускает. Вот лог:

Code
gw# tcpdump -i re0 | grep aol.com
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on re0, link-type EN10MB (Ethernet), capture size 96 bytes
19:51:14.978650 IP bos-m012c-sdr2.blue.aol.com.aol > mail.skpg.ru.63963: Flags [S.], seq 4108467479, ack 336030270, win 16384, options [mss 1360], length 0
19:51:14.978812 IP mail.skpg.ru.63963 > bos-m012c-sdr2.blue.aol.com.aol: Flags [.], ack 1, win 65535, length 0
19:51:15.116384 IP bos-m012c-sdr2.blue.aol.com.aol > mail.skpg.ru.63963: Flags [P.], ack 1, win 16384, length 10
19:51:15.116848 IP mail.skpg.ru.63963 > bos-m012c-sdr2.blue.aol.com.aol: Flags [P.], ack 11, win 65525, length 342
19:51:15.255131 IP bos-m012c-sdr2.blue.aol.com.aol > mail.skpg.ru.63963: Flags [R.], seq 11, ack 343, win 16384, length 0
19:51:21.008430 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [S], seq 1632397192, win 65535, options [mss 1460,nop,wscale 3,nop,nop,sackOK], length 0
19:51:21.146428 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [S.], seq 2219374174, ack 1632397193, win 16384, options [mss 1360], length 0
19:51:21.146599 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [.], ack 1, win 65535, length 0
19:51:21.285310 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [P.], ack 1, win 16384, length 10
19:51:21.285641 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [P.], ack 11, win 65525, length 18
19:51:21.423800 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [.], ack 19, win 16384, length 0
19:51:21.423947 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [P.], ack 11, win 65525, length 29
19:51:21.561720 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [.], ack 48, win 16384, length 0
19:51:21.565006 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [P.], ack 48, win 16384, length 27
19:51:21.565485 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [P.], ack 38, win 65498, length 122
19:51:21.703736 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [.], ack 170, win 16384, length 0
19:51:21.709345 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [P.], ack 170, win 16384, length 321
19:51:21.709682 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [P.], ack 359, win 65177, length 6
19:51:21.709701 IP 84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol: Flags [F.], seq 176, ack 359, win 65177, length 0
19:51:21.847794 IP bucp-d1-vip.blue.aol.com.aol > 84.204.166.222.56135: Flags [R.], seq 359, ack 176, win 16384, length 0
19:51:22.200138 IP mail.skpg.ru.62020 > bos-d026c-rdr2.blue.aol.com.aol: Flags [S], seq 736850467, win 65535, options [mss 1460,nop,wscale 3,nop,nop,sackOK], length 0
19:51:22.338803 IP bos-d026c-rdr2.blue.aol.com.aol > mail.skpg.ru.62020: Flags [S.], seq 3845231042, ack 736850468, win 16384, options [mss 1360], length 0
19:51:22.338963 IP mail.skpg.ru.62020 > bos-d026c-rdr2.blue.aol.com.aol: Flags [.], ack 1, win 65535, length 0
19:51:22.477559 IP bos-d026c-rdr2.blue.aol.com.aol > mail.skpg.ru.62020: Flags [P.], ack 1, win 16384, length 10
19:51:22.477960 IP mail.skpg.ru.62020 > bos-d026c-rdr2.blue.aol.com.aol: Flags [P.], ack 11, win 65525, length 347
19:51:22.617144 IP bos-d026c-rdr2.blue.aol.com.aol > mail.skpg.ru.62020: Flags [R.], seq 11, ack 348, win 16384, length 0
^C535 packets captured
562 packets received by filter
0 packets dropped by kernel

gw#
 
rm-rfДата: Пятница, 26.03.2010, 20:29 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 37
Репутация: 5
Статус: Offline
Вижу, что от нас то пакеты уходят и через mail.skpg.ru и через 84.204.166.222 (ип 84.204.166.219 и соотв. 84.204.166.222)
Code
mail.skpg.ru.63963 > bos-m012c-sdr2.blue.aol.com.aol
84.204.166.222.56135 > bucp-d1-vip.blue.aol.com.aol

Собственно, мне этого не надо, оставим один интерфейс, через который всё должно ходить. Для этого исправим правило в нате:

Было:

Code
nat on $ext_if from $int_if:network to any port $im_ports  -> $ext_if

Стало:
Code
nat on $ext_if from $int_if:network to any port $im_ports  -> $ext_ip1

То есть все запросы из локальной сети куда угодно на порты для мессенджеров будут натиться на $ext_ip1. Итого, в случае двух внешних адресов на шлюзе, правила примут вид:

Code
ext_if="re0"
int_if="age0"
lan="192.168.1.0/24"
ext_ip1="84.204.166.219"
ext_ip2="82.204.166.222"
ext_dns1="217.195.65.9"
ext_dns2="217.195.66.253"
lan="192.168.1.0/24"
im_ports="{443, 5190, 5222}"

nat on $ext_if from $int_if:network to !$int_if port $im_ports -> $ext_ip1

#### DO NOT DELETE   
block log all
pass quick on $int_if inet proto tcp from $lan to $int_if port ssh
pass quick on $int_if inet proto tcp from $int_if port ssh to $lan
#### DO NOT DELETE

#### DNS
pass out on $ext_if inet proto udp from $ext_if to any port domain

pass in quick on $int_if inet proto tcp from $lan to any port $im_ports
pass out quick on $ext_if inet proto tcp from $ext_if to any port $im_ports modulate state

В принципе, после этого, можно будет подключаться напрямую на порт 5190 и 5222. Все должно работать.

 
jsandДата: Пятница, 12.11.2010, 22:56 | Сообщение # 5
админ я
Группа: Администраторы
Сообщений: 29
Репутация: 2
Статус: Offline
Да кстати, названия протоколов в FreeBSD содержится в /etc/protocols.
Названия сервисов содержится в /etc/services.
 
Форум » UNIX » FreeBSD » Правила для PF (Правила для PF, для разных программ и сервисов.)
Страница 1 из 11
Поиск:

Сайт управляется системой uCoz