Ich habe eher ein seltsames Problem. Ich habe einen Server mit zwei Netzwerkschnittstellen eth0
und eth1
. Jeder ist mit einem anderen Netzwerk verbunden. Jedes Netzwerk verfügt über ein Internet-Gateway. Der Server verfügt über verschiedene ausgehende Verbindungen: http (einige Skripte auf den Server Scrape-Websites), NFS-Client, Samba-Client, DNS-Client und ein E-Mail-Abrufprogramm, um nur einige zu nennen.
Aus Gründen, auf die ich nicht eingehen möchte, muss ich diese ausgehenden Clients so aufteilen, dass ausgehender http-, nfs-, samba- und dns-Verkehr nur angefordert wird, eth0
während alles andere durchgeht eth1
.
Ich habe ein paar Google-Suchanfragen gelesen und es sieht so aus, iptables
als würde ich es brauchen, aber ich habe wirklich keine Ahnung. Ich bin nur daran gewöhnt, eingehende Firewall-Regeln zu verwalten ufw
.
Könnte mich jemand mit ein paar Beispielregeln beginnen und mir sagen, wie ich das System dazu bringen kann, diese Regeln beim Booten zu übernehmen? Idealerweise ohne mich von meiner SSH-Verbindung auszuschließen (ich kann physischen Zugang bekommen, aber ich möchte lieber nicht).
Bearbeiten Ich kann die Clients auf zwei Benutzer aufteilen, wenn es möglich ist, den gesamten ausgehenden Datenverkehr von einem Konto auf eine Benutzeroberfläche zu beschränken. Auf dem Papier scheint es vielleicht einfacher zu sein.
quelle
iftop
und sie zeigen jeweils die richtige Art von Verkehr. Ich danke dir sehr.iptables-save
und speichern und wiederherstelleniptables-restore
. Wenn Sie NetworkManager verwenden, können Sie Dispatcher-Skripts einrichten, um den Prozess zu automatisieren. Leider enthält die offizielle NM-Seite keine Dokumentation zu dieser Funktion, aber die Dokumentation zu Ubuntu und Arch Linux erwähnt sie beide.Nun, der " einfachste " Weg sollte sein, die einzelnen Programme anzuweisen, eine bestimmte Schnittstelle (oder die IP-Adresse der Schnittstelle) zu verwenden. Zum Beispiel:
weist ping an, eth1 als Quellschnittstelle zu verwenden, während
Weist wget an , die Schnittstelle zu durchlaufen , die
10.0.0.1
eine IP-Adresse hat.Ehrlich gesagt weiß ich nicht, ob es mit allen Programmen, die Sie benötigen, möglich ist , aber es ist ein Anfang, die Regeln, für
iptables
die Sie schreiben müssen, und dieiproute
Programme zu reduzieren.Zu Beginn sollten Sie dieses Tutorial über mehrere Internetverbindungen lesen . Eine gute Lektüre ist auch eine der Tausenden von Tutorials zu iptables, insbesondere zu
outbound filtering
,process
/pid filtering
undport filtering
.quelle
Der richtige Weg dazu ist, bind () an die Schnittstelle, die Sie für ausgehende Pakete verwenden möchten. Da Sie dann Routen mit den Befehlen
ip route
und einrichtenip rule
können, um zu steuern, wie Pakete basierend auf ihrer ausgehenden Schnittstelle weitergeleitet werden. Für mein Beispiel gehe ich von folgendem Netzwerk aus:Ich werde zwei Routing-Tabellen erstellen, eine für ausgehenden Datenverkehr für eth0 mit dem Namen alternate und eine für eth1 mit dem Namen main. Die Routing-Tabelle main ist immer vorhanden und die normale Tabelle, die von den Befehlen
route
und verwendet wirdip route
. Die meisten Leute beschäftigen sich nie mit anderen Tabellen. Um die Tabelle mit dem Namen alternate zu erstellen, fügen wir die folgende Zeile hinzu/etc/iproute2/rt_tables
:Die Standardpriorität der Tabelle main ist 254. Die Regeln, für die die Routing-Tabelle gilt, werden vom
ip rule
Befehl gesteuert . Standardmäßig druckt dieser Befehl eine Liste der vorhandenen Regeln aus, die ungefähr so aussehen sollten:Dies bedeutet im Grunde, dass nach einer Route in der Tabelle
local
gesucht wird, die eine spezielle Tabelle ist, die vom Kernel für lokale Routen wie z. B. meine eigene IP-Adresse verwaltet wird. Dann werden table main und table default ausprobiert. Die Tabellenvorgabe ist normalerweise leer. Wenn also keine Übereinstimmung in main vorliegt, gibt es keine Route zum Host. Lassen Sie uns zunächst die Tabelle abwechselnd mit den Regeln für eth0 füllen.Normalerweise soll die
alternate
Tabelle ähnlich wie diemain
Tabelle aussehen . Die einzigen Unterschiede bestehen darin, dass das Routing unterschiedlich sein sollte. Möglicherweise möchten Sie die zweite Zeile oben nicht einfügen, wenn der gesamte NFS-, HTTP- usw. Datenverkehr über das Standardgateway auf eth0 geleitet werden soll, auch wenn er für das Netzwerk auf eth1 bestimmt ist. Im nächsten Schritt fügen Sie eine Regel hinzu, wann diese alternative Routingtabelle verwendet werden soll:Diese Regel besagt, dass jeder Datenverkehr, der von einer Adresse im 192.168.0-Netzwerk kommt, die
alternate
Routing-Tabelle anstelle der normalenmain
Tabelle verwendet. Der letzte Schritt besteht darin, sicherzustellen, dass alle Clients, dieeth0
bind verwenden müssen, daran gebunden sind. Mit setzen Siewget
zum Beispiel--bind-address=192.168.0.2
für NFS dasclientaddr=192.168.0.2
Mount-Option. Wenn Sie LibWWW mit Perl verwenden, können Sie die Option localaddr in LWP :: UserAgent festlegen, um die lokale Schnittstelle zu steuern, an die es gebunden ist. Wenn Sie zufällig einen Client haben, den Sie nicht steuern können, können Sie möglicherweise mithilfe einer iptables-Regel die Adresse ändern. Dies ist jedoch eher ein Hack und funktioniert möglicherweise nicht. Sie benötigen eine SNAT-Regel, die in der PREROUTING-Kette der nat-Tabelle oder der mangle-Tabelle eingerichtet ist. Sie benötigen weiterhin die oben angegebenen geänderten Routingtabellen, damit dies funktioniert.quelle