Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по FreeBSD (http://forum.oszone.net/forumdisplay.php?f=10)
-   -   Настройка пакетного фильтра pf в FreeBSD (http://forum.oszone.net/showthread.php?t=240053)

nvhost 06-08-2012 10:19 1965393

Настройка пакетного фильтра pf в FreeBSD
 
Ребят помогите не могу понять в чем может быть дело, перегружаю FreeBSD все работает кроме правил для входящих RDP запросов, как только делаю принудительное применение правил pfctl -f /etc/pf/conf то все сразу начинает работать, после перегруза машина опять пока не подключусь по ssh не наберу волшебную команду не пускает ниже приведено содержание файла pf.conf
Код:

# vr0 - имя сетевой карточки, смотрящей в офисную сеть
int_if="vr0"
 # rl0 - имя сетевой карточки, смотрящей в интернет
ext_if="tun0"

localnet="10.0.0.0/24"

#определяем через переменные ip-адреса офисов
office1_ip="111.111.111.111"
office2_ip="222.222.222.222"


#опять таки, через переменную перечисляем какие порты выпускать из офиса во внешний мир
#tcp_ports="{22,80,443,25,110,465,995,5190}"
#udp_ports="{53}"

#не фильтруем трафик, проходящий по интерфейсу lo0 (интерфейс внутренней петли), gif0 (виртуальный туннель между офисами) и $int_if (интерфейс внутрен
set skip on lo0
set skip on gif0
set skip on $int_if

#отбрасываем входящие пакеты, с нестандартными опциями
scrub in all

 #создаем правило входящие для RDP
 rdr pass on $ext_if proto tcp from any to $ext_if port 3389 tag RDP -> 10.0.0.100 port 3389
 nat on $ext_if tagged RDP -> ($ext_if)
 

#создаем правило трансляции адресов из офисной сети во внешний мир
nat on $ext_if from $localnet to any -> ($ext_if)

#создаем правило входящие для RDP
#rdr pass on $ext_if proto tcp from any to ($ext_if) port 3389 tag RDP -> 10.0.0.100 port 3389
#nat on $int_if tagged RDP -> 10.0.0.1

#создаем правило входящие для LotuNotes
#rdr pass on $ext_if proto tcp from any to ($ext_if) port 1352 tag LotusNotes -> 10.0.0.100 port 1352
#nat on $int_if tagged LotusNotes -> 10.0.0.1*

#включаем антиспуфинг для внешнего интерфейса
antispoof quick for $ext_if

#блокируем все по умолчанию
block all

#разрешаем доступ из офисной сети во внешний мир портам, перечисленным в переменных tcp_ports и udp_ports:
pass out on $ext_if proto tcp to any
pass out on $ext_if proto udp to any

#разрешаем доступ к нашей машине по ssh из внешнего мира
pass in inet proto tcp from any to $ext_if port 22  keep state

#разрешаем пинг
pass inet proto icmp all

#разрешаем исходящий трафик IPSec с офиса 1 на офис 2
pass out quick on $ext_if proto udp from $office1_ip port = isakmp to $office2_ip port = isakmp
pass out quick on $ext_if proto esp from $office1_ip to $office2_ip
pass out quick on $ext_if proto ipencap from $office1_ip to $office2_ip

#разрешаем входящий трафик IPSec, пришедший с офиса 2 на офис 1
pass in quick on $ext_if proto udp from $office2_ip port = isakmp to $office1_ip port = isakmp
pass in quick on $ext_if proto esp from $office2_ip to $office1_ip
pass in quick on $ext_if proto ipencap from $office2_ip to $office1_ip


stamp 07-08-2012 08:41 1965965

В rc.conf дописывай

firewall_enable="YES"
firewall_script="/etc/pf.conf" - путь к правилу

nvhost 07-08-2012 10:50 1966066

У меня в rc.conf есть
Код:

#включим наш фаервол на этапе загрузки системы
pf_enable="YES"
#указываем откуда загружать правила
pf_rules="/etc/pf.conf"
#указываем где находится программа для управления pf
pf_program="/sbin/pfctl"
pf_flags=""
...
    #включаем логирования для pf
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
pflog_flags=""
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig=""

Разве этого не достаточно?

leonty 08-08-2012 20:55 1967013

Цитата:

Цитата stamp
В rc.conf дописывай
firewall_enable="YES"
firewall_script="/etc/pf.conf" - путь к правилу »

уйди не чистая!
Цитата:

Цитата nvhost
как только делаю принудительное применение правил pfctl -f /etc/pf/conf то все сразу начинает работать »

хм, что говорит whereis pfctl ?

nvhost 09-08-2012 09:22 1967188

Вот что говорит
Код:

freebsd1# whereis pfctl
pfctl: /sbin/pfctl /usr/share/man/man8/pfctl.8.gz /usr/src/sbin/pfctl

получается дело не в том что пакетный фильтр не подымается при загрузке системы, а в том что ему что то не хватает для правила входящего RDP, а после загрузки принудительно уже помогает, может дело в том что при загрузке системы и применения правил еще не известны IP адреса , хотя PPPoe tun0 подымается до применения правил, я еще где то читал что если переменная содержит ip -адрес то ее необходимо заключать в скобки, на тот случай если вдруг ip-адрес на момент примения правил будет отсутствовать правила привяжутся к интерфейсу

на всякий случай привожу код rc.conf
Код:

hostname="freebsd1"
keymap="ru.koi8-r.kbd"
ifconfig_sk0=" inet 192.168.1.77 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
ifconfig_vr0="inet 10.0.0.1 netmask 255.255.255.0"
gateway_enable="YES"
#PPP service
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"  # if you want to enable nat for your local network, otherwise NO
ppp_profile="utk"

#включим наш фаервол на этапе загрузки системы
pf_enable="YES"
#указываем откуда загружать правила
pf_rules="/etc/pf.conf"
#указываем где находится программа для управления pf
pf_program="/sbin/pfctl"
pf_flags=""

    #включаем логирования для pf
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
pflog_flags=""
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig=""

# включим racoon
racoon_enable="YES"
racoon_flags="-F -f /usr/local/etc/racoon/racoon.conf"

 #включим ipsec
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"

 #создаем виртуальный gif-интерфейс
gif_interfaces="gif0"
gifconfig_gif0="111.111.111.111 222.222.222.222"
ifconfig_gif0="inet 10.0.0.1 10.1.1.1 netmask 0xffffffff"

 #прописываем статический рутинг для удаленной сети
static_routes="vpn"
route_vpn="10.1.1.0/24 -interface gif0"

Может дело в виртуальных интерфейсах, они поднимаются после правил pf

leonty 09-08-2012 11:34 1967274

если посмотреть список загруженых правил сразу после старта системы, он (список) соответствует тому, что прописано в pf.conf ?

nvhost 04-09-2012 12:16 1982734

нет список пустой, pfctl -sn ничего не показывает!

nardamon@vk 15-09-2012 20:58 1989258

Описывайте все девайсы в правилах в скобках.
Тогда загрузится в любом случае.

И чо ето за бред?

Сначала RDR описывает , потом НАТ, а не в перемешку.

И одним правилом а не двумя или тремя.

nat on $ext_if tagged RDP -> ($ext_if)

эта чушь к примеру вообще щас ненужна
Срабатывает всегда последнее правило, будь то рдр, нат или другие правила.

softwer 10-10-2012 21:42 2003004

Цитата:

#указываем откуда загружать правила pf_rules="/etc/pf.conf"
А руками правила грузите из
Цитата:

pfctl -f /etc/pf/conf
Или в rc.conf путь поправьте, или pf.conf положите в /etc

Smoke2k 07-11-2012 07:22 2020580

кажется такая же канетель как и в соседнем топике...
А зачем вы два раза NAT поднимаете? один раз в ppp,
Цитата:

ppp_nat="YES" # if you want to enable nat for your local network, otherwise NO
а второй раз в pf?
Цитата:

#создаем правило трансляции адресов из офисной сети во внешний мир
nat on $ext_if from $localnet to any -> ($ext_if)
Я кстати заметил что если на интерфейсе не включён NAT в самом pf, то redirect не сробатывает, может у вас наложение правил? потому и не работает rdr? попробуйте отключить в rc.conf ppp_nat


Время: 18:38.

Время: 18:38.
© OSzone.net 2001-