۱. فعالسازی
sysrc pf_enable="YES"
sysrc pflog_enable="YES"۲. قانوننامه
vi /etc/pf.confext_if = "vtnet0"
admin_net = "{ 192.168.10.0/24 }"
tcp_services = "{ 80, 443 }"
table <bruteforce> persist
set skip on lo0
scrub in all
block in log all
block quick from <bruteforce>
pass out all keep state
pass in on $ext_if proto tcp from $admin_net to port 22 \
flags S/SA keep state (max-src-conn 10, max-src-conn-rate 5/30, overload <bruteforce> flush global)
pass in on $ext_if proto tcp to port $tcp_services keep state
pass in inet proto icmp icmp-type { echoreq, unreach }هر IP که بیش از ۵ اتصال SSH در ۳۰ ثانیه برقرار کند، به جدول bruteforce اضافه و مسدود میشود.
۳. بررسی و اعمال
pfctl -nf /etc/pf.conf # فقط بررسی نحوی
service pf start
pfctl -sr # قوانین فعالاگر از راه دور وصل هستید، پیش از اعمال یک برگشت خودکار بگذارید تا اشتباه احتمالی دسترسی شما را برای همیشه قطع نکند:
(sleep 120 && pfctl -d) &
pfctl -f /etc/pf.confاگر اتصال برقرار ماند، فرایند پسزمینه را با kill %1 متوقف کنید.
۴. مدیریت جدول مسدودها
pfctl -t bruteforce -T show
pfctl -t bruteforce -T delete 203.0.113.25
pfctl -t bruteforce -T expire 86400 # حذف ورودیهای قدیمیتر از یک روز۵. مشاهدهی بستههای رد شده
tcpdump -n -e -ttt -i pflog0