OpenBSD vServer Portmappingprobleme

mogbo

Banned
Hallo,
ich habe weder sonderliche Erfahrungen mit vServern, noch mit OpenBSD außerhalb von Laptops und Firewalls.

Habe gestern anhand von 2 Guides und eigenem Know_How ein Firewall-Script zusammengebaut und wollte es anschließend von außen mit:
Code:
nmap -Pn x.x.x.x
nmap -sS x.x.x.x
nmap -O x.x.x.x
testen, um zu sehen ob alles dementsprechend dicht ist.

Zu meinem leiden musste ich feststellen das immer nur ein Port angezeigt wird:
113 closed
(nach näherem Googeln liegt das wohl an der nat-Regel vom KVM-Host)

Zu meinem Setup und System:
Gestern frisch installiertes OpenBSD amd64 auf einem vServer mit KVM-Host
Anschließend installierte Software: zsh
Umsetzen vom sshd_config Port auf xxx.
Konfiguration von openntpd und /etc/pf.conf:

Code:
ext_if="{vio0}"

locals="{0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 \
  172.16.0.0/12 192.0.0.0/24 192.0.2.0/24 224.0.0.0/3 \
  192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 \
  203.0.113.0/24}"

ssh_port="{ xxx }"

set block-policy drop
set loginterface vio0
set skip on lo0

match in all scrub (no-df random-id max-mss 1440)

block in all

pass out quick on $ext_if inet keep state

antispoof quick for $ext_if inet

block return out quick inet6 all
block in quick inet6 all
block in quick from { $locals urpf-failed no-route } to any
block out quick on $ext_if from any to { $locals no-route }

table <childrens> persist
block in quick proto tcp from <childrens> to any

# Blocken spezieller IP-Listen
# table <chuugoku> persist file "/etc/cn.zone"
# block in quick proto tcp from <chuugoku> to any port $ssh_port

pass in on $ext_if proto tcp to any port $ssh_port flags S/SA keep state \
(max-src-conn 5, max-src-conn-rate 5/5, overload <childrens> flush)
pass inet proto icmp icmp-type echoreq

Nun zu den Fragen:
- Wie finde ich heraus, ob meine Firewall wirklich so läuft wie ich mir das wünsche (am liebsten via nmap)?
- Läuft bereits alles richtig und ich sehe nur das ssh-Port (xxx) aus mir unbekannten Gründen nicht?
 
Warum immer so kompliziert? In vielen Blogs findet man irgendwie zusammenkopierte Kopien von kopierten pf.conf-Dateien, die fast schon keinen Sinn mehr machen. :p

Ich weiß nicht, was Du auf dem OpenBSD-VPS vor hast, aber wenn ich beispielsweise einen Webserver einrichte, starte ich mit einer minimalen pf.conf:

Code:
set skip on lo0
block return log all
pass in on egress inet proto tcp from any to port { ssh http https }
pass out on egress inet all

Zeile 1&2: Blovckiere sämtlichen Traffic, aber nicht auf lo0
Zeile 3: Erlaube IPv4-Traffic auf die entsprechenden Ports (inet = IPv4 only, kein IPv6!)
Zeile 4: Erlaube IPv4-Traffic nach außen (aber keinen IPv6-Traffic)

Das ist eine minimale pf.conf, die "nebenbei" IPv6 blockiert und nur WWW und SSH zulässt. Wenn die läuft wie sie soll, baue ich nach und nach Erweiterungen ein und teste die dann jeweils einzeln.
 
...und ein kleiner Nachtrag (musste vorhin schnell weg) :

Selbst ohne das loginterface explizit zu setzen, kannst Du Dir live die blockierten Pakete anzeigen lassen. Wie pf die Regeln interpretiert und nummeriert(!), zeigt Dir
pfctl -vvnf /etc/pf.conf
Dann mit
tcpdump -eni pflog0
anzeigen lassen, was pf so alles nicht rein lässt. Nun kannst Du Deine nmaps auf den VPS loslassen... :) Und dann den ganzen Kram mit martians, chlidren, chuugoku und weiß-der-Kuckuck einbauen, jeweils ein "log" mit in die neue Regel einbauen und live mitverfolgen, obs klappt.

...oh, und bei solchen generischen Regelsätzen nehme ich gerne egress (Interface[gruppe] der Default-Route), weil das immer passt, man Variablen/Makros wie $ext="vio" aber manchmal anpassen muss, denn auf der nächsten Büchse ist das dann "em0" oder so. Auf Routern/Firewalls ist das natürlich anders.
 
Werds mir mal durch den Kopf gehen lassen, welche "Blocks" ich eventuell sinnvoller einbauen könnte, danke für die Tipps
 
Habs jetzt mal richtig durchgetestet:

nmap -Pn x.x.x.x
nmap -sS x.x.x.x
nmap -O x.x.x.x

ohne eine Port-Range anzugeben wird mein Port nicht gescannt (scannt im Standard wohl nur bestimmte Ports, evtl. alle Standardports).


set skip on lo0
block return log all
pass in on egress inet proto tcp from any to port { ssh http https }
pass out on egress inet all

Danke für diesen 4 Zeiler, meine pf.conf ist zwar etwas länger, aber dafür jetzt schön selbst gebaut, ohne einem Guide zu folgen (via tcpdump und nmap überprüft und nach Bedarf erweitert).
 
ohne eine Port-Range anzugeben wird mein Port nicht gescannt (scannt im Standard wohl nur bestimmte Ports, evtl. alle Standardports).
Genau, siehe https://nmap.org/book/man-port-specification.html
"By default, Nmap scans the most common 1,000 ports..."

Mit -p <port[-range]> scannst Du bestimmte Ports oder Bereiche:
nmap -Pn -p 22022 <IP>
nmap -Pn -p 6881-6889 <IP>


...und wenn ich mal wirklich mehr über einen Host wissen will:
nmap -sS -P0 -sV -A <IP>

-sS TCP SYN scanning (also known as half-open, or stealth scanning)

-P0 option allows you to switch off ICMP pings.

-sV option enables version detection
-A option enables both OS fingerprinting and version detection


 
Zurück
Oben