Advertisement
Guest User

Untitled

a guest
Jul 30th, 2015
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 18.78 KB | None | 0 0
  1. ################## СЕКЦИЯ: МАКРОСЫ ##################
  2.  
  3. # Виртуальные
  4. ipv6_if = "gif0"
  5. vpn_if = "tun1"
  6.  
  7. # Физические
  8. int_if  = "sk1"
  9. # 30 Мбит/сек
  10. ext_if1 = "sk0"
  11. # 10 Мбит/сек
  12. ext_if2 = "age0"
  13.  
  14. # Основные шлюзы каналов
  15. # 30 Мбит/сек
  16. ext_gw1 = "xxx.xxx.xxx.xxx"
  17. # 10 Мбит/сек
  18. ext_gw2 = "xxx.xxx.xxx.xxx"
  19.  
  20. # Список открытых TCP/UDP портов глобальных сервисов (интерфейс $ext_if1)
  21. ext_if1_tcp_services = "{ domain, >49151 }"
  22. ext_if1_udp_services = "{ domain, ntp, 1194, >49151 }"
  23. ext_if1_tcp_red_services = "{ ssh }"
  24. # Список открытых TCP/UDP портов глобальных сервисов (интерфейс $ipv6_if)
  25. ipv6_if_tcp_services = "{ domain, >49151 }"
  26. ipv6_if_udp_services = "{ domain, ntp, 1194, >49151 }"
  27. ipv6_if_tcp_red_services = "{ ssh }"
  28.  
  29. # Диапазон адресов VPN сети (доверенная сеть)
  30. vpn_network = "10.10.200.0/24"
  31.  
  32. ################## СЕКЦИЯ: ТАБЛИЦЫ ##################
  33. # Список приватных сетей для блокирования их на внешнем интерфейсе (RFC 1918 и др.)
  34. # Убранные из перечня сети:
  35. table <local_nets> const { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, \
  36.     172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, \
  37.     192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, \
  38.     198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, \
  39.     240.0.0.0/4, 255.255.255.255/32 }
  40. # Таблица IP адресов, запросы к которым нет необходимости направлять на Squid, ftp-proxy и т.д.
  41. table <no_rdr> { 10.0.0.0/8, 192.168.10.0/24, 158.46.248.166, 158.46.248.165, \
  42.     158.46.248.154, 158.46.248.153 }
  43. # Таблица IP адресов, запросы от которых нет необходимости направлять на Squid
  44. table <no_squid_rdr> const { 192.168.10.1, 192.168.10.2, 192.168.10.4, \
  45.     192.168.10.10, 192.168.10.23, 192.168.10.31, 192.168.10.45, \
  46.     192.168.10.66, 192.168.10.69, 192.168.10.70, 192.168.10.72, \
  47.     192.168.10.100 }
  48. # Таблица IP адресов для исходящего трафика привелигированных пользователей
  49. table <director> const { 192.168.10.1, 192.168.10.2, 192.168.10.4, \
  50.     192.168.10.10, 192.168.10.23, 192.168.10.29, 192.168.10.31, \
  51.     192.168.10.45, 192.168.10.66, 192.168.10.69, 192.168.10.70, \
  52.     192.168.10.72, 192.168.10.80, 192.168.10.95, 192.168.10.100 }
  53. # Таблица IP адресов надёжных DNS серверов
  54. table <trust_dns> const { 8.8.8.8, 8.8.4.4, \
  55.     2001:4860:4860::8888, 2001:4860:4860::8844, \
  56.     208.67.222.222, 208.67.220.220, \
  57.     2620:0:ccc::2, 2620:0:ccd::2, \
  58.     77.88.8.8, 77.88.8.1, \
  59.     2a02:6b8::feed:0ff, 2a02:6b8:0:1::feed:0ff, \
  60.     77.88.8.88, 77.88.8.2, \
  61.     2a02:6b8::feed:bad, 2a02:6b8:0:1::feed:bad, \
  62.     77.88.8.7, 77.88.8.3, \
  63.     2a02:6b8::feed:a11, 2a02:6b8:0:1::feed:a11, \
  64.     199.85.126.10, 199.85.127.10, \
  65.     199.85.126.20, 199.85.127.20, \
  66.     199.85.126.30, 199.85.127.30, \
  67.     193.58.251.251, 156.154.70.1, \
  68.     156.154.71.1, 91.204.184.3, \
  69.     62.122.48.1, ::1 }
  70. # Таблицы для демона spamd
  71. table <spamd-white> persist
  72. table <spamd-greytrap> persist
  73. table <nospamd> persist file "/etc/pf-nospamd"
  74. table <pf-block> persist file "/etc/pf-block"
  75. # Таблицы для authpf
  76. table <authpf_users> persist
  77. # Таблица для нарушителей
  78. table <inet_lock> persist
  79. table <ipv6_lock> persist
  80. # Таблица для превысивших лимит по объему трафика
  81. table <over_limit> persist
  82.  
  83. ################## СЕКЦИЯ: ГЛОБАЛЬНЫЕ НАСТРОЙКИ PF ##################
  84. # Нормализуем трафик
  85. # Для PPPoE: match in all scrub (no-df max-mss 1440)
  86. # для остальных случаев: match in all scrub (no-df)
  87. match in all scrub (no-df)
  88. set reassemble yes
  89. set state-defaults pflow
  90. set block-policy return
  91. set skip on { lo, pflog0, pflow0, pflow1 }
  92. set fingerprints "/etc/pf.os"
  93.  
  94. ################## СЕКЦИЯ: ОЧЕРЕДИ ALTQ (QUEUES) ##################
  95. # Исходящий трафик $ext_if2 (является входящим для абонентов локальной сети)
  96. # Формируем очередь на интерфейсе $ext_if2
  97. #   1. обязательная очередь: default
  98. #   2. пользовательская очередь со включенным random early detection
  99. altq on $ext_if2 cbq bandwidth 99Mb queue { std_out, inet_out }
  100. queue std_out bandwidth 98Mb cbq (default)
  101. queue inet_out bandwidth 1Mb cbq { fast_out, slow_out }
  102.     queue fast_out bandwidth 984Kb cbq (red)
  103.     queue slow_out bandwidth 16Kb cbq (red)
  104.  
  105. ################## СЕКЦИЯ: ПРАВИЛА ##################
  106. ### Раздел 1. Правила блокировки по-умолчанию
  107. block log (all) all
  108. # Блокируем приватные сети
  109. block in log quick on $ext_if1 from <local_nets> to any
  110. block in log quick on $ext_if2 from <local_nets> to any
  111. # Антиспуфинг
  112. # на $inet_if его не применяем!
  113. antispoof log quick for lo0
  114. antispoof log quick for ( $int_if )
  115. antispoof log quick for ( $ext_if1 )
  116. antispoof log quick for ( $ext_if2 )
  117. antispoof log quick for ( $vpn_if )
  118. antispoof log quick for ( $ipv6_if )
  119. # Блокируем некоторые ОС (OSFP)
  120. block in log quick proto tcp from any os NMAP
  121. block in log quick proto tcp from any os NAST
  122. # Дополнительная защита от спуфинга (Unicast Reverse Path Forwarding проверка)
  123. #block in log quick from urpf-failed to any
  124. block in log quick from no-route to any
  125. # Блокируем ранее найденных нарушителей
  126. block in log quick from <inet_lock> to any
  127. block in log quick from <ipv6_lock> to any
  128. # By default, do not permit remote connections to X11
  129. block in log quick on ! lo0 proto tcp to port 6000:6010
  130. # Блокируем альтернативные DNS, исключив фильтрующий сервер
  131. pass in quick proto udp from 192.168.10.10 to <trust_dns> port domain
  132. block in log quick proto { tcp, udp } from ( $int_if:network ) to ! ( $int_if ) port domain
  133. # Блокируем порты Mail.RU Agent
  134. block in log quick proto { tcp, udp } from ! <director> \
  135.     to ! ( $int_if ) port { 2041, 2042 }
  136. # Блокируем сайты (соц. сети и прочее)
  137. block in log quick from ! <director> to <pf-block>
  138. # Блокируем трафик на защищенные порты от уволенных сотрудников
  139. block in log quick proto { tcp, udp } from \
  140.     { 192.168.10.25, 192.168.10.34, \
  141.     192.168.10.39, 192.168.10.47, \
  142.     192.168.10.58, 192.168.10.107 } \
  143.     to ! ( $int_if ) port { ssh, ftp, smtp, pop3, 81, imap, \
  144.     https, smtps, imaps, pop3s, 3389, 4899, 5190, 7777, 9443 }
  145. # Полная блокировка отдельных пользователей
  146. #block in log quick from { 192.168.10.113 } to ! ( $int_if:network )
  147. # Частичная блокировка для превысивших лимит по объему трафика
  148. block in log quick proto tcp from <over_limit> \
  149.     to ! ( $int_if:network ) port { 1:79, 82:442, 444:65535 }
  150. # Полная блокировка протокола UDP для превысивших лимит по объему трафика
  151. block in log quick proto udp from <over_limit> \
  152.     to ! ( $int_if:network )
  153.  
  154. ### Раздел 2. Якоря
  155. # Якорь для правил ftp-proxy
  156. anchor "ftp-proxy/*"
  157. # Якорь для правил tftp-proxy
  158. anchor "tftp-proxy/*"
  159. # Якорь для правил relayd
  160. anchor "relayd/*"
  161. # Якорь для правил authpf
  162. anchor "authpf/*"
  163.  
  164. ### Раздел 3. Общие правила для некоторых протоколов
  165. # IGMP протокол
  166. pass in proto igmp allow-opts
  167. # ICMP протокол
  168. pass in inet proto icmp
  169.  
  170. ### Раздел 4. Правила прохождения сетевых пакетов - входящее направление
  171. ########## Интерфейс $int_if ##########
  172. # Обрабатываем входящие TCP соединения для интерфейса $int_if
  173. pass in quick on $int_if from ( $int_if:network ) to ( $int_if )
  174.  
  175. # Выпускаем превысивших лимит во внешнюю сеть через наиболее медленный канал и
  176. # помечаем их трафик для дальнейшего ограничения по скорости
  177. pass in quick on $int_if proto tcp from <over_limit> to \
  178.     any port { https } \
  179.     route-to ($ext_if2 $ext_gw2) tag slowuser
  180.  
  181. # Выполняем load-balance для исходящего трафика пользователей с ограничением по портам
  182. pass in on $int_if proto tcp from ( $int_if:network ) to \
  183.     any port { >49151 } \
  184.     route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
  185.  
  186. # Выполняем load-balance для исходящего трафика диапазона DHCP
  187. pass in on $int_if from { 192.168.10.120 - 192.168.10.160 } \
  188.     route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
  189.  
  190. # Привязываем трафик пользователей к основному каналу провайдера
  191. pass in on $int_if proto tcp from ( $int_if:network ) to port { smtp, 81, \
  192.     pop3, ntp, https, imap, smtps, imaps, pop3s, 5190, 7777, 9443 } route-to ($ext_if1 $ext_gw1)
  193.  
  194. # Привязываем весь трафик привелигированных пользователей к основному каналу провайдера
  195. pass in on $int_if from <director> to any route-to ($ext_if1 $ext_gw1)
  196.  
  197. # Выполняем load-balance для исходящего трафика привелигированных пользователей
  198. pass in on $int_if from { 192.168.10.10, 192.168.10.95 } \
  199.     route-to { ($ext_if1 $ext_gw1) weight 1, ($ext_if2 $ext_gw2) weight 3 } round-robin
  200.  
  201. # Привязываем особый трафик привелигированных пользователей к основному каналу провайдера
  202. pass in on $int_if proto { tcp, udp } from { 192.168.10.10, 192.168.10.95 } to port { ssh, telnet, \
  203.     smtp, pop3, ntp, https, imap, smtps, imaps, pop3s, 1194, 3389, \
  204.     4899, 5060, 5190, 7777, 8080, 9443 } route-to ($ext_if1 $ext_gw1)
  205.  
  206. # RDR для $int_if
  207. # Выполняем редирект для демона CUPS
  208. pass in on $int_if proto tcp from ( $int_if:network ) \
  209.     to ( $int_if ) port ipp rdr-to ( lo0 ) port ipp
  210.  
  211. # Выполняем редирект порта ftp на демон ftp-proxy, учитывая исключения
  212. pass in on $int_if inet proto tcp from ( $int_if:network ) \
  213.     to ! <no_rdr> port ftp divert-to 127.0.0.1 port 8021
  214. pass in on $int_if inet6 proto tcp from ( $int_if:network ) \
  215.     to ! <no_rdr> port ftp divert-to ::1 port 8021
  216.  
  217. # Выполняем редирект порта tftp на демон tftp-proxy, учитывая исключения
  218. pass in quick on $int_if inet proto udp from ( $int_if:network ) \
  219.     to ! <no_rdr> port tftp divert-to 127.0.0.1 port 6969
  220. pass in quick on $int_if inet6 proto udp from ( $int_if:network ) \
  221.     to ! <no_rdr> port tftp divert-to ::1 port 6969
  222.  
  223. # Выполняем редирект порта WWW на демон Squid, учитывая исключения
  224. pass in on $int_if inet proto tcp from ! <no_squid_rdr> \
  225.     to ! <no_rdr> port www divert-to 127.0.0.1 port 3127
  226.  
  227. #pass in on $int_if dup-to (age0 192.168.9.10)
  228. ########## Интерфейс $int_if ##########
  229.  
  230. ########## Интерфейс $vpn_if ###########
  231. # Обрабатываем входящие TCP соединения для интерфейса $vpn_if
  232. pass in on $vpn_if from $vpn_network
  233. ########## Интерфейс $vpn_if ###########
  234.  
  235. ########## Интерфейс $ipv6_if ##########
  236. ### ICMP6 протокол ###
  237. pass in on $ipv6_if inet6 proto ipv6-icmp
  238.  
  239. # Обрабатываем входящие TCP соединения для интерфейса $ipv6_if
  240. pass in on $ipv6_if inet6 proto udp from any to ( $ipv6_if ) port $ipv6_if_udp_services \
  241.     keep state
  242. pass in on $ipv6_if inet6 proto tcp from any to ( $ipv6_if ) port $ipv6_if_tcp_services \
  243.     keep state (max-src-conn-rate 50/20, overload <ipv6_lock> flush global)
  244. pass in on $ipv6_if inet6 proto tcp from any to ( $ipv6_if ) port $ipv6_if_tcp_red_services \
  245.     keep state (max-src-conn-rate 10/60, overload <ipv6_lock> flush global)
  246.  
  247. # Обрабатываем входящие TCP соединения для Web сервера
  248. pass in on $ipv6_if inet6 proto tcp from any to ( $ipv6_if ) \
  249.     port { www, https } keep state \
  250.     (max 100, source-track rule, max-src-nodes 75, \
  251.     max-src-states 30, tcp.established 60, tcp.closing 5)
  252.  
  253. # Выполняем редирект ("проброс") портов для демона spamd
  254. pass in on $ipv6_if proto tcp from any to ( $ipv6_if ) port smtp \
  255.     rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  256. pass in on $ipv6_if proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
  257.     to ( $ipv6_if ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  258. ########## Интерфейс $ipv6_if ##########
  259.  
  260. ########## Интерфейс $ext_if1 ##########
  261. ### ГЛОБАЛЬНЫЕ СЕРВИСЫ - PASS
  262. # Обрабатываем входящие TCP соединения для интерфейса $ext_if1
  263. pass in on $ext_if1 proto udp from any to ( $ext_if1 ) port $ext_if1_udp_services \
  264.     keep state
  265. pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port $ext_if1_tcp_services \
  266.     keep state (max-src-conn-rate 500/20, overload <inet_lock> flush global)
  267. pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port $ext_if1_tcp_red_services \
  268.     keep state (max-src-conn-rate 10/60, overload <inet_lock> flush global)
  269.  
  270. # Обрабатываем входящие TCP соединения для Web сервера
  271. pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) \
  272.     port { www, https } keep state \
  273.     (max 100, source-track rule, max-src-nodes 75, \
  274.     max-src-states 30, tcp.established 60, tcp.closing 5)
  275.  
  276. # Выполняем редирект ("проброс") портов для демона spamd
  277. pass in on $ext_if1 proto tcp from any to ( $ext_if1 ) port smtp \
  278.     rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  279. pass in on $ext_if1 proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
  280.     to ( $ext_if1 ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  281.  
  282. # RDR для $ext_if1 (Интернет <-> компьютер внутри доверенной сети)
  283. pass in on $ext_if1 inet proto tcp from any to ( $ext_if1 ) port ftp divert-to 127.0.0.1 port 8011
  284. ########## Интерфейс $ext_if1 ##########
  285.  
  286. ########## Интерфейс $ext_if2 ##########
  287. ### ГЛОБАЛЬНЫЕ СЕРВИСЫ - PASS
  288. # Обрабатываем входящие TCP соединения для интерфейса $ext_if2
  289. pass in on $ext_if2 proto udp from any to ( $ext_if2 ) port $ext_if1_udp_services \
  290.     keep state
  291. pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port $ext_if1_tcp_services \
  292.     keep state (max-src-conn-rate 500/20, overload <inet_lock> flush global)
  293. pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port $ext_if1_tcp_red_services \
  294.     keep state (max-src-conn-rate 10/60, overload <inet_lock> flush global)
  295.  
  296. # Обрабатываем входящие TCP соединения для Web сервера
  297. pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) \
  298.     port { www, https } keep state \
  299.     (max 100, source-track rule, max-src-nodes 75, \
  300.     max-src-states 30, tcp.established 60, tcp.closing 5)
  301.  
  302. # Выполняем редирект ("проброс") портов для демона spamd
  303. pass in on $ext_if2 proto tcp from any to ( $ext_if2 ) port smtp \
  304.     rdr-to ( lo0 ) port spamd keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  305. pass in on $ext_if2 proto tcp from { <spamd-white>, <spamd-bypass>, <authpf_users>, <nospamd> } \
  306.     to ( $ext_if2 ) port smtp rdr-to ( lo0 ) port smtp keep state (max-src-conn-rate 50/20, overload <inet_lock> flush global)
  307.  
  308. # RDR для $ext_if2 (Интернет <-> компьютер внутри доверенной сети)
  309. pass in on $ext_if2 inet proto tcp from any to ( $ext_if2 ) port ftp divert-to 127.0.0.1 port 8011
  310. ########## Интерфейс $ext_if2 ##########
  311.  
  312. ### Раздел 5. "Широкий" RDR (Интернет, локальная сеть провайдера <-> компьютер внутри доверенной сети)
  313. # RDR для $ext_if1, $ext_if2
  314. # Выполняем редирект для ICQ, Skype, Torrent, DC++
  315. #pass in on $ext_if1 proto { tcp, udp } from any to ( $ext_if1 ) port imap rdr-to 192.168.10.95 port imap
  316. #pass in on $ext_if2 proto { tcp, udp } from any to ( $ext_if2 ) port imap rdr-to 192.168.10.95 port imap
  317. 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
  318. 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
  319.  
  320. ### Раздел 6. Преобразование сетевых адресов (Network Address Translation)
  321. match out on $ext_if1 from ( $int_if:network ) nat-to ($ext_if1)
  322. match out on $ext_if2 from ( $int_if:network ) nat-to ($ext_if2)
  323.  
  324. ### Раздел 7. Правила прохождения сетевых пакетов - исходящее направление
  325. # Разрешаем все на выход
  326. pass out
  327.  
  328. # Выполняем маршрутизацию сетевых пакетов для интерфейсов $ext_if1, $ext_if2
  329. # Перенаправляем трафик стремящийся выйти не через свой канал в соответствующий шлюз
  330. pass out on $ext_if1 from $ext_if2 route-to ($ext_if2 $ext_gw2)
  331. pass out on $ext_if2 from $ext_if1 route-to ($ext_if1 $ext_gw1)
  332.  
  333. # Выполняем ограничение скорости для пользователей превысивших лимит
  334. pass out on $ext_if2 inet proto tcp tagged slowuser queue slow_out
  335.  
  336. ### СПРАВКА ###
  337. # Приватные сети RFC 5735 (http://tools.ietf.org/html/rfc5735)
  338. #   { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, \
  339. #   172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, \
  340. #   192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, \
  341. #   198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, \
  342. #   240.0.0.0/4, 255.255.255.255/32 }
  343.  
  344. ### Конец
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement