PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : linux router iptables



lehrling2
01.08.04, 14:42
hi,

ich habe einen linux-router mit drei netzen:

eth0 = internet-standleitung
eth1 = Server's-LAN mit globalen IP-Adressen ohne NAT

zwischen eth0 und eth1 soll geroutet werden, und alles von eth0 nach eth1 und umgekehrt soll erlaubt sein.
nur der linux-router selbst soll nur von eth1 von einem PC per SSH verbunden werden. alle anderen pakete von eth0 und eth1 an den router sollen gesperrt werden.

wie muss/sollte in diesem fall dir iptables konfiguriert werden?


Gruß
Lehrling

geronet
01.08.04, 14:47
Ich habs jetzt 7 mal (!) gelesen aber immer noch nicht verstanden. Deine Frage scheint in sich unlogisch zu sein.

lehrling2
01.08.04, 16:09
also....

alles von lan-1 nach lan-2 und lan-2 nach lan-1 ist gestattet.
nur alle pakete die direkt an den linux-router mit den 2 netzwerkkarten lan-1 und lan2 gehen sind gesperrt. der router soll nur routen...

verstanden?

gruß
lehrling

<Neo>
01.08.04, 17:28
Wenn ich deine Frage richtig verstanden hab, dann sollen Anfrage vom Internet auf deine Recher auch geroutet werden. Was willst du den laufen lassen? HTTP-Server? SSH?

Wie willst du die Rechner aus dem Internet dann ansprechen? Haben die Rechner in deinem "Heimnetz" eine eindeutige IP im Internet oder nur der Router?

Bubble
01.08.04, 18:42
Bin mir jetzt zwar auch nicht so ganz sicher, aber wie wäre es damit:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

Pakete, die geroutet werden, durchlaufen (zumindest was die filter-Tabelle angeht) nur die Chain FORWARD, daher wird die Policy auf ACCEPT gesetzt und somit alles erlaubt (man könnte auch die Policy auf DROP setzen und passende Regeln aufstellen).

Alle Pakete, die direkt an den Rechner adressiert sind (INPUT) oder direkt vom Rechner weggehen (OUTPUT) sind verboten, die Policy steht hier auf DROP.

Mit diesem Regelwerk kann der Router allerdings auch keine ICMP-Pakete mehr versenden, also muss ggf. nachgearbeitet werden.

Wenn der Rechner nur routen soll müsste das so funktionieren. Btw, was meinst du mit 'globalen IP-Adressen'?
Bubble

mbo
01.08.04, 20:16
Bin mir jetzt zwar auch nicht so ganz sicher, aber wie wäre es damit:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

Pakete, die geroutet werden, durchlaufen (zumindest was die filter-Tabelle angeht) nur die Chain FORWARD, daher wird die Policy auf ACCEPT gesetzt und somit alles erlaubt (man könnte auch die Policy auf DROP setzen und passende Regeln aufstellen).

Alle Pakete, die direkt an den Rechner adressiert sind (INPUT) oder direkt vom Rechner weggehen (OUTPUT) sind verboten, die Policy steht hier auf DROP.

Mit diesem Regelwerk kann der Router allerdings auch keine ICMP-Pakete mehr versenden, also muss ggf. nachgearbeitet werden.

Wenn der Rechner nur routen soll müsste das so funktionieren. Btw, was meinst du mit 'globalen IP-Adressen'?
Bubble
Wäre der Verweis auf das routing-HowTo und auf netfilter.org nicht einfacher gewesen?

@lehrling2:
Das eigentlich Problem besteht darin, daß hier niemand wirklich weiß, was Du erreichen willst.

Kurz knapp zu Deinem SSH: Wenn er nur aus dem Lan erreichbar sein soll, dann binde den sshd über die /etc/ssh/sshd_config auf die ip-adresse der Lan-NIC

cu/2 iae

Bubble
02.08.04, 17:31
Wäre der Verweis auf das routing-HowTo und auf netfilter.org nicht einfacher gewesen?


Ja mag sein - wird aber (immer wieder gerne ;) ) nachgereicht:

http://iptables-tutorial.frozentux.net/iptables-tutorial.html

Bubble

P.S.: Wenn auf dem Router alle nicht benötigten Dienste deaktiviert sind (also bis auf den ssh, der ja - wie mbo schreibt - nur auf den lokalen Adressen lauscht), also *kein* Dienst mehr läuft, dann brauchst du den Paketfilter auch nicht mehr. Ausser natürlich du willst die ICMP-Pakete unterbinden ...
Bubble

mbo
02.08.04, 18:45
also *kein* Dienst mehr läuft, dann brauchst du den Paketfilter auch nicht mehr. Ausser natürlich du willst die ICMP-Pakete unterbinden ...
Bubble
Hm, dann gäbe es aber im Kostenfaktor günstigere Alternativen. Und wenn eh nix laufen soll, wieso dann noch den sshd? Reiche dann net eine Console?
Dann könnte man, wenn es eh ne alte Kiste ist, zB auch das runlevel 0 dahingehend aufräumen, daß alles zu halt und netzwerk nicht gekillt werden und die Maschine dann mit init 0 "härten", da würden auch noch paketfilter laufen.
Oder wie wäre es mit Bridging?
4-Port-Netzwerkkarten mit einem Embedded-Linux haben auch ihren Reiz, für mich persönlich scheiterts leider am Kostenfaktor.

Ach, es gäbe soviele Möglichkeiten ...

Das Problem stellt sich ja wie folgt da:
Er hat wohl 8 IP-Adressen, davon gehen (normalerweise) die Netz- und Broadkastadresse weg. Damit könnte er also alle 6 öffentlichen IP-Adressen auf dem externen INterface binden, und nach innen Nat(ten). Ist ja nicht sein Ziel, sondern die internen Rechner sollen ihre IP-Adressen bekommen. Eine Bridge setzt einen Router seitens des ISP voraus, der im Internet offiziell als Router zu diesen 8 IP-Adressen bekannt ist. Bei Kamp zB ist es so, daß die erste verwendbare IP-Adresse offiziell als Routeradresse eingetragen ist, diese also auf dem externen Interface gebunden wird, damit bleiben noch 5 übrig. Um da ein sauberes Routing hinzubekommen, wird entweder ein zweiter, interner Router benötigt, der über ein zB 10er Netz mit dem externen Router verbunden ist, oder man muß noch eine öffentliche IP-Adresse für den ersten Router opfern, die auf das interne Interface gebunden wird. An dieser Stelle setzen wir mal virtuell den Paketfilter auf. Da wir davon ausgehen, daß nur der sshd, und der auch nur auf dem internen Interface als Dienst erreichbar sein soll, sind die lokalen Regeln relativ vernachlässigbar fürs erste.


LAN=de.in.sub.netz
WELT=0.0.0.0/0


1.) Policy auf DROP, lieber extra erlauben, als etwas vergessen zu verbieten, aber vorher auch noch säubern, ach ja, und ohne Module gehts net


modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp

iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


2.) Das Routing muß natürlich dem Kernel erklärt werden


echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null


3.) Loopbackdevices werden aus Prinzip nicht restricted?


iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


4.) INPUT von extern grundsätzlich verbieten, es sei denn, es betrifft Verbindungen, die schon existieren


iptables -A INPUT -s $LAN -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


3.) forwarden zu beschränken auf einen router macht nur Sinn, wenn er ein Gateway ist, und Clients darüber Kommunizieren könnten, obwohl sie es nicht sollten


iptables -A FORWARD -s $LAN -d $WELT -j ACCEPT
iptables -A FORWARD -s $WELT -d $LAN -j ACCEPT


4.) Was darf alles raus? Eigentlich doch alles, was der Sicherheit nicht wirklich dienlich ist, siehe Trojaner und Backdoors, aber ist im Endeffekt Ermessensfrage und Einstellungssache
Deswegen oben die Policy ACCEPT

5.) Der Rest wäre zB DNAT, schließlich gibt es immer Rechner, die DNS-Server abfragen wollen, die man nicht fragen will, oder VPN oder Telekomseiten sollen nicht angezeigt werden


iptables -A PREROUTING -t nat -p tcp -d irg.end.eine.ip -j DNAT --to-destination $ZIEL


So, ein Schnellkurs, der natürlich in keinster Weise hinsichtlich der Anwendung zu empfehlen wäre, denn wenn, sollte man es höchstens als Einstieg ansehen, und das war erbeten, richtig?

Werd schlau und Glücklich; Ängste, Sorgen, Nöte und Leiden, gehören hier herein ...

cu/2 iae