Hello all. I've asked a month ago if it's possible to tag an incoming connection and keep the tag also after redirect to an other device with pf. The answer was no.
I thought about a way to restrict an openvpn connection based on the ip the connection was initiated. Now I found a way I would like to show. I hope it's not wasted bandwidth. OpenVPN produce a status file like the following ---------------------------------------------------- 10.8.0.6,test.brandwand.domain,12.12.12.12:62140,Thu Jan 5 17:45:20 2006 10.8.0.14,world.brandwand.domain,11.11.11.11:60646,Thu Jan 5 17:05:48 2006 ---------------------------------------------------- I read this file with a little script and set an anchor for every connection. After setting the active connections there should also be a step to reset or flush anchors they are no longer exists. The script isn't finish, it'll be the next time. You need in pf.conf with an anchor like anchor "openvpn/*" If there are any comments, they are welcome. Regards Karl-Heinz # --------------------------------------- # Wild Karl-Heinz (c) 2006-1-5 # Use it without any restrictions # --------------------------------------- Rules = { "test.brandwand.domain" => [ %q{pass in log quick on tun proto { tcp, udp } from %IP% to 1.1.1.1 flags S/SA tag RDR%IP% keep state pass out log quick on int_if tagged RDR%IP%}, ], "world.brandwand.domain" => [ %q{pass in log quick on tun proto { tcp, udp } from %IP% to 1.1.1.1 flags S/SA tag RDR%IP% keep state} ] } data = File.open( 'log.txt', 'r' ) { | io | io.grep( /^[0-9]+/ ) { | l | d = l.chomp.split( ',' ) } } s = '' data.each { | ary | s = 'anchor openvpn/' + ary[ 1 ].gsub( '.', '' ) + "\n" s << Rules[ ary[ 1 ] ].to_s.gsub( '%IP%', ary[ 0 ] ) puts s }