Прошу помочь разобраться с PF фаерволлом на OS X, суть задачи, которую я себе поставил
1. блокирование траффика мимо заданных IP адресов (VPN сервера)
2. работа после перезагрузки через LaunchDaemons
Мои конфиги
/Library/LaunchDaemons/com.pf.customized.plist <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0">
<dict>
<key>Label</key>
<string>pf.customized.rules</string>
<key>Program</key>
<string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf/pf.customized.rules.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/var/log/pf.log</string>
<key>StandardOutPath</key>
<string>/var/log/pf.log</string>
</dict>
</plist>
Конфиг файл PF###############################
# PF Options #
###############################
# Don't alert source about dropped packets
set block-policy drop
# Configuring OS fingerprints
set fingerprints '/etc/pf.os'
# Disable PF for loopback interface
set skip on lo0
# Normalize and defragment
scrub in all
# Including TABLES
# include '/etc/pf/tables.conf'
table <vpn_servers> const {10.0.0.101,VPN IP 1,VPN IP 2,VPN IP 3}
table <vms> const {10.0.0.10,10.0.0.11,10.0.0.12}
###############################
# Policy #
###############################
# pass all
pass quick on en4 from <vms> to <vpn_servers> keep state
block on en4 from <vms> to !<vpn_servers>
#ICMP (ping)
pass out proto icmp from any to any
#DHCP
pass inet proto udp from port 68 to port 67
pass inet proto udp from port 67 to port 68
#DNS
pass out inet proto {tcp udp} from any to any port 53
Проблемы
1. После перезагрузки почему то правила не применяются
2. Есть ли более элегантное решение на уровне интерфейса ? Например, пропускать траффик только через VPN адаптер ?
3. Как быть с тем, что у меня модем Yota и он получает по DHCP каждый раз адрес, а если блокировать все, то он даже не может получить адрес