Hallo,
ich würde gerne ein Bash-Skript bei Systemstart automatisch ausführen lassen.
Normalerweise möchte ich mich gerne durch einen VPN-Dienst etwas anonymisieren. Dazu ist es mir (absoluter Anfänger! ) gelungen, über den Network-Manager eine openVPN-Verbindung einzurichten und diese wiederum an meine (kabelgebundene) Netzwerkverbindung zu koppeln. Dazu habe ich in den Netzwerkeinstellungen unter Allgemein das Häkchen gesetzt bei "Automatisch mit VPN verbinden, wenn diese Verbindung benutzt wird".
Das klappt auch soweit ganz gut. Bei Systemstart und auch nach Aufwachen aus Standby wird die VPN-Verbindung wieder aufgebaut.
Über den Network-Manager kann ich so auch mehrere VPN-Verbindungen einrichten und bei Bedarf auch mal recht einfach von der vorausgewählten Verbindung auf eine andere umschalten.
Allerdings hätte ich die Verbindung noch gerne "abgesichert". D.h. es soll keine Internet-Kommunikation möglich sein, wenn die VPN-Verbindung aus irgendeinem Grund abbricht. Es soll auch kein Umgehen der VPN-Verbindung möglich sein.
Dafür habe ich mir ein kleines Bash-Skript gebastelt (hauptsächlich aus dem Internet abgeschrieben, da ich selbst zu sowas gar nicht in der Lage wäre!)
Das sieht so aus:
#!/bin/bash
#Iptables Regeln für VPN:
iptables -t filter -A OUTPUT -o wlan0 -p udp -m multiport --dports 443,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p udp -m multiport --dports 443,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p udp -m multiport --sports 443,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p udp -m multiport --sports 443,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A OUTPUT --dst 192.168.0.0/16 -j ACCEPT
iptables -t filter -A INPUT --src 192.168.0.0/16 -j ACCEPT
iptables -t filter -A OUTPUT --dst 10.0.0.0/8 -j ACCEPT
iptables -t filter -A INPUT --src 10.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT --dst 172.16.0.0/12 -j ACCEPT
iptables -t filter -A INPUT --src 172.16.0.0/12 -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -j DROP
iptables -t filter -A INPUT -i wlan0 -j DROP
iptables -t filter -A OUTPUT -o eth0 -j DROP
iptables -t filter -A INPUT -i eth0 -j DROP
Alles anzeigen
Quelle:
Tipps & Tricks: - Linux absichern mit den iptables
| Perfect Privacy Forum
Das Ganze habe ich mit Kate erstellt und als vpn.sh abgespeichert.
Dann habe ich das Skript ausführbar gemacht mit:
oder auch
(Scheint auf's selbe rauszulaufen, das übersteigt im Moment noch meine Fähigkeiten!)
Jedenfalls habe ich es dann getestet durch:
Ich drücke mich mal vorsichtig aus: Es scheint zu funktionieren! Heißt z.B. Internetbrowser läuft. Wenn ich dann die VPN-Verbindung im Network-Manager beende, kriege ich keinen Internetzugang mehr. Also das, was ich will.
Es gibt bei der ganzen Sache zwar noch einige Unsicherheiten, z.B. bin ich mir nicht sicher, ob sich meine Regeln nicht doch irgendwie mit den schon vorhandenen Regeln von Firewalld beißen. Vielleicht sollte ich z.B. ein iptables -F als erste Regel ins Skript setzen. Nach Ausprobieren scheint das praktisch aber egal zu sein!
Oder: Eigentlich sollte mein interner Netzwerkverkehr bei diesen Regeln noch funktionieren. Tut er aber nicht, bzw. nur, ohne aufgebaute VPN-Verbindung!
Wenn ich nun aus irgendeinem Grund doch wieder unlimitierten Internetzugang ohne diese Regeln will, kann ich über die Konsole ein
absetzen, dann sind die iptables wieder weg, bzw. wurden durch die von firewalld (zone public) ersetzt.
Apropos Firewalld:
Ich wäre auch an anderen (evtl. einfacheren) Realisierungsmöglichkeiten interessiert ...
Z.B. die o.g. iptables-Regeln in eine neu erstellte Zone in Firewalld zu packen und diese Zone dann als Standard-Zone definieren. Dann könnte ich (wenn ich die Regeln mal kurzfristig abwählen will) auch einfach die Zone wechseln (so stelle ich mir das zumindest vor!).
Aber ich habe mich damit schon tagelang abgemüht (kann auch Threads aus dem Internet nachreichen, in denen andere das schon versucht haben) und im Grunde nur herausgefunden, dass Firewalld wohl nicht mit dem Erstellen direkter Regeln in Zonen klarkommt.
Stattdessen müsste man sog. Rich-Rules verwenden. Und wie man wiederum die o.g. Regeln in firewalld-konforme Rich-Rules umwandelt, sprengt den Rahmen für mich!
Da ich wie gesagt normalerweise aber nur mit aktiviertem VPN ins Netz möchte, wäre es bequemer, wenn ich das Skript nicht jedes Mal manuell starten müsste.
Ich hab das Thema schon gegoogelt (z.B. "opensuse skript automatisch starten"), aber - nun ja - das scheint schon ein sehr weites Feld ... die Suchergebnisse sind teils schon einige Jahre alt und bringen mich irgendwie nicht weiter.
Ich hatte auch gehofft - und jetzt komme ich endlich zur eigentlichen Frage - dass es vielleicht ganz einfach wäre!
Es gibt ja in openSUSE Leap 15 (KDE Plasma), wenn ich das Anwendungsmenü öffne, diesen Eintrag "Autostart". Dort gibt es sogar extra die Kategorie "Sriptdatei". Dort kann ich mein Skript, dass in meinem Home-Ordner liegt, auswählen (es erhält dann auch gleich den Status "Aktiviert") und muss mich nur noch entscheiden, was ich punkto "Ausführungszeitpunkt" auswähle. Entweder "vor Sitzungsstart" oder "Anmeldung". Da ich automatisch und ohne Passwort angemeldet werde, dachte ich, dass letzteres womöglich nicht funktioniert. Ich habe aber beides ausprobiert und es funktioniert beides nicht!
Was mache ich falsch?