Erstellen Sie eine Firewall mit Iptables

Wichtiger Schritt in der Netzwerkkonfiguration, wir werden sehen, wie eine Linux-Firewall über iptables und ip6tables installiert und konfiguriert wird, mit dem Ziel, der einzige Benutzer zu sein, der den Computer verwenden kann.

Warum die Firewall auf unsere alleinige Nutzung beschränken?
Die Idee hier ist, unsere Firewall auf einem Test-VPS-Server zu installieren. Das Äquivalent einer lokalen Testmaschine, aber… im Web.
So sehr wir uns lokal nicht um die Sicherheit, das Risiko von Eindringlingen oder sogar darum kümmern, wer sich mit unserem Computer verbindet, so sehr auf einem öffentlichen Server, online, es ist nicht dasselbe.

Der Geist besteht daher darin, den gesamten eingehenden Datenverkehr einzuschränken und unseren IP(s) zu ermöglichen, sich mit dem Server zu verbinden.
Dies ist keine Frage von Paranoia oder Sicherheit, es geht nur darum, ruhig zu bleiben und unsere Inhalte und Beiträge für uns zu behalten, ohne sich Gedanken darüber machen zu müssen, was für alle (und Google für das Web) sichtbar ist und was nicht.

Die Firewall wird in Form eines Skripts und einer Reihe von Regeln iptables und ip6tables .
Ich werde hier nicht detailliert beschreiben, wie diese beiden Programme funktionieren, sondern nur die Filterlogik.
Die Idee ist, zu verstehen, wie es funktioniert und sich an Ihre Bedürfnisse anzupassen.

Contents

Wie funktioniert unsere Linux-Firewall?

Grundsätzlich beginnen wir damit, alle vorhandenen Regeln zu entfernen, um mit einer leeren Konfiguration von vorne zu beginnen.

Dann wenden wir die globale Strategie auf die 3 Tabellen INPUT, FORWARD und OUTPUT an.
Wir blockieren den gesamten Datenverkehr in den Tabellen INPUT und FORWARD und erlauben Datenverkehr in der Tabelle OUTPUT.
Der Server kommuniziert also problemlos nach außen, aber es kommt nichts rein.

Schließlich definieren wir bei Bedarf Ausnahmen zu globalen Strategien.
Zum Beispiel die Autorisierung eingehender E-Mails, die de facto standardmäßig blockiert sind.

Der Fall von iptables und ip6tables

Wir nähern uns nun einem grundlegenden Begriff von Firewalling oder dem Netzwerk.

IPv6 ist da und muss berücksichtigt werden.
Bis vor kurzem haben wir uns nur um IPV4 gekümmert und mit der Ad-hoc-Software iptables gefiltert. Aber jetzt haben Sie auf dedizierten Servern und VPS immer eine zusätzliche IPv6-Adresse.

Zur Verwaltung unserer Firewall verwenden wir daher 2 Programme:

  • iptables für IPV4
  • ip6tables für IPv6. Beachten Sie die „6“.

Es ist wichtig, sich daran zu erinnern, dass iptables keine IPV6-Filterung handhabt, genauso wie ip6tables keine IPV4-Filterung handhabt.
Also müssen wir alles doppelt machen. Und vor allem im Doppel !!! Jede Regel, jede Strategie wird für jeden IP-Typ zweimal geschrieben.
Da wir das beste Parfüm bauen können, wenn es IPV6 nicht berücksichtigt, wird jeder mit einer IP in v6 alle in IPV4 definierten Regeln vollständig durchlaufen!

Gut verstanden ?

Dies gilt natürlich nur, wenn IPv6 in Ihrem Netzwerk/Server aktiviert ist.
Wenn Sie es absolut nicht benötigen, können Sie IPv6 jederzeit deaktivieren, wenn Sie Lust dazu haben.

Ein automatisches Firewall-Skript

Wir werden alle unsere Regeln in einer Servicedatei ablegen, die beim Start unseres Servers automatisch ausgeführt wird.
Wir können die Firewall auch bei Bedarf über 3 Funktionen verwalten. Wir starten es, wir stoppen es und wir schauen uns die aktuellen Regeln an.

Weitere Informationen zu Startskripten finden Sie im Tutorial zur Dienstverwaltung.

Kreation und Konfiguration des Parfums

Kopieren Sie die folgenden Regeln und fügen Sie sie in eine Datei mit dem Namen firewall im Ordner ein /etc/init.d .
Nehmen Sie sich die Zeit, die Konfiguration zu lesen und insbesondere die Variablen am Anfang der Datei anzupassen.

 #! / bin / sh ### INIT-INFO BEGINNEN # Bietet: PersonalFirewall # Erforderlicher-Start: $ remote_fs $ syslog # Erforderlicher Stopp: $ remote_fs $ syslog # Standard-Start: 2 3 4 5 # Standard-Stopp: 0 1 6 # Kurzbeschreibung: Personal Firewall # Beschreibung: ### ENDE INIT INFO # iptables-Programm IPV4 und IPV6 IPT = / sbin / iptables IP6T = /sbin / ip6tables # IPs HAUSHALT = xx.xx.xx.xx IPBUREAU = xx.xx.xx.xx # Funktion, die die Firewall startet do_start() {     # Löscht alle aktuellen Regeln. -Herbst. -X-Benutzer     $ IPT -t Filter -F     $ IPT -t Filter -X     $ IPT -t nat -F     $ IPT -t nat -X     $ IPT -t Mangel -F     $ IPT -t mangle -X     #     $ IP6T -t Filter -F     $ IP6T -t Filter -X # Es gibt kein NAT in IPv6     # $ IP6T -t nat -F     # $ IP6T -t nat -X     $ IP6T -t Mangel -F     $ IP6T -t Mangel -X     # Strategie (-P) standardmäßig: Blockieren Sie alles, was die Weiterleitung betritt und autorisieren Sie die Abgehende     $ IPT -t Filter -P INPUT DROP     $ IPT -t Filter -P FORWARD DROP     $ IPT -t Filter -P AUSGANG AKZEPTIEREN     #     $ IP6T -t Filter -P INPUT DROP     $ IP6T -t Filter -P FORWARD DROP     $ IP6T -t Filter -P OUTPUT ACCEPT     # Loopback     $ IPT -t Filter -A INPUT -i lo -j AKZEPTIEREN     $ IPT -t Filter -A AUSGANG -o lo -j AKZEPTIEREN     #     $ IP6T -t Filter -A EINGANG -i lo -j AKZEPTIEREN     $ IP6T -t Filter -A AUSGANG -o lo -j AKZEPTIEREN     # Erlaube einer offenen Verbindung, eingehenden Datenverkehr zu empfangen     $ IPT -t Filter -A INPUT -m Zustand --Zustand ESTABLISHED, RELATED -j ACCEPT     #     $ IP6T -t Filter -A INPUT -m Zustand --Zustand ESTABLISHED, RELATED -j ACCEPT     # ICMP von autorisierten IPs von OVH-Überwachungsservern     $ IPT -t Filter -A EINGANG -p icmp -s 37.187.37.250 -j AKZEPTIEREN     $ IPT -t Filter -A EINGANG -p icmp -s 5.39.111.9 -j AKZEPTIEREN     # DNS: 53     # /! DNS muss autorisiert werden, BEVOR Hosts deklariert werden, sonst ist keine Namensauflösung möglich     $ IPT -t Filter -A INPUT -p tcp --dport 53 -j ACCEPT     $ IPT -t Filter -A INPUT -p udp --dport 53 -j ACCEPT     #     $ IP6T -t Filter -A EINGANG -p tcp --dport 53 -j AKZEPTIEREN     $ IP6T -t Filter -A INPUT -p udp --dport 53 -j ACCEPT     # akzeptiert alles von einer IP bis TCP     $ IPT -t Filter -A INPUT -p tcp -s $ IPHOUSE -j ACCEPT     $ IPT -t Filter -A INPUT -p tcp -s $ IPBUREAU -j ACCEPT     #     echo "Firewall gestartet [OK]" } # Funktion, die die Firewall stoppt do_stop () {     # Alle Regeln löschen     $ IPT -t Filter -F     $ IPT -t Filter -X     $ IPT -t nat -F     $ IPT -t nat -X     $ IPT -t Mangel -F     $ IPT -t mangle -X     #     $ IP6T -t Filter -F     $ IP6T -t Filter -X     # $ IP6T -t nat -F     # $ IP6T -t nat -X     $ IP6T -t Mangel -F     $ IP6T -t Mangel -X     # setze die Strategie zurück     $ IPT -t Filter -P EINGANG AKZEPTIEREN     $ IPT -t Filter -P AUSGANG AKZEPTIEREN     $ IPT -t Filter -P FORWARD ACCEPT     #     $ IP6T -t Filter -P INPUT ACCEPT     $ IP6T -t Filter -P OUTPUT ACCEPT     $ IP6T -t Filter -P VORWÄRTS AKZEPTIEREN     #     echo "Firewall gestoppt [OK]" } # Firewall-Statusfunktion do_status () {     # aktuelle Regeln anzeigen     klar     Echostatus IPV4     Echo --------------------------------------------------------     $ IPT -L -n -v     Echo     Echo --------------------------------------------------------     Echo     Echostatus IPv6     Echo --------------------------------------------------------     $ IP6T -L -n -v     Echo } Fall "$ 1" in     Anfang)         do_start         # ohne Fehler beenden         Ausgang 0     ;;     halt)         do_stop         # ohne Fehler beenden         Ausgang 0     ;;     neu starten)         do_stop         do_start         # ohne Fehler beenden      Ausgang 0     ;;     Status)         do_status         # ohne Fehler beenden         Ausgang 0     ;;     *)         # Wenn wir nicht "start" oder "stop" eingeben ... zeigen wir einen Fehler an         echo "Verwendung: /etc/init.d/firewall {Start | Stopp | Neustart | Status}"         # Beende das Skript mit einem "Fehler"-Status         Ausgang 1     ;; esac 

Dann machen wir die Datei ausführbar:

 chmod + x /etc/init.d/firewall 

Jetzt können wir es testen:

 Firewall-Dienst starten 

So zeigen Sie die aktuellen Regeln an:

 Status des Firewall-Dienstes 

Und um es zu stoppen:

 Firewall-Dienst stoppen 

Jetzt ein ganz wichtiger Punkt. Sie müssen testen.
Starten Sie bei gestarteter Firewall eine neue SSH-Sitzung in einem neuen Terminal, ohne Ihre aktuelle Sitzung zu verlassen. Wenn Sie erfolgreich sind, können Sie daran denken, den Start der Firewall zu automatisieren. Andernfalls müssen wir die Regeln überprüfen, es gibt eine, die blockiert. Im schlimmsten Fall können Sie die Kontrolle über Ihren Server verlieren.

Wenn alles in Ordnung ist und Sie keine Verbindungsprobleme haben, können Sie den Start mit folgendem Befehl automatisieren:

 update-rc.d-Firewall-Standardeinstellungen 

Von dort wird die Firewall beim Hochfahren der Maschine automatisch gestartet. Sie haben nichts mehr zu tun.

Sie können jetzt offene Ports mit Netstat und Nmap überprüfen.