Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 19. Nov 2018 22:38

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 03. Apr 2009 15:23 
Offline

Registriert: 03. Apr 2009 14:57
Beiträge: 3
Hallo zusammen, ich hoffe bei euch ein bisschen Hilfe zu finden, da ich leider leicht überfordert bin, als relativer Linuxneuling, der dazu gaaanz komplizierte Terminalsachen nicht mag, ein Script aufzusetzen, welches das Netzwerk meiner Arbeit schützt. Vielleicht ein bisschen dazu, wie es bei uns aussieht: Wir haben ca. 15-20 Rechner (zumeist Windows, hoffentlich schaffen wir nach und nach den Wechsel) und leider nur eine Möglichkeit über Modem ins Internet zu kommen. Das Problem ist, dass der peruanische Anbieter, von dem wir abhängig sind, sehr unzuverlässig ist, sodass wir gerne einen Computer (unserer Linux Firewall-Router) aufsetzen wollen, der morgens mit 2 Modems sich einwählt und dann für den Tag das Internet bereitstellt und gleichzeitig noch unsere Rechner schützt. Nach vielem Suchen im Internet habe ich mir jetzt so einiges über iptables angelesen und bin mir immer noch ziemlich sicher es nicht verstanden zu haben. Was ich mit dem folgenden Script erreichen möchte, ist wie gesagt, dass die Computer, die sich über den Firewall-Router einwählen geschützt sind, jedoch normal im Internet arbeiten können. Ich würde mich freuen, wenn ihr mein Script mal durchsehen könnt (ist sehr zusammen gebastelt, kann also grobe Fehler enthalten) und mir sagt, was ich ändern muss, wie ich das realisieren kann und ob es sinnvoll ist, welche Ports ich öffne und welche nicht.
Code:
# Firewallscript mit iptables
#
#!/bin/bash

INTERN=192.168.100.0/255
INTERN-DEV=eth0
EXTERN-DEV=ppp0
IPTABLES=/sbin/iptables

NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
INPUT_INTERNET_TCP_PORT="443,22"

case $1 in 
        start) 
                $0 stop 

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

echo 1 > /proc/sys/net/ipv4/ip_forward
echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
echo "1" > /proc/sys/net/ipv4/conf/$EXTERN-DEV/rp_filter

                #Defines the INPUT rules

$IPTABLES -t filter -A INPUT  -i lo -j ACCEPT
$IPTABLES -t filter -A INPUT -p icmp -j ACCEPT
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport $INPUT_INTERNET_TCP_PORT -j ACCEPT
$IPTABLES -t filter -A INPUT -p tcp ! --syn -j ACCEPT #syn packages
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -s 195.58.160.0/16 -p udp -j ACCEPT          #Nameserver 
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -s 195.58.161.0/16 -p udp -j ACCEPT          #Nameserver 
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -p udp --dport 53 -j ACCEPT


                #Defines the OUTPUT rules 


$IPTABLES -t filter -A OUTPUT -p icmp  -j ACCEPT 
$IPTABLES -t filter -A OUTPUT -o lo -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $EXTERN_DEV -d 0.0.0.0/0 -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT #Outgoing ftp
$IPTABLES -t filter -A OUTPUT -p tcp ! --syn -j ACCEPT #syn packages


                #Defines the NAT rules 

$IPTABLES -A POSTROUTING -t nat -p tcp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p udp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p icmp -o $EXTERN_DEV -s $INTERN -j MASQUERADE
$IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT
$IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT 
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -j LOG --log-prefix "~~FILTER~~ FORWARD TCP! " --log-ip-options
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p udp -j LOG --log-prefix "~~FILTER~~ FORWARD UDP! " --log-ip-options



                echo "Firewall & Routing activated" 

        ;; 

        stop) 
                $IPTABLES -t filter -F INPUT 
                $IPTABLES -t filter -F OUTPUT 
                $IPTABLES -t filter -F FORWARD 
                $IPTABLES -t nat -F POSTROUTING 
        ;; 

        restart) 
                $0 start 
        ;; 

        *) 
                echo "Usage: $0 {startwd|stop|restart}" 
        ;; 

esac 
Vielen Dank für eure Hilfe. Könnt ihr mir ausserdem sagen, ob es möglich ist, dieses Script so abzuändern, dass es für 2 Modems gilt. Muss ich diese dann über die interfaces als z.B. ppp0 und ppp1 einrichten?

Liebe Grüsse God´s disciple


Nach oben
   
BeitragVerfasst: 03. Apr 2009 18:59 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Prinzipiell sieht das schon sehr vernünftig aus. Welche Distribution benutzt du?
Zitat:
Code:
# Firewallscript mit iptables
#
#!/bin/bash

INTERN=192.168.100.0/255
Das muss 192.168.100.0/24 heißen.
Zitat:
Code:
INTERN-DEV=eth0
EXTERN-DEV=ppp0
IPTABLES=/sbin/iptables

NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
INPUT_INTERNET_TCP_PORT="443,22"

case $1 in 
        start) 
                $0 stop 

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
Flushen der Regeln immer erst *nachdem* die Policy auf DROP gestellt wurde! Sonst gibt es eine kurze Lücke, in der die Firewall alles akzeptiert. Die Lücke kann auch verlängert werden, wenn man das Skript suspendiert oder der OOM-Killer zuschlägt.

Außerdem ist es sinnvoll, nicht nur die Filter-Chains sondern auch alle anderen Chains zu flushen, wenn man mit Masquerading/Mangling rumbaut.
Zitat:
Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
echo "1" > /proc/sys/net/ipv4/conf/$EXTERN-DEV/rp_filter

                #Defines the INPUT rules

$IPTABLES -t filter -A INPUT  -i lo -j ACCEPT
Sinnvoll.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -p icmp -j ACCEPT
ICMP zu akzeptieren ist sinnvoll, nur Nachrichten vom Typ "redirect" sollte man filtern, da dadurch die Routingtabellen von außen manipuliert werden können.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Sinnvoll.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport $INPUT_INTERNET_TCP_PORT -j ACCEPT
Dies erlaubt alle Dienste, die oben in INPUT_INTERNET_TCP_PORT eingestellt sind. Diese Liste solltest du an die Dienste anpassen, die ihr zum Internet hin freigeben wollt. Es kann sinnvoll sein, ssh auf einem anderen Port als Port 22 laufen zu lassen, da hier relativ viele automatisierte Einbruchsversuche stattfinden. Generell den direkten root-Login per ssh abschalten, am besten Login per Kennwort generell verbieten, alles per Key machen.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -p tcp ! --syn -j ACCEPT #syn packages
Der Kommentar ist falsch. Diese Regel erlaubt alle *nicht*-SYN-Pakete, also alle Pakete, die zu einer bestehenden TCP-Verbindung gehören. Eigentlich ist das doppelt gemoppelt, denn zuvor werden ja über State-Matching ohnehin alle Pakete erlaubt, die zu einer bestehenden Verbindung gehören.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -s 195.58.160.0/16 -p udp -j ACCEPT          #Nameserver 
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -s 195.58.161.0/16 -p udp -j ACCEPT          #Nameserver 
$IPTABLES -t filter -A INPUT -i $EXTERN_DEV -p udp --dport 53 -j ACCEPT
Der Adressbereich des Nameservers ist Quark. Entweder muss das 195.58.160.0/24 oder 195.58.0.0/16 sein. der zweite entsprechend.
Die erste und zweite Regel erlaubt alle UDP-Pakete aus diesem Netzbereich, sollte man auf --dport 53 beschränken.
Außerdem erlaubt die dritte Regel Pakete von *allen* Rechnern überhaupt, solange diese nur auf UDP Port 53 kommen. Musst du streichen, sonst sind Regel 1 und 2 sinnlos.
Zitat:
Code:
                #Defines the OUTPUT rules 

