Es gibt mehrere Firewall-Anwendungen für Linux. Was Sie jedoch möglicherweise nicht wissen, ist, dass im Kern all dieser Programme eine einzige, mächtige Anwendung ist, die direkt in den Linux-Kernel integriert ist: iptables. Dies ist die Linux-Firewall. Unabhängig davon, mit welchem Programm Sie Ihre Firewall unter Linux konfigurieren, kommt es letztendlich auf iptables an. Alles, was diese anderen Programme tun, ist es zu konfigurieren.
Hier also die Frage: Wenn diese Programme einfach iptables konfigurieren, warum konfigurieren Sie es nicht direkt selbst? Das ist einfacher als Sie denken!
Wenn Sie mit den Begriffen des Netzwerks vertraut sind, wie Verbindungen, IP, TCP und Port, können Sie mit dem nächsten Schritt fortfahren. Wenn Sie noch nicht mit dem Networking vertraut sind, sollten Sie sich mit den Begriffen vertraut machen, die Sie verstehen müssen, um diesem Lernprogramm folgen zu können.
Bitte beachten Sie, dass die nachstehenden Begriffe und Definitionen absichtlich zu stark vereinfacht wurden. Sie sind für alltägliche Benutzer gedacht, nicht für Sysadmins. Wenn Sie also ein erfahrener Sysadmin sind oder eine CCNA in Ihrer Tasche haben, entschuldigen Sie mich bitte, dass ich nicht in die Details eingehen möchte.
TCP / IP ist ein Protokoll, mit dem Computer über Internet- und Ethernet-Netzwerke miteinander kommunizieren können.
Misserfolg ist der letzte Ausweg.
Stellen Sie sich ein Ethernet-Netzwerk als kleines lokales Netzwerk (LAN - Local Area Network) wie Ihr Heim-PC, Ihr Laptop und Ihr Smartphone. Es ist ein kleines heterogenes Netzwerk, das vom Rest der Welt isoliert ist. Ein Netzwerk solcher Netzwerke kennen wir alle als Internet: eine Reihe miteinander verbundener Netzwerke.
TCP / IP ist eine Kombination aus zwei Protokollen, die auf verschiedenen Ebenen in der Hierarchie der Netzwerkkommunikationskette arbeiten. Wir werden nicht näher auf Details dieser Hierarchie eingehen. TCP steht für Übertragungssteuerprotokoll, Ihre Hauptaufgabe besteht darin, sicherzustellen, dass die Kommunikation erfolgreich ist. Es kontrolliert die Richtigkeit der gesendeten Daten und sichert deren Erfolg. Es gibt verschiedene Algorithmen, um anspruchsvolle Prüfsummen durchzuführen, automatisch zu korrigieren und erneut zu versuchen. Misserfolg ist der letzte Ausweg. Der Name, IP kommt vom Internetprotokoll. Sie können es am besten mit der "Telefonnummer" Ihres PCs verknüpfen. Jedes Gerät, das über das Internet kommunizieren kann, muss über eine IP-Adresse (eindeutige Telefonnummer) verfügen, damit Kommunikationspakete ihre Ziele finden können. EIN Paket ist ein kleines Datenelement innerhalb eines Kommunikationsstroms, der in sich abgeschlossen ist und auf Richtigkeit überprüft werden kann. Im Wesentlichen können wir sagen, dass unsere Computer TCP-Pakete mit dem IP-Protokoll über das Internet senden.
Jede Netzwerkkommunikation ist an ein bestimmtes gebunden Hafen. Netzwerkports reichen von 0 bis 2 ^ 16 (65536). Jede Netzwerkverbindung verfügt über einen ausgehenden Port für den Initiator und einen eingehenden Port für denjenigen, der die Nachrichten anderer Computer überwacht. Es können mehrere Verbindungen zwischen mehreren Computern über identische Ports bestehen. Ein Computer kann jedoch über mehrere Ports gleichzeitig kommunizieren. Grundsätzlich eignen sich Ports zum Identifizieren von Diensten und zum Definieren von Kommunikationskanälen, sie begrenzen jedoch nicht die Daten- oder Verbindungsmenge.
Einige Computer können ähnliche IP-Adressen haben. Möglicherweise haben Sie festgestellt, dass Ihr Computer zu Hause und bei der Arbeit über IP-Adressen verfügt, die die Form von etwas annehmen 192.168.etwas.etwas
, oder 10.0.etwas.etwas
, oder 172.16.etwas.etwas
. Dies sind die sogenannten privaten IP-Adressen, die nur in Ihrem LAN verwendet werden können. Mit solchen IP-Adressen können Sie nicht ins Internet gehen. Sie sind mit den Innennummern für das Telefonnetz Ihres Unternehmens vergleichbar.
EIN Brücke ist das, was Computer mit echten (öffentlichen) IP-Adressen an das Internet weiterleiten.
Grundsätzlich haben diese Computer die Rechte und die Fähigkeit, direkt im Internet miteinander zu kommunizieren. Da es jedoch keine direkten Verbindungen zwischen allen Computern der Welt gibt (dies wäre ziemlich schwierig zu bewerkstelligen), sind Bridges für die Verbindung von Abschnitten des Internets verantwortlich.
Wenn Sie unsere Telefonie-Analogie am Leben erhalten, können Sie sich vorstellen, dass diese Brücken den Telefonzentralen in Ihrer Stadt oder Nachbarschaft ähneln. Wenn Sie eine andere lokale Nummer anrufen (die Computer links in unserem Schema), könnte die Kommunikation direkt von Ihrer Telefonzentrale durch physische Verbindung Ihrer Leitung mit der Ihres Nachbarn erfolgen. Wenn Sie stattdessen jedoch Ihren entfernten Onkel Bob anrufen möchten, muss Ihr Anruf über mehrere Telefonzentralen umgeleitet werden, bis das Telefon Ihres Onkels verbunden werden kann. Diese bilden a Brücke zwischen deiner Stadt und seiner Stadt.
EIN Tor ist eine Möglichkeit für Computer aus einem privaten Netzwerk (LAN mit privaten IP-Adressen), mit anderen Computern im Internet zu kommunizieren.
Ein privates Netzwerk ist wie das private Telefonnetz Ihres Unternehmens. Sie können interne Nummern anrufen, aber wenn Sie jemanden anrufen möchten, der sich außerhalb Ihres Unternehmensnetzwerks befindet, wie z. B. Ihre Frau zu Hause, müssen Sie zuerst eine spezielle Nummer oder ein Präfix wählen.
Computer funktionieren tatsächlich auf ähnliche Weise. Wenn Sie sich in einem privaten Netzwerk befinden, verfügen Sie über einen sogenannten Gateway-Computer. Wenn Ihr Computer versucht, mit einem anderen Computer im Internet zu kommunizieren, wird dies der Fall automagisch Kontaktieren Sie zuerst das Gateway und fordern Sie eine "Leitung" zur Außenwelt an. Das Gateway spricht mit dem im Internet gefundenen Computer und leitet die Nachricht zurück an Ihren Computer. Sie als normaler Benutzer sehen keinen Unterschied zwischen einer Bridge und einem Gateway. Ihr Computer wird wissen, wie er damit umgehen soll.
Eine Firewall ist ein Programm, das auf einem Gateway, einer Bridge oder einem PC / Laptop / Smartphone ausgeführt wird und eingehende, ausgehende und weitergeleitete Netzwerkpakete filtern kann. Eine Firewall ist im Wesentlichen ein Tool, mit dem Sie oder der Zugriff Ihres Netzwerks auf das Internet und den Zugriff einer anderen Person aus dem Internet auf Ihr Netzwerk einschränken können.
Und ja, Ihr Kabelrouter oder WLAN ist eine Firewall für alle Computer und Geräte, die über das Internet mit dem Internet verbunden sind.
Um den Kontext festzulegen, stellen wir uns eine sehr mögliche Netzwerkarchitektur vor. Ich habe gesehen, wie viele kleine Unternehmen so etwas betrieben haben.
Was wir hier haben, ist eigentlich etwas ganz einfaches:
Im folgenden Abschnitt werden wir iptables auf diesem Gateway konfigurieren, damit alle Geräte im Netzwerk eine Verbindung zum Internet herstellen können. Dadurch können wir uns über SSH mit ihm verbinden und externe Mail-Server können den Mail-Server in unserem Netzwerk erreichen - einen Computer, der nicht einmal eine öffentliche IP-Adresse besitzt. nur ein privater.
Der Name von Iptables hat tatsächlich eine Bedeutung in seiner Funktionalität. Es handelt sich um eine Reihe von Tabellen mit IP-Adressen und Ports, an die einige Aktionen angeschlossen sind. In iptable werden diese Tabellen als bezeichnet Ketten. Ein nicht konfiguriertes, leeres iptables könnte folgendermaßen aussehen:
csaba ~ # iptables -L Chain EINGABE (Policy ACCEPT) Zielprotokoll-Quellziel Chain FORWARD (Policy ACCEPT) Zielprotokoll-Quellziel Chain OUTPUT (Policy ACCEPT) Zielprotokoll-Quellziel
Sie können feststellen, dass es drei Hauptketten gibt:
Der Begriff, "Politik AKZEPTIEREN"In Klammern bedeutet, dass ACCEPT als Standardrichtlinie für diese bestimmte Kette festgelegt ist. Wenn für eine Verbindung keine Übereinstimmung besteht, wird diese Regel angewendet. Es gibt drei Hauptkonzepte, die Sie beim Konfigurieren Ihrer Firewall verwenden können:
Es gibt zwei Möglichkeiten, eine neue Regel zu iptables hinzuzufügen. Eine ist, sie am Anfang einer Kette einzufügen. Die andere Option besteht darin, sie an das Ende einer Kette anzuhängen. Warum ist es wichtig, in welcher Reihenfolge die Regeln vorkommen?
Wichtig: iptables prüft die Regeln in einer Kette von oben nach unten. Beim ersten Treffer wird die Suche abgebrochen.
Sie müssen Ihre Regeln so gestalten, dass sie das oben erwähnte Verhalten von iptables berücksichtigen. Nach dem ersten Treffer einer Regel führt iptables die durch die Regel angegebenen Aktionen aus und beendet dann die Suche. Wenn keine Regel mit der aktivierten Verbindung übereinstimmt, gilt die Standardrichtlinie.
Nehmen wir an, wir möchten unseren iptables eine Regel hinzufügen, die es jedem ermöglicht, eine Verbindung zu Port 22 unserer Firewall herzustellen. Port 22 ist der Port für das SSH-Protokoll. Natürlich wird ein guter Serveradministrator diesen Port aus offensichtlichen Gründen aus Gründen der Sicherheit / Unverständlichkeit in etwas Unerwartetes ändern. Dies ist jedoch eine andere Geschichte für ein anderes Tutorial. Wir werden bei 22 bleiben.
csaba ~ # iptables -I EINGABE -i eth0 -p tcp --dport 22 -j ACCEPT csaba ~ # iptables -L Kette EINGABE (Policy ACCEPT) Zieloptionsziel Ziel ACCEPT tcp - überall irgendwo tcp dpt: ssh
Ich nahm an, dass die IP-Adresse, auf die das Internet mit der öffentlichen IP-Adresse gerichtet ist, auf der Netzwerkschnittstelle, genannt wird eth0
. Lassen Sie uns diesen Befehl analysieren:
eth0
--Sport
Version zur Überprüfung des QuellportsSie haben jedoch möglicherweise bereits vermutet, dass diese Regel zu diesem Zeitpunkt nur eine geringe Wirkung hat. Unsere Standardrichtlinie ist ACCEPT. Wenn Sie also ausdrücklich etwas akzeptieren, bieten wir keine zusätzlichen Funktionen. Denken Sie jetzt an den dritten empfohlenen Weg zum Einrichten unserer Firewall: die explizite Regel, um alles, was nicht übereinstimmt, abzulehnen. Fügen wir diese Regel hinzu.
Wir möchten eine Regel hinzufügen, die eingehenden Verkehr blockiert. Aber Vorsicht: Wir wollen nur das blockieren, was schädlich sein könnte. Wenn wir alles blockieren, können wir nichts tun, da die Antworten auf unsere Anfragen abgelehnt werden. Wenn Sie beispielsweise eine Webseite durchsuchen, stellen Sie eine Anfrage und erhalten dann eine Antwort. Diese Antwort kommt in Ihren Computer. Daher müssen wir uns in der INPUT-Kette eine Regel zulassen.
Zuerst fügen wir eine Regel hinzu, um eingehenden Datenverkehr für bereits bestehende Verbindungen zu akzeptieren, z. B. Antworten auf Anforderungen.
csaba ~ # iptables -A INPUT -i eth0 -m conntrack --ctstate ERSTELLT, VERWANDTE csaba ~ # iptables -L-Kette INPUT (Policy ACCEPT) Zieloptionsziel Ziel ACCEPT tcp - überall und überall überall - überall irgendwo ctstate RELATED, ESTABLISHED
Nun, da wir unsere bestehenden Verbindungen und die Antworten auf die Verbindungen, die wir initiiert haben, geschützt haben, können wir alles andere ablehnen, was nicht passt.
csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L Kette INPUT (policy ACCEPT) Zielprotokoll Quellziel ACCEPT tcp - überall und überall tcp dpt: ssh ACCEPT all - überall und überall Verbundene, etablierte DROP tcp - überall und überall
Wir haben eine weitere Zeile angehängt, mit einer Regel, um alle entsprechenden Verbindungen zu DROP. Denken Sie daran: Diese Regel gilt nur, wenn keine der vorherigen übereinstimmt.
Es gibt zwei Möglichkeiten, Verbindungen abzulehnen.
An dieser Stelle haben wir einige grundlegende Regeln für die INPUT-Kette. Wir haben jedoch ein Netzwerk von Computern mit privaten IP-Adressen. Wir müssen einen Zugang zum Internet bieten. Dies geschieht auch durch iptables: die Firewall.
Wahrscheinlich haben Sie diesen Begriff bereits gehört: NAT. Dies bezieht sich auf die Prozedur, eine Netzwerkadresse in eine andere zu übersetzen und die Informationen zwischen den beiden weiterzuleiten. Es wird am häufigsten in Architekturen wie unserer eigenen verwendet. Das Gateway muss NAT machen, um die IP eines Computers vom LAN in seine eigene öffentliche IP und dann zurück zu übersetzen.
Routing ist das Verfahren, mit dem ein System herausfinden kann, über welche Netzwerkschnittstellen und mit welchem Gateway es kommunizieren kann, um sein Ziel zu erreichen. Jeder Computer verfügt über eine eigene Routingtabelle, um dies festzustellen. Iptables können sich an zwei verschiedenen Punkten in dieses Routing-Verfahren einhaken: vor und nach dem Auftreten des Verfahrens.
csaba ~ # iptables -t nat-A POSTROUTING -o eth0 -j SNAT - an die Quelle 89.72.31.243
Dieser Befehl fügt der NATing-Tabelle eine Regel als POSTROUTING hinzu (-nat
). POSTROUTING bedeutet im Wesentlichen, dass die Pakete zuerst den Routing-Mechanismus auf dem Gateway durchlaufen und erst danach geändert werden. Die Regel -j SNAT
bedeutet Source NAT; Die Quelladresse der Pakete wird in die Adresse in der Schnittstelle geändert, die durch angegeben wird -o eth0
- In unserem Fall an die von der Option angegebene IP-Adresse, --zur Quelle
. Wer also von einem Computer in Ihrem Netzwerk kontaktiert wird, geht davon aus, dass er direkt mit Ihrem Gateway spricht. Es wird absolut keine Ahnung haben, dass die Pakete für einen anderen Computer bestimmt sind. Das Gateway verwendet iptables und führt eine interne Liste aller übersetzten IP-Adressen. Wenn eine Antwort eingeht, wird die Änderung rückgängig gemacht und die Antwort an den Computer im Netzwerk weitergeleitet.
Ein anderes Problem, dem wir gegenüberstehen, ist, was zu tun ist, wenn sich ein Server hinter einer Firewall befindet. Wir müssen den Clients, die aus dem Internet kommen, erlauben, auf irgendeine Weise mit unserem Server zu kommunizieren. Dies ist bei unserem Mailserver der Fall. Wenn eine E-Mail eintrifft, die an ein E-Mail-Konto auf unserem Server gesendet werden muss, muss sich der sendende E-Mail-Server mit dem empfangenden E-Mail-Server verbinden.
Unser Mailserver hat jedoch nur eine private IP-Adresse. Es ist nicht möglich, dass ein externer Computer eine direkte Verbindung mit ihm herstellen kann. Auf der anderen Seite hat unser Gateway eine externe IP-Adresse, mit der sich jeder verbinden kann. Die Lösung? Öffnen Sie einen Port an unserem Gateway, damit eine Anforderung aus dem Internet an diesen Port tatsächlich an unseren E-Mail-Server gesendet wird. Die Antwort wird natürlich über das Gateway zum Client zurückgeleitet. Der Trick ist die Verwendung eines anderen NAT-Typs, der als Ziel-NAT bezeichnet wird. Dies ändert das Ziel der Pakete und setzt sie zurück, wenn die Antwort erfolgt. Stellen Sie sich DNAT als das Gegenteil von SNAT vor.
Spitze: Sie kennen diese Funktion möglicherweise als "virtueller Server", wenn Sie schon einmal mit kleinen Heimroutern herumgespielt haben.
csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT - zum Ziel 192.168.1.2:25
Was passiert also hier? Ein Paket kommt an unserem Gateway an Port 25 an (der Port, der für SMTP verwendet wird, das E-Mail-Protokoll, das das gesamte Internet verwendet). Die obige Regel fängt dieses Paket wegen der --dport 25
Option, die im Grunde sagt "Stimmen Sie alles ab, was an diesem Port der von angegebenen Schnittstelle liegt -ich eth0
. Nun, da das Paket übereinstimmt, ändern Sie das Ziel von der aktuellen Maschine (dem Gateway) in das von --zum Zielort
.Msgstr "Bitte beachten Sie, dass Sie den Port explizit hinter der IP - Adresse angeben können, indem Sie ihn durch einen Doppelpunkt trennen.
Beachten Sie schließlich, dass sich dies im PREROUTING-Hook befindet. Das Ziel muss geändert werden, bevor das Routing tatsächlich stattfindet. Andernfalls würden die Pakete auf dem Gateway landen und keinen Weg zum Mailserver finden.
Die Regeln, die Sie einfügen oder an iptables anhängen, befinden sich im Speicher. Spoof: Nach einem Neustart ist alles weg! Um Ihre Konfiguration zu speichern, sollten Sie sie wie folgt in eine Datei sichern:
csaba ~ # iptables-save> /some/directory/my_rules.fw
Der Name der Datei spielt keine Rolle und auch nicht deren Erweiterung. Führen Sie diesen Befehl aus, wenn der Computer gestartet wird, um die Regeln wiederherzustellen.
iptables-restor < /some/directory/my_rules.fw
Wenn Sie sich den gespeicherten Inhalt ansehen, werden Sie feststellen, dass es sich um dieselben Parameter handelt, die wir mit den iptables-Befehlen verwendet haben. Es gibt einige geringfügige Unterschiede, aber Sie können die gespeicherte Datei leicht verstehen und sogar eigene Dateien von Hand schreiben und laden.
Zum Schluss noch ein paar Gedanken darüber, wann und wann keine Firewall mit einem Linux-Computer verwendet werden soll.
Verwenden Sie eine Firewall unter Linux, wenn Sie einen Server konfigurieren (wie in unserem Beispiel ein Gateway) oder wenn Sie einen Computer mit wichtigen Informationen haben, der direkt mit dem Internet verbunden ist. Bevor Sie mit der Konfiguration Ihrer iptables beginnen, sollten Sie die potenzielle Gefahr berücksichtigen. Fragen Sie sich: Ist mein Computer im Internet bekannt? Es gibt ein paar Milliarden Computer da draußen. Wenn Sie nur eines haben, ist die Chance, gezielt zu werden, unglaublich gering. Gibt es Menschen, die direkt an Ihren Informationen interessiert sind? Hacker verschwenden keine Zeit damit, willkürliche Daten in der Hoffnung zu stehlen, dass sie etwas finden. Sie wissen normalerweise, wonach sie suchen, und richten sich dann an die Computer, die die gewünschten Informationen enthalten. Natürlich gibt es unzählige Angriffe auf zufällige Computer, die versuchen, eine Art Wurm oder Virus zu installieren, aber unter Linux sind Sie von Natur aus immun.
Verschwenden Sie nicht Ihre Zeit mit der Konfiguration einer Firewall unter Linux, wenn sich ein Computer immer hinter einer Firewall befindet, wie z. B. Ihrem Heim-PC hinter Ihrem Heimrouter, oder wenn Sie keine besonders wichtigen Informationen auf Ihrem Laptop haben. Wenn Sie die Dienste, die das Netzwerk überwachen, auf ein Minimum beschränken und ein anständig gesichertes Kennwort haben, können Sie Ihre Firewall vergessen. Ich persönlich habe keinen PC, Laptop oder Smartphone mit einer Firewall. Ich habe jedoch einen Heimrouter mit einer gut konfigurierten Firewall.
Ich denke, Sie können diese Ideen auch auf Mac OSX anwenden. Wenn Sie ein Windows-Benutzer sind, entschuldigen Sie sich: Eine Firewall ist Ihre erste Verteidigungslinie. Für Linux oder MacOSX ist eine Firewall jedoch die letzte Verteidigungslinie. Ein sorgfältig ausgewähltes Kennwort, bei dem keine nutzlosen Dienste ausgeführt werden, sollte den Großteil Ihres Computers schützen.
Danke fürs Lesen. Fragen?