Greetings all,

  I have very successfully been using OpenBSD 4.5 to manage both our
corporate firewall as well as the firewall in our production gaming
environment.  However recently I have been given the task from the home
office to do some basic regional IP blocking.  Great thinks I, I will
create a table and at the same time create an extra table for the IP's
of spammers and users whom we want to keep out of our game.



So in my pf.conf I created two tables:



table <blocked_ip> persist file "/etc/blocked_ip"

table <asian_ip> persist file "/etc/blocked_asian_ip"



blocked_ip is the table for the occasional user we want to boot, and
blocked_asian_ip is a list of ip nets in select asian countries that we
want to disallow.  Right now blocked_asian_ip is empty and blocked_ip
looks like this:



220.249.167.192

208.43.3.90

123.128.151.190

60.217.150.82

98.126.4.99

74.222.14.10

60.217.153.214

222.135.105.242

114.108.128.220

71.137.134.82

174.139.11.22

121.156.65.187

210.118.194.65



Nothing looks wrong so far to me.  So then I added a block in quick rule
in my pf.conf to blackhole these tables of ip's.  Here is my complete
pf.conf:



# macros

ext_if="vlan2"

int_if="vlan5"

slbnet_if="vlan3"

adminnet_if="vlan4"



# service groups

priv_tcp_services="{ 8020 }"

sql_port="{ 1433 }"

rdp_services="{ 3389 }"

icmp_types="echoreq"

crm_ports="{80 443 8080}"



# These are IP's that are allowed full access

trusted_hosts="{24.16.115.5 203.238.151.208 203.238.151.216
203.238.151.210 203.238.151.217 67.18.69.66 222.110.172.248
76.121.252.154 71.121.162.98 98.117.116.77}"

payment_gateway="{66.211.168.126 217.22.128.136 217.22.128.227
207.46.232.182 128.30.52.170 128.30.52.38 128.30.52.51 128.30.52.52
128.30.52.53 128.30.52.54 128.30.52.166 128.30.52.168 216.167.121.109}"



# internal private hosts

ad1="10.1.0.10"

sql1="10.1.1.1"

sql2="10.1.1.2"

sql3="10.1.1.3"

sql4="10.1.1.4"

mirsrv1="10.3.2.1"

mirsrv2="10.3.2.2"

mirsrv3="10.3.2.3"

mirsrv4="10.3.2.4"

webbill="10.3.2.20"

webbillms="10.1.2.20"

billtest="10.3.2.21"

crm="10.1.2.21"

billadmin="10.3.2.22"

web1="10.3.1.1"

web2="10.3.1.2"

sql5="10.1.1.5"

web3="10.3.1.3"

monitor1="10.1.0.20"



# banned IP addresses

table <testgeoff> persist

table <blocked_ip> persist file "/etc/blocked_ip"

table <asian_ip> persist file "/etc/blocked_asian_ip"



# options

set block-policy return

set loginterface $ext_if



set skip on lo



# scrub

scrub in



# nat/rdr

nat on $ext_if from !($ext_if) -> ($ext_if:0)

nat on $slbnet_if from $trusted_hosts -> ($slbnet_if:0)

nat-anchor "ftp-proxy/*"

rdr-anchor "ftp-proxy/*"



rdr pass on $int_if proto tcp to port ftp -> 127.0.0.1 port 8021



# Temporary remote connections for RDP from the Korean offices

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4100
-> $sql1 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4101
-> $sql2 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4102
-> $sql3 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4103
-> $sql4 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4104
-> $mirsrv1 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4105
-> $mirsrv2 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4106
-> $mirsrv3 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4107
-> $mirsrv4 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4108
-> $webbill port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4109
-> $webbillms port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4110
-> $billtest port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4111
-> $crm port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4112
-> $billadmin port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4113
-> $web1 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4114
-> $web2 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4115
-> $sql5 port 3389

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 4116
-> $web3 port 3389



# Temporary remote connections for SQL from the Korean offices

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5100
-> $sql1 port 1433

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5101
-> $sql2 port 1433

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5102
-> $sql3 port 1433

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5103
-> $sql4 port 1433

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5104
-> $billtest port 1433

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.5 port 5105
-> $sql5 port 1433



# Redirects for the MIR game apps

rdr on $ext_if proto tcp from any to 66.150.173.6 port 7000 -> $mirsrv1

rdr on $ext_if proto tcp from any to 66.150.173.6 port 7100 -> $mirsrv4

rdr on $ext_if proto tcp from any to 66.150.173.6 port {7200 7201 7202
7203 7204 7205} -> $mirsrv4



rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.10 port 80 ->
$crm port 80

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.10 port 443
-> $crm port 443

rdr on $ext_if proto tcp from $trusted_hosts to 66.150.173.10 port 8080
-> $crm port 8080





# filter rules

block in log

block in log quick from <blocked_ip> to any

block in log quick from <asian_ip> to any

block in log quick from <testgeoff> to any



pass out keep state



anchor "ftp-proxy/*"

antispoof quick for { lo $int_if }



# Rules to pass in on the external interface for local services

pass in on $ext_if inet proto tcp from any to ($ext_if) port
$priv_tcp_services flags S/SA keep state



#

# Rules to pass in for rdr rules

#

pass in on $ext_if inet proto tcp from $trusted_hosts to $crm port
$crm_ports flags S/SA keep state

pass in on $ext_if inet proto tcp from $trusted_hosts to {$sql1 $sql2
$sql3 $sql4 $mirsrv1 $mirsrv2 $mirsrv3 $mirsrv4 $webbill $webbillms
$billtest $crm $billadmin $web1 $web2 $sql5 $web3} port 3389 keep state

pass in on $ext_if inet proto tcp from $trusted_hosts to {$sql1 $sql2
$sql3 $sql4 $billtest $sql5} port 1433 keep state

pass in on $ext_if inet proto {tcp udp} from any to $mirsrv1 port 7000
flags S/SA keep state

pass in on $ext_if inet proto {tcp udp} from any to $mirsrv4 port {7100
7200 7201 7202 7203 7204 7205} flags S/SA keep state



#

# Rules inbound for the slbnet

#

pass in on $slbnet_if from 10.3.0.0/16 to {$ad1 $monitor1} keep state

pass in on $slbnet_if inet proto tcp from 10.3.0.0/16 to {$sql1 $sql2
$sql3 $sql4 $sql5 $billtest} port $sql_port keep state

pass in on $slbnet_if inet proto {tcp udp} from 10.3.0.0/16 to
$webbillms port {21001 21011} keep state

pass in on $slbnet_if inet proto udp from $mirsrv3 to $sql2 port 10001
keep state

pass in on $slbnet_if inet proto tcp from $billtest to 192.168.16.46
port 1433 keep state



# Allow in certain ICMP traffic

pass in inet proto icmp all icmp-type $icmp_types keep state



# Allow traffic from the internal network to make any connection to the
outside world.

# this rule needs to be deleted in next change request as redundant

pass in on $int_if from 10.1.0.0/16 to 10.3.0.0/16 keep state

pass in quick on $int_if







However when I go to add an additional IP to the table, nothing happens.
I append the address to the blocked_ip file, then I issue "pfctl -f
/etc/pf.conf". I can see via tcpdump quite clearly that a given user, in
this case 114.108.128.220, is allowed in through the firewall.  And if I
test for the the IP:



sudo pfctl -t blocked_ip -T test 114.108.128.220

1/1 addresses match.



So what gives?  Do I need to do something additional to get it to reload
all the table information?



Thanks everyone.



Geoff Sweet

Operations Engineer

WeMade Entertainment USA.

Reply via email to