PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables und ssh



pinpin
21.07.09, 11:10
Hallo zusammen,

ich bin grade dabei mich etwas mit iptables zu beschäftigen und versuche den SSH-Zugriff auf meinen Rechner nur von einer bestimmten IP zu erlauben. Leider funktioniert das gar nicht.

Mein Befehl ist der folgende:


iptables -A INPUT -p tcp -s ! 192.168.100.5 --dport 22 -j DROP


Was mache ich falsch? Ich gebe den Befehl ein und kann dennoch von 192.168.100.2 und 192.168.100.3 zugreifen.

asi_dkn
21.07.09, 11:30
Hast du eventuell noch andere Rules welche den Zugriff unter Umständen schon vor dieser Regel erlauben?

Zeige mal den Ouput von

iptables -nvL

Rain_maker
21.07.09, 11:33
Anderer Ansatz:

Das lässt sich auch ohne iptables und über "/etc/hosts.allow" erledigen.

pibi
21.07.09, 11:39
Was mache ich falsch? Ich gebe den Befehl ein und kann dennoch von 192.168.100.2 und 192.168.100.3 zugreifen.Ich vermute, dass Du weiter vorne bereits alles erlaubst. Der erste Treffer in der Iptables-Queue gewinnt;-)

Und wenn Du Iptables verwenden willst, wuerde ich den umgekehren Weg gehen. Zuerst alles verbieten und dann selektiv erlauben, was man braucht. So "vergisst" man keine Dienste/Adressen/Ports.

Gruss Pit.

marce
21.07.09, 11:54
Anderer Ansatz:

Das lässt sich auch ohne iptables und über "/etc/hosts.allow" erledigen.
... oder über die sshd_config.

pinpin
21.07.09, 12:00
Omg, oh ja. Ihr habt ja so Recht. Ich hatte ein Befehl drin der alles erlaubt, nach einem reboot und erneuten Eingabe der Regel hat es funktioniert. So einfach kann es sein.

Gibt es eine Möglichkeit alle Regeln mit einem Befehl zu entfernen?

marce
21.07.09, 12:02
man iptables

pinpin
21.07.09, 12:03
Okay,
iptables -F

Dankeschön!

uschzmet
21.07.09, 12:20
öm kann es sein das das ! vor der IP nur sagt das alle ips ausser diese ip ... kann mich ja irren aber im howto hier (http://www.64-bit.de/dokumentationen/netzwerk/e/002/DE-IPTABLES-HOWTO-5.html) stehts so ... stichwort: negierter wert ....

das würde dann auch den zugriff von der 2 und 3 erklären, generell befürworte ich auch die /etc/hosts.allow



Hallo zusammen,

ich bin grade dabei mich etwas mit iptables zu beschäftigen und versuche den SSH-Zugriff auf meinen Rechner nur von einer bestimmten IP zu erlauben. Leider funktioniert das gar nicht.

Mein Befehl ist der folgende:


iptables -A INPUT -p tcp -s ! 192.168.100.5 --dport 22 -j DROP


Was mache ich falsch? Ich gebe den Befehl ein und kann dennoch von 192.168.100.2 und 192.168.100.3 zugreifen.

asi_dkn
21.07.09, 12:41
das ! negiert schon, aber das heisst das alle ausser 192.168.100.5 auf Port 22 keinen Zugriff haben. Die Regel hätte schon gestimmt.

uschzmet
21.07.09, 13:56
da wir grad beim thema iptables und ssh sind

ich möchte von einem server ssh auf eine netzwerkkarte (eth1 zb) freigeben , das sollte hiermit geschehen:


iptables -A INPUT -i eth1 -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
vom server auf das netzwerk komme ich raus, aber will ich vom netzwerk wieder rein dann hab ich keine chance , erst wenn ich die firewall wieder runterfahr .... oder hab ich irgendwas vergessen ?

asi_dkn
21.07.09, 14:02
den Status "NEW" hast du vergessen. Du lässt in jetzt nur Pakete die zu bereits bestehenden Verbindungen gehören zu.

uschzmet
21.07.09, 14:23
jub stimmt, aber leider hab ich das problem nach wie vor

ich kann von dem server heraus connecten aber nichtmehr vom netzwerk aus in den server ...

HirschHeisseIch
21.07.09, 14:26
Vielleicht, wie bei TE auch, eine Regel vorher, die die Verbindung verbietet?

uschzmet
21.07.09, 14:34
bis zu port 22 steht nur das noch im script drinn :



iptables -F

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT



iptables -A INPUT -i eth1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

asi_dkn
21.07.09, 15:14
Naja, du hast die Policies auch auf accept, da kann alles auf alles connecten. Eigentlich müsste dein Server (auch Port 22) so oder so auf jedem Interface erreichbar sein, ungeachtet der beiden Regeln am Ende.

EDIT:

iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Das macht keinen Sinn weil du nur den Traffic ausgehend vom Port 22 zulassen willst. Auch wenn du ne SSH Verbindung aufbaust wird als Ausgangsport nicht Port 22 verwendet sondern irgend was unpriviligiertes (> 1024). Deswegen hier auch --dport, nicht --sport.

Rain_maker
21.07.09, 15:24
gelöscht (da lag wohl noch was im browsercache)

asi_dkn
21.07.09, 16:03
Von mir? Sorry :rolleyes:

uschzmet
21.07.09, 16:22
nach den regeln kommt ja noch im script das hier:

###### Anschließend schalten wir die Chains wieder auf Drop
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


also is dann schon einiges dicht ;o)

