Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ################## СЕКЦИЯ: МАКРОСЫ ##################
- # Виртуальные
- ipv6_if = "gif0"
- vpn_if = "tun1"
- # Физические
- int_if = "sk1"
- # 30 Мбит/сек
- ext_if1 = "sk0"
- # 10 Мбит/сек
- ext_if2 = "age0"
- # Основные шлюзы каналов
- # 30 Мбит/сек
- ext_gw1 = "xxx.xxx.xxx.xxx"
- # 10 Мбит/сек
- ext_gw2 = "xxx.xxx.xxx.xxx"
- # Список открытых TCP/UDP портов глобальных сервисов (интерфейс $ext_if1)
- ext_if1_tcp_services = "{ domain, >49151 }"
- ext_if1_udp_services = "{ domain, ntp, 1194, >49151 }"
- ext_if1_tcp_red_services = "{ ssh }"
- # Список открытых TCP/UDP портов глобальных сервисов (интерфейс $ipv6_if)
- ipv6_if_tcp_services = "{ domain, >49151 }"
- ipv6_if_udp_services = "{ domain, ntp, 1194, >49151 }"
- ipv6_if_tcp_red_services = "{ ssh }"
- # Диапазон адресов VPN сети (доверенная сеть)
- vpn_network = "10.10.200.0/24"
- ################## СЕКЦИЯ: ТАБЛИЦЫ ##################
- # Список приватных сетей для блокирования их на внешнем интерфейсе (RFC 1918 и др.)
- # Убранные из перечня сети:
- table <local_nets> const { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, \
- 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, \
- 192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, \
- 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, \
- 240.0.0.0/4, 255.255.255.255/32 }
- # Таблица IP адресов, запросы к которым нет необходимости направлять на Squid, ftp-proxy и т.д.
- table <no_rdr> { 10.0.0.0/8, 192.168.10.0/24, 158.46.248.166, 158.46.248.165, \
- 158.46.248.154, 158.46.248.153 }
- # Таблица IP адресов, запросы от которых нет необходимости направлять на Squid
- table <no_squid_rdr> const { 192.168.10.1, 192.168.10.2, 192.168.10.4, \
- 192.168.10.10, 192.168.10.23, 192.168.10.31, 192.168.10.45, \
- 192.168.10.66, 192.168.10.69, 192.168.10.70, 192.168.10.72, \
- 192.168.10.100 }
- # Таблица IP адресов для исходящего трафика привелигированных пользователей
- table <director> const { 192.168.10.1, 192.168.10.2, 192.168.10.4, \
- 192.168.10.10, 192.168.10.23, 192.168.10.29, 192.168.10.31, \
- 192.168.10.45, 192.168.10.66, 192.168.10.69, 192.168.10.70, \
- 192.168.10.72, 192.168.10.80, 192.168.10.95, 192.168.10.100 }
- # Таблица IP адресов надёжных DNS серверов
- table <trust_dns> const { 8.8.8.8, 8.8.4.4, \
- 2001:4860:4860::8888, 2001:4860:4860::8844, \
- 208.67.222.222, 208.67.220.220, \
- 2620:0:ccc::2, 2620:0:ccd::2, \
- 77.88.8.8, 77.88.8.1, \
- 2a02:6b8::feed:0ff, 2a02:6b8:0:1::feed:0ff, \
- 77.88.8.88, 77.88.8.2, \
- 2a02:6b8::feed:bad, 2a02:6b8:0:1::feed:bad, \
- 77.88.8.7, 77.88.8.3, \
- 2a02:6b8::feed:a11, 2a02:6b8:0:1::feed:a11, \
- 199.85.126.10, 199.85.127.10, \
- 199.85.126.20, 199.85.127.20, \
- 199.85.126.30, 199.85.127.30, \
- 193.58.251.251, 156.154.70.1, \
- 156.154.71.1, 91.204.184.3, \
- 62.122.48.1, ::1 }
- # Таблицы для демона spamd
- table <spamd-white> persist
- table <spamd-greytrap> persist
- table <nospamd> persist file "/etc/pf-nospamd"
- table <pf-block> persist file "/etc/pf-block"
- # Таблицы для authpf
- table <authpf_users> persist
- # Таблица для нарушителей
- table <inet_lock> persist
- table <ipv6_lock> persist
- # Таблица для превысивших лимит по объему трафика
- table <over_limit> persist
- ################## СЕКЦИЯ: ГЛОБАЛЬНЫЕ НАСТРОЙКИ PF ##################
- # Нормализуем трафик
- # Для PPPoE: match in all scrub (no-df max-mss 1440)
- # для остальных случаев: match in all scrub (no-df)
- match in all scrub (no-df)
- set reassemble yes
- set state-defaults pflow
- set block-policy return
- set skip on { lo, pflog0, pflow0, pflow1 }
- set fingerprints "/etc/pf.os"
- ################## СЕКЦИЯ: ОЧЕРЕДИ ALTQ (QUEUES) ##################
- # Исходящий трафик $ext_if2 (является входящим для абонентов локальной сети)
- # Формируем очередь на интерфейсе $ext_if2
- # 1. обязательная очередь: default
- # 2. пользовательская очередь со включенным random early detection
- altq on $ext_if2 cbq bandwidth 99Mb queue { std_out, inet_out }
- queue std_out bandwidth 98Mb cbq (default)
- queue inet_out bandwidth 1Mb cbq { fast_out, slow_out }
- queue fast_out bandwidth 984Kb cbq (red)
- queue slow_out bandwidth 16Kb cbq (red)
- ################## СЕКЦИЯ: ПРАВИЛА ##################
- ### Раздел 1. Правила блокировки по-умолчанию
- block log (all) all
- # Блокируем приватные сети
- block in log quick on $ext_if1 from <local_nets> to any
- block in log quick on $ext_if2 from <local_nets> to any
- # Антиспуфинг
- # на $inet_if его не применяем!
- antispoof log quick for lo0
- antispoof log quick for ( $int_if )
- antispoof log quick for ( $ext_if1 )
- antispoof log quick for ( $ext_if2 )
- antispoof log quick for ( $vpn_if )
- antispoof log quick for ( $ipv6_if )
- # Блокируем некоторые ОС (OSFP)
- block in log quick proto tcp from any os NMAP
- block in log quick proto tcp 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
- # Блокируем ранее найденных нарушителей
- block in log quick from <inet_lock> to any
- block in log quick from <ipv6_lock> to any
- # By default, do not permit remote connections to X11
- block in log quick on ! lo0 proto tcp to port 6000:6010
- # Блокируем альтернативные DNS, исключив фильтрующий сервер
- pass in quick proto udp from 192.168.10.10 to <trust_dns> port domain
- block in log quick proto { tcp, udp } from ( $int_if:network ) to ! ( $int_if ) port domain
- # Блокируем порты Mail.RU Agent
- block in log quick proto { tcp, udp } from ! <director> \
- to ! ( $int_if ) port { 2041, 2042 }
- # Блокируем сайты (соц. сети и прочее)
- block in log quick from ! <director> to <pf-block>
- # Блокируем трафик на защищенные порты от уволенных сотрудников
- block in log quick proto { tcp, udp } from \
- { 192.168.10.25, 192.168.10.34, \
- 192.168.10.39, 192.168.10.47, \
- 192.168.10.58, 192.168.10.107 } \
- to ! ( $int_if ) port { ssh, ftp, smtp, pop3, 81, imap, \
- https, smtps, imaps, pop3s, 3389, 4899, 5190, 7777, 9443 }
- # Полная блокировка отдельных пользователей
- #block in log quick from { 192.168.10.113 } to ! ( $int_if:network )
- # Частичная блокировка для превысивших лимит по объему трафика
- block in log quick proto tcp from <over_limit> \
- to ! ( $int_if:network ) port { 1:79, 82:442, 444:65535 }
- # Полная блокировка протокола UDP для превысивших лимит по объему трафика
- block in log quick proto udp from <over_limit> \
- to ! ( $int_if:network )
- ### Раздел 2. Якоря
- # Якорь для правил ftp-proxy
- anchor "ftp-proxy/*"
- # Якорь для правил tftp-proxy
- anchor "tftp-proxy/*"
- # Якорь для правил relayd
- anchor "relayd/*"
- # Якорь для правил authpf
- anchor "authpf/*"
- ### Раздел 3. Общие правила для некоторых протоколов
- # IGMP протокол
- pass in proto igmp allow-opts
- # ICMP протокол
- pass in inet proto icmp
- ### Раздел 4. Правила прохождения сетевых пакетов - входящее направление
- ########## Интерфейс $int_if ##########
- # Обрабатываем входящие TCP соединения для интерфейса $int_if
- pass in quick on $int_if from ( $int_if:network ) to ( $int_if )
- # Выпускаем превысивших лимит во внешнюю сеть через наиболее медленный канал и
- # помечаем их трафик для дальнейшего ограничения по скорости
- pass in quick on $int_if proto tcp from <over_limit> to \
- any port { https } \
- route-to ($ext_if2 $ext_gw2) tag slowuser
- # Выполняем load-balance для исходящего трафика пользователей с ограничением по портам
- pass in on $int_if proto tcp from ( $int_if:network ) to \
- any port { >49151 } \
- route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
- # Выполняем load-balance для исходящего трафика диапазона DHCP
- pass in on $int_if from { 192.168.10.120 - 192.168.10.160 } \
- route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
- # Привязываем трафик пользователей к основному каналу провайдера
- pass in on $int_if proto tcp from ( $int_if:network ) to port { smtp, 81, \
- pop3, ntp, https, imap, smtps, imaps, pop3s, 5190, 7777, 9443 } route-to ($ext_if1 $ext_gw1)
- # Привязываем весь трафик привелигированных пользователей к основному каналу провайдера
- pass in on $int_if from <director> to any route-to ($ext_if1 $ext_gw1)
- # Выполняем load-balance для исходящего трафика привелигированных пользователей
- pass in on $int_if from { 192.168.10.10, 192.168.10.95 } \
- route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
- # Привязываем особый трафик привелигированных пользователей к основному каналу провайдера
- pass in on $int_if proto { tcp, udp } from { 192.168.10.10, 192.168.10.95 } to port { ssh, telnet, \
- smtp, pop3, ntp, https, imap, smtps, imaps, pop3s, 1194, 3389, \
- 4899, 5060, 5190, 7777, 8080, 9443 } route-to ($ext_if1 $ext_gw1)
- # RDR для $int_if
- # Выполняем редирект для демона CUPS
- pass in on $int_if proto tcp from ( $int_if:network ) \
- to ( $int_if ) port ipp rdr-to ( lo0 ) port ipp
- # Выполняем редирект порта ftp на демон ftp-proxy, учитывая исключения
- pass in on $int_if inet proto tcp from ( $int_if:network ) \
- to ! <no_rdr> port ftp divert-to 127.0.0.1 port 8021
- pass in on $int_if inet6 proto tcp from ( $int_if:network ) \
- to ! <no_rdr> port ftp divert-to ::1 port 8021
- # Выполняем редирект порта tftp на демон tftp-proxy, учитывая исключения
- pass in quick on $int_if inet proto udp from ( $int_if:network ) \
- to ! <no_rdr> port tftp divert-to 127.0.0.1 port 6969
- pass in quick on $int_if inet6 proto udp from ( $int_if:network ) \
- to ! <no_rdr> port tftp divert-to ::1 port 6969
- # Выполняем редирект порта WWW на демон Squid, учитывая исключения
- pass in on $int_if inet proto tcp from ! <no_squid_rdr> \
- to ! <no_rdr> port www divert-to 127.0.0.1 port 3127
- #pass in on $int_if dup-to (age0 192.168.9.10)
- ########## Интерфейс $int_if ##########
- ########## Интерфейс $vpn_if ###########
- # Обрабатываем входящие TCP соединения для интерфейса $vpn_if
- pass in on $vpn_if from $vpn_network
- ########## Интерфейс $vpn_if ###########
- ########## Интерфейс $ipv6_if ##########
- ### ICMP6 протокол ###
- pass in on $ipv6_if inet6 proto ipv6-icmp
- # Обрабатываем входящие TCP соединения для интерфейса $ipv6_if
- pass in on $ipv6_if inet6 proto udp from any to ( $ipv6_if ) port $ipv6_if_udp_services \
- keep state
- pass in on $ipv6_if inet6 proto tcp from any to ( $ipv6_if ) port $ipv6_if_tcp_services \
- keep state (max-src-conn-rate 50/20, overload <ipv6_lock> flush global)
- pass in on $ipv6_if inet6 proto tcp from any to ( $ipv6_if ) port $ipv6_if_tcp_red_services \
- keep state (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 { www, https } keep state \
- (max 100, source-track rule, max-src-nodes 75, \
- max-src-states 30, tcp.established 60, tcp.closing 5)
- # Выполняем редирект ("проброс") портов для демона spamd
- pass in on $ipv6_if proto tcp from any to ( $ipv6_if ) port smtp \
- rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- pass in on $ipv6_if proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
- to ( $ipv6_if ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- ########## Интерфейс $ipv6_if ##########
- ########## Интерфейс $ext_if1 ##########
- ### ГЛОБАЛЬНЫЕ СЕРВИСЫ - PASS
- # Обрабатываем входящие TCP соединения для интерфейса $ext_if1
- pass in on $ext_if1 proto udp from any to ( $ext_if1 ) port $ext_if1_udp_services \
- keep state
- pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port $ext_if1_tcp_services \
- keep state (max-src-conn-rate 500/20, overload <inet_lock> flush global)
- pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port $ext_if1_tcp_red_services \
- keep state (max-src-conn-rate 10/60, overload <inet_lock> flush global)
- # Обрабатываем входящие TCP соединения для Web сервера
- pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) \
- port { www, https } keep state \
- (max 100, source-track rule, max-src-nodes 75, \
- max-src-states 30, tcp.established 60, tcp.closing 5)
- # Выполняем редирект ("проброс") портов для демона spamd
- pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port smtp \
- rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- pass in on $ext_if1 proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
- to ( $ext_if1 ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- # RDR для $ext_if1 (Интернет <-> компьютер внутри доверенной сети)
- pass in on $ext_if1 inet proto tcp from any to ( $ext_if1 ) port ftp divert-to 127.0.0.1 port 8011
- ########## Интерфейс $ext_if1 ##########
- ########## Интерфейс $ext_if2 ##########
- ### ГЛОБАЛЬНЫЕ СЕРВИСЫ - PASS
- # Обрабатываем входящие TCP соединения для интерфейса $ext_if2
- pass in on $ext_if2 proto udp from any to ( $ext_if2 ) port $ext_if1_udp_services \
- keep state
- pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port $ext_if1_tcp_services \
- keep state (max-src-conn-rate 500/20, overload <inet_lock> flush global)
- pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port $ext_if1_tcp_red_services \
- keep state (max-src-conn-rate 10/60, overload <inet_lock> flush global)
- # Обрабатываем входящие TCP соединения для Web сервера
- pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) \
- port { www, https } keep state \
- (max 100, source-track rule, max-src-nodes 75, \
- max-src-states 30, tcp.established 60, tcp.closing 5)
- # Выполняем редирект ("проброс") портов для демона spamd
- pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port smtp \
- rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- pass in on $ext_if2 proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
- to ( $ext_if2 ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
- # RDR для $ext_if2 (Интернет <-> компьютер внутри доверенной сети)
- pass in on $ext_if2 inet proto tcp from any to ( $ext_if2 ) port ftp divert-to 127.0.0.1 port 8011
- ########## Интерфейс $ext_if2 ##########
- ### Раздел 5. "Широкий" RDR (Интернет, локальная сеть провайдера <-> компьютер внутри доверенной сети)
- # RDR для $ext_if1, $ext_if2
- # Выполняем редирект для ICQ, Skype, Torrent, DC++
- #pass in on $ext_if1 proto { tcp, udp } from any to ( $ext_if1 ) port imap rdr-to 192.168.10.95 port imap
- #pass in on $ext_if2 proto { tcp, udp } from any to ( $ext_if2 ) port imap rdr-to 192.168.10.95 port imap
- pass in on $ext_if1 proto { tcp, udp } from any to ( $ext_if1 ) port 20000:20006 rdr-to 192.168.10.95 port 20000:20006
- pass in on $ext_if2 proto { tcp, udp } from any to ( $ext_if2 ) port 20000:20006 rdr-to 192.168.10.95 port 20000:20006
- ### Раздел 6. Преобразование сетевых адресов (Network Address Translation)
- match out on $ext_if1 from ( $int_if:network ) nat-to ($ext_if1)
- match out on $ext_if2 from ( $int_if:network ) nat-to ($ext_if2)
- ### Раздел 7. Правила прохождения сетевых пакетов - исходящее направление
- # Разрешаем все на выход
- pass out
- # Выполняем маршрутизацию сетевых пакетов для интерфейсов $ext_if1, $ext_if2
- # Перенаправляем трафик стремящийся выйти не через свой канал в соответствующий шлюз
- pass out on $ext_if1 from $ext_if2 route-to ($ext_if2 $ext_gw2)
- pass out on $ext_if2 from $ext_if1 route-to ($ext_if1 $ext_gw1)
- # Выполняем ограничение скорости для пользователей превысивших лимит
- pass out on $ext_if2 inet proto tcp tagged slowuser queue slow_out
- ### СПРАВКА ###
- # Приватные сети RFC 5735 (http://tools.ietf.org/html/rfc5735)
- # { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, \
- # 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, \
- # 192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, \
- # 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, \
- # 240.0.0.0/4, 255.255.255.255/32 }
- ### Конец
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement