PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables



Duffy1905
15.04.03, 13:30
Hi Leute,
habe soeben mein ertes Script mit IPTABLES erstellt.
Könnt ihr es euch vielleicht mal anschauen und sagen wenn
was falsch ist.

Vielen danke

#!/bin/sh

# Variablen für unsere Interfaces
DEV_EXT=eth0
DEV_LAN=eth1

# Alles was von Aussen kommt oder rausgeht wird verworfen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Alle vorhandenen Regelketten werden gelöscht
iptables -F
iptables -t nat -F
iptables -X

# Loopback-Interface zulassen (Verbindung zum eigenen Rechner)
iptables -A OUTPUT -o lo -j ACCEPT
iptables A INPUT -i lo -j ACCEPT

# Alle externen Verbindungsversuche werden aufgefangen und im Systemlog vermerkt (als NIRWANA)
iptables -N nirwana
iptables -A nirwana -p TCP -j LOG --log-prefix "NIRWANA: TCP"
iptables -A nirwana -p UDP -j LOG --log-prefix "NIRWANA: UDP"
iptables -A nirwana -p ICMP -j LOG --log-prefix "NIRWANA: ICMP"
iptables -A nirwana -p TCP -j DROP

# Aktivieren von Forwarding und Masquerading
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE

# Für alle bestehenden ein- und ausgehenden Verbindungen werden zwei Regeln definiert. Die dritte Regel verhindert alle neuen von außen aufgebauten Verbindungen und springt zu nirwana bei der alles gelogt wird
iptables -A FORWARD -i $DEV_LAN -o $DEV_EXT -m state /
--state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $DEV_EXT -o $DEV_LAN -m state /
--state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $DEV_EXT -o $DEV_LAN -m state /
--state NEW,INVALIDE -j nirwana

# freischalten von aktivem FTP
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport ftp -m state --state NEW -j ACCEPT

# freischalten von passivem FTP
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport 1024:65535 -m state --state NEW -j ACCEPT

# Damit Clients aus dem LAN pings an Server aus dem Internet senden können
iptables -A FORWARD -o $DEV_EXT -p ICMP --icmp-type /
echo-request -j ACCEPT

# SMTP: ausgehende Emails
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport smtp -m state --state NEW -j ACCEPT

# POP3: Emails abholen
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport pop3 -m state --state NEW -j ACCEPT

# HTTP
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport http -m state --state NEW -j ACCEPT

# https (Secure HTTP)
iptables -A FORWARD -o $DEV_EXT -p tcp --sport 1024:65535 /
--dport https -m state --state NEW -j ACCEPT

# Alle Pakete die die Regelkette bis zu diesem Punkt durchqueren konnten
iptables -A INPUT -j nirwana
iptables -A OUTPUT -j nirwana
iptables -A FORWARD -j nirwana

m00n
15.04.03, 14:52
Hi,
muss zugeben, dass ich mir nicht ganz sicher bin, aber du hast geschrieben

echo "1" > .........

Lass mal die Anführungsstriche wech!

Gehts jetzt?

mfg
m00n

sauertopf
15.04.03, 15:14
>echo "1" > .........
>Lass mal die Anführungsstriche wech!
Sollte egal sein.

Willkommen Duffy1905!

1. Dein Nirvana dropt nur tcp?
2. "INVALIDE"?
3. lokale Prozesse sollen nicht auf LAN/EXT zugreifen können?
4. Was willst du mit den eingeschränkten Erlaubnissen für NEW-Pakete aus dem LAN erreichen?
5. Was funktioniert nicht?
Hier wird immer Harrys Firewall-Generator empfohlen. Was ich jetzt auch mal mache.

MfG sauer

DaGrrr
15.04.03, 15:41
http://harry.homelinux.org

Grüße
DaGrrr

Duffy1905
16.04.03, 08:51
Diesen Generator kann ich nicht gebrauchen. Will es ja richtig verstehen!!!
Zum testen habe ich im Moment nur zwei Rechner (zwei Netze) an die Firewall angeschlossen. Und lasse halt einen Portscann drüber laufen. Wie könnte ich denn die ganzen Sachen noch testen?
Sorry bin ziemlich neu in dem Gebiet!

Die Anführungsstriche hab ich jetzt mal weggelassen!

zu 1: ja stimmt ist vielleicht sinnvoller wenn er alle dropt!
zu 2: Hab das Script ja selber entworfen, allerdings hab ich die meisten
Inhalte auf einer HOWTO Seite bezogen und auf meine abgeändert!
Ich schätze mal der INVALIDE Befehl existiert nicht? :-) wenn ich so deine
Reaktion sehe.

Sagt mir einfach was überflüssig ist und was falsch ist!!!
Oder was ihr noch hinzufügen würdet!


Meine Firewall soll Webserver in unserer DMZ vor Attacken aus dem Internet schützen!

Wie gesagt arbeite erst seid 2 Wochen mit Linux :-) Alles Neuwelt

Da.Bull
16.04.03, 10:05
Naja, Duffy:


zu 2: Hab das Script ja selber entworfen, allerdings hab ich die meisten
Inhalte auf einer HOWTO Seite bezogen und auf meine abgeändert!
Ich schätze mal der INVALIDE Befehl existiert nicht? :-) wenn ich so deine
Reaktion sehe. Das ist natürlich nie verkehrt ! Aber genauso Intelligent wäre es, die das Skript von HArrys IpTable Generator erstellen zu lassen und daran dann rumzufeilen ! Mir ist es ein Rätsel, wieso du alles selber erstellen (und deshalb xx mal verbessern) willst, wnen du den großteil der Arbeit auch abgenommen bekommen könntest !

So on....

MfG Markus

Duffy1905
16.04.03, 12:10
1. wenn man sowas selber schreibt, lernt man meiner Meinung nach mehr dabei!
2. wird das mein Abschlussprojekt :-)

sauertopf
16.04.03, 20:03
> 1. wenn man sowas selber schreibt, lernt man meiner Meinung nach mehr dabei!
98% ist lesen (mindestens) ... Übrigens kann man Harry's iptables-skripte auch vergleichen, z. B. mit "diff".

2. wird das mein Abschlussprojekt :-)
Viel Glück.

Duffy1905
17.04.03, 13:54
So hab jetzt mein Script mal etwas verändert.
Habe Teile aus Harrys Generator entnommen :-)
Allerdings muss da noch irgenwo en Fehler sein!!!
Ich bekomme keine Verbindung zu meiner Firewall,
bekomme keine Antwort bei Pings an die Firewall,
und wenn ich lokal auf der Firewall einen Ping an seine
Interfaces mache bekomme ich auch keine Antwort! Hat da jemand
eine Idee???


#!/bin/sh


# Alle vorhandenen Regelketten werden gelöscht
iptables -F
iptables -t nat -F
iptables -X


# Variablen für unsere Interfaces
DEV_EXT=eth0
DEV_LAN=eth1


# Alles was von Aussen kommt oder rausgeht wird verworfen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


# Loopback-Interface aktivieren
iptables -A OUTPUT -o lo -j ACCEPT
iptables A INPUT -i lo -j ACCEPT


# Aktivieren von Forwarding und Masquerading
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $DEV_EXT -j MASQUERADE


# MY_REJECT-CHAIN
iptables -N MY_REJECT


# MY_REJECT füllen
iptables -A MY_REJECT -p tcp -m limit 7200/h -j LOG --log prefix "REJECT TCP"
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -m limit 7200/h - LOG --log prefix "REJECT UDP"
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -m limit 7200/h -j LOG --log prefix "DROP ICMP"
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER"
iptables -A MY_REJECT -j REJECT --reject-with icmp-port-unreachable


# MY_DROP-CHAIN
iptables -N MY_DROP
iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP"
iptables -A MY_DROP -j DROP


# Alle verworfenen Packete protokollieren
iptables -A INPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "INPUT INVALID"
iptables -A OUTPUT -m state --state INVALID -m limit --limit 7200/h -j LOG --log-prefix "OUTPUT INVALID"


# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP


# HTTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# FTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 21 -j ACCEPT

# SSH:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 22 -j ACCEPT

HangLoose
17.04.03, 21:02
moin moin


Ich bekomme keine Verbindung zu meiner Firewall, bekomme keine Antwort bei Pings an die Firewall,

das ist kein wunder ;). dir fehlen noch einige regeln. hiermit

# HTTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# HTTPS:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# FTP:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 21 -j ACCEPT

# SSH:
iptables -A INPUT -i $DEV_EXT -m state --state NEW -p tcp --dport 22 -j ACCEPT



erlaubst du nur eingehende pakete zu einem http-server, mail-server und ftp-server. hast du sowas auf dem router laufen? ich glaube du hattest in wirklichkeit ganz was anderes vor, oder? ;)

dir fehlen auf jedenfall die regeln für pakete die zu einers bestehenden verbindung gehören




#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# ausgehende Pakete bei bereits aufgebauter Verbindung erlauben
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $int -o $ext -m state --state ESTABLISHED,RELATED -j ACCEPT

#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Rückkanal: eingehende Paket zu einer bestehenden Verbindung
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -m state --state NEW,INVALID -j MY_LOGREJECT

$ipt -A FORWARD -i $ext -o $int -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A FORWARD -i $ext -o $int -m state --state NEW,INVALID -j MY_LOGREJECT


die FORWARD regeln brauchst du nur, wenn hinter deinem router noch clients sind


Gruß HL

Duffy1905
17.04.03, 22:38
Hab hinter meiner Firewall eigentlich nur Webserver stehen!
Aber super danke, werde ich probieren!!!
Das heisst morgen oder übermorgen noch mal ins Geschäft :-)

Duffy1905
19.04.03, 14:43
Wunderbar funktioniert!
Ich bekomme wieder einen PING + Verbindung!
Portscann funktioniert auch.
Am Dienstag werde ich sie dann mal aus der Testumgebung
raus nehmen und richtig einsetzten. Ich hoff das da alles glatt
geht!

Noch mal vielen Dank

Duffy1905
22.04.03, 09:20
NEUES PROBLEM!!!!

Nach meinem Portscann werden noch zwei offene
Ports gemeldet:

- 111 sunrpc SUN Remote Procedure
- 6000 X WINDOWS

Woran kann das liegen???
Was kann ich dagegen machen?