Конфиг PF для Web-сервера
Опубликовано пт, 08/26/2011 - 12:48 пользователем alex1812
Что такое pf и с чем его едят здесь я описывать не буду, приведу лишь рабочий конфиг для Web-сервера, если кому пригодиться - хорошо =)
### Макросы (определение интерфейсов и списков)
###Внешний интерфейс (предполагается что внутреннего интерфейса нет)
ext_if = "rl0"
###Типы разрешенных ICMP запросов (эхо-запрос, например traceroute и хост выключен)
icmp_types="{ echoreq, unreach }"
###Адреса с которых возможно подцепиться к серверу
admin="{10.10.100.20 , 10.10.100.30}"
### Весь входящий трафик подвергаем нормализации и дефрагментации
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 15000, frags 30000 }
set optimization normal
###Сбрасываем все соединения
set block-policy drop
###Указываем системе, где находится файл с определениями отпечатков (fingerprints)
###для различных операционных систем
set fingerprints "/etc/pf.os"
set require-order yes
###Интерфейс для логирования
set loginterface rl0
###Вычищаем входящий трафик
scrub in on $ext_if all fragment reassemble
### Блокируем все отовсюду с записью в лог
block log all
###Полностью пропускам проверку на петле
set skip on lo0
#Блокируем спуфинг (подмену IP-адреса) на внешнем интерфейсе
antispoof for $ext_if inet
### Блокируем пакеты не имеющие обратных маршрутов.
block in from no-route to any
### Блокируем пакеты не прошедшие проверку по таблице маршрутизации
block in from urpf-failed to any
### Блокируем броадкастовые пакеты
block in quick on $ext_if from any to 255.255.255.255
### Блокируем пакеты пришедшие с зарезервированных под частные сети диапазонов
###адресов
block in log quick on $ext_if from { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,
255.255.255.255/32 } to any
### Блокируем тех, кто хочет определить тип нашей операционной системы используя
###сканеры типа NMAP
### * F : FIN - Finish; end of session
### * S : SYN - Synchronize; indicates request to start session
### * R : RST - Reset; drop a connection
### * P : PUSH - Push; packet is sent immediately
### * A : ACK - Acknowledgement
### * U : URG - Urgent
### * E : ECE - Explicit Congestion Notification Echo
### * W : CWR - Congestion Window Reduced
block in quick on $ext_if proto tcp flags FUP/WEUAPRSF
block in quick on $ext_if proto tcp flags WEUAPRSF/WEUAPRSF
block in quick on $ext_if proto tcp flags SRAFU/WEUAPRSF
block in quick on $ext_if proto tcp flags /WEUAPRSF
block in quick on $ext_if proto tcp flags SR/SR
block in quick on $ext_if proto tcp flags SF/SF
### Пропускаем все пакеты (tcp и udp) от нашего сервера наружу
pass out on $ext_if proto { tcp, udp} from any to any modulate state
##Разрешаем ICMP только для нужных нам адресов (ибо нефик)
pass in log on $ext_if inet proto icmp from $admin to $ext_if icmp-type $icmp_types
### открываем ssh для нужных нам адресов (для администрирования) на
###нестандартном порту
pass in on $ext_if proto tcp from $admin to $ext_if port 2843 flags S/SA synproxy state
### Разрешаем http и https для доступа к нашему web-серверу.
pass in on $ext_if proto tcp from any to $ext_if port 80 flags S/SA synproxy state
pass in on $ext_if proto tcp from any to any port 443 flags S/SA synproxy state
### Разрещаем 110 и 25 (pop3 и smtp)порты для доступа к нашему почтовому серверу
pass in on $ext_if proto tcp from any to $ext_if port 110 flags S/SA synproxy state
pass in on $ext_if proto tcp from any to $ext_if port 25 flags S/SA synproxy state
#### Разрешаем соединяться с нашим FTP сервером
pass in on $ext_if proto tcp from any to $ext_if port {20,21,49152:65535}
flags S/SA synproxy state
### Разрешаем соединяться по SNMP с определнных адресов, для мониторинга
###состояния сервера
pass in inet proto udp from $home to $ext_if port {161,162} keep state
Немного справочной информации:
Управление pf -
# pfctl-e - запуск сервера
# pfctl-d - остановка сервера
# pfctl -f /etc/pf.conf загрузить pf.conf
# pfctl -nf /etc/pf.conf анализировать файл, но не загружать
# pfctl -Nf /etc/pf.conf загрузить только правила NAT из файла
# pfctl -Rf /etc/pf.conf загрузить только правила фильтрации
# pfctl -sn показать текущие правила NAT
# pfctl -sr показать текущие правила фильтрации
# pfctl -ss показать текущее состояние таблиц
# pfctl -si показать статистику правил и состояние счетчиков
# pfctl -sa показать все
Для полного списка команд смотрите man pfctl(8).
Просмотр логов pf -
tcpdump -n -e -ttt -r /var/log/pflog
Интересное на сайте:
(1 оценка)
Комментарии
### Блокируем тех, кто хочет
### Блокируем тех, кто хочет определить тип нашей операционной системы используя
###сканеры типа NMAP
я бы делал:
block in quick proto tcp flags FUP/WEUAPRSF
вместо
block in quick on $ext_if proto tcp flags FUP/WEUAPRSF
NAT
А где правило NAT?
А что Вы собрались "натить"
А что Вы собрались "натить" на веб-сервере?