ruder
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
Hallo zusammen, ich verwende einige Ubuntu Server Boxen als VPN-Zugänge mit wireguard.
(bin auch gerne bereit das Gesamtergebnis, wenn alles funktioniert, hier zu posten.)
Jetzt bin ich dabei diese zu Härten.
Dazu verwende ich unter anderem natürlich nftables. Funktioniert alles wunderbar , bis auf das Natten. bisher habe ich das über die wireguard config (wg0.conf) gemacht
| [Interface]
Address = 10.200.200.1/24
SaveConfig = true
PrivateKey = <server_private_key>
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
meine aktuelle nftables config (nftables.conf) schaut so aus
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | #!/usr/sbin/nft -f
flush ruleset
table inet firewall {
chain inbound_ipv4 {
icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem, echo-request } accept
}
chain inbound_ipv6 {
icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
}
chain inbound {
type filter hook input priority 0; policy drop;
ct state vmap { established: accept, related: accept, invalid: drop }
iifname lo accept
meta protocol vmap { ip: jump inbound_ipv4, ip6: jump inbound_ipv6 }
tcp dport { 22 } accept
udp dport { 51820 } accept
}
chain forward {
type filter hook forward priority 0; policy accept;
}
}
|
Die Crux ist jetzt natürlich, das spätestens durch "flush ruleset" die PostUp, bzw. PostDown Statements in der wireguard config nicht mehr gelten.
Es müssen also beide ('legacy') iptables Statements in die nftables.conf eingebunden werden. Nur wie, ist die Frage? Es muß für dieses Interface (wg0) so genattet werden, dass man auf das gesamte Netzwerk zugreifen kann (Admin, Wartung).
In einem zweiten Schritt wird ein weiteres Interface geben (wg1), mit dem 'gezielt' genattet wird (Serveradresse(n):Port(s)), für die Remote User; aber das ist Zukunft. Könnt ihr mir mit dem Einbinden der PostUp, bzw. PostDown Statements in die nftables config helfen? Vielen Dank ruder
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: bisher habe ich das über die wireguard config (wg0.conf) gemacht
Bei einem Server könntest Du ja auch systemd benutzen, auf die wg0.conf verzichten und z. B. solche Dateien:
:~# ls -la /etc/systemd/network | grep -i wg0
-rw-r----- 1 root systemd-network 1869 Dec 14 16:29 wg0.netdev
-rw-r--r-- 1 root root 296 Sep 10 10:18 wg0.network
für die Konfiguration von WireGuard benutzen. Dann kann man in der "/etc/systemd/network/wg0.network"-Datei in der [Network]-Section zum Natten diese Zeile:
IPMasquerade=yes
eintragen und mal schauen was das aktuelle systemd zur Umsetzung so benutzt. Das aktuelle nftables oder noch das iptables-legacy. 😉
|
ruder
(Themenstarter)
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
Vielen Dank lubux, ich möchte das ganze über die nftables.conf regeln; die PostUp, PostDown Statements verschwinden dann natürlich aus der wg0.conf. Also ich suche wirklich nach den nftables.conf Einträgen. Liebe Grüße
ruder
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: ich möchte das ganze über die nftables.conf regeln; die PostUp, PostDown Statements verschwinden dann natürlich aus der wg0.conf.
Das habe ich schon verstanden und, dass die verschwinden, ist auch klar. Es geht ja nur darum, wie systemd das source-NAT (MASQUERADE) umsetzt. Wenn nftables (was ja richtig wäre) benutzt wird, kannst Du evtl. daraus was lernen. Du kannst danach systemd-networkd deaktivieren und die wg0.netdev- bzw. die wg0.network-Datei löschen und weiter für WireGuard, die "konventionelle" Konfiguration (mit wg0.conf) benutzen/machen. EDIT: BTW: Die systemd-Version 247 benutzt noch das "alte" iptables-legacy und nicht nftables. EDIT 2: Im Link https://log.kyaulabs.com/2020/03/wireguard_with_systemd_and_nftables findet man ein Beispiel ("table ip nat" und "chain postrouting") mit nftables-Regeln für WireGuard.
|
ruder
(Themenstarter)
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
EDIT 2: Im Link https://log.kyaulabs.com/2020/03/wireguard_with_systemd_and_nftables findet man ein Beispiel ("table ip nat" und "chain postrouting") mit nftables-Regeln für WireGuard.
Soweit ich das verstehe, geht es hier explizit um ein Port forwarding ... Und das ist eben genau das was ich gerade nicht suche. ruder schrieb:
... Es muß für dieses Interface (wg0) so genattet werden, dass man auf das gesamte Netzwerk zugreifen kann (Admin, Wartung).
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: Soweit ich das verstehe, geht es hier explizit um ein Port forwarding ...
Dann hast Du dir das Beispiel im Link, mit der "chain postrouting" nicht angeschaut? Z. B. das:
oifname "wg0" masquerade
oifname "eth0" masquerade
sollte doch gleichwertig sein mit:
iptables -t nat -I POSTROUTING 1 -o wg0 -j MASQUERADE
iptables -t nat -I POSTROUTING 2 -o eth0 -j MASQUERADE
, oder?
|
ruder
(Themenstarter)
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
Okay du meinst diese Beispiel, nehme ich an.
Das ist ja eine gute Grundlage. Nur nach meinem Verständnis wird nicht in das Netz 10.42.1.0/24 'genattet', sondern auf die Hosts 10.42.1.2 und 10.42.1.10 . 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iifname "ethO" tcp dport 23 counter dnat to 10.42.1.2;
iifname "ethO" tcp dport 80 counter dnat to 10.42.1.10;
iifname "ethO" tcp dport 443 counter dnat to 10.42.1.10;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "wgO" ip daddr 10.42.1.2 tcp dport 23 counter snat to 10.42.1.1;
oifname "wgO" ip daddr 10.42.1.10 tcp dport 80 counter snat to 10.42.1.1;
oifname "wgO" ip daddr 10.42.1.10 tcp dport 443 counter snat to 10.42.1.1;
oifname "ethO" masquerade
}
}
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: Nur nach meinem Verständnis wird nicht in das Netz 10.42.1.0/24 'genattet', sondern auf die Hosts 10.42.1.2 und 10.42.1.10 .
Das sind aber "spezielle" Regeln für source-NAT (die man evtl. auch als Beispiel benutzen kann), aber in deinem 1. Beitrag geht es doch um diese nat-iptables-Regel:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
aus der wg0.conf, oder? ... und das (fast) Gleichwertige in nftables, sollte:
oifname "eth0" masquerade
sein. Zusätzlich/Ergänzend musst Du dannn noch die erforderliche nftables-Syntax/Infrastruktur beachten/benutzen.
|
ruder
(Themenstarter)
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
lubux schrieb: sein. Zusätzlich/Ergänzend musst Du dannn noch die erforderliche nftables-Syntax/Infrastruktur beachten/benutzen.
Das Prinzip ist klar, es geht ja um die Syntax. Aber ich werde das jetzt weiter antesten. Auf jeden Fall soweit vielen Dank... Wenn jemand die Syntax parat haben sollte → wäre nett 😎 Liebe Grüße
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: Das Prinzip ist klar, es geht ja um die Syntax. Aber ich werde das jetzt weiter antesten.
Versuch mal mit:
sudo nano /etc/nftables.conf
Inhalt:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
}
chain forward {
type filter hook forward priority 0; policy accept;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "wg0" masquerade
oifname "eth0" masquerade
}
}
Nach dem speichern:
sudo systemctl enable nftables
sudo systemctl start nftables
systemctl status nftables
systemctl is-active nftables
systemctl is-enabled nftables
Wenn alles OK, dann rebooten und schauen ob die nftables-Regeln wirksam sind.
|
ruder
(Themenstarter)
Anmeldungsdatum: 20. Dezember 2008
Beiträge: 88
|
Okay dann mal gleich Applaus, hat vom Stand weg funktioniert ... kannst du mit noch kurz erzählen was die Statements "postrouting priority srcnat" genau machen? ansonsten die Frage in die Runde, hat jemand Interesse an der gesamten config, also installation und configuration von wireguard keys-only based SSH login introduction and configuration of automatic security updates introduction and configuration of fail2ban introduction and configuration of a firewall
Ich lass die Frage mal ein zwei Tage so stehen, bevor ich den thread als gelöst markiere. Und nochmal Danke lubux
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ruder schrieb: ... was die Statements "postrouting priority srcnat" genau machen?
BTW: Die manpage und das wiki können das besser, als ich. 😉 Siehe z. B. den Abschnitt "Priority within hook" in https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks und die Table 6 ("Standard priority names, family and hook compatibility matrix") in der manpage für nftables. Hinweis:
The ordering is ascending, i.e. lower priority values have precedence over higher ones.
Quelle: manpage nftables ruder schrieb: ansonsten die Frage in die Runde, hat jemand Interesse an der gesamten config, also
...
Ja, das mit der firewall, kannst Du m. E. mal hier zeigen.
|
ja
Anmeldungsdatum: 30. Juli 2022
Beiträge: 23
|
ruder schrieb:
ansonsten die Frage in die Runde, hat jemand Interesse an der gesamten config, also installation und configuration von wireguard keys-only based SSH login introduction and configuration of automatic security updates introduction and configuration of fail2ban introduction and configuration of a firewall
Ich hätte Interresse, habe mit wireguard und Nat Schwierigkeiten und könnte das nutzen damit auch Win Clients funktionieren. Genau das Szenario wäre für mich hochinterressant.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13293
|
ja schrieb: habe mit wireguard und Nat Schwierigkeiten und könnte das nutzen damit auch Win Clients funktionieren.
Wenn es mit WG-Win-Clients Probleme gibt, liegt es i. d. R. an der Win-Firewall bzw. an der Netz-Konfiguration in Win für das wg0-Ibterface.
|
ja
Anmeldungsdatum: 30. Juli 2022
Beiträge: 23
|
Vielen Dank für den Hinweis. Ich mache wenn ich einen neuen VServer aufsetze mit Pihole und Wireguard einen eigenen Thread auf.
|