Portknocking mit NAT,PF und Jails

Daroo

Member
Hallo,

ich habe ein FreeBSD 9.1 amd64 System, mit mehreren Jails.
Die Jails haben alle(bis auf eine Ausnahme, aber unwichtig) eine interne
Adresse á la 10.0.0.X (also Adressraum 10.0.0.0/32).

NAT betreibe ich über PF mit folgenden Regeln:
Code:
### MAKROS ###
## Interfaces
if = "{ lo0, re0 }"

## Jail settings
#jails = "{ 10.0.0.0/32 }"
jmysql_tcp = "{ 1801 3306 }"
jmysql_udp = "{ 1801 3306 }"
jwww_tcp = "{ 1803 80 }"
jwww_udp = "{ 1803 80 }"

## Settings
ext_ip = 93.190.140.113
ssh_ports = "{ 1801 1803 1888 }"
jmysql = 10.0.0.1
jwww = 10.0.0.3
set block-policy drop

## Open tcp & udp ports
tcp_pass = "{ 80 3306 }"
udp_pass = "{ 80 3306 }"
icmp_types = "echoreq"

## Normalisation
scrub in all
# MySQL
rdr pass on re0 proto tcp from any to re0 port $jmysql_tcp -> $jmysql
rdr pass on re0 proto udp from any to re0 port $jmysql_udp -> $jmysql
nat on $if proto {tcp udp icmp} from $jmysql to any -> $ext_ip
# www
rdr pass on re0 proto tcp from any to re0 port $jwww_tcp -> $jwww
rdr pass on re0 proto udp from any to re0 port $jwww_udp -> $jwww
nat on $if proto {tcp udp icmp} from $jwww to any -> $ext_ip

antispoof for $if

### TABLES ###
table <intranet>   { 127.0.0.1 10.0.0.0/32 }
table <ssh_allowed> persist
table <bruteforce> persist

### RULES ###
set skip on lo0
block all
block quick from <bruteforce>
pass in quick from <intranet> to any keep state
pass in on $if proto {tcp udp} from <ssh_allowed> to any port $ssh_ports keep state
pass in on $if proto tcp from any to any port $tcp_pass flags S/SA keep state (max-src-conn 100, max-src-conn-rate 15/5, overload <bruteforce> flush global)
pass in on $if proto udp to any port $udp_pass keep state
pass out quick all keep state

## Ping
pass in on $if inet proto icmp all icmp-type $icmp_types keep state

## Traceroute
pass in on $if inet proto udp from any to any port 33433 >< 33626 keep state

Die Jails haben für SSH die Ports 1801 und 1803. 1888 ist der SSH Port vom Mainsystem.

So, jetzt funktioniert auch alles einwandfrei- bis ich die Regeln für Portknocking umbauen wollte. Dabei ist mir aufgefallen, dass die Anfragen die per rdr weitergeleitet werden, nicht gefiltert werden, also nicht den Filterteil durchlaufen(also wie eine quick-Anweisung).
Und wenn ich die rdr-Anweisungen in den Filterteil schreibe, gibt es einen Fehler wegen der Reihenfolge.
Da es jedoch für Portknocking essentiel ist, dass der SSH-Port geschlossen ist, suche ich schon seit Stunden nach einer Lösung.

Also kurz, meine Frage lautet:
Wie kann ich via PF NAT mit rdr Anweisungen betreiben, und trotzdem dafür sorgen, dass die Anfrangen an die Jails gefiltert werden?

Grüße
Daroo
 
Wie wäre es damit Kinderkram wie Portknocking einfach nicht zu verwenden? Sollte dir das Rauschen auf Port 22 zu lästig sein nimm halt einen anderen.
 
Das ist ja nicht das eigentliche Problem; das eigentliche Problem ist dass
die Filterregeln nicht auf die Jails angewandt werden- was sehr problematisch
ist, da ich alles über Jails laufen lasse da mehrere Nutzer am Server arbeiten
(ist eine Workstation mit 32GB RAM, da laufen halt einige Dienste etc. )
 
Was heißt denn "nicht auf die Jails angewendet werden"? Traffic zwischen jails und zwischen jails und host geht über lo0, darauf skipst du.
Außerdem meine ich mich zu erinnern, dass rdr pass eigentlich ein pass quick ist. Also werden auf diese Regel danach keine anderen mehr angewandt.
 
Zurück
Oben