Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Hilfe zu iptables - Firewallscript für Netzwerk

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sicherheit
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
godsdisciple



Anmeldungsdatum: 03.04.2009
Beiträge: 3

BeitragVerfasst am: 03. Apr 2009 15:23   Titel: Hilfe zu iptables - Firewallscript für Netzwerk

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 03. Apr 2009 18:59   Titel: Re: Hilfe zu iptables - Firewallscript für Netzwerk

Prinzipiell sieht das schon sehr vernünftig aus. Welche Distribution benutzt du?
godsdisciple hat folgendes geschrieben::
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.
 
Benutzer-Profile anzeigen Private Nachricht senden

godsdisciple



Anmeldungsdatum: 03.04.2009
Beiträge: 3

BeitragVerfasst am: 06. Apr 2009 14:26   Titel: Vielen Dank schonmal

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 07. Apr 2009 12:23   Titel: Re: Vielen Dank schonmal

godsdisciple hat folgendes geschrieben::

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

godsdisciple



Anmeldungsdatum: 03.04.2009
Beiträge: 3

BeitragVerfasst am: 07. Apr 2009 23:49   Titel:

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

 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sicherheit Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy