Einige Verständnisfragen zu 'iptables' [gelöst]

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Einige Verständnisfragen zu 'iptables' [gelöst]

Beitrag von Jester » 30.08.2007 13:01:24

Hi Leute,

ich hab ein paar Fragen zu 'iptables':

Code: Alles auswählen

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:5271     <- eMule Port
ACCEPT     udp  --  anywhere             anywhere            udp dpt:5272   <- eMule Port
ACCEPT     tcp  --  anywhere             anywhere            udp dpt:www

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Wenn ich meine Firewall so einstelle, funktioniert gar nichts mehr weder Webseiten aufrufen noch zu eMule connecten.
Wieso ist das so? Ich möchte alle Pakete droppen außer die, die auf den 3 Ports ankommen... wie muss ich das einstellen?

Wenn ich folgendes eingebe dann öffnet der irgendwie ziemlich viele Ports.

Code: Alles auswählen

iptables -P INPUT ACCEPT
Wenn ich dann nämlich einen Portscann mit nmap durchführe dann zeigt der mir das an:

Code: Alles auswählen

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-08-30 12:46 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 65519 closed ports
PORT      STATE SERVICE
23/tcp    open  telnet
25/tcp    open  smtp
111/tcp   open  rpcbind
113/tcp   open  auth
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
548/tcp   open  afpovertcp
631/tcp   open  ipp
2208/tcp  open  unknown
4700/tcp  open  unknown
4712/tcp  open  unknown
5271/tcp  open  unknown
8118/tcp  open  unknown
9050/tcp  open  unknown
32818/tcp open  unknown
44525/tcp open  unknown

Nmap finished: 1 IP address (1 host up) scanned in 1.461 seconds
Ich möchte meine Firewall so einstellen das alle Ports geschlossen sind außer die, die ich einstelle. Aber irgendwie klappt das nicht so ganz.

Das der telnet Port offen ist, liegt das evtl. daran das ein Programm auf diesem Port horscht?

Ich danke euch schon mal für die Hilfe!
Zuletzt geändert von Jester am 31.08.2007 20:15:58, insgesamt 1-mal geändert.

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 30.08.2007 13:32:03

Code: Alles auswählen

Chain INPUT (policy DROP)
...
ACCEPT     tcp  --  anywhere             anywhere            udp dpt:www
...
Die INPUT-Chain ist für Pakete verantwortlich, die an deinen Rechner gerichtet sind - allerdings bewerkstelligt deine Einstellung von oben, dass ein Webserver erreichbar wäre, der auf deinem Rechner selbst läuft (vorrausgesetzt du würdest UDP noch in TCP ändern).

Für dein Ziel, sollte das so aussehen.

Code: Alles auswählen

iptables -A INPUT -p TCP --sport 80 -j ACCEPT
Ausserdem fehlen Antwortpaket auf DNS-Anfragen:

Code: Alles auswählen

iptables -A INPUT -p UDP --sport 53 -j ACCEPT
Die von dir verwendete Regel, wäre in der OUTPUT-Chain korrekt (natürlich in der TCP-Variante), wenn du Verbindungen, die dein Rechner selbst aufbauen will, kontrollieren willst, musst.

Aber wieso machst du es dir so kompliziert. Dafür gibt es doch das Connection-Tracking-Modul von iptables. Alles wird geblockt - nur Pakete, die von deinem Client initiiert worden sind, werden akzeptiert. Evtl. in Verbindung mit entsprechenden Regeln in der OUTPUT-Chain.

Code: Alles auswählen

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Beitrag von chroiss » 30.08.2007 14:44:01

Und das hier
Wenn ich dann nämlich einen Portscann mit nmap durchführe dann zeigt der mir das an:
darfst Du nicht falsch verstehen. Du kannst noch soviel an der Firewall rumbasteln, wenn du die loopbackadresse scannst,wird Dir nmap immer alle offenen Ports zeigen. Ein scan würde nur von ausserhalb deines Netzes etwas relevantes ausspucken.
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 30.08.2007 14:56:26

Ein scan würde nur von ausserhalb deines Netzes etwas relevantes ausspucken
Das zweifel ich mal stark an: So wie seine Ausgabe aussieht, hat er keine explizite Freigabe für das Loopback-Device angegeben - und da die Policy der INPUT-Chain auf DROP steht, sollte auch ein Portscan nichts finden dürfen.

Allerdings hast du natürlich insofern Recht, dass das Loopback-Device eigentlich komplett freigegeben werden sollte - allein schon weil viele Programme darüber kommunizieren und ohne die Freigabe nicht funktionieren werden.

swuing
Beiträge: 106
Registriert: 17.09.2006 21:18:38

Beitrag von swuing » 30.08.2007 15:50:32

wenn du gewissen dienste nicht brauchst, lass diese auch nicht starten
z.b. telnet, windows datei- und druckerfreigabe(samba), email-server(exim)...

entsprechenden eintrag in /etc/rc2.d/ löschen

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Beitrag von chroiss » 30.08.2007 16:41:04

Das zweifel ich mal stark an
Stimmt hast Du recht. Das warn Fehler meinerseits.

Natürlich kann man lo scannen. Nur macht es kein Sinn.

Wie gesagt letztendlich hast Du recht.

Diesen Satz hier
Du kannst noch soviel an der Firewall rumbasteln, wenn du die loopbackadresse scannst,wird Dir nmap immer alle offenen Ports zeigen.
ziehe ich damit schnell wieder zurück.
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Beitrag von Jester » 30.08.2007 17:26:55

Also danke schon mal für die ganzen Antworten.

Also um das nochmal zu klären, als ich bei INPUT die Policy auf DROP eingestellt hatte, fand der auch keine offenen Ports. Das war nur als ich bei INPUT die Policy auf ACCEPT eingestellt hatte.

@DynaBlaster: Danke schon mal für die Erklärung. Aber wenn ich die folgende Regel bei INPUT eintrage ändert sich nicht viel. Der Portscan zeigt immer noch die gleichen offenen Ports wie vorher an. Und bei aMule bekomme ich immer noch eine LowID...
Oder muss ich die aMule Port jetzt trotzdem noch explizit in meine Einstellung eintragen?

@swuing: Danke für den Tip ich hab jetzt mal in rc2.d geschaut, aber da ist kein Telnet Eintrag :? aber die restlichen Dienste werd ich mal durchgehen und schauen was ich davon wirklich brauche.

Cologne4711
Beiträge: 260
Registriert: 04.12.2006 11:37:59

Beitrag von Cologne4711 » 30.08.2007 17:27:14

Hallo,

nimm doch einfach mal die aus dem Wiki

http://wiki.debianforum.de/SimpleFirewall

Da kannst Du Ports und und sogar Programme freischalten :wink:

MfG

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 30.08.2007 17:35:53

@DynaBlaster: Danke schon mal für die Erklärung. Aber wenn ich die folgende Regel bei INPUT eintrage ändert sich nicht viel. Der Portscan zeigt immer noch die gleichen offenen Ports wie vorher an. Und bei aMule bekomme ich immer noch eine LowID...
Oder muss ich die aMule Port jetzt trotzdem noch explizit in meine Einstellung eintragen?
Hast du denn die Policy der INPUT-Chain auf DROP gestellt?

Für eine HighID im edonkey-Netzwerk musst du TCP-Port 4662 zulassen:

Code: Alles auswählen

iptables -A INPUT -p TCP --dport 4662 -j ACCEPT
Beim Verständnis von iptables hat mir dieser Thread hier eigentlich sehr geholfen: http://www.debianforum.de/forum/viewtopic.php?t=3419

PS: Und wie Chroiss schon erwähnte: wieviel über localhost erreichbar ist, ist egal - wichtig ist, welche Dienste aus dem Netz erreichbar sind. Am besten du scannst von einem anderen Rechner in deinem Netz oder benutzt einen Online-Portscanner.

Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Beitrag von Jester » 30.08.2007 17:53:35

Danke für das Skript aber irgendwie will es immer noch nicht so ganz. Sorry das ich weiter Nerven muss :?

So hier mal wie ich das Skript konfiguriert habe (5271/5272 sind meine aMule Ports):

Code: Alles auswählen

IPTABLES=/sbin/iptables

ENABLE_INPUT_FILTERING=1

ENABLE_SSH_BRUTE_FORCE_FILTER=1

ENABLE_ICMP_INPUT_FILTERING=1

TCP_SERVICES="22 5271"

UDP_SERVICES="5272"

ENABLE_OUTPUT_FILTERING=1

REMOTE_TCP_SERVICES="80"

REMOTE_UDP_SERVICES="53 67"

KNOWN_SERVER_NAMES="security.debian.org \
                    "
KNOWN_SERVICE_REQUESTORS="cvpnd \
                          exim \
                          exim4 \
			  aMule \
                          ftp \
                          gftp-gtk \
                          http \
                          java \
                          java_vm \
                          nmap \
                          perl \
                          realplay.bin \
                          seamonkey-bin\
                          ssh \
                          vmnet-bridge \
                          vmnet-natd \
                          wget \
                          "

Wenn ich das so starte kann ich zu aMule gar nicht mehr connecten obwohl ich es in die Liste eingetragen habe...

Aber es kommt beim starten des Skripts auch eine merkwürdige Ausgabe:

Code: Alles auswählen

Jules:/home/jules/Desktop# ./firewall restart
Stopping simple firewall (if active)... done.
Starting simple firewall... iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
done.
Aber wenn ich mir danach die Ausgabe von iptables -L anschaue stehen da ne Menge Einstellungen drin...also es scheint schon zu klappen, ka was diese Ausgabe heißen soll.

Danke für die ganzen Antworten schon mal :D

Jelzin
Beiträge: 332
Registriert: 17.02.2007 12:52:37

Beitrag von Jelzin » 30.08.2007 19:12:40

Code: Alles auswählen

Jules:/home/jules/Desktop# ./firewall restart
Stopping simple firewall (if active)... done.
Starting simple firewall... iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
iptables: Invalid argument
done.
Das kann ich erklären:

Code: Alles auswählen

    #  ...and well known service requestors we have defined
if [ -n "$KNOWN_SERVICE_REQUESTORS" ] ; then
    for REQUESTOR in $KNOWN_SERVICE_REQUESTORS; do
    $IPTABLES -A OUTPUT -m owner --cmd-owner "${REQUESTOR}" -j ACCEPT
    done
fi
"-m owner" gibt es nicht mehr. Siehe

http://www.debianforum.de/forum/viewtopic.php?t=87708

Wenn du diesen Teil weglässt, verschwindet auch die Fehlermeldung. Die "Requestors" finden dann allerdings auch keine Anwendung mehr in diesem Skript.

Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Beitrag von Jester » 30.08.2007 19:18:05

Ah danke das hilft mir schon mal weiter. Also ganzen Programmen kann man nicht per iptables den Traffic erlauben.
Ok das macht ja eigentlich nichts, aber das mit den aMule Ports ist leider immer noch nicht geklärt...

Jelzin
Beiträge: 332
Registriert: 17.02.2007 12:52:37

Beitrag von Jelzin » 30.08.2007 19:56:31

Jester hat geschrieben:Also ganzen Programmen kann man nicht per iptables den Traffic erlauben.
Mit iptables nicht, nein, da brauchst du andere Hilfsmittel.

Um überhaupt ins Internet zu kommen, musst du Port 53 für ausgehenden Traffic zulassen (TCP+UDP), wobei in den meisten fällen UDP ausreichen sollte.

Zusätzlich muss dein Port 80 für ausgehenden Traffic geöffnet sein, und vergiss die Rückantwort des Servers nicht ^^ Diese Erfolgt bei http auf einem Port >= 1024.

Und da fangen dann die Probleme an, du solltest dir eine "Stateful Firewall" aufsetzen. Sonst wirst du dein System nicht dicht kriegen.

Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Beitrag von Jester » 31.08.2007 11:27:58

Und da fangen dann die Probleme an, du solltest dir eine "Stateful Firewall" aufsetzen. Sonst wirst du dein System nicht dicht kriegen.
Du willst damit sagen ich soll mir ein vorgefertigtes Firewall skript besorgen, da ich sonst nie zu Rande komme? Na dann werd ich das machen.
Und werde dann mal einen Portscan von einem anderen Rechner durchführen.

@DynaBlaster: Den folgenden Befehl hab ich schon oft eigetragen aber irgendwie will das mit der ID nicht klappen, kann das sein das ich etwas anderes Eintragen muss, wenn bei mir danach noch ein Router (an dem sind die Ports offen) kommt und nicht direkt das DSL-Modem?

Ich danke euch allen für die Antworten!!! Ich werde mir dann mal das gepostete Firewall-Skript anpassen. :D

Jester
Beiträge: 23
Registriert: 05.06.2007 20:57:54

Beitrag von Jester » 31.08.2007 20:18:27

So hab nun alles hinbekommen danke an alle die geantwortet haben. Hier nun mein fertiges Firewall-Skript, kann sich jeder der will nach belieben kopieren und ebenfalls nutzen (Kleine Anpassungen können bei den Netzwerk-Interfaces und bei den eMule Ports nötig sein):

Code: Alles auswählen

#!/bin/sh

firewall_start() {
	echo -n "Firewall wird gestartet..."
	iptables -F
	iptables -t nat -F
	iptables -X
	iptables -t nat -X
	iptables -P INPUT DROP
	iptables -P FORWARD DROP
	iptables -P OUTPUT DROP
	echo "1" > /proc/sys/net/ipv4/ip_forward

	iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
	iptables -A INPUT -i eth1 -j ACCEPT
	iptables -A INPUT -i lo -j ACCEPT
	iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
	
	iptables -A INPUT -p TCP --dport 5271 -j ACCEPT
	iptables -A INPUT -p UDP --dport 5272 -j ACCEPT
	iptables -A INPUT -p UDP --dport 5274 -j ACCEPT

	iptables -A OUTPUT -o eth1 -j ACCEPT
	iptables -A OUTPUT -o lo -j ACCEPT
	echo "fertisch."
}

firewall_stop() {
	echo -n "Firewall wird gestoppt..."
	iptables -F
	iptables -t nat -F
	iptables -t mangle -F
	iptables -P INPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -P OUTPUT ACCEPT
  	echo "fertisch."
}

case "$1" in
	start|restart)
		firewall_stop
		firewall_start
		;;
	stop)
		firewall_stop
		;;
	*)
	echo "Usage: $0 {start|stop|restart|clear}"
	exit 1
	;;
	esac
exit 0

Antworten