also würde für den output statt --sport auch ein --dport reinkommen ?


iptables -A OUTPUT -o eth1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

oder muss ich die unpriviligierten ports auch noch aufführen ?

asi_dkn
22.07.09, 10:08
Nee die unpriviligierten Ports brauchst du nicht ausfüllen. Ich denke mal dir kanns wurscht sein von welchem Port aus dein SSH Client zu einem Server connected. Solange alle SSH Server auf Port 22 lauschen (was nicht umbedingt immer so sein muss) sollte die Regel so stimmen.

Wieso aber dein SSH Server nicht erreichbar ist kann ich mir nicht genau erklären... es sei denn der wird via eth0 statt eth1 angesprochen. Ansonsten hab ich da keine Idee.

uschzmet
22.07.09, 12:00
definitiv liegts an der zeile hier


iptables -A OUTPUT -p tcp --sport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


ich habe jetz mal auf einem lokalen linuxserver einfach mal ein ganz einfaches script geschrieben:


iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT




ich kann mich einloggen per ssh
aber
wenn ich nun weiter von diesem server auf einen anderen server möchte (zb macht sowas der backup-manager per scp) bekomme ich keine verbindung

schalte ich die firewall aus , dann gehts

HirschHeisseIch
22.07.09, 12:18
Wie oben schon erwähnte, geht die Verbindung nicht von Port 22 aus, sondern von einem unpriveligierten...

uschzmet
22.07.09, 13:18
und das bedeutet ?

andeutungen helfen leider nicht weiter ...

asi_dkn
22.07.09, 13:22
Das bedeutet du solltest fürhere Posts nochmals lesen um eine Antwort zu finden.

uschzmet
22.07.09, 13:28
ziemlich merkwürdige antwort da oben auch nix andres steht ...

ein beispiel mit den ports wäre hilfreicher ... andeutungen sind glaub nicht wirklich der sinn eines forums ...

marce
22.07.09, 13:31
ok, wenn Du es konkret haben willst: eine Ausgehende ssh-Verbindung nutzt einen Highport, meist irgendwas unpriviligiertes über 1024 und unter 65535.

asi_dkn
22.07.09, 13:33
what the...?

Also, dieser Post ist gemeint: http://www.linuxforen.de/forums/showpost.php?p=1719074&postcount=16

Da steht:


iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Das macht keinen Sinn weil du nur den Traffic ausgehend vom Port 22 zulassen willst. Auch wenn du ne SSH Verbindung aufbaust wird als Ausgangsport nicht Port 22 verwendet sondern irgend was unpriviligiertes (> 1024). Deswegen hier auch --dport, nicht --sport.

Und du hast genau diesen Fehler in der Config die du zu letzt gepostet hast noch drin.


ein beispiel mit den ports wäre hilfreicher ... andeutungen sind glaub nicht wirklich der sinn eines forums ...

Die Lösung stand da, du hast sie nur nicht gesehen. Ich denke mal ander Forenteilnehmer dürfen schon erwarten das man sich ein wenig Mühe gibt wenn einem schon versucht wird zu helfen.

Nichts für ungut.

uschzmet
22.07.09, 13:40
an asi_dkn ...

genau das meinte ich , wenn einer fragt wo sich ne strasse befindet dann zeigt man über den fluss ... höfliche menschen zeigen aber auch die brücke um über den fluss zu kommen ...

ich finds immerwieder mies wie leute mit wissen andere im regen stehen lassen und sich nicht herablassen können um auf der ebene des fragenden demjenigen das auch so zu verklickern das der das auch versteht ...

in diesem sinne vielen dank an marc der mir den entscheidenden tip so gegeben hat das ich ihn auch so verstehe ...