Fórum Ubuntu CZ/SK
Ostatní => Ubuntu Server => Téma založeno: klasyc 16 Srpna 2010, 21:18:25
-
Ahoj všichni,
mám následující požadavek: chci, aby mi běželo ssh pro domácí síť na portu 22 a pro Internet na portu 2222. Přemýšlel jsem, jak to udělat a našel jsem jediné poněkud kostrbaté řešení: V iptables jsem nastavil na internetové rozhraní zahazovat port 22 a potom 2222 přesměrovat na 22. Připadá mi to ale jako prasárna. Existuje nějaký elegantnější způsob?
Díky za nápady.
-
# $OpenBSD: sshd_config,v 1.81 2009/10/08 14:03:41 markus Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
#Port 22
...
a uplne nejelegantnejsi zpusob je zagooglit, nebo hledat v man sshd slovo port
-
Já ještě nepochopil proč by to měla být prasárna a čeho chce klasyc dosáhnout. Zda mají běžet dvě služby ssh (jeden na portu 22 a druhý na 2222). Zda je před serverem nějaký router a jak je server umístěn ve vnitřní síti.
-
Server je připojený přímo do internetu. Když pustím ssh na port 22, tak se mi objevuje v logách obrovské množství různých útoků. Ssh na dvou portech současně běžet neumí (nebo si to aspoň myslím), takže by šlo buď nainstalovat 2 ssh servery (to by se muselo prasit do initových skriptů, to už jsem taky jeden čas tak měl...) a nebo udělat nějaké přeposílání firewallem. Šlo mi spíš o co nejelegantnější formulaci mého požadavku v iptables - tj. pustit ssh na port 22 a udělat něco, aby bylo z venku dostupné jen na 2222...
-
Tak jen routu v iptables, jinak to asi vymyslet nejde ne?
-
A na ten port 2222 nejsou pokusy o přihlášení? Zkus se mrknout na fail2ban (http://wiki.ubuntu.cz/Linuxtero#Fail2ban_-_Ochrana_p.2BAVk-ed_zv.2BARs-davci_a_roboty) - po několika pokusech zablokuje přístup z IP adresy (lze nastavit čas kdy se IP smaže z blacklistu).
Z internetu blokuješ port 22 nebo přímo zahazuješ pakety? Mezi tím je rozdíl, když blokuješ - odpovídáš, zahazování je prej lepší...
-
Ano fail2ban je dobré řešení a sám ho používám i na další služby jako je ftp, mail porty, atd, ale třeba na tohle by se obzvláště hodil portknocking. Samozřejmostí je použití ssh-klíče a password login je zakázán (doufám že to není jinak). Pak je samozřejmě možné tyto události v logu ignorovat.
-
Paktery z portu 22 radši zahazuju. On problém je hlavně v tom, kdy je zahazovat - musím je zahazovat dřív, než provedu přesměrování z 2222 na 22 a to jde jenom v tabulce mangle a ta dokonce ani neumožňuje akci reject... SSh mám zatím jen na heslo, když to není well-known port, tak je tam celkem klid. Použití přihlášení s certifikátem by znamenalo rozjet druhou instanci ssh serveru, pač z vnitřní sítě sem línej psát i to -p2222 natož vybírat někde nějaký certifikát ;D
-
příp. podobně jako fail2ban se dá použít denyhosts
-
použití ssh klíčů je ještě jednodušší než psaní hesla, takže pro lenochy ideální a navíc bezpečné, v linuxu funguje nativně , ve windows funguje dobře s putty. Žádný certifikát se nevybírá. Přihlášení proběhne automaticky.
test@ubuntu:~$ssh-keygen
test@ubuntu:~$ssh-copy-id server (pokud je uživatel jiný než na lokálním stroji tak se uvede jako uživatel@server)
pak se přihlásíme takto:
test@ubuntu:~$ ssh server (nebo ssh root@server)
pokud funguje, tak zakázat v konfigu přihlašování pomocí hesel.
Další možností usnadnění je vytvoření souboru ~/.ssh/config
a do něj vložit
Host fw
User root
Hostname 192.168.0.1 (ip server nebo FQDN)
Port 22
Samozřejmě lze vložit více serverů než jeden a také více jednotlivých loginů k jednomu serveru. Pokud jsou jsou na každem serveru vloženy klíče pomocí ssh-copy-id
zase se přihlásíme jednodušeji protože uživatel , IP(FQDN), port se načte ze souboru config.
test@ubuntu:~$ssh fw
##########
Možná bude svádět vytvořit si ssh klíč bez hesla, pokud jde o přihlašování na jeden server v domácí síti je to asi jedno, ale pokud se budeš takto přihlašovat na důležitější servery tak je
klíč s heslem nutností. pokud by totiž došlo ke krádeži souboru s privántním klíčem ~-/.ssh/id_rsa (rozhodně méně pravděpodobné než kompromitace hesla, ale krádež NTB z kanclu nebo z auta neni zase tak nemožná), tak útočník má ihned plný přístup ke všem strojům kde máš klíče. (mimochodem kdo z vás si odstranil z ubuntu apparmor? )
Proto použijeme passphrase při generování hesla, a použijeme ssh-agenta na práci s rozšifrovaným klíčem. Můžeme mít více párů klíčů než jeden (pokud například pracujeme pro více klientů), s tím nám zase pomůže ssh-agent do kterého pomocí ssh-add ~/.ssh/id_rsa (id_rsa-prace1 , id_rsa-prace2, id_rsa-firmaXY) načteme všechny privátní klíče co vlastníme.
poté při pokusu o přihlášení se nejprve vyžádá passphraze k rozšifrování privátního klíče, ten si ssh-agent uloží do cache a provede ssh. Rozšifrovaný klíč drží ssh-agent v paměti.
Dobu držení klíče lze poladit dle http://manpages.ubuntu.com/manpages/karmic/man1/ssh-agent.1.html (http://manpages.ubuntu.com/manpages/karmic/man1/ssh-agent.1.html)
Více poví strejda google.
Pro lenochy http://principialabs.com/beginning-ssh-on-ubuntu/ (http://principialabs.com/beginning-ssh-on-ubuntu/) a mnoho dalších.
-
Paktery z portu 22 radši zahazuju. On problém je hlavně v tom, kdy je zahazovat - musím je zahazovat dřív, než provedu přesměrování z 2222 na 22 a to jde jenom v tabulce mangle a ta dokonce ani neumožňuje akci reject... SSh mám zatím jen na heslo, když to není well-known port, tak je tam celkem klid. Použití přihlášení s certifikátem by znamenalo rozjet druhou instanci ssh serveru, pač z vnitřní sítě sem línej psát i to -p2222 natož vybírat někde nějaký certifikát ;D
Nic takového žádné zahazovat dřív.
Prostě a jednouše
/sbin/iptables -A INPUT -i "Interface do netu" --dport 22 -j DROP
/sbin/iptables -A PREROUTING -p tcp -d "interface do netu" --dport 2222 -j DNAT --to "lokalni IP serveru":22
nic složitýho zběsilího a je to na dva řádky