$IPTABLES -t filter -A OUTPUT -p icmp  -j ACCEPT 
$IPTABLES -t filter -A OUTPUT -o lo -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $EXTERN_DEV -d 0.0.0.0/0 -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT #Outgoing ftp
$IPTABLES -t filter -A OUTPUT -p tcp ! --syn -j ACCEPT #syn packages
Es ist meist nicht sinnvoll, ausgehende Pakete zu filtern, es sei denn, du willst deine Benutzer gängeln -- und dann suchen und finden sie eine Lücke (z.B.via HTTPS-Proxy). Stell einfach die Output-Policy auf ACCEPT.
Zitat:
Code:
                #Defines the NAT rules 

$IPTABLES -A POSTROUTING -t nat -p tcp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p udp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p icmp -o $EXTERN_DEV -s $INTERN -j MASQUERADE
Sinnvoll. Wobei der kanonische Weg eigentlich ist, einfach alle Protokolle zu masqueraden.
Zitat:
Code:
$IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT
$IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT 
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Das ist jetzt wieder zu kompliziert und gleichzeitig lückenhaft. Grundproblem: Die Forward-Chain ist sowohl für Pakete vom Internet in das interne Netz als auch andersrum zuständig. Es wird hier nun aber zwischen rein und raus nur anhand der IP-Adresse und anderer Inhalte des Paketes unterschieden. Viel einfacher und wasserdichter ist es, das per Bindung an das Input-Interface (-i) zu machen. Und außerdem die Portregeln von innen nach außen wegwerfen, Benutzergängelung!
Zitat:
Code:
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -j LOG --log-prefix "~~FILTER~~ FORWARD TCP! " --log-ip-options
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p udp -j LOG --log-prefix "~~FILTER~~ FORWARD UDP! " --log-ip-options
Musst du selbst wissen, ob du diese Logs überhaupt lesen willst. Da steht nur drin, ob ein Benutzer einen "verbotenen" Port benutzen wollte. Sinnlos.
Zitat:
Code:
                echo "Firewall & Routing activated" 

        ;; 

        stop) 
                $IPTABLES -t filter -F INPUT 
                $IPTABLES -t filter -F OUTPUT 
                $IPTABLES -t filter -F FORWARD 
                $IPTABLES -t nat -F POSTROUTING 
Wieder dasselbe wie oben: Erst Policy einstellen, dann Chains flushen.
Zitat:
Code:
        ;; 

        restart) 
                $0 start 
        ;; 

        *) 
                echo "Usage: $0 {startwd|stop|restart}" 
        ;; 

esac 
Vielen Dank für eure Hilfe. Könnt ihr mir ausserdem sagen, ob es möglich ist, dieses Script so abzuändern, dass es für 2 Modems gilt. Muss ich diese dann über die interfaces als z.B. ppp0 und ppp1 einrichten?
Sollen die zwei Modems alternativ benutzt werden oder gleichzeitig? Wenn letzteres, musst du auch noch die Kanalbündelung einrichten.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags: Vielen Dank schonmal
BeitragVerfasst: 06. Apr 2009 14:26 
Offline

Registriert: 03. Apr 2009 14:57
Beiträge: 3
Hey,
vielen Dak für deine Hilfe. Ich habe jetzt versucht deine änderungen umzusetzen und das Script neu geschrieben. Manchmal habe ich eine Anmerkung gemacht, wenn ich etwas nicht verstanden habe. Wenn du es nochmal durchsehen könntest und mir bei den unklaren Stellen helfen könntest und sagen könntest, ob ich sonst alles wichtige habe, wäre ich dir dankbar.
Benutze übrigens Ubuntu 8.10.
Kann man da irgendwie zwei Modemverbindungen (noch ne richtig schön langsame telefonleitung) bündeln, dass der Rechner die als eine Verbindung ansieht? Oder muss ich dann auch in dem Script alle regeln für zum Beispiel ppp0 und ppp1 aufstellen?
Code:
# Firewallscript mit iptables
#
#!/bin/bash

INTERN=192.168.100.0/24
INTERN-DEV=eth0
EXTERN-DEV=ppp0
IPTABLES=/sbin/iptables

NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
INPUT_INTERNET_TCP_PORT="443,22"

case $1 in 
        start) 
                $0 stop 

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
$IPTABLES -F PREROUTING
$IPTABLES -F POSTROUTING


echo 1 > /proc/sys/net/ipv4/ip_forward
echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
echo "1" > /proc/sys/net/ipv4/conf/$EXTERN-DEV/rp_filter

                #Defines the INPUT rules

$IPTABLES -t filter -A INPUT  -i lo -j ACCEPT
$IPTABLES -t filter -A INPUT -p icmp -j ACCEPT 
# Wie schaffe ich es die Nachrichten vom Typ "redirect" zu filtern? - $IPTABLES -t filter -A INPUT -p redirect DROP - richtig?
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport 
$INPUT_INTERNET_TCP_PORT -j ACCEPT

# "Es kann sinnvoll sein, ssh auf einem anderen Port als Port 22 laufen zu lassen,
# da hier relativ viele automatisierte Einbruchsversuche stattfinden.
# Generell den direkten root-Login per ssh abschalten, am besten Login per Kennwort generell verbieten,
# alles per Key machen."

# Diesen Kommentar verstehe ich nicht ganz, wie stelle ich ein, dass ssh über einen anderen Port läuft
# und dass man sich nicht direkt als root anmelden kann oder, dass man einen key braucht?


                #Defines the NAT rules 

$IPTABLES -A POSTROUTING -t nat -p tcp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p udp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p icmp -o $EXTERN_DEV -s $INTERN -j MASQUERADE

# Wie masquerade ich alle Protokolle, in dem ich nichts spezifiziere? - $IPTABLES -A POSTROUTING -t nat -p -o $EXTERN_DEV -s $INTERN -j MASQUERADE - richtig?

$IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT
$IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT 
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Das ist jetzt wieder zu kompliziert und gleichzeitig lückenhaft.
# Grundproblem: Die Forward-Chain ist sowohl für Pakete vom Internet in das interne Netz
# als auch andersrum zuständig. Es wird hier nun aber zwischen rein
# und raus nur anhand der IP-Adresse und anderer Inhalte des Paketes unterschieden.
# Viel einfacher und wasserdichter ist es, das per Bindung an das Input-Interface (-i) zu machen.
# Und außerdem die Portregeln von innen nach außen wegwerfen, Benutzergängelung!

# Kannst du mir die einfache und wasserdichte Regel grade so aufschreiben, versteh noch nicht ganz,
# wie sie aussehen müsste. Gerne auch mit Erklärung, man lernt ja gerne dazu.


                echo "Firewall & Routing activated" 

        ;; 

        stop) 
		$IPTABLES -P INPUT DROP
		$IPTABLES -P OUTPUT ACCEPT
		$IPTABLES -P FORWARD DROP

		$IPTABLES -F INPUT
		$IPTABLES -F FORWARD
		$IPTABLES -F OUTPUT
		$IPTABLES -F PREROUTING
		$IPTABLES -F POSTROUTING
                
        ;; 

        restart) 
                $0 start 
        ;; 

        *) 
                echo "Usage: $0 {startwd|stop|restart}" 
        ;; 

esac 


Liebe Grüsse
God´s disciple


Nach oben
   
 Betreff des Beitrags: Re: Vielen Dank schonmal
BeitragVerfasst: 07. Apr 2009 12:23 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Zitat:
Kann man da irgendwie zwei Modemverbindungen (noch ne richtig schön langsame telefonleitung) bündeln, dass der Rechner die als eine Verbindung ansieht?
Ja. Das muss die Gegenseite allerdings auch unterstützen. "Multilink PPP" heißt das Stichwort.
Zitat:
Oder muss ich dann auch in dem Script alle regeln für zum Beispiel ppp0 und ppp1 aufstellen?
Es gibt auch den Selektor ppp+, das passt dann auf alle ppp-Interfaces.
Zitat:
Code:
# Firewallscript mit iptables
#
#!/bin/bash

INTERN=192.168.100.0/24
INTERN-DEV=eth0
EXTERN-DEV=ppp0
IPTABLES=/sbin/iptables

NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
INPUT_INTERNET_TCP_PORT="443,22"

case $1 in 
        start) 
                $0 stop 

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
INTERN-DEV -> INTERN_DEV und entsprechend für extern.
Zitat:
Code:
$IPTABLES -F PREROUTING
$IPTABLES -F POSTROUTING
Nein, da fehlt ein -t nat.
Zitat:
Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
echo "1" > /proc/sys/net/ipv4/conf/$EXTERN-DEV/rp_filter

                #Defines the INPUT rules

$IPTABLES -t filter -A INPUT  -i lo -j ACCEPT
Ok.
Zitat:
Code:
$IPTABLES -t filter -A INPUT -p icmp -j ACCEPT 
# Wie schaffe ich es die Nachrichten vom Typ "redirect" zu filtern? - $IPTABLES -t filter -A INPUT -p redirect DROP - richtig?
Nein. Mit
Code:
$IPTABLES -t filter -A INPUT -p icmp --icmp-type ! redirect -j ACCEPT
Zitat:
Code:
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport 
$INPUT_INTERNET_TCP_PORT -j ACCEPT
Zitat:
"Es kann sinnvoll sein, ssh auf einem anderen Port als Port 22 laufen zu lassen, da hier relativ viele automatisierte Einbruchsversuche stattfinden. Generell den direkten root-Login per ssh abschalten, am besten Login per Kennwort generell verbieten, alles per Key machen."
Diesen Kommentar verstehe ich nicht ganz, wie stelle ich ein, dass ssh über einen anderen Port läuft und dass man sich nicht direkt als root anmelden kann oder, dass man einen key braucht?
Das ist jetzt ein ganz weites Feld. Du musst viel mehr lesen. SSH auf einem anderen Port laufen zu lassen schafft man, indem man die Konfiguration des sshd ändert. Dort kann man auch direkte root-Logins abstellen. Dann muss man sich immer mit einem normalen Benutzernamen anmelden (der ja auch erst erraten werden müsste) und kann nach dem Login mit "su" zum root-Nutzer wechseln.

Zu SSH mit Keys gibt es auch gute Howtos. Suchen mit "ssh key" gibt viele brauchbare Treffer.
Zitat:
Code:
                #Defines the NAT rules 

$IPTABLES -A POSTROUTING -t nat -p tcp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p udp -o $EXTERN_DEV -s $INTERN -j MASQUERADE 
$IPTABLES -A POSTROUTING -t nat -p icmp -o $EXTERN_DEV -s $INTERN -j MASQUERADE
Wie masquerade ich alle Protokolle, in dem ich nichts spezifiziere? - $IPTABLES -A POSTROUTING -t nat -p -o $EXTERN_DEV -s $INTERN -j MASQUERADE - richtig?
Ohne "-p".
Zitat:
$IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT
$IPTABLES -A FORWARD -i $INTERN_DEV -o $EXTERN_DEV -s $INTERN -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT
$IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[/code]
Zitat:
Das ist jetzt wieder zu kompliziert und gleichzeitig lückenhaft. Grundproblem: Die Forward-Chain ist sowohl für Pakete vom Internet in das interne Netz als auch andersrum zuständig. Es wird hier nun aber zwischen rein und raus nur anhand der IP-Adresse und anderer Inhalte des Paketes unterschieden.
Viel einfacher und wasserdichter ist es, das per Bindung an das Input-Interface (-i) zu machen. Und außerdem die Portregeln von innen nach außen wegwerfen, Benutzergängelung!
Kannst du mir die einfache und wasserdichte Regel grade so aufschreiben, versteh noch nicht ganz, wie sie aussehen müsste. Gerne auch mit Erklärung, man lernt ja gerne dazu.
Code:
$IPTABLES -A FORWARD -i $INTERN_DEV -j ACCEPT
$IPTABLES -A FORWARD -i $EXTERN_DEV -m state --state NEW -p icmp -j ACCEPT 
$IPTABLES -A FORWARD -i $EXTERN_DEV -m state --state ESTABLISHED,RELATED -j ACCEPT
Zitat:
Code:
                echo "Firewall & Routing activated" 

        ;; 

        stop) 
		$IPTABLES -P INPUT DROP
		$IPTABLES -P OUTPUT ACCEPT
		$IPTABLES -P FORWARD DROP

		$IPTABLES -F INPUT
		$IPTABLES -F FORWARD
		$IPTABLES -F OUTPUT
		$IPTABLES -F PREROUTING
		$IPTABLES -F POSTROUTING
                
        ;; 

        restart) 
                $0 start 
        ;; 

        *) 
                echo "Usage: $0 {startwd|stop|restart}" 
        ;; 

esac 
Wieder -t nat

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07. Apr 2009 23:49 
Offline

Registriert: 03. Apr 2009 14:57
Beiträge: 3
Hey,
vielen vielen Dank.
Habs jetzt so abgeändert, war es richtig, dass -t nat hinter -F kommt beim flushen?
Genau, ich hoffe das ist jetzt gut so, werde mir dann mal noch viel über ports, ssh usw durchlesen und die Ports und dann auch die ssh einstellungen anpassen, aber soweit schonmal vielen Dank.
Wenn du sagst, dass ist gut so, gibt es hier die Regel, sein Thema als gelöst zu markieren?
Und gibt es eine Seite, an der ich mein Script testen kann?
Danke
Godsdisciple
Code:
# Firewallscript mit iptables
#
#!/bin/bash

INTERN=192.168.100.0/24
INTERN_DEV=eth0
EXTERN_DEV=ppp+
IPTABLES=/sbin/iptables

NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
INPUT_INTERNET_TCP_PORT="443,22"

case $1 in 
        start) 
                $0 stop 

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
$IPTABLES -F -t nat PREROUTING
$IPTABLES -F -t nat POSTROUTING


echo 1 > /proc/sys/net/ipv4/ip_forward
echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
echo "1" > /proc/sys/net/ipv4/conf/$EXTERN-DEV/rp_filter

                #Defines the INPUT rules

$IPTABLES -t filter -A INPUT  -i lo -j ACCEPT
$IPTABLES -t filter -A INPUT -p icmp --icmp-type ! redirect -j ACCEPT
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport 
$INPUT_INTERNET_TCP_PORT -j ACCEPT


                #Defines the NAT rules 

$IPTABLES -A POSTROUTING -t nat -o $EXTERN_DEV -s $INTERN -j MASQUERADE
$IPTABLES -A FORWARD -i $INTERN_DEV -j ACCEPT 
$IPTABLES -A FORWARD -i $EXTERN_DEV -m state --state NEW -p icmp -j ACCEPT 
$IPTABLES -A FORWARD -i $EXTERN_DEV -m state --state ESTABLISHED,RELATED -j ACCEPT


                echo "Firewall & Routing activated" 

        ;; 

        stop) 
		$IPTABLES -P INPUT DROP
		$IPTABLES -P OUTPUT ACCEPT
		$IPTABLES -P FORWARD DROP

		$IPTABLES -F INPUT
		$IPTABLES -F FORWARD
		$IPTABLES -F OUTPUT
		$IPTABLES -F -t nat PREROUTING
		$IPTABLES -F -t nat POSTROUTING
                
        ;; 

        restart) 
                $0 start 
        ;; 

        *) 
                echo "Usage: $0 {startwd|stop|restart}" 
        ;; 

esac 



Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de