Wie erstelle/konfiguriere ich ein VPN nur mit SSH?

Wie erstelle/konfiguriere ich ein VPN nur mit SSH?

Hier ist das Problem, das ich zu lösen versuche. Es gibt einen Server („Remote-System“), auf den ich mich von meinem lokalen Computer aus per SSH einloggen kann, aber dieses Remote-System hat keine Internetverbindung. Ich möchte dem Remote-System über meinen lokalen Computer mit einem SSH-basierten VPN Zugriff auf das Internet gewähren. Wie erreiche ich das? Ich habe Folgendes versucht, was teilweise zu funktionieren scheint. Mit „teilweise funktionieren“ meine ich, dass Verbindungspakete (Sync-Pakete) an meinen lokalen Computer gesendet werden, aber keine Verbindung zum Internet hergestellt werden kann. Ich verwende tcpdump, um Pakete auf dem lokalen Computer zu erfassen. Auf dem lokalen Computer und dem Remote-System läuft CentOS 7.

Die Einrichtung- Hinweis: Die folgenden Befehle werden der Reihe nach ausgeführt. Die user@remote-Befehle werden auf dem Remote-Server ausgeführt und die user@local-Befehle auf dem lokalen Computer.

[Benutzer@Remote ~]$ IP-Adresse anzeigen
1: lo: mtu 65536 qdisc noqueue status UNBEKANNT
    Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 Bereich Host lo
       valid_lft für immer preferred_lft für immer
    inet6 ::1/128 Bereich Host
       valid_lft für immer preferred_lft für immer
2: eth0: mtu 1500 qdisc pfifo_fast Status UP qlen 1000
    Link/Äther AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 Bereich global dynamisch eth0
       valid_lft 1785 Sek. bevorzugt_lft 1785 Sek.
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 Bereich global noprefixroute dynamisch
       valid_lft 2591987 Sek. bevorzugt_lft 604787 Sek.
    inet6 ABCD::IIII:JJJJ:KKKK:LLLL/64 Bereichslink
       valid_lft für immer preferred_lft für immer
[Benutzer@lokal ~]$ IP-Adresse anzeigen
1: lo: mtu 65536 qdisc noqueue status UNBEKANNT
    Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 Bereich Host lo
       valid_lft für immer preferred_lft für immer
    inet6 ::1/128 Bereich Host
       valid_lft für immer preferred_lft für immer
2: eth0: mtu 1500 qdisc pfifo_fast Status UP qlen 1000
    Link/Äther AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 Bereich global dynamisch eth0
       valid_lft 1785 Sek. bevorzugt_lft 1785 Sek.
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 Bereich global noprefixroute dynamisch
       valid_lft 2591987 Sek. bevorzugt_lft 604787 Sek.
    inet6 ABCD::IIII:JJJJ:KKKK:LLLL/64 Bereichslink
       valid_lft für immer preferred_lft für immer

Erstellen Sie die tun0 Schnittstelle auf demFernbedienungSystem.

[Benutzer@Remote ~]$ sudo ip tuntap add tun0 mode tun
[Benutzer@Remote ~]$ IP-Adresse anzeigen
1: lo: mtu 65536 qdisc noqueue status UNBEKANNT
    Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 Bereich Host lo
       valid_lft für immer preferred_lft für immer
    inet6 ::1/128 Bereich Host
       valid_lft für immer preferred_lft für immer
2: eth0: mtu 1500 qdisc pfifo_fast Status UP qlen 1000
    Link/Äther AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 Bereich global dynamisch eth0
       valid_lft 1785 Sek. bevorzugt_lft 1785 Sek.
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 Bereich global noprefixroute dynamisch
       valid_lft 2591987 Sek. bevorzugt_lft 604787 Sek.
    inet6 ABCD::IIII:JJJJ:KKKK:LLLL/64 Bereichslink
       valid_lft für immer preferred_lft für immer
3: tun0: mtu 1500 qdisc Noop-Status DOWN qlen 500
    Link/keine

Erstellen Sie die tun0 Schnittstelle auf demlokalSystem.

[Benutzer@local ~]$ sudo ip tuntap add tun0 mode tun
[Benutzer@lokal ~]$ IP-Adresse anzeigen
1: lo: mtu 65536 qdisc noqueue status UNBEKANNT
    Link/Loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 Bereich Host lo
       valid_lft für immer preferred_lft für immer
    inet6 ::1/128 Bereich Host
       valid_lft für immer preferred_lft für immer
2: eth0: mtu 1500 qdisc pfifo_fast Status UP qlen 1000
    Link/Äther AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff
    inet AAA.BBB.CCC.DDD/24 brd AAA.BBB.CCC.255 Bereich global dynamisch eth0
       valid_lft 1785 Sek. bevorzugt_lft 1785 Sek.
    inet6 EEEE:FFFF:GGGG:HHHH:IIII:JJJJ:KKKK:LLLL/64 Bereich global noprefixroute dynamisch
       valid_lft 2591987 Sek. bevorzugt_lft 604787 Sek.
    inet6 ABCD::IIII:JJJJ:KKKK:LLLL/64 Bereichslink
       valid_lft für immer preferred_lft für immer
3: tun0: mtu 1500 qdisc Noop-Status DOWN qlen 500
    Link/keine

Weisen Sie tun0 eine IP-Adresse zu und starten Sie es:

[Benutzer@local ~]$ sudo ip addr add 10.0.2.1/30 dev tun0
[Benutzer@local ~]$ sudo ip link set dev tun0 up
[Benutzer@lokal ~]$ IP-Adresse show tun0
3: tun0: mtu 1500 qdisc pfifo_fast Status DOWN qlen 500
    Link/keine
    inet 10.0.2.1/30 Bereich global tun0
       valid_lft für immer preferred_lft für immer
[Benutzer@Remote ~]$ sudo ip addr add 10.0.2.2/30 dev tun0
[Benutzer@Remote ~]$ sudo ip link set dev tun0 up
[Benutzer@Remote ~]$ IP-Adresse show tun0
3: tun0: mtu 1500 qdisc pfifo_fast Status DOWN qlen 500
    Link/keine
    inet 10.0.2.2/30 Bereich global tun0
       valid_lft für immer preferred_lft für immer

Ändern Sie sshd_config sowohl auf dem Remote- als auch auf dem lokalen System, um Tunneling zu aktivieren:

[Benutzer@Remote ~]$ sudo grep PermitTunnel /etc/ssh/sshd_config
PermitTunnel Punkt-zu-Punkt
[Benutzer@local ~]$ sudo grep PermitTunnel /etc/ssh/sshd_config
PermitTunnel Punkt-zu-Punkt

Erstellen Sie den SSH-Tunnel:

[Benutzer@lokal ~]$ sudo ssh -f -w0:0 root@remote true
root@remotes Passwort:
[Benutzer@lokal ~]$ ps aux | grep root@remote
root 1851 0,0 0,0 76112 1348 ? Ss 23:12 0:00 ssh -f -w0:0 root@remote true

Testen Sie den Ping auf beiden Servern mit den neuen IP-Adressen:

[Benutzer@lokal ~]$ ping 10.0.2.2 -c 2
PING 10.0.2.2 (10.0.2.2) 56(84) Bytes Daten.
64 Bytes von 10.0.2.2: icmp_seq=1 ttl=64 Zeit=1,68 ms
64 Bytes von 10.0.2.2: icmp_seq=2 ttl=64 Zeit=0,861 ms

--- 10.0.2.2 Ping-Statistiken ---
2 Pakete gesendet, 2 empfangen, 0 % Paketverlust, Zeit 1002 ms
RTT min./Durchschnitt/max./mdev = 0,861/1,274/1,688/0,415 ms
[Benutzer@Remote ~]$ ping 10.0.2.1 -c 2
PING 10.0.2.1 (10.0.2.1) 56(84) Bytes Daten.
64 Bytes von 10.0.2.1: icmp_seq=1 ttl=64 Zeit=0,589 ms
64 Bytes von 10.0.2.1: icmp_seq=2 ttl=64 Zeit=0,889 ms

--- 10.0.2.1 Ping-Statistiken ---
2 Pakete gesendet, 2 empfangen, 0 % Paketverlust, Zeit 1000 ms
RTT min./avg./max./mdev. = 0,589/0,739/0,889/0,150 ms
[Benutzer@Remote ~]$ Route
Kernel-IP-Routing-Tabelle
Ziel-Gateway Genmask Flags Metrik Ref Verwendung Iface
Standard-Gateway 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0
AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
[Benutzer@Remote ~]$ IP-Route anzeigen
Standardmäßig über AAA.BBB.CCC.1 dev eth0 proto statische Metrik 100
10.0.2.0/30 dev tun0 proto Kernel Bereich Link src 10.0.2.2
AAA.BBB.CCC.0/24 dev eth0 proto Kernel Bereich Link src AAA.BBB.CCC.31 Metrik 100

Holen Sie sich Google-IP-Adressen:

[Benutzer@local ~]$ nslookup google.com
Server: Server
Adresse: Server#53

Nicht verbindliche Antwort:
Name: google.com
Adresse: 173.194.219.101
Name: google.com
Adresse: 173.194.219.100
Name: google.com
Adresse: 173.194.219.113
Name: google.com
Adresse: 173.194.219.102
Name: google.com
Adresse: 173.194.219.139
Name: google.com
Adresse: 173.194.219.138

WICHTIG: Ich habe den obigen Befehl zu einem anderen Zeitpunkt ausgeführt und ein anderes Ergebnis erhalten. Gehen Sie nicht davon aus, dass Ihre Antwort mit meiner für nslookup oben übereinstimmt.

Da alle IP-Adressen von Google mit 173.194.219 beginnen, leiten wir alle diese IP-Adressen über den lokalen Computer.

[Benutzer@Remote ~]$ sudo ip route add 173.194.219.0/24 dev tun0
[Benutzer@Remote ~]$ Route
Kernel-IP-Routing-Tabelle
Ziel-Gateway Genmask Flags Metrik Ref Verwendung Iface
Standard-Gateway 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0
AAA.BBB.CCC.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
173.194.219.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
[Benutzer@Remote ~]$ IP-Route anzeigen
Standardmäßig über AAA.BBB.CCC.1 dev eth0 proto statische Metrik 100
10.0.2.0/30 dev tun0 proto Kernel Bereich Link src 10.0.2.2
AAA.BBB.CCC.0/24 dev eth0 proto Kernel Bereich Link src AAA.BBB.CCC.31 Metrik 100
173.194.219.0/24 dev tun0 Bereichslink

Aktivieren Sie die IP-Weiterleitung:

[Benutzer@local ~]$ grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 1
[Benutzer@local ~]$ sudo service network restart
Netzwerk neu starten (über systemctl): [ OK ]

Richten Sie die Paketerfassung auf dem lokalen Computer mithilfe von tcpdump ein:

[Benutzer@local ~]$ sudo tcpdump -nn -vv 'Port nicht 22' -i any
tcpdump: lauscht auf jedem, Link-Typ LINUX_SLL (Linux-gekocht), Erfassungsgröße 65535 Bytes

Versuchen Sie, vom Remote-Server aus eine Verbindung zu Google herzustellen.

[Benutzer@Remote ~]$ openssl s_client -connect google.com:443
Socket: Keine Route zum Host
verbinden:errno=113

Sobald der OpenSSL-Befehl auf dem Remote-Server ausgeführt wird, erfasst der TCPdump einige Pakete:

    10.0.2.2.52768 > 173.194.219.102.443: Flags [S], cksum 0x8702 (korrekt), seq 994650730, win 29200, Optionen [mss 1460,sackOK,TS val 7701438 ecr 0,nop,wscale 7], Länge 0
00:49:33.247753 IP (tos 0x0, ttl 64, id 46037, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.48774 > 173.194.219.100.443: Flags [S], cksum 0x47a7 (korrekt), seq 2218733674, win 29200, Optionen [mss 1460,sackOK,TS val 7701439 ecr 0,nop,wscale 7], Länge 0
00:49:33.247883 IP (tos 0xc0, ttl 64, ID 9538, Offset 0, Flags [keine], Proto ICMP (1), Länge 88)
    10.0.2.1 > 10.0.2.2: ICMP-Host 173.194.219.100 nicht erreichbar – Administrator verboten, Länge 68
    IP (tos 0x0, ttl 63, ID 46037, Offset 0, Flags [DF], Proto TCP (6), Länge 60)
    10.0.2.2.48774 > 173.194.219.100.443: Flags [S], cksum 0x47a7 (korrekt), seq 2218733674, win 29200, Optionen [mss 1460,sackOK,TS val 7701439 ecr 0,nop,wscale 7], Länge 0
00:49:33.253068 IP (tos 0x0, ttl 64, id 26282, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.51312 > 173.194.219.101.443: Flags [S], cksum 0x6ff8 (korrekt), seq 2634016105, win 29200, Optionen [mss 1460,sackOK,TS val 7701443 ecr 0,nop,wscale 7], Länge 0
00:49:33.254771 IP (tos 0xc0, ttl 64, ID 9539, Offset 0, Flags [keine], Proto ICMP (1), Länge 88)
    10.0.2.1 > 10.0.2.2: ICMP-Host 173.194.219.101 nicht erreichbar – Administrator verboten, Länge 68
    IP (tos 0x0, ttl 63, id 26282, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.51312 > 173.194.219.101.443: Flags [S], cksum 0x6ff8 (korrekt), seq 2634016105, win 29200, Optionen [mss 1460,sackOK,TS val 7701443 ecr 0,nop,wscale 7], Länge 0
00:49:33.258805 IP (tos 0x0, ttl 64, id 9293, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.33686 > 173.194.219.139.443: Flags [S], cksum 0x542b (korrekt), seq 995927943, win 29200, Optionen [mss 1460,sackOK,TS val 7701450 ecr 0,nop,wscale 7], Länge 0
00:49:33.258845 IP (tos 0xc0, ttl 64, id 9540, offset 0, flags [keine], proto ICMP (1), länge 88)
    10.0.2.1 > 10.0.2.2: ICMP-Host 173.194.219.139 nicht erreichbar – Administrator verboten, Länge 68
    IP (tos 0x0, ttl 63, ID 9293, Offset 0, Flags [DF], Proto TCP (6), Länge 60)
    10.0.2.2.33686 > 173.194.219.139.443: Flags [S], cksum 0x542b (korrekt), seq 995927943, win 29200, Optionen [mss 1460,sackOK,TS val 7701450 ecr 0,nop,wscale 7], Länge 0
^C
13 Pakete erfasst
13 Pakete vom Filter empfangen
0 Pakete vom Kernel verworfen

Die mit tcpdump erfassten Pakete lassen darauf schließen, dass versucht wird, die Verbindung herzustellen (Sync-Pakete werden gesendet), aber nichts empfangen wird. Außerdem gibt es eine Meldung 10.0.2.1 > 10.0.2.2: ICMP host 173.194.219.139 unreachable - admin prohibited, length 68, die auf ein Problem hinzuweisen scheint.

Gibt es Vorschläge, wie man dieses Problem umgehen kann? Müssen iptable-Regeln hinzugefügt werden? Gibt es Firewall-Probleme (Firewall-D?).


Anmerkung 1
Ausgabe von iptables-save:

[Benutzer@local ~]$ sudo iptables -t nat -A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.1/30 -j MASQUERADE -o eth0
[Benutzer@local ~]$ sudo iptables-save
# Generiert von iptables-save v1.4.21 am Samstag, 15. April 2017, 01:40:57 Uhr
*nat
:PRE-ROUTING AKZEPTIEREN [35:8926]
:EINGABE AKZEPTIEREN [1:84]
:AUSGABE AKZEPTIEREN [6:439]
:POSTROUTING AKZEPTIEREN [6:439]
:OUTPUT_direkt - [0:0]
:POSTROUTING_ZONES - [0:0]
:POSTROUTING_ZONES_SOURCE - [0:0]
:POSTROUTING_direct - [0:0]
:POST_public - [0:0]
:POST_public_allow - [0:0]
:POST_public_deny - [0:0]
:POST_public_log - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A Vorrouting -j Vorrouting_direkt
-A VORROUTING -j VORROUTING_ZONENQUELLE
-A VORROUTING -j VORROUTINGZONEN
-A AUSGABE -j AUSGABE_direkt
-A POSTROUTING -j POSTROUTING_direkt
-A POSTROUTING -j POSTROUTING_ZONES_SOURCE
-A POSTROUTING -j POSTROUTING_ZONEN
-A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.0/30 -j MASQUERADE
-A POSTROUTING_ZONES -o eth0 -g POST_public
-A POSTROUTING_ZONES -g POST_public
-A POST_public -j POST_public_log
-A POST_public -j POST_public_deny
-A POST_public -j POST_public_allow
-A VORROUTING_ZONEN -i eth0 -g VOR_öffentlich
-A VORROUTING_ZONEN -g VOR_öffentlich
-A VOR_öffentlich -j VOR_öffentlich_log
-A PRE_öffentlich -j PRE_öffentlich_verweigern
-A VOR_öffentlich -j VOR_öffentlich_zulassen
BEGEHEN
# Abgeschlossen am Samstag, 15. April 2017, 01:40:57 Uhr
# Generiert von iptables-save v1.4.21 am Samstag, 15. April 2017, 01:40:57 Uhr
*Mangel
:PRE-ROUTING AKZEPTIEREN [169:18687]
:EINGABE AKZEPTIEREN [144:11583]
:Weiterleiten Annehmen [0:0]
:AUSGABE AKZEPTIEREN [80:8149]
:POSTROUTING AKZEPTIEREN [80:8149]
:FORWARD_direkt - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direkt - [0:0]
:POSTROUTING_direct - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A Vorrouting -j Vorrouting_direkt
-A VORROUTING -j VORROUTING_ZONENQUELLE
-A VORROUTING -j VORROUTINGZONEN
-A EINGABE -j EINGABE_direkt
-A VORWÄRTS -j VORWÄRTS_direkt
-A AUSGABE -j AUSGABE_direkt
-A POSTROUTING -j POSTROUTING_direkt
-A VORROUTING_ZONEN -i eth0 -g VOR_öffentlich
-A VORROUTING_ZONEN -g VOR_öffentlich
-A VOR_öffentlich -j VOR_öffentlich_log
-A PRE_öffentlich -j PRE_öffentlich_verweigern
-A VOR_öffentlich -j VOR_öffentlich_zulassen
BEGEHEN
# Abgeschlossen am Samstag, 15. April 2017, 01:40:57 Uhr
# Generiert von iptables-save v1.4.21 am Samstag, 15. April 2017, 01:40:57 Uhr
*Sicherheit
:EINGABE AKZEPTIEREN [2197:163931]
:Weiterleiten Annehmen [0:0]
:AUSGABE AKZEPTIEREN [1229:185742]
:FORWARD_direkt - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direkt - [0:0]
-A EINGABE -j EINGABE_direkt
-A VORWÄRTS -j VORWÄRTS_direkt
-A AUSGABE -j AUSGABE_direkt
BEGEHEN
# Abgeschlossen am Samstag, 15. April 2017, 01:40:57 Uhr
# Generiert von iptables-save v1.4.21 am Samstag, 15. April 2017, 01:40:57 Uhr
*roh
:PREROUTING AKZEPTIEREN [2362:184437]
:AUSGABE AKZEPTIEREN [1229:185742]
:OUTPUT_direkt - [0:0]
:PREROUTING_direct - [0:0]
-A Vorrouting -j Vorrouting_direkt
-A AUSGABE -j AUSGABE_direkt
BEGEHEN
# Abgeschlossen am Samstag, 15. April 2017, 01:40:57 Uhr
# Generiert von iptables-save v1.4.21 am Samstag, 15. April 2017, 01:40:57 Uhr
*Filter
:EINGABE AKZEPTIEREN [0:0]
:Weiterleiten Annehmen [0:0]
:AUSGABE AKZEPTIEREN [80:8149]
:VORWÄRTS_IN_ZONEN - [0:0]
:VORWÄRTS_IN_ZONEN_QUELLE - [0:0]
:VORWÄRTS_AUS_ZONEN - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direkt - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:INPUT_ZONES - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:OUTPUT_direkt - [0:0]
-A INPUT -m conntrack --ctstate VERWANDTE, ETABLIERTE -j AKZEPTIEREN
-A EINGABE -i lo -j AKZEPTIEREN
-A EINGABE -j EINGABE_direkt
-A EINGABE -j EINGABEZONENQUELLE
-A EINGABE -j EINGABEZONEN
-A INPUT -m conntrack --ctstate UNZULÄSSIG -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A WEITER -m conntrack --ctstate VERWANDTE, ETABLIERTE -j AKZEPTIEREN
-A WEITER -i lo -j AKZEPTIEREN
-A VORWÄRTS -j VORWÄRTS_direkt
-A WEITER -j WEITER_IN_ZONENQUELLE
-A WEITER -j WEITER_IN_ZONEN
-A WEITER -j WEITER_AUS_ZONENQUELLE
-A VORWÄRTS -j VORWÄRTS_AUS_ZONEN
-A WEITER -m conntrack --ctstate UNZULÄSSIG -j DROP
-A WEITER -j ABLEHNEN --reject-with icmp-host-prohibited
-A AUSGABE -j AUSGABE_direkt
-A FORWARD_IN_ZONES -i eth0 -g FWDI_public
-A WEITERLEITUNG IN ZONEN -g FWDI_public
-A FORWARD_OUT_ZONES -o eth0 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_öffentlich -j FWDI_öffentliches_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_öffentlich -j FWDI_öffentlich_zulassen
-A FWDI_public -p icmp -j AKZEPTIEREN
-A FWDO_öffentlich -j FWDO_öffentliches_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_öffentlich -j FWDO_öffentlich_zulassen
-A EINGABEZONEN -i eth0 -g EINGABE_Öffentlich
-A EINGABEZONEN -g EINGABE_Öffentlich
-A IN_öffentlich -j IN_öffentliches_log
-A IN_public -j IN_public_deny
-A IN_öffentlich -j IN_öffentlich_zulassen
-A IN_public -p icmp -j AKZEPTIEREN
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEU -j AKZEPTIEREN
BEGEHEN
# Abgeschlossen am Samstag, 15. April 2017, 01:40:57 Uhr


Anmerkung 2:
Ich habe einen Apache-Webserver auf einem separaten Host eingerichtet, auf den nur der lokale Server Zugriff hat. Ich habe tcpdump auf dem Webserver ausgeführt, der auf Port 80 lauscht. Beim Ausführen telnet webserver 80erfasse ich die folgenden Pakete. Dies ist das erwartete Verhalten, da die TCP-Verbindung hergestellt ist (S, S-Ack, Ack).

[Benutzer@Webserver ~]$ sudo tcpdump -nn -vv 'Port nicht 22 und 80' -i eth0
tcpdump: lauscht auf eth0, Link-Typ EN10MB (Ethernet), Erfassungsgröße 65535 Bytes
07:17:30.411474 IP (tos 0x10, ttl 64, id 34376, offset 0, flags [DF], proto TCP (6), länge 60)
    local.server.46710 > web.server.80: Flags [S], cksum 0x8412 (falsch -> 0x6d96), seq 3018586542, win 29200, Optionen [mss 1460,sackOK,TS val 3047398 ecr 0,nop,wscale 7], Länge 0
07:17:30.411557 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), länge 60)
    web.server.80 > local.server.46710: Flags [S.], cksum 0x8412 (falsch -> 0x9114), seq 2651711943, ack 3018586543, win 28960, Optionen [mss 1460,sackOK,TS val 37704524 ecr 3047398,nop,wscale 7], Länge 0
07:17:30.411725 IP (tos 0x10, ttl 64, id 34377, offset 0, flags [DF], proto TCP (6), länge 52)
    local.server.46710 > web.server.80: Flags [.], cksum 0x840a (falsch -> 0x301c), seq 1, ack 1, win 229, Optionen [nop,nop,TS val 3047398 ecr 37704524], Länge 0

Wenn ich versuche, vom Remote-Server über den lokalen Server eine Verbindung zum Webserver herzustellen, erfasst TCPdump auf dem Webserver keine Pakete (nicht einmal die anfängliche Synchronisierung), aber der lokale Server erfasst das an den Webserver gesendete Synchronisierungspaket (siehe unten). Dies lässt mich glauben, dass etwas das Senden der Pakete an den Webserver verhindert - möglicherweise eine Fehlkonfiguration oder Firewall.

[user@local ~]$ sudo tcpdump -nn -vv 'Port nicht 22 und 80' -i any
tcpdump: lauscht auf jedem, Link-Typ LINUX_SLL (Linux-gekocht), Erfassungsgröße 65535 Bytes
02:24:09.135842 IP (tos 0x10, ttl 64, id 38062, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.50558 > web.server.80: Flags [S], cksum 0x668d (korrekt), seq 69756226, win 29200, Optionen [mss 1460,sackOK,TS val 4780524 ecr 0,nop,wscale 7], Länge 0

WICHTIG:die Pakete werden nicht über eth0 geroutet, sondern es wird versucht, die Pakete über tun0 an den Webserver zu senden (was fehlschlägt). Ich kann dies bestätigen, indem ich tcpdump auf der tun0-Schnittstelle ausführe:

[Benutzer@lokal ~]$ sudo tcpdump -nn -vv 'Port nicht 22 und 80' -i tun0
tcpdump: lauscht auf tun0, Link-Typ RAW (Raw IP), Erfassungsgröße 65535 Bytes
02:28:10.295972 IP (tos 0x10, ttl 64, id 46976, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.50560 > webserver.80: Flags [S], cksum 0xd560 (korrekt), seq 605366388, win 29200, Optionen [mss 1460,sackOK,TS val 5021684 ecr 0,nop,wscale 7], Länge 0


Notiz 3:
Ich habe die Firewall auf dem lokalen Computer ausgeschaltet und der Webserver hat Synchronisierungspakete empfangen.

[Benutzer@local ~]$ sudo systemctl stop firewalld
[Benutzer@Webserver ~]$ sudo tcpdump -nn -vv 'Port nicht 22 und 80' -i eth0
tcpdump: lauscht auf eth0, Link-Typ EN10MB (Ethernet), Erfassungsgröße 65535 Bytes
08:25:17.390912 IP (tos 0x10, ttl 63, id 61767, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.50580 > web.server.80: Flags [S], cksum 0x30dc (korrekt), seq 2601927549, win 29200, Optionen [mss 1460,sackOK,TS val 7123514 ecr 0,nop,wscale 7], Länge 0
08:25:17.391003 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), länge 60)
    web.server.80 > 10.0.2.2.50580: Flags [S.], cksum 0x4e23 (falsch -> 0xa316), seq 959115533, ack 2601927550, win 28960, Optionen [mss 1460,sackOK,TS val 41771503 ecr 7123514,nop,wscale 7], Länge 0
08:25:17.391192 IP (tos 0x0, ttl 128, ID 60032, Offset 0, Flags [keine], Proto TCP (6), Länge 40)
    10.0.2.2.50580 > web.server.80: Flags [R], cksum 0x7339 (korrekt), seq 2601927550, win 8192, Länge 0
08:25:18.393794 IP (tos 0x10, ttl 63, id 61768, offset 0, flags [DF], proto TCP (6), länge 60)
    10.0.2.2.50580 > web.server.80: Flags [S], cksum 0x2cf1 (korrekt), seq 2601927549, win 29200, Optionen [mss 1460,sackOK,TS val 7124517 ecr 0,nop,wscale 7], Länge 0
08:25:18.393898 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), länge 60)
    web.server.80 > 10.0.2.2.50580: Flags [S.], cksum 0x4e23 (falsch -> 0x7e71), seq 974785773, ack 2601927550, win 28960, Optionen [mss 1460,sackOK,TS val 41772506 ecr 7124517,nop,wscale 7], Länge 0
08:25:18.394003 IP (tos 0x0, ttl 128, ID 60033, Offset 0, Flags [keine], Proto TCP (6), Länge 40)
    10.0.2.2.50580 > web.server.80: Flags [R], cksum 0x566a (korrekt), seq 2601927550, win 8192, Länge 0

Jetzt muss die Quell-IP natürlich aktualisiert werden, damit sie mit der IP-Adresse des lokalen Servers übereinstimmt, bevor das Paket an den Webserver gesendet wird. Wie @xin vorgeschlagen hat, muss NAT auf dem lokalen Server eingerichtet werden.


Hinweis Nr. 4:
Wenn ich versuche, eine Verbindung zum Webserver herzustellen, kann ich sehen, dass die Paketanzahl für Regel 9 um 1 steigt (siehe unten).

[Benutzer@local ~]$ sudo iptables -nvL --line-numbers
..........
Chain FORWARD (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
Anzahl Pakete Bytes Ziel Schutz Opt In Out Quelle Ziel         
1 0 0 alles akzeptieren -- * * 0.0.0.0/0 0.0.0.0/0 ctstate VERWANDTE, ETABLIERTE
2 0 0 alles akzeptieren -- lo * 0.0.0.0/0 0.0.0.0/0           
3 1 60 FORWARD_direct alle -- * * 0.0.0.0/0 0.0.0.0/0           
4 1 60 FORWARD_IN_ZONES_SOURCE alle -- * * 0.0.0.0/0 0.0.0.0/0           
5 1 60 FORWARD_IN_ZONES alle -- * * 0.0.0.0/0 0.0.0.0/0           
6 1 60 FORWARD_OUT_ZONES_SOURCE alle -- * * 0.0.0.0/0 0.0.0.0/0           
7 1 60 FORWARD_OUT_ZONES alle -- * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 DROP alle -- * * 0.0.0.0/0 0.0.0.0/0 ctstate UNGÜLTIG
9 1 60 ALLE ABLEHNEN -- * * 0.0.0.0/0 0.0.0.0/0 Ablehnung mit ICMP-Host verboten
..........
[Benutzer@local ~]$ sudo iptables -D VORWÄRTS 9

Sobald Regel 9 aus der FORWARD-Kette gelöscht ist (von oben, wie @xin vorgeschlagen hat), kann ich eine Verbindung zum Webserver herstellen.

[Benutzer@local ~]$ sudo iptables -nvL --line-numbers
..........
Chain FORWARD (Richtlinie ACCEPT 1 Pakete, 60 Bytes)
Anzahl Pakete Bytes Ziel Schutz Opt In Out Quelle Ziel         
1 12 5857 alles akzeptieren -- * * 0.0.0.0/0 0.0.0.0/0 ctstate VERWANDTE, ETABLIERTE
2 0 0 alles akzeptieren -- lo * 0.0.0.0/0 0.0.0.0/0           
3 2 120 FORWARD_direct alle -- * * 0.0.0.0/0 0.0.0.0/0           
4 2 120 FORWARD_IN_ZONES_SOURCE alle -- * * 0.0.0.0/0 0.0.0.0/0           
5 2 120 FORWARD_IN_ZONES alle -- * * 0.0.0.0/0 0.0.0.0/0           
6 2 120 FORWARD_OUT_ZONES_SOURCE alle -- * * 0.0.0.0/0 0.0.0.0/0           
7 2 120 FORWARD_OUT_ZONES alle -- * * 0.0.0.0/0 0.0.0.0/0           
8 0 0 DROP alle -- * * 0.0.0.0/0 0.0.0.0/0 ctstate UNGÜLTIG
..........

Antwort1

Die Quelladresse der Pakete sollte durch eine Adresse des lokalen Rechners ersetzt werden, damit die Antworten vom lokalen Rechner empfangen werden können. Andernfalls gibt es keinen (guten) Grund, diese Pakete an die nächsten Router zu senden, da die Antworten ohnehin nicht abgefangen werden können. iptables MASQUERADEund SNATsind nützlich, um die Quelladresse dieser Pakete zu ändern:

[user@local ~]$ iptables -t nat -A POSTROUTING -s 10.0.2.2/32 ! -d 10.0.2.1/30 -j MASQUERADE -o eth0

verwandte Informationen