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:
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
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