Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Plain Text by sasha-bs ( 15 years ago )
################## СЕКЦИЯ: МАКРОСЫ ##################
# inet_if - внешний Интернет интерфейс
# ipv6_if - туннельный IPv6 интерфейс (Hurricane Electric)
# vpn_if - доверенный VPN интерфейс
# ext_if - внешний физический интерфейс
# int_if - доверенный внутренний физический интерфейс
# wifi_if - доверенный внутренний физический Wi-Fi интерфейс

# Виртуальные
inet_if = "tun0"
ipv6_if = "gif0"
vpn_if = "tun1"

# Физические
ext_if = "re0"
int_if = "sk0"
wifi_if = "ale0"

# Список открытых TCP/UDP портов интерфейса $inet_if
inet_if_services = "{ domain, pop3, imap, 1194, >49151 }"
inet_if_red_services = "{ ssh }"
# Список открытых TCP/UDP портов интерфейса $ipv6_if
ipv6_if_services = "{ domain, pop3, imap, 1194, >49151 }"
ipv6_if_red_services = "{ ssh }"
# Список открытых TCP/UDP портов интерфейса $ext_if
ext_if_services = "{ ftp-data, ftp, domain, www, netbios-ssn, microsoft-ds, rsync, >49151 }"
ext_if_red_services = "{ ssh, pop3, imap }"

# Диапазон адресов VPN сети (доверенная сеть)
vpn_network = "10.10.200.0/24"
# Конец IPv4 <-> IPv4 туннеля $ipv6_if (IPv4 адрес сервера Hurricane Electric)
my_peer = "216.66.80.26"

# Разрешенные типы ICMP
icmp_types = "{ echoreq, unreach }"

# Локальные IP адреса (для редиректа)
redirect_1 = "172.16.0.10"
redirect_2 = "172.16.0.200"

################## СЕКЦИЯ: ТАБЛИЦЫ ##################
# Список приватных сетей для блокирования их на внешнем интерфейсе (RFC 1918 и др.)
table <local_nets> const { 127.0.0.0/8, 0.0.0.0/8, 10.0.0.0/8, \
 172.16.0.0/12, 192.168.0.0/16, 192.0.2.0/24, 169.254.0.0/16, \
 204.152.64.0/23, 224.0.0.0/3, 240.0.0.0/4, 255.255.255.255/32 }
# Локальная сеть провайдера
table <provider_net> const { 192.168.0.0/16, 91.204.184.0/27, 224.0.0.0/8 }
# Таблица IP адресов, запросы к которым нет необходимости направлять на Squid, ftp-proxy и т.д.
table <no_rdr> { $int_if:network, $wifi_if:network, $vpn_network, \
 192.168.0.0/16, 91.204.184.0/27 }
# Таблица IP адресов которые нет необходимости направлять на локальный mail сервер
table <no_mail_rdr> const { $int_if:network, $wifi_if:network }
# Таблицы для демона spamd
table <spamd-white> persist
table <spamd-greytrap> persist
table <nospamd> persist file "/etc/pf-nospamd"
# Таблицы для authpf
table <authpf_users> persist
# Таблица для нарушителей
table <inet_lock> persist
table <ext_lock> persist
table <int_lock> persist
table <ipv6_lock> persist

################## СЕКЦИЯ: ГЛОБАЛЬНЫЕ НАСТРОЙКИ PF ##################
match in all scrub (no-df max-mss 1440 set-tos lowdelay)
match out all scrub (no-df random-id set-tos lowdelay)
set reassemble yes
set state-defaults pflow
set require-order no
set block-policy return
set loginterface $inet_if
set loginterface $ipv6_if
set loginterface $ext_if
set skip on lo

################## СЕКЦИЯ: ПРАВИЛА ##################
### Раздел 1. Правила блокировки по-умолчанию
block log all
# Запрещаем пакеты отсылающие ответы флагом RST или ICMP Unreachable
block return log
# Выполняем общие защитные действия
block return-rst in log quick proto tcp all flags FP/FP
block return-rst in log quick proto tcp all flags SE/SE
block return-rst in log quick proto tcp all flags FUP/FUP
block in log quick proto tcp all flags FS/FS
block in log quick proto tcp all flags /FSRPAU
# Антиспуфинг
antispoof log quick for $inet_if
antispoof log quick for $vpn_if
antispoof log quick for $ext_if
antispoof log quick for $int_if
antispoof log quick for $wifi_if
# Блокируем некоторые ОС (OSFP)
block in log quick from any os NMAP
block in log quick from any os NAST
# Дополнительная защита от спуфинга (Unicast Reverse Path Forwarding проверка)
block in log quick from urpf-failed to any
block in log quick from no-route to any
# Блокируем приватные сети на $inet_if интерфейсе
block in log quick from <local_nets> to ( $inet_if ) label ip-lock
# Блокируем ранее найденных нарушителей
block in log quick from <inet_lock> to any label ip-lock
block in log quick from <ext_lock> to any label ip-lock
block in log quick from <int_lock> to any label ip-lock
block in log quick from <ipv6_lock> to any label ip-lock

### Раздел 2. Преобразование сетевых адресов (Network Address Translation)
# NAT (доверенные сети <-> Интернет) интерфейс $inet_if
match out on $inet_if from ( $int_if:network ) to any nat-to ($inet_if:0)
match out on $inet_if from ( $wifi_if:network ) to any nat-to ($inet_if:0)
# NAT (доверенные сети <-> локальная сеть провайдера) интерфейс $ext_if
match out on $ext_if from ( $int_if:network ) to any nat-to ($ext_if:0)
match out on $ext_if from ( $wifi_if:network ) to any nat-to ($ext_if:0)
match out on $ext_if from $vpn_network to any nat-to ($ext_if:0)

### Раздел 3. Якоря
# Якорь для правил ftp-proxy
anchor "ftp-proxy/*"
# Якорь для правил tftp-proxy
anchor "tftp-proxy/*"
# Якорь для правил relayd
anchor "relayd/*"
# Якорь для правил authpf
anchor "authpf/*"

### Раздел 4. Общие правила для некоторых протоколов
# IGMP протокол
pass in proto igmp allow-opts modulate state (pflow)
# ICMP протокол
pass in inet proto icmp from any to self icmp-type $icmp_types allow-opts modulate state (pflow)

### Раздел 5. Правила прохождения сетевых пакетов - исходящее направление
# Разрешаем все на выход
pass out flags S/SA allow-opts modulate state (pflow)
# Разрешаем все на выход для IPv6
pass out proto 41 all allow-opts modulate state (pflow)
# Запрещаем пакетам выходить в немаршрутизируемые сети
block out log quick on $inet_if from any to <local_nets>

### Раздел 6. Правила прохождения сетевых пакетов - входящее направление
########## Интерфейс $ext_if ##########
# Обрабатываем входящие TCP соединения для интерфейса $ext_if
pass in on $ext_if proto { tcp, udp } from <provider_net> to ( $ext_if ) port $ext_if_services \
 flags S/SA allow-opts modulate state (pflow)
pass in on $ext_if proto { tcp, udp } from <provider_net> to ( $ext_if ) port $ext_if_red_services \
 flags S/SA label SSH-Limit allow-opts modulate state (pflow, max-src-conn-rate 10/60, overload <ext_lock> flush global)

# Выполняем редирект ("проброс") портов для демона spamd
pass in on $ext_if proto { tcp, udp } from <provider_net> to ( $ext_if ) port smtp \
 rdr-to lo0 port spamd modulate state (pflow, max-src-conn-rate 50/20, overload <ext_lock> flush global)
pass in on $ext_if proto { tcp, udp } from { <spamd-white>, <spamd-bypass>, <authpf_users> } \
 to ( $ext_if ) port smtp rdr-to lo0 port smtp modulate state (pflow, max-src-conn-rate 50/20, overload <ext_lock> flush global)

# RDR для $ext_if (локальная сеть провайдера <-> компьютер внутри доверенной сети)
# Выполняем редирект для DC++
pass in on $ext_if proto { tcp, udp } from <provider_net> to any port 4000 rdr-to $redirect_1 port 4000 synproxy state (pflow)
pass in on $ext_if proto { tcp, udp } from <provider_net> to any port 4001 rdr-to $redirect_1 port 4001 synproxy state (pflow)
pass in on $ext_if proto { tcp, udp } from <provider_net> to any port 4002 rdr-to $redirect_1 port 4002 synproxy state (pflow)
# Выполняем редирект для Commfort
pass in on $ext_if proto { tcp, udp } from <provider_net> to any port 30700 rdr-to $redirect_1 port 30700 synproxy state (pflow)
pass in on $ext_if proto { tcp, udp } from <provider_net> to any port 43624 rdr-to $redirect_1 port 43624 synproxy state (pflow)
########## Интерфейс $ext_if ##########

########## Интерфейс $int_if ##########
# Обрабатываем входящие TCP соединения для интерфейса $int_if
pass in on $int_if proto { tcp, udp } from ( $int_if:network ) \
 to any flags S/SA allow-opts modulate state (pflow)

# Пропускаем IPv6 трафик
pass in on $int_if inet6 proto { tcp, udp, ipv6-icmp } from ( $int_if:network ) \
 to any flags S/SA allow-opts modulate state (pflow)

# RDR для $int_if
# Выполняем редирект для демона CUPS
pass in on $int_if proto { tcp, udp } from ( $int_if:network ) \
 to ( $int_if ) port ipp rdr-to lo0 port ipp modulate state (pflow)

# Выполняем редирект порта ftp на демон ftp-proxy, учитывая исключения
pass in on $int_if proto { tcp, udp } from ( $int_if:network ) \
 to ! <no_rdr> port ftp rdr-to lo0 port 8021 modulate state (pflow)

# Выполняем редирект порта ftp на демон tftp-proxy, учитывая исключения
pass in on $int_if proto udp from ( $int_if:network ) \
 to ! <no_rdr> port tftp rdr-to lo0 port 6969 modulate state (pflow)

# Выполняем редирект порта SMTP на локальный mail сервер, учитывая исключения
pass in on $int_if proto { tcp, udp } from ! <no_mail_rdr> \
 to ! <no_rdr> port smtp rdr-to lo0 port 25 modulate state (pflow)

# Выполняем редирект порта SMTP на демон clamsmtpd, учитывая исключения
#pass in on $int_if proto { tcp, udp } from ( $int_if:network ) \
# to ! <no_rdr> port smtp rdr-to lo0 port 10025 modulate state (pflow)

# Выполняем редирект порта WWW на демон Squid, учитывая исключения
pass in on $int_if proto { tcp, udp } from ( $int_if:network ) \
 to ! <no_rdr> port www rdr-to lo0 port 3128 modulate state (pflow)
########## Интерфейс $int_if ##########

########## Интерфейс $wifi_if ##########
# Обрабатываем входящие TCP соединения для интерфейса $wifi_if
pass in on $wifi_if proto { tcp, udp } from ( $wifi_if:network ) \
 to any flags S/SA allow-opts modulate state (pflow)

# Пропускаем IPv6 трафик
pass in on $wifi_if inet6 proto { tcp, udp, ipv6-icmp } from ( $wifi_if:network ) \
 to any flags S/SA allow-opts modulate state (pflow)

# RDR для $wifi_if
# Выполняем редирект для демона CUPS
pass in on $wifi_if proto { tcp, udp } from ( $wifi_if:network ) \
 to ( $wifi_if ) port ipp rdr-to lo0 port ipp modulate state (pflow)

# Выполняем редирект порта ftp на демон ftp-proxy, учитывая исключения
pass in on $wifi_if proto { tcp, udp } from ( $wifi_if:network ) \
 to ! <no_rdr> port ftp rdr-to lo0 port 8021 modulate state (pflow)

# Выполняем редирект порта ftp на демон tftp-proxy, учитывая исключения
pass in on $wifi_if proto udp from ( $wifi_if:network ) \
 to ! <no_rdr> port tftp rdr-to lo0 port 6969 modulate state (pflow)

# Выполняем редирект порта SMTP на локальный mail сервер, учитывая исключения
pass in on $wifi_if proto { tcp, udp } from ! <no_mail_rdr> \
 to ! <no_rdr> port smtp rdr-to lo0 port 25 modulate state (pflow)

# Выполняем редирект порта SMTP на демон clamsmtpd, учитывая исключения
#pass in on $wifi_if proto { tcp, udp } from ( $wifi_if:network ) \
# to ! <no_rdr> port smtp rdr-to lo0 port 10025 modulate state (pflow)

# Выполняем редирект порта WWW на демон Squid, учитывая исключения
pass in on $wifi_if proto { tcp, udp } from ( $wifi_if:network ) \
 to ! <no_rdr> port www rdr-to lo0 port 3128 modulate state (pflow)
########## Интерфейс $wifi_if ##########

########## Интерфейс $vpn_if ##########
# Обрабатываем входящие TCP соединения для интерфейса $vpn_if
pass in on $vpn_if proto { tcp, udp } from $vpn_network \
 to { $vpn_network, <provider_net> } flags S/SA allow-opts modulate state (pflow)

pass in on $vpn_if proto { tcp, udp } from $vpn_network \
 to ( $int_if:network ) flags S/SA allow-opts modulate state (pflow)

pass in on $vpn_if proto { tcp, udp } from $vpn_network \
 to ( $wifi_if:network ) flags S/SA allow-opts modulate state (pflow)
########## Интерфейс $vpn_if ##########

########## Интерфейс $ipv6_if ##########
# Обрабатываем входящие TCP соединения для интерфейса { $ipv6_if }
pass in on $ipv6_if inet6 proto { tcp, udp } from any to ( $ipv6_if ) port $ipv6_if_services \
 flags S/SA modulate state (pflow, max-src-conn-rate 50/20, overload <ipv6_lock> flush global)
pass in on $ipv6_if inet6 proto { tcp, udp } from any to ( $ipv6_if ) port $ipv6_if_red_services \
 flags S/SA modulate state (pflow, max-src-conn-rate 10/60, overload <ipv6_lock> flush global)

# Обрабатываем входящие TCP соединения для Web сервера
pass in on $ipv6_if inet6 proto { tcp } from any to ( $ipv6_if ) \
 port { https } modulate state \
 (pflow, max 100, source-track rule, max-src-nodes 75, \
 max-src-states 30, tcp.established 60, tcp.closing 5)

### ICMP6 протокол ###
pass in on $ipv6_if inet6 proto { ipv6-icmp } all \
 icmp6-type { echoreq, unreach, neighbradv, neighbrsol, redir } allow-opts modulate state (pflow)
pass out on { $ipv6_if } inet6 proto { ipv6-icmp } all \
 icmp6-type { echoreq, unreach, neighbradv, neighbrsol, redir } allow-opts modulate state (pflow)

# Пропускаем всё на исходящем направлении
pass out on $ipv6_if inet6 proto { tcp, udp } all flags S/SA allow-opts modulate state (pflow)
########## Интерфейс $ipv6_if ##########

########## Интерфейс $inet_if ##########
# IPENCAP протокол для IPv6 туннеля
pass in on $inet_if inet proto ipencap from $my_peer to ( $inet_if )
pass out on $inet_if inet proto ipencap from ( $inet_if ) to $my_peer

# Обрабатываем входящие TCP соединения для интерфейса $inet_if
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port $inet_if_services \
 flags S/SA modulate state (pflow, max-src-conn-rate 50/20, overload <inet_lock> flush global)
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port $inet_if_red_services \
 flags S/SA modulate state (pflow, max-src-conn-rate 10/60, overload <inet_lock> flush global)

# Обрабатываем входящие TCP соединения для Web сервера
pass in on $inet_if proto tcp from any to ( $inet_if ) \
 port { https } modulate state \
 (pflow, max 100, source-track rule, max-src-nodes 75, \
 max-src-states 30, tcp.established 60, tcp.closing 5)

# Выполняем редирект ("проброс") портов для демона spamd
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port smtp \
 rdr-to lo0 port spamd modulate state (pflow, max-src-conn-rate 50/20, overload <inet_lock> flush global)
pass in on $inet_if proto { tcp, udp } from { <spamd-white>, <spamd-bypass>, <authpf_users> } \
 to ( $inet_if ) port smtp rdr-to lo0 port smtp modulate state (pflow, max-src-conn-rate 50/20, overload <inet_lock> flush global)

# RDR для $inet_if (Интернет <-> компьютер внутри доверенной сети)
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port 20000 rdr-to $redirect_1 port 20000 synproxy state (pflow)
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port 25585 rdr-to $redirect_1 port 25585 synproxy state (pflow)
pass in on $inet_if proto { tcp, udp } from any to ( $inet_if ) port 12482 rdr-to $redirect_2 port 12482 synproxy state (pflow)
########## Интерфейс $inet_if ##########

### Конец

 

Revise this Paste

Children: 28638 28639
Your Name: Code Language: