View previous topic :: View next topic |
Author |
Message |
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Tue Jun 14, 2005 4:58 pm Post subject: iptables und eine DMZ-IP, nicht interface |
|
|
Ich möchte heute Abend/Nacht meinen Hardware Router, testweise, gegen einen Gentoo Router ersetzen. Als kleine Hilfe nehme ich das HowTo "Gentoo Home Router Guide" von gentoo.org
Gibt es eine Möglichkeit eine IP des privaten / lokalen Netzes in die DMZ zu nehmen, so das alle Ports offen sind? Ich möchte kein physikalisches Interface dafür verwenden, zudem ich wie die meisten von uns zuhause nur einen L2-Switch habe.
Anregungen, Tips und Code willkommen
Danke im voraus.
Gruß,
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens
Last edited by benjamin200 on Mon Jun 20, 2005 1:31 pm; edited 1 time in total |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 6:15 am Post subject: |
|
|
Hmm... also ich verstehe die Frage noch nicht ganz. Was für eine DMZ hast Du? So eine richtige wie z.B. auf dem Bild hier? Also so wie ich das verstanden habe hast Du nur einen Router, auf einen Seite hängt INet, auf der anderen LAN, korrekt? So und Du möchtest jetzt das ein PC aus dem LAN so zu erreichen wäre, als würde es eine richtige DMZ sein (wie auf dem Bild) und der Rechner liegt darin (und ohne eine neue NIC einzubauen)?
Also wenn dem so ist, dann machst Du ja vermutlich NAT nach außen. Traffic von außen läßt Du nur zu wenn er von drinnen angestoßen wurde:
Auszug:
Code: | iptables -A INPUT -i $EXTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERN -o $INTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTERN -j MASQUERADE |
Dann möchtest Du z.B. einen Webserver im LAN betreiben der von extern erreichbar ist:
Code: | iptables -t nat -A PREROUTING -i $EXTERN -p tcp --dport 80 -m state --state NEW -j DNAT --to $IP-INTERN
iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp -d $IP-INTERN --dport 80 -m state --state NEW -j ACCEPT |
Dieses "alle Ports offen" verwirrt mich noch etwas. Du könntest da z.B. alles von von extern kommt mit --state NEW auf einen Rechner umleiten. Das wäre dann aber so als würde dieser Rechner direkt am (externen) Netz hängen, von daher paßt das dann mit der "DMZ" nicht mehr so recht. |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 6:57 am Post subject: |
|
|
Quote: |
Hmm... also ich verstehe die Frage noch nicht ganz. Was für eine DMZ hast Du? So eine richtige wie z.B. auf dem Bild hier?
|
Morgen Slick,
nein so ein Szenario meine ich nicht.
Quote: |
Dieses "alle Ports offen" verwirrt mich noch etwas. Du könntest da z.B. alles von von extern kommt mit --state NEW auf einen Rechner umleiten. Das wäre dann aber so als würde dieser Rechner direkt am (externen) Netz hängen, von daher paßt das dann mit der "DMZ" nicht mehr so recht.
|
Ich würde es gern erläutern. Eine echte Firewall besitzt ja in der Regel drei Schnittstellen. Externes, Lokales und ein DMZ Interface. Jedes dieser physikalischen Interfaces liegt in einem andren Subnetz und wird durch Policies geschützt.
Wenn du die billigen SOHO-Router kennst, Netgear, SMC etc, kannst hast du nur 2 Schnittstellen, Intern (LAN) und Extern (WAN). Hier kann fast immer eine IP als DMZ angegeben werden, wo Programme die mehrere Ports dynamisch öffnen auch mit diesem Soho Router laufen. Ich wollte einfach mal klären, ob es möglich ist eine sollche DMZ mit iptables zu erstellen?
Hoffe ich habs einigermaßen gut erklären können
Quote: |
Auszug:
Code:
iptables -A INPUT -i $EXTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERN -o $INTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTERN -j MASQUERADE
Dann möchtest Du z.B. einen Webserver im LAN betreiben der von extern erreichbar ist:
Code:
iptables -t nat -A PREROUTING -i $EXTERN -p tcp --dport 80 -m state --state NEW -j DNAT --to $IP-INTERN
iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp -d $IP-INTERN --dport 80 -m state --state NEW -j ACCEPT
|
Kurze Frage dazu: Wo deklarierst du $Extern und $Intern? Hab iptables rules manuell mit Angabe der Interfaces eth0 bzw. ppp0 erstellt. Übersichtlicher wäre eine solche Lösung wie von dir gepostet.
Gruß,
Benjamin _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 7:16 am Post subject: |
|
|
Quote: | hast du nur 2 Schnittstellen, Intern (LAN) und Extern (WAN). |
Genau das was ich meinte.
Quote: | Hier kann fast immer eine IP als DMZ angegeben werden |
Folgende Regeln (ungetestet) sollten allen (neuen) eingehenden (TCP-) Traffic auf eine Maschine umbiegen. "Normaler" Traffic von bestehenden Verbindungen ins LAN ist davon nicht betroffen. Macht genau das was die DMZ-IP-Funktion im Router macht.
Code: | iptables -t nat -A PREROUTING -i $EXTERN -p tcp -m state --state NEW -j DNAT --to $IP-INTERN
iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp -d $IP-INTERN -m state --state NEW -j ACCEPT |
Quote: | Wo deklarierst du $Extern und $Intern? |
Ich benutze nicht das iptables-initscript sondern habe mir ein eigenes initscript für die Reglen geschreiben. So kann ich darin Variablen definieren. Kurz gesagt, ersetze: $EXTERN mit dem dem extern Interface (ppp0), $INTERN mit dem internen Interface (eth0) und $IP-INTERN mit der IP des "DMZ-Host". Wenn Du ein eingenes Init-Script schreiben willst, kann ich heute abend mal ein leere Muster posten. Aber im Prinzip brauchst Dir nur die anderen initscripte anschauen, das Prinzip ist leicht verständlich.
Allerdings solltest Du bei dieser Vorgehensweise wissen was Du tust. Der "DMZ-Host" sollte sicher konfiguriert sein. Du solltest Dir an den anderen Rechner im LAN Paketfilter einrichten um zu verhindern das Traffic zwischen dem "DMZ-Host" und den anderen Rechnern entsteht. Denn der "DMZ-Rechner" ist dann der anfälligste im Netz.
Auf der anderen Seite ist dann der Gentoo-Router vollkommen überflüssig, denn es bringt kaum noch Vorteile. Die kritische Maschine ist ja dann nicht mehr der Router sondern der "DMZ-Host". Von daher kannst Du auch gleich den "DMZ-Host" direkt als Router ans Netz hängen. |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 7:28 am Post subject: |
|
|
Quote: |
Code:
iptables -t nat -A PREROUTING -i $EXTERN -p tcp -m state --state NEW -j DNAT --to $IP-INTERN
iptables -A FORWARD -i $EXTERN -o $INTERN -p tcp -d $IP-INTERN -m state --state NEW -j ACCEPT
|
Danke, genau das wollte ich erreichen.
Quote: |
Wenn Du ein eingenes Init-Script schreiben willst, kann ich heute abend mal ein leere Muster posten. Aber im Prinzip brauchst Dir nur die anderen initscripte anschauen, das Prinzip ist leicht verständlich.
|
Gerne, daran wäre ich natürlich interessiert
Quote: |
Allerdings solltest Du bei dieser Vorgehensweise wissen was Du tust. Der "DMZ-Host" sollte sicher konfiguriert sein. Du solltest Dir an den anderen Rechner im LAN Paketfilter einrichten um zu verhindern das Traffic zwischen dem "DMZ-Host" und den anderen Rechnern entsteht. Denn der "DMZ-Rechner" ist dann der anfälligste im Netz.
Auf der anderen Seite ist dann der Gentoo-Router vollkommen überflüssig, denn es bringt kaum noch Vorteile. Die kritische Maschine ist ja dann nicht mehr der Router sondern der "DMZ-Host". Von daher kannst Du auch gleich den "DMZ-Host" direkt als Router ans Netz hängen.
|
Du hast natürlich Recht, aber manchmal (nicht als dauerlösung) möchte ich die Option einer DMZ haben. Somit ist die Lösung für mich akzeptabel. _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 7:37 am Post subject: |
|
|
Was mir grad noch einfällt, Du könntest das ganze noch etwas sicherer gestalten, wenn Du eth0 2 IPs aus 2 verschiedenen Netzen gibts. In Netz 1 kommen dann die LAN-Rechner, in Netz 2 der "DMZ-Host". Dann kannst/mußt Du den Zugriff aus dem "LAN" auf den "DMZ-Host" und vor allem umgekehrt sehr fein über iptables auf dem Router regeln weil aller Verkehr dann über den Router laufen muss. |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 8:04 am Post subject: |
|
|
Quote: |
Was mir grad noch einfällt, Du könntest das ganze noch etwas sicherer gestalten, wenn Du eth0 2 IPs aus 2 verschiedenen
|
das würde ich hinbekommen...
Quote: |
In Netz 1 kommen dann die LAN-Rechner, in Netz 2 der "DMZ-Host". Dann kannst/mußt Du den Zugriff aus dem "LAN" auf den "DMZ-Host" und vor allem umgekehrt sehr fein über iptables auf dem Router regeln weil aller Verkehr dann über den Router laufen muss.
|
... aber wie spezifiziere ich eth0-lan1 bzw. eth0-lan2? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 8:13 am Post subject: |
|
|
mehrere IPs auf ein interface
/etc/conf.d/net
Code: | config_eth0=(
"192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255"
"192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255"
) |
bei iptables würde ich dann nur mit IPs arbeiten, evt. geht auch eth0:0 bzw. eth0:1 in den regeln, weiß nicht genau, müßtest mal mit ifconfig schauen und testen.
EDIT: Ok, habs mal nachgeschlagen, also die erste Ip sollte eth0 sein, die zweite eth0:0 die dritte eth0:1 usw... die Angaben können dann auch in iptables so verwendet werden.
Code: | iptables ... -i eth0:0 ... |
Solltest aber selbst erstmal antesten, hatte ich bisher kaum was mit zu tun.
Last edited by slick on Wed Jun 15, 2005 8:36 am; edited 1 time in total |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 8:35 am Post subject: |
|
|
Quote: |
mehrere IPs auf ein interface
/etc/conf.d/net
Code:
config_eth0=(
"192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255"
"192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255"
)
bei iptables würde ich dann nur mit IPs arbeiten, evt. geht auch eth0:0 bzw. eth0:1 in den regeln, weiß nicht genau, müßtest mal mit ifconfig schauen und testen.
|
Merci, ich werde es testen Slick.
Achja, mir ist noch was aufgefallen. Der Gentoo Software-Router verhält sich etwas anders als mein Hardware-Router. Wenn ich per öffentlicher IP aus dem lokalen Netz den Router ansprechen will geschieht das woll über das lokale Netz, da z.B. Ports offen sind (nmap öffentlichIP) wenn ich diese von intern scanne.
Denkst du es handelt sich um einen Fehler in meinen iptables oder checkt iptables ab das die Anfrage von intern an den Routern nicht übers Internet gehen muss und leitet somit direkt aufs lokale Netz um? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 8:46 am Post subject: |
|
|
Hmm.. kann ich leider nicht mit Gewissheit beantworten. Vielleicht hat noch ein Netzwerk-Guru eine Antwort?
Aber ich _vermute_ es läuft wie folgt:
Du beginnst von intern die externe IP anzusprechen. Das geht über NAT raus und ein Eintrag in der NAT-Tabelle wird erstellt das dies von intern initialisiert wurde. Jetzt kommt das Paket von "extern" wieder rein und in der NAT-Tabelle steht das es das darf. Von daher ist von innen gesehen außen alles offen. |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 9:08 am Post subject: |
|
|
Quote: |
Du beginnst von intern die externe IP anzusprechen. Das geht über NAT raus und ein Eintrag in der NAT-Tabelle wird erstellt das dies von intern initialisiert wurde. Jetzt kommt das Paket von "extern" wieder rein und in der NAT-Tabelle steht das es das darf. Von daher ist von innen gesehen außen alles offen.
|
So sehe ich das auch (jedenfalls so ähnlich).
Quote: |
Vielleicht hat noch ein Netzwerk-Guru eine Antwort?
|
Ja, wäre interessant. Netzwerk-Guru bitte melden! _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Wed Jun 15, 2005 9:46 am Post subject: |
|
|
Hi,
ohne das jetzt wirklich rauszutracen (und daher ohne Anspruch auf Richtigkeit) würde ich sagen es läuft in etwa so:
- Paket kommt von 'innen'
- es wird gegen die Rulebase gecheckt ob es erlaubt wird
- Source-IP-wird umgeNATed auf 'IP von ppp0'
- Paket wird an Dest-IP geschickt (ebenfalls IP von ppp0)
Da nun normalerweise die FW-Regeln so aussehen das lokal<->lokal grundsätzlich erlaubt ist trifft das auch auf dieses Paket zu und ist daher auch erlaubt.
Bau dir mal eine Regel ein die genau das verbietet und du weißt ob ich recht habe
HTH
T. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 9:51 am Post subject: |
|
|
Quote: |
Bau dir mal eine Regel ein die genau das verbietet und du weißt ob ich recht habe
|
bin leider noch nicht so fit in iptables, wenn du mir vielleicht behilflich sein könntest?
eth0 ist mein lokales-Netz
eth1 inteface für dsl, hierüber wird ppp0 initialisiert
ppp0 DSL-Vebrindung zu ISP
Meine Iptables richten sich nach dem Home-Router-Guide auf Gentoo, bis auf die Änderungen von eth1 auf ppp0, damit auch das Richtige Interface gefiltert wird.
Home-Router-Guide
Quote: |
Code Listing 5.3: Setting up iptables
First we flush our current rules
# iptables -F
# iptables -t nat -F
Then we lock our services so they only work from the LAN
# iptables -I INPUT 1 -i eth0 -j ACCEPT
# iptables -I INPUT 1 -i lo -j ACCEPT
# iptables -A INPUT -p UDP --dport bootps -i ! eth0 -j REJECT
# iptables -A INPUT -p UDP --dport domain -i ! eth0 -j REJECT
(Optional) Allow access to our ssh server from the WAN
# iptables -A INPUT -p TCP --dport ssh -i eth1 -j ACCEPT
Drop TCP / UDP packets to privileged ports
# iptables -A INPUT -p TCP -i ! eth0 -d 0/0 --dport 0:1023 -j DROP
# iptables -A INPUT -p UDP -i ! eth0 -d 0/0 --dport 0:1023 -j DROP
Finally we add the rules for NAT
# iptables -I FORWARD -i eth0 -d 192.168.0.0/255.255.0.0 -j DROP
# iptables -A FORWARD -i eth0 -s 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -A FORWARD -i eth1 -d 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Tell the kernel that ip forwarding is OK
# echo 1 > /proc/sys/net/ipv4/ip_forward
# for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
This is so when we boot we don't have to run the rules by hand
# /etc/init.d/iptables save
# rc-update add iptables default
# nano /etc/sysctl.conf
Add/Uncomment the following lines:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
|
_________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Wed Jun 15, 2005 10:01 am Post subject: |
|
|
es steht schon eindeutig in deinen Regeln das es erlaubt ist.
Das NAT findet erst in POSTROUTING statt, d.h. als letzter Schritt bevor das Paket auf die Reise geht.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Vorher erlaubst du aber schon das alles was 192.168.0.0/16 ist grundsätzlich alles darf nach 'wurscht wohin'
iptables -A FORWARD -i eth0 -s 192.168.0.0/255.255.0.0 -j ACCEPT
Was von eth0 kommt darf auf alles zugreifen das die Maschine anbietet- und von daher kommt das Paket ja
iptables -I INPUT 1 -i eth0 -j ACCEPT
Ergo -> von intern darfst du auf deine externe IP alles. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 10:05 am Post subject: |
|
|
Aber nicht vergessen eth1 =/= ppp0
http://www.gentoo.org/doc/de/home-router-howto.xml wrote: | Warning: Wenn das DSL-Interface läuft, erstellt es ppp0. Obwohl Ihre NIC eth1 genannt wird, ist die IP tatsächlich an ppp0 gebunden. Von jetzt an, wenn Sie ein Beispiel sehen, das 'eth1' nutzt, ersetzen Sie es mit 'ppp0'. |
|
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 11:22 am Post subject: |
|
|
Quote: |
Aber nicht vergessen eth1 =/= ppp0
|
hab ich angepasst:
Quote: |
Meine Iptables richten sich nach dem Home-Router-Guide auf Gentoo, bis auf die Änderungen von eth1 auf ppp0, damit auch das Richtige Interface gefiltert wird.
|
Quote: |
es steht schon eindeutig in deinen Regeln das es erlaubt ist.
Das NAT findet erst in POSTROUTING statt, d.h. als letzter Schritt bevor das Paket auf die Reise geht.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Vorher erlaubst du aber schon das alles was 192.168.0.0/16 ist grundsätzlich alles darf nach 'wurscht wohin'
iptables -A FORWARD -i eth0 -s 192.168.0.0/255.255.0.0 -j ACCEPT
Was von eth0 kommt darf auf alles zugreifen das die Maschine anbietet- und von daher kommt das Paket ja
iptables -I INPUT 1 -i eth0 -j ACCEPT
Ergo -> von intern darfst du auf deine externe IP alles.
|
Danke, nun ist ja damit alles klar. Die Policies werde ich noch verschärfen müssen. Alles soll aus dem internen Netz nun auch wieder nicht erlaubt werden. Slick wollte mir heute eine Pre-Config schicken, die bestimmt für mich interessant ist
Danke an euch beide. _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 1:42 pm Post subject: |
|
|
Schützt die oben genannte Regel (angepasst mit ppp0) vor ...
Quote: |
Angriffsvektor IP-Spoofing - Mittel gegen die Angriffe
Das einfachste Mittel gegen IP-Spoofing ist die Verwendung vernünftiger Regeln in der Firewall. Ist dem Administrator erst bewusst, dass IP-Spoofing in der Praxis existiert, dann gilt zumindest eine Firewall-Regel: Die Firewall muss von außen eingehende Pakete daraufhin überprüfen, ob deren IP-Header aus der IP-Range des internen Netzes stammen. Ist das der Fall, handelt es sich mit Sicherheit um eine gefälschte Adresse und beim Paket möglicherweise um einen Angriffsversuch, denn die internen Adressen befinden sich ja auf der anderen Seite der Firewall. Mit anderen Worten: Eingehende Pakete mit Adressen aus dem internen Adressbereich müssen blockiert werden.
|
... IP-Spoofing?
Ich finde keinen Bezug der dies verbietet bzw. erlaubt. Bin mir aber nicht sicher. _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 1:53 pm Post subject: |
|
|
Bei einem NAT hast Du diese Problematik weniger. Wenn Du mit ... -m state --state ESTABLISHED,RELATED ... arbeitest führt iptables eine Liste welche Verbindungen von wo nach wo aufgebaut wurden und läßt deren Antworten von draußen wieder rein. Und wenn ein Angreifer extern die interne IP als Quelle hättest wie Du im LAN, würde das Paket dennoch nicht durchkommen, solange der Angreifer nicht weiß oder errät was grad eben in Deiner NAT-Tabelle steht was "reindarf". D.h. bei einem typischen und sauberen NAT bist Du save es sei denn der Angreifer fälscht die passenden Pakete zu einer Deiner bestehenden Verbindungen. Äußerst aufwendig schätze ich mal und wahrscheinlich wenig sinnbringend. Das Problem IP-Spoofing ist eher bei "normalen" Routern ohne NAT (oder schlechten iptables-Regeln)
Last edited by slick on Wed Jun 15, 2005 2:06 pm; edited 3 times in total |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Wed Jun 15, 2005 2:00 pm Post subject: |
|
|
Trotzdem ist es kein Schaden die Möglichkeit des Spoofens abzustellen
entnomen aus dem Gentoo Security Handbuch
Code: | # for i in /proc/sys/net/ipv4/conf/*; do
/bin/echo "1" > $i/rp_filter
done |
Es wird geprüft ob das jeweilige Paket das da ankommt überhaupt von dort kommen kann (via routing table) und wenn nicht verworfen. _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 2:00 pm Post subject: |
|
|
Quote: |
Äußerst aufwendig schätze ich mal und wahrscheinlich wenig sinnbringend. Das Problem IP-Spoofing ist eher bei "normalen" Routern ohne NAT (oder schlechten iptables-Regeln)
|
Danke für deine Antwort. Ich müsste es also mit mstate realisieren?
Sind die Regeln aus dem Gentoo Home Router Guide gut? Immerhin habe ich gelesen, das die PREROUTING Funktion/Regel als erstes und nicht zum Schluss gesetzt wird. Im Guide jedoch als letztes. Ist das schlichtweg egal oder ist das Not Save?
Siehe:
http://iptables-tutorial.frozentux.net/iptables-tutorial.html _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 2:06 pm Post subject: |
|
|
Meine EDIT von oben hier angehangen, zwecks Übersicht
Die einfachste NAT-Box sieht daher so aus (wenn Default-Policie DROP oder REJECT) und ist save
Code: |
# Zugriff vom LAN auf den Router erlauben:
iptables -A INPUT -i $INTERN -j ACCEPT
# Zugriff von aus dem LAN über den Router nach draußen erlauben
iptables -A FORWARD -i $INTERN -o $EXTERN -j ACCEPT
# Zugriff des Routers selbst nach draußen erlauben
iptables -A OUTPUT -o $EXTERN -j ACCEPT
# Zugriff von außen auf den Router nur erlauben wenn Verbindung bereits besteht (kann ja nur von innen sein)
iptables -A INPUT -i $EXTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
# Zugriff von außen über den Router in LAN nur erlauben wenn Verbindung bereits besteht (kann ja nur von innen sein)
iptables -A FORWARD -i $EXTERN -o $INTERN -m state --state ESTABLISHED,RELATED -j ACCEPT
# alle ausgehenden Pakete in die NAT Tabelle eintragen die dann von ESTABLISHED,RELATED gelesen wird
# und Absenderadresse auf Externe Adresse ändern
iptables -t nat -A POSTROUTING -o $EXTERN -j MASQUERADE |
Last edited by slick on Wed Jun 15, 2005 2:16 pm; edited 1 time in total |
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 2:07 pm Post subject: |
|
|
Quote: |
Trotzdem ist es kein Schaden die Möglichkeit des Spoofens abzustellen
entnomen aus dem Gentoo Security Handbuch
Code:
# for i in /proc/sys/net/ipv4/conf/*; do
/bin/echo "1" > $i/rp_filter
done
Es wird geprüft ob das jeweilige Paket das da ankommt überhaupt von dort kommen kann (via routing table) und wenn nicht verworfen.
|
@Think4UrS11
Klasse das wäre also die Lösung des Problems. Merci
@slick
wann kannst du die iptables vorlage posten? _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 2:18 pm Post subject: |
|
|
Sagen wir mal so ab max. 17:30. Bin noch @work |
|
Back to top |
|
|
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Wed Jun 15, 2005 3:21 pm Post subject: |
|
|
Hier mein Initscript. Habs etwas gekürzt... sollte verständlich sein.
Bei den Regeln bin ich einen etwas anderen Weg gegangen, ich baue mir eigene "Kanäle" für die ich dann jeweils einzeln bessern die Regeln vergeben kann. Ist für mich übersichtlicher. z.B. alles FORWARD von EXT nach INT ist im "Kanal" FWD_EXT_INT. Man muß nur beachten das es die vorher "Kanäle" exitieren, bevor man die Pakete da rein schiebt.
Dieses Script muß nach der Erstellung nach rp-pppoe (also wenn es ppp0 schon gibt) laufen, da sonst iptables natürlich das Interface nicht findet. Evt. Funktion depend() anpassen.
Wenn Fragen, dann fragen.
Code: | #!/sbin/runscript
depend() {
need net
}
# ping von extern erlauben (0|1)
ALLOW_PING=1
# ping-versuche loggen (0|1)
LOG_PING=1
# Geräte definieren
INT="eth0"
EXT="ppp0"
# Pfad zu interfaces
IPV4PATH="/proc/sys/net/ipv4"
flush() {
# alle regeln löschen, alle verbindungen sperren
if test -r /proc/net/ip_tables_names; then
for name in `cat /proc/net/ip_tables_names`; do
iptables -F -t $name
iptables -X -t $name
done;
fi
iptables -F
iptables -X
iptables -Z
iptables -P INPUT REJECT
iptables -P FORWARD DROP
iptables -P OUTPUT REJECT
tc qdisc del dev $EXT root &> /dev/null
tc qdisc del dev $EXT ingress &> /dev/null
}
# nach allen Programmen prüfen
checkconfig() {
if [ ! -x "$(which iptables)" ] ; then
eerror "iptables need to be installed"
return 1
fi
}
start() {
checkconfig || return 1
ebegin "Starting NAT"
# Interface-Konfiguration setzen
echo "0" > $IPV4PATH/ip_forward
echo "0" > $IPV4PATH/ip_dynaddr
echo "1" > $IPV4PATH/tcp_syncookies
echo "1" > $IPV4PATH/icmp_echo_ignore_broadcasts
echo "0" > $IPV4PATH/icmp_echo_ignore_all
echo "1" > $IPV4PATH/icmp_ignore_bogus_error_responses
echo "1" > $IPV4PATH/conf/all/rp_filter
echo "0" > $IPV4PATH/conf/all/accept_redirects
echo "0" > $IPV4PATH/conf/all/accept_source_route
# Default Policy und flush
flush
# incoming traffic in INT
iptables -N INP_INT
iptables -A INP_INT -j ACCEPT
# outgoing traffic on INT
iptables -N OUT_INT
iptables -A OUT_INT -j ACCEPT
# incoming traffic in EXT
iptables -N INP_EXT
iptables -A INP_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ssh
iptables -A INP_EXT -p tcp --dport 22 -j ACCEPT
# ping nach config loggen
if [ "${LOG_PING}" == "1" ] ; then
iptables -A INP_EXT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j LOG --log-level info --log-prefix "PING: "
fi
# ping nach config freigeben
if [ "${ALLOW_PING}" == "1" ] ; then
iptables -A INP_EXT -p icmp --icmp-type echo-request -j ACCEPT
fi
# outgoing traffic on EXT
iptables -N OUT_EXT
iptables -A OUT_EXT -j ACCEPT
# forward from INT > EXT
iptables -N FWD_INT_EXT
iptables -A FWD_INT_EXT -j ACCEPT
# forward from EXT > INT
iptables -N FWD_EXT_INT
iptables -A FWD_EXT_INT -m state --state ESTABLISHED,RELATED -j ACCEPT
# in eigene Regeln schieben
iptables -A INPUT -i $INT -j INP_INT
iptables -A OUTPUT -o $INT -j OUT_INT
iptables -A INPUT -i $EXT -j INP_EXT
iptables -A OUTPUT -o $EXT -j OUT_EXT
iptables -A FORWARD -i $INT -o $EXT -j FWD_INT_EXT
iptables -A FORWARD -i $EXT -o $INT -j FWD_EXT_INT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Masquerade
iptables -A POSTROUTING -t nat -o $EXT -j MASQUERADE
# MTU
iptables -A FORWARD -p TCP --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmt
echo "1" > $IPV4PATH/ip_dynaddr
echo "1" > $IPV4PATH/ip_forward
eend $?
}
#
stop() {
checkconfig || return 1
ebegin "Stopping NAT"
echo "0" > $IPV4PATH/ip_forward
echo "0" > $IPV4PATH/ip_dynaddr
flush
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i $INT -j ACCEPT
iptables -A OUTPUT -o $INT -j ACCEPT
iptables -A INPUT -i $EXT -j REJECT
iptables -A OUTPUT -o $EXT -j REJECT
eend $?
}
|
|
|
Back to top |
|
|
benjamin200 Veteran
Joined: 01 Feb 2004 Posts: 1426 Location: DE Munich
|
Posted: Wed Jun 15, 2005 3:32 pm Post subject: |
|
|
Danke Slick,
ich werde das heute Abend mal ausprobieren. Bin leider immer noch @work. Mal sehen ob ich das heute noch hinbiegen.
Den Vorschlag von Think4UrS11 mit IP-Spoofing Detection im Kernel wirst du auch aktivieren, nehme ich mal an! _________________ Gentoo Linux Stage1 / Kernel 2.6.18
AMD Athlon64 3500+ on Asus A8N-E / 1024 MB DDR-RAM / ATI X700 PCIe
Take LINUX and forget Blue Screens |
|
Back to top |
|
|
|