Tipps & Tricks: Linux absichern mit den iptables

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

  1. JackCarver

    JackCarver Junior Member


    Hallo,

    hier möchte ich zeigen, wie man Linux mit Hilfe der iptables vor IP-Leaks absichert. Ich habe ein kleines Tool in Qt geschrieben, das mit Hilfe zweier Buttons die Firewall aktivieren und deaktivieren lässt. Ich stell das Tool hier zum Download mit ein, ich hab es unter Linux Debian Wheezy, Mint 16 sowie Ubuntu 13.10 getestet, sollte aber eigentlich auf allen aktuelleren Linux Varianten lauffähig sein, die Debian basiert sind. Zusätzlich stell ich hier auch die iptables Skripte mit ein, falls jemand das lieber selbst per Skript umsetzen möchte.

    Hier n paar Screenshots:



    [​IMG]



    Über den grünen Button "Activate Firewall" werden die Firewall Regeln aktiviert. Die Regeln sind dabei so aufgebaut, dass sämtliche Verbindungen nach Aussen und Innen nur noch via OpenVPN möglich sind.
    Dazu werden auf wlan0 sowie eth0 alle Verbindungen ausser der OpenVPN Ports sowie des DNS Ports geblockt. Erst NACH Einwahl zu einem OpenVPN Server kann man das Internet wieder erreichen. Bricht die VPN Verbindung ab, so sind auch die Verbindungen ins Internet tot.
    Die Verbindungen im LAN bleiben davon unberührt, dh Verbindungen zu und von LAN Rechnern bleiben erlaubt.

    Möchte man die Regeln deaktivieren, so genügt ein Klick auf den roten Button.

    Neu hinzugekommen ist das Statusfeld, das mit Text und Farbe anzeigt, ob die Firewall derzeit aktiv oder inaktiv ist, sowie ein Feld Portausnahmen, wo man die ssh sowie IPsec Ports vom Block ausnehmen kann. Dadurch ist es auch möglich trotz aktiver FW ohne OpenVPN eine ssh bzw IPsec Verbindung zu starten:



    [​IMG]



    Für alle, die die FW Regeln auch über den Systemstart aktiv haben möchten ist das Dropdown Feld "Firewall Settings" gedacht.
    Es gibt zur Auswahl entweder die aktiven Regeln fest zu speichern oder eben die im System gespeicherten Regeln auch wieder zu löschen, siehe Screen:



    [​IMG]



    Dazu bitte Beachten:


    Ich hab das Hauptfenster nun auch etwas größer gemacht.

    Hier im ersten Teil stell ich das Tool zum Download ein, im zweiten Teil kommen die iptables Regeln im Skript. Ich hab hier 2 Links angelegt, einmal das Tool entwickelt unter Qt Version 5 und einmal entwickelt unter Qt Version 4. Debian Wheezy hat Probleme das Qt5 Tool zu starten, mit der Version 4 klappt es dann.


    Link zum Tool (Qt Version 5, getestet unter Mint 16, Mint 17 (Test unter Live DVD positiv)):

    https://www.dropbox.com/s/uzp5mz4vzu...herQt5_1.0.zip

    Link zum Tool (Qt Version 4, getestet unter Debian Wheezy):

    https://www.dropbox.com/s/1jcrl404gl...herQt4_1.0.zip


    Ubuntu Version fertig (Ubuntu 13.10):



    [​IMG]


    Die Menüpunkte befinden sich hier allerdings nicht im Hauptfenster des Programmes sondern oben in der Taskleiste.


    Hier stell ich den Link mit ein:

    Ubuntu 13.10:
    https://www.dropbox.com/s/2kl9l0rx4o...buntu_v1.0.zip
     
  2. JackCarver

    JackCarver Junior Member

    Hier im zweiten Teil stell ich das Bash Skript mit ein, das die Firewall Regeln enthält:

    Erklärung zu dem Skript:

    Die Firewall Regeln in diesem Bash Skript sind exakt dieselben, die auch das kleine Programm in Teil 1 startet. Die iptables Tabelle, die hier interessant ist ist die Tabelle filter, mit Option -t filter ersichtlich.
    Diese Tabelle stellt die eigentliche Firewall Komponente der iptables dar. Sie enthält dazu die Ketten INPUT, OUTPUT und FORWARD. Für Einzelplatzrechner interessant sind nur INPUT und OUTPUT, FORWARD wäre interessant auf nem Linux Router.

    Die OUTPUT Kette regelt alle ausgehenden Verbindungen und die ersten 4 Regeln des Skriptes erlauben für WLAN (wlan0) und Ethernet (eth0) die Ports um sich mit nem PP OpenVPN Server zu verbinden nämlich UDP 1149, 1150, 1151, 53, 149, 150, 151 sowie TCP Ports 152 und 1152. Der UDP Port 53 ist wichtig für die DNS Auflösung der PP Hostnamen.
    Anhand der Option state legt man fest, dass rausgehend sowohl neue Pakete als auch Pakete, die zu bereits bestehenden Verbindungen gehören erlaubt sind, sofern sie die gennanten Ports als Zielport haben.

    Die INPUT Kette regelt dann alle eingehenden Verbindungen. Die nächsten 4 Regeln sind also die zu den OUTPUT Regeln wieder zurückkehrenden Verbindungen, daher werden die Ports nun als Quellports (sports) gekennzeichnet und es ist auch nicht mehr nötig neue Verbindungen zuzulassen, da reingehend nur Antworten auf bereits nach aussen gestartete Verbindungen erlaubt sind.

    Die nächsten 6 Regeln öffnen die Firewall für private Netze, dh man kann auch mit eingeschalteter FW ganz normal seine Heimrechner erreichen und auch von diesen aus den FW geschützten Rechner.

    Die letzten 4 Regeln verbieten dann für WLAN und Ethernet alle übrigen Verbindungen, dh jeglicher Internetverkehr wird nur über OpenVPN erlaubt.

    Das einzige was frei bleibt ist der tun Adapter über den dann ja OpenVPN läuft sowie localhost, den man nicht blocken sollte.

    Um nun diese Regeln aus der Bash heraus zu starten, legt man zb in der Konsole über touch vpn.sh eine leere Datei an und kopiert die Regeln ab #! /bin/bash dort hinein. Anschließend macht man das Skript ausführbar und kann dann mit sudo vpn.sh das Skript starten.

    Oder man verwendet eben ganz einfach das Tool unter Posting #1, das dasselbe auf Knopfdruck erledigt.

    Falls es Fragen dazu gibt dann meldet euch einfach hier.
     
    Dr_Iwan_Kakalakow likes this.
  3. Ghost

    Ghost Junior Member

    SUPER, DANKE DIR

    1 Frage:

    Hat man Zugriff auf das lokale Netzwerk wenn die Firewall aktiviert ist? (NAS....)
     
  4. JackCarver

    JackCarver Junior Member

    Nein, in der jetzigen Fassung nicht, ist aber kein Problem, ich nehm die Regeln zur Ausnahme privater IPv4 Netze in das Tool und das Skript mit rein, dann klappt das.
     
  5. JackCarver

    JackCarver Junior Member

    Das Tool sowie Skript ist nun aktualisiert. Zugriffe im privaten Netz vom Firewall geschützten Rechner zu anderen Rechnern, sowie der umgekehrte Weg ist nun für alle Adapter frei.
     
  6. Ghost

    Ghost Junior Member

    @JackCarver

    Dir ist ein kleiner Fehler unterlaufen.
    Linux verwendet andere Ports.

    Code:
    dev tun
    remote amsterdam.perfect-privacy.com 1151
    remote amsterdam.perfect-privacy.com 150
    remote amsterdam.perfect-privacy.com 1150
    remote amsterdam.perfect-privacy.com 151
    remote amsterdam.perfect-privacy.com 149
    remote amsterdam.perfect-privacy.com 1149
    Ansonsten: ECHT COOOOOL :):):) DANKE

    Eine Frage habe ich noch:

    Gibt es eine Möglichkeit, dass man die iptables dauerhaft speichern kann?
    Jetzt muss man die iptables Konfiguration nach jedem Neusart ausführen.


    Bevor ich den Fehler mit den Ports gefunden habe, bekam ich oft diesen Fehler:

    Code:
    Operation not permitted (code=1)



    PS: Wäre super wenn du das Tool anpassen könntest.
     
  7. JackCarver

    JackCarver Junior Member

    Ok, ich muss zugeben, dass ich derzeit nicht zahlender Kunde bei PP bin, Frank war so freundlich mir die im Tool genutzten Ports mitzuteilen. Bedeutet das, dass folgende Ports bzgl OpenVPN mit aufzunehmen sind:

    UDP:
    1149, 1150, 1151

    TCP:
    149, 150, 151

    Das anpassen ist dann kein Problem
     
  8. PP Frank

    PP Frank Staff Member

    Ist glaube ich mein Fehler. ich hatte Jack nur die Ports von der Website gegeben. Ich muss das dem Kollegen nochmal sagen, dass die Serverliste da aktualisiert wird. Da fehlen welche
     
  9. Ghost

    Ghost Junior Member

    Ist nicht weiter schlimm :), kann passieren.

    Welche Ports muß man im Bash Skript konfigurieren?

    UDP: ???
    TCP: ???
     
  10. JackCarver

    JackCarver Junior Member

    Das abspeichern der Regeln ist auch möglich, ich werd dahingehend was mit Aufnehmen, zuerst kommt mal die Port aktualisierte Fassung, dann ne weitere mit dem Speichern der Regeln.
     
  11. Ghost

    Ghost Junior Member

    @JackCarver
    @PP Frank

    DANKE EUCH
     
  12. JackCarver

    JackCarver Junior Member

    Die Ports TCP 150 und 151 sind nun mit aufgenommen, Skript in Teil zwei aktualisiert.
     
  13. Ghost

    Ghost Junior Member

    TCP Ports Linux:
    Code:
    remote amsterdam.perfect-privacy.com 1152
    remote amsterdam.perfect-privacy.com 152
    UDP Ports Linux:
    Code:
    remote amsterdam.perfect-privacy.com 1151
    remote amsterdam.perfect-privacy.com 150
    remote amsterdam.perfect-privacy.com 1150
    remote amsterdam.perfect-privacy.com 151
    remote amsterdam.perfect-privacy.com 149
    remote amsterdam.perfect-privacy.com 1149
     
  14. Ghost

    Ghost Junior Member

    UDP Linux

    Code:
    client
    script-security 2
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    ns-cert-type server
    redirect-gateway def1
    dev tun
    remote amsterdam.perfect-privacy.com 1151
    remote amsterdam.perfect-privacy.com 150
    remote amsterdam.perfect-privacy.com 1150
    remote amsterdam.perfect-privacy.com 151
    remote amsterdam.perfect-privacy.com 149
    remote amsterdam.perfect-privacy.com 1149
    # Fallbacks just in case..
    remote amsterdam.perfect-privacy.info 1150
    remote amsterdam.perfect-privacy.net 1149
    remote amsterdam.perfect-privacy.asia 1151
    remote amsterdam.perfect-privacy.net 149
    remote amsterdam.perfect-privacy.org 150
    remote amsterdam.perfect-privacy.org 151
    remote-random
    proto udp
    tun-mtu 1500
    fragment 1300
    mssfix
    float
    reneg-sec 86400
    resolv-retry 60
    nobind
    persist-key
    persist-tun
    persist-remote-ip
    route-method exe
    route-delay 2
    ca ca.crt
    cert Amsterdam_cl.crt
    key Amsterdam_cl.key
    tls-auth Amsterdam_ta.key 1
    tls-timeout 5
    hand-window 120
    tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
    auth SHA512
    cipher AES-256-CBC
    comp-lzo
    verb 4
    auth-user-pass /etc/openvpn/userpass.txt
    inactive 604800
    ping 5
    ping-restart 120
    replay-window 512 60
    mute-replay-warnings
     
  15. Ghost

    Ghost Junior Member

    TCP Linux

    Code:
    client
    script-security 2
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    ns-cert-type server
    redirect-gateway def1
    dev tun
    remote amsterdam.perfect-privacy.com 1152
    remote amsterdam.perfect-privacy.com 152
    # Fallbacks just in case..
    remote amsterdam.perfect-privacy.org 152
    remote amsterdam.perfect-privacy.info 1152
    remote-random
    proto tcp
    tun-mtu 1500
    
    mssfix
    float
    reneg-sec 86400
    resolv-retry 60
    nobind
    persist-key
    persist-tun
    persist-remote-ip
    route-method exe
    route-delay 2
    ca ca.crt
    cert Amsterdam_cl.crt
    key Amsterdam_cl.key
    tls-auth Amsterdam_ta.key 1
    tls-timeout 5
    hand-window 120
    tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
    auth SHA512
    cipher AES-256-CBC
    comp-lzo
    verb 4
    auth-user-pass
    inactive 604800
    ping 5
    ping-restart 120
    
    mute-replay-warnings
     
  16. JackCarver

    JackCarver Junior Member

    Ok danke, pass ich an.
     
  17. Ghost

    Ghost Junior Member

    Super. Jetzt haben wir es bald perfect [​IMG]
     
  18. JackCarver

    JackCarver Junior Member

    So das um die Ports aktualisierte Tool steht zum DL bereit. Ich werd dann noch ne zweite Version verlinken, bei der man die Einstellungen fest im System speichern kann. Teste mal ob es nun von der Verbindung zu den Servern passt.
     
  19. Ghost

    Ghost Junior Member

    @JackCarver

    Ein Zahlendreher :)

    Falsch:
    Code:
    --dports [B]1194[/B],1150,1151,53,149,150,151 
    Richtig:
    Code:
    --dports [B]1149[/B],1150,1151,53,149,150,151 
    Wenn der Zahlendreher behoben ist, funktioniert es.
     
  20. JackCarver

    JackCarver Junior Member

    Stimmt das sollte im Prog allerdings passen, der Zahlendreher sollte nur im Skript im Forum sein. Werd das hier noch ändern.