Tipps & Tricks: Linux absichern mit den iptables

Discussion in 'Linux' started by JackCarver, Mar 27, 2014.

  1. M

    Morbis55 Active Member

    Ich hätte eine eventuell blöde Frage.
    Für die iptables muss man ja die Firewall deaktiveren. Die Firewall macht im Grunde ja auch nichts anderes als Ports blockieren.
    Also hat man deswegen keine Nachteile, wenn die UFW deaktiviert ist? Das iptable Skript ist eher sogar effektiver oder?

    Dann hätte ich noch ne Frage zu den Adapterbezeichnungen.
    Bei mir gibt es weder wlan0 noch eth0, sondern die heißen wlx74... (ist ein WLAN USB Adapter) und enp4s0 (LAN ist jedoch ungenutzt)
    JackCarver hat ja gemeint, man müsse das dann im Skript abändern, interessanterweise funktioniert das trotzdem.
    Deswegen
    1.: Warum funktioniert das trotzdem? über ifconfig hab ich weder "wlan0" noch "eth0" als Adapter gelistet, sondern die oben genannten.
    2.: Wenn ich es ändern müsste, warum dann nur die letzten 4 Regeln? Warum nicht gleich alle wlan0 durch die korrekte Bezeichnung ersetzen?
     
  2. JackCarver

    JackCarver Junior Member

    Gibt eigentlich keine blöden Fragen ;-)

    ufw ist nur n Frontend zu den iptables, du kannst natürlich die iptables jederzeit direkt ansprechen ohne das Frontend zu nutzen.

    Gut wlan-usb ist ja auch nur n WLAN-Stick, den man über USB anschließt, die heißen unter meinem Debian wlan0-n. Wenn das bei dir anders heißt ist das auch nicht wild, wichtig ist nur, dass du die korrekte Bezeichnung verwendest.

    Was heißt es funktioniert trotzdem? Die Regeln sperren den Traffic nur für eth0 und wlan0, nicht für andere Adapterbezeichnungen. Also entweder das heißt bei dir trotzdem wlan0 und eth0 oder keine Ahnung...

    Und korrekt, natürlich muss es für alles geändert werden, mein Fehler ;-)

    Edit:
    Oder dein ufw sperrt das für dich, dann merkst du gar nicht, dass die iptables Regeln ins Leere laufen.

    Allgemein hast du bei ner Firewall immer zwei Möglichkeiten an das ganze heranzugehen. Mein Skript zb wählt die Policy ACCEPT für alle Interfaces. Man muss dann eben die Interfaces sperren, die man dicht haben möchte, also idR alle, die direkt ins Internet können. Dazu öffnet man dann die Ports, Protokolle IPs etc, die man offen haben möchte.

    Die andere Sache ist die Policy DROP auf alle Interfaces anzuwenden. Dann ist per se alles dicht, man muss dann aber alle Interfaces, über die man raus möchte öffnen. Das ist etwas mehr Arbeit, da du dann auch die VPN Interfaces öffnen musst, das localhost Interface lo, sowie die Ports und Protokolle auf den Interfaces mit denen du zu PP verbinden möchtest.
     
    Last edited: Mar 26, 2016
  3. M

    Morbis55 Active Member

    ne es funktioniert wie es soll. Wenn ich nicht mit dem PPManager verbunden bin, dann bekomm ich auch keine Verbindung nach außen.
    Sobald ich per VPN verbunden bin, ist auch eine Verbindung ins Internet da.

    Hab mich nur gewundert, weil die Adapternamen nicht übereinstimmen, aber das Skript dann trotzdem funktioniert.
    War halt nur wegen der wlan0 Geschichte. Aber solange es funktionert ist ja alles gut :D
     
  4. Ghost

    Ghost Junior Member

    @JackCarver

    Hey zusammen.

    Die iptables Regeln funktionieren auch unter Linux Mint 18 ohne Probleme :)
     
  5. Ich bin derzeit kein PP-Kunde und möchte meine System erst einmal einrichten, bevor ich mir erneut einen Zugang erstelle. Ich habe unter Ubuntu 16.04 nun die Regeln aus dem zweiten Beitrag einmal übernommen und dann die Adapternamen und Ports (lediglich DNS: 53 + Serverport) bei mir angepasst, um das Setup mit einem Free-VPN zu testen. Bei mir hat das irgendwie nicht so richtig funktioniert. Habe ich zu wenige Ports freigeschaltet oder hätte ich noch etwas anderes anpassen müssen?
     
  6. Ghost

    Ghost Junior Member

    Hey, wenn 2 LAN Anschlüsse am PC vorhanden sind (wie bei mir), muss das Script um eth1 erweitert werden.
    Ich hoffe, dass ich mit dieser Info jemanden helfen konnte ;)

    Code:
    sudo iptables -t filter -A OUTPUT -o wlan0 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o wlan0 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o eth0 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o eth0 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o eth1 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o eth1 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i wlan0 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i wlan0 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i eth0 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i eth0 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i eth1 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i eth1 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 192.168.0.0/16 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 192.168.0.0/16 -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 10.0.0.0/8 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 10.0.0.0/8 -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 172.16.0.0/12 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 172.16.0.0/12 -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o wlan0 -j DROP
    sudo iptables -t filter -A INPUT -i wlan0 -j DROP
    sudo iptables -t filter -A OUTPUT -o eth0 -j DROP
    sudo iptables -t filter -A INPUT -i eth0 -j DROP
    sudo iptables -t filter -A OUTPUT -o eth1 -j DROP
    sudo iptables -t filter -A INPUT -i eth1 -j DROP 
     
  7. t

    theundertaker Junior Member

    das was mich sehr interessieren würde - funktioniert das ganze auch z.b. unter ubuntu mate oder snappy ubuntu core für den raspberry pi ? ich würde das kleine teil gerne als vpn proxy für mein lan zu hause verwenden.
     
  8. M

    Merkaber New Member

    Ich habe auf Ubuntu 16.04 LTS das Programm gestartet, dennoch komm ich ohne VPN ins Netz. Danach habe ich alle Befehle einzelnd ins Terminal eingegeben und es funktionierte nicht. Wo liegt der Fehler?
     
  9. Ghost

    Ghost Junior Member

    @Merkaber
    Hey, hast du überprüft, wie dein Netzwerkadapter heißt?
    Das Script bezieht sich auf wlan0, eth0, eth1
    Wenn dein Netzwerkadapter anders lautet, musst du es im Script anpassen.
     
  10. M

    Morbis55 Active Member

    Der Netzwerkadapter kann auch ganz anders heißen. Ich hatte bisher noch nie die Bezeichung "wlanX" oder "ethX"
    Bei mir hatten die immer komplett seltsame Namen wie "wlx64eg4246"

    In den Verbindungsinformationen bei Schnittstelle steht der Name
    Diesen im Falle von Wlan für "wlan0" ersetzen, im Falle von Ethernet für "eth0" ersetzen.
    Ich fand das allerdings anfänglich auch sehr missverständlich formuliert. Jemand der sich da nicht sonderlich auskennt, kann das nicht wissen.
    Typischer Stolperstein in der Linux Welt. Alle sitzen auf ihrem hohen Ross und sagen dem Reitschüler "dann steig mal auf"
     
  11. M

    Merkaber New Member

    Danke fuer die Tipps. Ich habe mit
    Code:
    ifconfig -a
    mein Name des Adapters herausgefunden (wlp4s0). Nun hatte ich die Idee, entweder 1. das Script nach dem Namen umzuschreiben oder 2. den Namen des Adapters zu aendern (irgendwie). Was ist die bessere Variante? Kann ich irgendwas crashen, wenn ich den Namen des Adapters umschreibe? - sonst kann ich das Programm ja nicht nutzen.

    Edit 1:
    Wenn ich das Skript so umschreiben und ausfuehren wuerde, wie koennte ich es dann wieder rueckgaengig machen?
     
    Last edited: Jan 2, 2017
  12. M

    Morbis55 Active Member

    Skript umschreiben.

    Die Änderungen durch das Skript lassen sich rückgängig machen durch
    - Neustarten des PCs
    oder
    - in der Kommandozeile -> "sudo iptables --flush"
     
  13. Ghost

    Ghost Junior Member

    Bei mir (mit Linux Mint 18.1 Mate) lauten die LAN-Adapter enp2s0 und enp3s0

    Code:
    #!/bin/bash
    
    #Iptables Regeln für VPN:
    
    sudo iptables -t filter -A OUTPUT -o wlan0 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o wlan0 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o enp2s0 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o enp2s0 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o enp3s0 -p udp -m multiport --dports 1149,149,1150,150,1151,151,53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT -o enp3s0 -p tcp -m multiport --dports 1152,152 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i wlan0 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i wlan0 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i enp2s0 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i enp2s0 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i enp3s0 -p udp -m multiport --sports 1149,149,1150,150,1151,151,53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A INPUT -i enp3s0 -p tcp -m multiport --sports 1152,152 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 192.168.0.0/16 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 192.168.0.0/16 -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 10.0.0.0/8 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 10.0.0.0/8 -j ACCEPT
    sudo iptables -t filter -A OUTPUT --dst 172.16.0.0/12 -j ACCEPT
    sudo iptables -t filter -A INPUT --src 172.16.0.0/12 -j ACCEPT
    
    sudo iptables -t filter -A OUTPUT -o wlan0 -j DROP
    sudo iptables -t filter -A INPUT -i wlan0 -j DROP
    sudo iptables -t filter -A OUTPUT -o enp2s0 -j DROP
    sudo iptables -t filter -A INPUT -i enp2s0 -j DROP
    sudo iptables -t filter -A OUTPUT -o enp3s0 -j DROP
    sudo iptables -t filter -A INPUT -i enp3s0 -j DROP 


    iptables dauerhaft speichern.


    1.iptables unter etc/iptables.up.rules speichern

    Code:
    sudo bash
    iptables-save > /etc/iptables.up.rules

    2. Die Datei /etc/network/if-pre-up.d/iptables erstellen und konfigurieren.

    Code:
    sudo nano /etc/network/if-pre-up.d/iptables
    (Inhalt der Datei iptables)

    Code:
    #!/bin/bash
    /sbin/iptables-restore < /etc/iptables.up.rules

    3.Die Datei /etc/network/if-pre-up.d/iptables ausführbar machen.


    Code:
    chmod +x /etc/network/if-pre-up.d/iptables 
     
    Last edited: Jan 2, 2017
  14. t

    theundertaker Junior Member

    ich hätte deine anleitung versucht nachzubauen .. irgendwie fehlt mir da jetzt aber ein wenig der durchblick.
    ich hätte eigentlich alles so erstellt, beim starten dann (ich hoffe ./iptables ist fürs starten richtig) bekomme ich die fehlermeldung

    iptables-restore: line 7 failed

    nun mal meine frage dazu:

    sudo bash
    iptables-save > /etc/iptables.up.rules

    hiermit wird doch eine kopie der derzeitigen firewall regeln erstellt, oder ?
    müssen dann die zeilen, vom anfang deines posts, dann am ende oder am anfang der datei /etc/iptables.up.rules eingefügt werden ? oder ersetzen diese zeilen das "alte" coding ?
     
  15. s

    steve67 New Member

    Hi,
    die IPTABLES funktionieren wunderbar, jedoch habe ich noch ein anderes Problem.
    Zuerst meine Situation:
    -ich habe auf meine Raspi UBUNTU Mate 16.4 installiert
    -die IPTABLES eingerichtet
    -Das Pertfect-Privacy Tool für den VPN-Tunnel installiert.
    soweit passt auch alles und ich komme nur ins Internet sobald der Tunnel steht.

    Ich habe zwei FritzBoxen und diese über VPN verbunden 192.168.30.0 und 192.168.20.0, das Raspi hat 192.168.30.5.
    Aus dem 20.0 Netzt komme ich auf die 192.168.30.5 solange der Tunnel nicht aufgebaut ist, sobald dieser jedoch verbunden ist, komme ich nicht mehr auf die 30.5, aus dem 30.0 Netzt jedoch schon, auch wenn der Tunnel steht. Warum klappt das nicht aus dem 192.168.20.0-Netz

    Habe ich irgendwo einen Denkfehler???
    Bin schon fast am verzweifeln:-((

    Hoffe jemand hat einen Tip für mich!!!

    Grüße
    Steve
     
  16. s

    steve67 New Member

    Nachtrag, hier noch meine routel-Ausgabe:
    ohne VPN:
    target gateway source proto scope dev tbl
    default 192.168.30.1 static enxb827eb5c4772
    default 192.168.30.1 static VLAN
    169.254.0.0/ 16 link VLAN
    192.168.30.0/ 24 192.168.30.5 kernel linkenxb827eb5c4772
    192.168.30.0/ 24 192.168.30.6 kernel link VLAN
    127.0.0.0 broadcast 127.0.0.1 kernel link lo local
    127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
    127.0.0.1 local 127.0.0.1 kernel host lo local
    127.255.255.255 broadcast 127.0.0.1 kernel link lo local
    192.168.30.0 broadcast 192.168.30.6 kernel link VLAN local
    192.168.30.0 broadcast 192.168.30.5 kernel linkenxb827eb5c4772 local
    192.168.30.5 local 192.168.30.5 kernel hostenxb827eb5c4772 local
    192.168.30.6 local 192.168.30.6 kernel host VLAN local
    192.168.30.255 broadcast 192.168.30.6 kernel link VLAN local
    192.168.30.255 broadcast 192.168.30.5 kernel linkenxb827eb5c4772 local
    fe80::/ 64 kernel enxb827eb5c4772
    fe80::/ 64 kernel VLAN
    default unreachable kernel lo unspec
    ::1 local none lo local
    fe80::1598:ea7b:1979:3bb4 local none lo local
    fe80::ce85:e365:a79f:9eac local none lo local
    ff00::/ 8 enxb827eb5c4772 local
    ff00::/ 8 VLAN local
    default unreachable kernel lo unspec


    und mit VPN-Tunnel:
    target gateway source proto scope dev tbl
    0.0.0.0/ 1 10.0.49.1 tun0
    default 192.168.30.1 static enxb827eb5c4772
    default 192.168.30.1 static VLAN
    5.79.71.195 192.168.30.1 enxb827eb5c4772
    10.0.49.0/ 24 10.0.49.251 kernel link tun0
    128.0.0.0/ 1 10.0.49.1 tun0
    169.254.0.0/ 16 link VLAN
    192.168.30.0/ 24 192.168.30.5 kernel linkenxb827eb5c4772
    192.168.30.0/ 24 192.168.30.6 kernel link VLAN
    10.0.49.0 broadcast 10.0.49.251 kernel link tun0 local
    10.0.49.251 local 10.0.49.251 kernel host tun0 local
    10.0.49.255 broadcast 10.0.49.251 kernel link tun0 local
    127.0.0.0 broadcast 127.0.0.1 kernel link lo local
    127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
    127.0.0.1 local 127.0.0.1 kernel host lo local
    127.255.255.255 broadcast 127.0.0.1 kernel link lo local
    192.168.30.0 broadcast 192.168.30.6 kernel link VLAN local
    192.168.30.0 broadcast 192.168.30.5 kernel linkenxb827eb5c4772 local
    192.168.30.5 local 192.168.30.5 kernel hostenxb827eb5c4772 local
    192.168.30.6 local 192.168.30.6 kernel host VLAN local
    192.168.30.255 broadcast 192.168.30.6 kernel link VLAN local
    192.168.30.255 broadcast 192.168.30.5 kernel linkenxb827eb5c4772 local
    fe80::/ 64 kernel enxb827eb5c4772
    fe80::/ 64 kernel VLAN
    default unreachable kernel lo unspec
    ::1 local none lo local
    fe80::1598:ea7b:1979:3bb4 local none lo local
    fe80::ce85:e365:a79f:9eac local none lo local
    ff00::/ 8 enxb827eb5c4772 local
    ff00::/ 8 VLAN local
    default unreachable kernel lo unspec
    Ich vermute, der Tunnel verhindert die Kommunikation mit den 192.168.20.0 Netz. Ich vermute dass ich die Routingtabelle anpassen muss, jedoch weiß ichn icht wie?!
    Grüße
    Steve
     
  17. s

    steve67 New Member

    Problem gelöst mit:
    sudo route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.30.1

    Grüße
    Steve
     
  18. C

    Canna Member

    Kann gelöscht werden.
     
    Last edited: Feb 12, 2017
  19. a

    anddrs New Member

    Hi, an sich sehr brauchbares tool, danke! Nur funktioniert es unter Ubuntu 18 nicht mehr, da die gksudo fehlt.

    2te Frage: zwar läuft fast alles mit ip-tables einwandfrei, nur lässt sich gmail und ein anderes mail Konto ohne weiteres trotz ip tables und inaktiven PP - öffnen! Hab ich was falsch gemacht?

    Gruß
    Andreas