最終的な pf.conf の中身。
# Macros: define common values, so they can be referenced and changed easily.
ext_if="ng0" # replace with actual external interface name i.e., dc0
int_if="em0" # replace with actual internal interface name i.e., dc1
int_net="192.168.1.0/24"
www_srv="192.168.1.2"
# Tables: similar to macros, but more flexible for many addresses.
#NG IP address block
table const { 222.216.0.0/15 }
table const { 122.120.0.0/13 }
# Options: tune the behavior of pf, default values are given.
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 10000, frags 5000 }
set loginterface ng0
set optimization normal
set block-policy drop
#set require-order yes
#set fingerprints "/etc/pf.os"
# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in on $ext_if all fragment reassemble
scrub out on $ext_if all max-mss 1414
# Queueing: rule-based bandwidth control.
#altq on $ext_if bandwidth 2Mb cbq queue { dflt, developers, marketing }
#queue dflt bandwidth 5% cbq(default)
#queue developers bandwidth 80%
#queue marketing bandwidth 15%
# Translation: specify how addresses are to be mapped or redirected.
# nat: packets going out through $ext_if with source address $internal_net will
# get translated as coming from the address of $ext_if, a state is created for
# such packets, and incoming packets will be redirected to the internal address.
nat on $ext_if from $int_net to any -> ($ext_if)
# rdr: packets coming in on $ext_if with destination $external_addr:1234 will
# be redirected to 10.1.1.1:5678. A state is created for such packets, and
# outgoing packets will be translated as coming from the external address.
rdr on $ext_if inet proto tcp from any to any port 8080 -> $www_srv port 80
# rdr outgoing FTP requests to the ftp-proxy
#rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021
# spamd-setup puts addresses to be redirected into table .
#table persist
#no rdr on { lo0, lo1 } from any to any
#rdr inet proto tcp from to any port smtp -> 127.0.0.1 port 8025
# Filtering: the implicit first two rules are
#def. block all
block log all
#loop back & internal
pass quick on lo0 all
pass quick on $int_if all
#NG IP BLOCK
block log quick on $ext_if from { <ng_ip_cn>, <ng_ip_tw> } to any
#www
pass in quick on $ext_if proto tcp from any to $www_srv port 80 flags S/SA modulate state
#ICMP
pass in quick on $ext_if inet proto icmp all icmp-type echoreq keep state
#int -> ext
pass out quick on $ext_if proto { udp, tcp, icmp } from any to any keep state
前回とほとんどルールは変えてませんが、IPブロック単位で弾くフィルターを追加しました。
いまのところ、port 8080で執拗にアクセスしてくるところはこのへんなので。
port 80だったら、もっと大量にしてしてやらないとダメだろうな。
まぁ、しばらくこれで運用してみようと思う。
さて、次は負荷テストでもしようか。