Код: Выделить всё
(/etc)-> cat rc.conf
......
#PF
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
.....
Код: Выделить всё
(/etc)-> cat pf.conf
# pf.conf
############### Опции ##############
ext_if = "xl1"
int_if = "xl0"
lannet = "192.168.111.0/24"
extnet = "xxx.xxx.xxx.xxx/28"
bsd = "192.168.111.98/32"
ext_ip = "xxx.xxx.xxx.xxx/32"
mail = "192.168.111.10"
my_ip = "192.168.111.217/32"
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
client_ports = "{ 21, 22, 25, 110, 123, 80, 443, 3128, 3129, 3389,8080, >=49151 }"
admin_ports = "{ 5190, 33330:33340 }"
########## Нормалицазия #############
# Определяем политику при блокировке пакетов
set block-policy drop
# Поведение пакетного фильтра при использовании таблицы состояний
set state-policy floating
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
########### NAT RDR ##############
#для локалки
nat on $ext_if inet from $lannet to any -> $ext_ip
########### Правила фильтрации ###########
# Защита от спуфинга
antispoof quick for { lo0, $int_if, $ext_if }
# Блокируем всё
block log all
# Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any
# Разрешаем icmp
pass inet proto icmp icmp-type echoreq
# Разрешаем DNS для локалки
pass in on $int_if proto udp from $lannet to $bsd port domain
# Разрешаем NTP для локалки
pass in on $int_if proto udp from $lannet to $bsd port ntp
# Тестовый полный выход для отладки
pass in on $int_if from $lannet to any
# Выпускаем почтовик
pass in on $int_if proto tcp from $mail to any port smtp
# Выпускаем админские сервисы
pass in on $int_if proto tcp from $my_ip to any port $admin_ports
# Выпускаем клиентске сервисы
pass in on $int_if proto tcp from $lannet to any port $client_ports
# Разрешаем нашему шлюзу полный выход с обоих интерфейсов
pass out on $ext_if proto tcp from any to any
pass out on $ext_if proto udp from any to any keep state
pass out on $int_if proto tcp from any to any
pass out on $int_if proto udp from any to any keep state
######### Входящий #############
# Разрешаем входящий smtp для всех
pass in on $ext_if proto tcp from any to $mail port smtp flags S/SA synproxy state
# Разрешаем входящий https
pass in on $ext_if proto tcp from any to $mail port https flags S/SA synproxy state
# Разрешаем входящий www
pass in on $ext_if proto tcp from any to $ext_ip port www flags S/SA synproxy state
# Разрешаем входящий ftp
#pass in on $ext_if proto tcp from any to $ext_ip port ftp flags S/SA synproxy state
Код: Выделить всё
(/var/log)-> ls -l | grep pf
-rwxr-xr-x 1 root wheel 0 24 авг 11:58 pf.log
-rw------- 1 root wheel 0 17 сен 03:04 pf.today
-rw------- 1 root wheel 1501 16 сен 03:04 pf.yesterday