Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
jako ze przezucilem strone na nowy serwer z dostepem ssh,
mam pytanie jak sobie bezpiecznie i wygodnie skonfigurowac ssh do tego servera
klucze RSA i tym podobne sprawy mnie interesuja.
Offline
Z podstawowych podstaw:
1. Zmień port ssh na jakiś inny, najlepiej wyższy w sshd_config
2. Wyłącz bezpośrednie logowanie na root w sshd_config
2.5 Jeżeli masz na maszynie więcej niż jednego usera użyj potęgi /etc/pam.d/su i spraw by su na roota mogli wykonywać tylko członkowie grupy wheel. Dodaj do niej swojego usera.
3. Postaw sobie chociażby prostego fail2ban'a by pilnował czy coś złego się nie dzieje. Przy okazji obok ssh potrafi całkiem zadowalająco pilnować kilku innych usług.
4. Napisz sobie regułki do netfiltera. Max. ilość jednoczesnych połączeń z IP do maszyny, najlepiej gdyby była taka możliwość ograniczyć możliwość dostania się na ssh do pewnego zakresu adresów.
5. Z cyklu "więcej paranoi" -> Napisz firewall który loguje wszystkie pakiety które zrzuca, następnie skonfiguruj "psad" by na podstawie analizy tych logów dynamicznie banował złych ktosiów. Ustawisz danger level 2 i wystarczy 5 złych pakietów by delikwent wylądował w stosownych łańcuchu z celem DROP.
6. Wyłącz logowanie hasłem i pozostaw jedynie na podstawie kluczy rsa ;)
Tak na szybko to tyle. W każdym razie -> UWAŻAJ robiąc którąkolwiek z powyższych czynności. Bardzo łatwo stracić dostęp do maszyny przez przypadek :P
Ostatnio edytowany przez enether (2013-04-06 16:04:25)
Offline
Failban? Psad? lepiej iptables - hashlimit lub recent, na forum i necie jest masa przykładów.
(recent był też w howto na starym dugu, o ile pamiętam).
A port najlepiej jakiś 5 cyfrowy - z ostatniego totolotka. :D
root? zamiast wyłączania, lepiej without-password, wtedy pójdzie tylko po kluczu, ale np u mnie pyta o hasło, choć i tak nie zaloguje hasłem.
Czyli w konfigu sshd:
PermitRootLogin without-password
Do tego limit prób logowania, np:
MaxAuthTries 2
rozłączy po 2 próbach.
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2013-04-06 16:38:30)
Offline
recent i haslimit bardziej do ograniczania połączeń służą. fail2ban zadba o to by delikwent któremu zachciało się logowania na ssh bądź generowania dużej ilości wpisów w error logu apache nie miał już do niego w ogóle dostępu. to samo z psad'em. jeżeli ktoś próbuje nam skanować porty to możemy założyć że raczej go nasza strona www nie interesuje i wyciąć go z czystym sumieniem.
ale fakt, w kwestii limitowania połączeń to co sugerujesz jest doskonałym pomysłem
Offline
mam rozumiec ze te zmiany co mi proponujecie w pliku sshd_config mam odhaszowac i wpisac nowe parametry, bo puki co wiekszosc wpisow tam jest zahaszowania,
sory za lamerskie podejscie ale niewiele z tym mialem do czynienia do tej pory. (spodziewajcie sie wiecej glupich pytan).
Offline
W /etc/ssh/sshd_config
Wartości przykładowe
Port 34567 PermitRootLogin without-password MaxAuthTries 2 PubkeyAuthentication yes PasswordAuthentication no # Można też jak masz userów systemowych np. do ftp którzy mają konta ale nie powinni móc się logować po ssh AllowUsers user_dopuszczony_do_logowania1 user_dopuszczony_do_logowania2 # Wszystkich innych spotka zawód
Ogólnie jak coś jest i ma inne wartości to albo zahashować i wpisać poniżej, albo zmodyfikować.
Jak czegoś nie ma -> dopisać. jak np. AllowUsers
Ostatnio edytowany przez enether (2013-04-06 17:31:55)
Offline
a czy klucze rsa mam generowac z roota czy ze zwyklego konta.???
Offline
Ze zwykłego :)
Offline
zrobilem sobie klucze skopiowalem na server potem do pliku .ssh/authorized_keys
potem:
ssh-agent bash ssh-add .ssh/id_rsa
przy probie logowania dostaje
no such identity: /home/przemo/.ssh/id_dsa: No such file or directory no such identity: /home/przemo/.ssh/id_ecdsa: No such file or directory
i tradycyjnie pytanie o haslo???
Ostatnio edytowany przez pink (2013-04-06 18:08:32)
Offline
pink: brakuje mi tutaj podstawowej informacji — mówimy o konfiguracji klienta SSH, czy o konfiguracji serwera?
Nie obraź się, ale widać, że jesteś początkujący w tym temacie. Na Twoim miejscu wykupiłbym hosting gdzieś, gdzie serwerem zajmuje się zespół administratorów. Tak będzie zarówno „bezpiecznie”, jak i „wygodnie”.
Np. MyDevil ma aktualnie promocję. Ja korzystam z ich usług od sierpnia zeszłego roku i nie mam powodów do narzekań.
Offline
enether napisał(-a):
recent i haslimit bardziej do ograniczania połączeń ....
O to właśnie chodzi, jednym i drugim możesz obciąć połączenia NEW tcp np do 5 na godzinę, albo 20 na miesiąc.
Albo hardcorowo:
Tablica ipset np banany:
ipset create banany hash:ip iptables -t raw -I PREROUTING -i eth0 -p tcp -m multiport --dports {porty_pułapki} -j SET --add-set banany src iptables -t raw -I PREROUTING -i etho -m set --match-set banany src -j DROP
Jakie porty pułapki? porty wrażliwych usług, np ssh, mssgl, mysql, pgsql, albo takie, po których standardowo leci nmap, albo cały zakres od 1023 do 10156.
Kłania się podstawowa znajomość /etc/services.
Poza tym na skanery portów bardzo sympatyczny jest TARPTI z xtables-addons, można też przy pomocy hashlimit objąć wszystkie porty, i w ten sposób dziubdziuś po próbie skanowania nie znajdzie żadnych usług, oprócz tych, które wyłączymy z ochrony.
:D
@enether
W czym psad czy failban są lepsze od powyższego rozwiązania?
Bo to jest zrobione samym firewallem, bez żadnych dodatkowych demonów, które trzeba aktualizować i pilnować.
Ostatnio edytowany przez Jacekalex (2013-04-06 18:40:06)
Offline
Minio napisał(-a):
pink: brakuje mi tutaj podstawowej informacji — mówimy o konfiguracji klienta SSH, czy o konfiguracji serwera?
Nie obraź się, ale widać, że jesteś początkujący w tym temacie. Na Twoim miejscu wykupiłbym hosting gdzieś, gdzie serwerem zajmuje się zespół administratorów. Tak będzie zarówno „bezpiecznie”, jak i „wygodnie”.
Np. MyDevil ma aktualnie promocję. Ja korzystam z ich usług od sierpnia zeszłego roku i nie mam powodów do narzekań.
hosting mam juz wykupiony w 1&1.com w cpanel ustawilem sobie haslo dla ssh (tylko taka opcja jest) i po hasle dziala ale chce to zabiezpieczyc wiec robie jak wyzej.
wiec chodzi o klienta czyli moj lapek.
Ostatnio edytowany przez pink (2013-04-06 18:31:08)
Offline
enether napisał(-a):
Tak na szybko to tyle. W każdym razie -> UWAŻAJ robiąc którąkolwiek z powyższych czynności. Bardzo łatwo stracić dostęp do maszyny przez przypadek :P
no i stalo sie.
Offline
Było od razu że chodzi o klienta... :<
@Jacekalex
Nie odmawiam bynajmniej słuszności Twojej metodzie, nie odbieraj tego proszę jako ataku na siebie.
Na dobrą sprawę widzę tylko jedną przewagę: fail2ban'a (bo psada już tak) nikt nie oszuka preparując na port ssh pakiety TCP ze spoofowanym adresem źródłowym pink'a :P Ot taka złośliwość.
Offline
iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID ACCEPT icmp -- anywhere anywhere icmp echo-request ctstate NEW UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable ACCEPT icmp -- anywhere anywhere icmp echo-request limit: avg 30/min burst 8 DROP icmp -- anywhere anywhere icmp echo-request REJECT tcp -- anywhere anywhere recent: SET name: TCP-PORTSCAN side: source mask: 255.255.255.255 reject-with tcp-reset REJECT udp -- anywhere anywhere recent: SET name: UDP-PORTSCAN side: source mask: 255.255.255.255 reject-with icmp-port-unreachable Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain TCP (1 references) target prot opt source destination REJECT tcp -- anywhere anywhere recent: UPDATE seconds: 60 name: TCP-PORTSCAN side: source mask: 255.255.255.255 reject-with tcp-reset ACCEPT tcp -- anywhere anywhere tcp dpt:http ACCEPT tcp -- anywhere anywhere tcp dpt:ssh Chain UDP (1 references) target prot opt source destination REJECT udp -- anywhere anywhere recent: UPDATE seconds: 60 name: UDP-PORTSCAN side: source mask: 255.255.255.255 reject-with icmp-port-unreachable ACCEPT udp -- anywhere anywhere udp dpt:domain
tu jest iptables
Offline
enether napisał(-a):
Było od razu że chodzi o klienta... :<
@Jacekalex
Nie odmawiam bynajmniej słuszności Twojej metodzie, nie odbieraj tego proszę jako ataku na siebie.
Na dobrą sprawę widzę tylko jedną przewagę: fail2ban'a (bo psada już tak) nikt nie oszuka preparując na port ssh pakiety TCP ze spoofowanym adresem źródłowym pink'a :P Ot taka złośliwość.
Spoofowane pakiety netfilter zazwyczaj łapie, natomiast ssh przy kluczu kryptograficznym też jest odporne na próby podłączenia osób trzecich do połączenia.
Jak już chcesz bardzo ściśle sprawdzać zawartość pakietów, to zamiast psada zainteresuj się snortem i guardianem.
To troszkę ciekawsze narzędzia w tej dziedzinie.
Ostatnio edytowany przez Jacekalex (2013-04-06 21:39:17)
Offline
Wiem, bawiłem się. Konfiguruje się nieco mozolnie. Tyle że jak na zabezpieczanie dajmy na to małego VPS'a na upośledzonym OpenVZ to po pierwsze overkill, po drugie awykonalne technicznie. Podobnie jak bardziej wyrafinowane cudeńka w iptables.
No a wracając do kolegi pink'a:
To iptables na serwerze czy na kliencie?
Offline
na kliencie.
Offline
Czyli na twoim PC/Lapku. Troszkę overkill. Wszystkie rady których do tej pory udzielaliśmy odnosiły się do konfiguracji serwera.
Ze strony klienta opcji zabezpieczeń dużo mniej. Ot pilnuj klucza prywatnego i zrób sobie firewall podstawowy oraz powyłączaj zbędne usługi jeżeli jakieś masz.
Możesz pogrzebać w /etc/ssh/ssh_config (nie sshd_config) by ustalić domyślne zachowania klienta ssh, jak choćby w jakiej kolejności ma próbować algorytmów szyfrujących.
Tutaj dla przykładu prosty firewall który u mnie na lapku zdaje egzamin.
iptables -P INPUT ACCEPT iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT iptables -A INPUT -j LOG --log-prefix "netfilter: " iptables -A INPUT -j DROP
Krótki opis: Wpuszcza jedynie połączenia nawiązane i powiązane z ruchem wychodzącym, wpuszcza wszystko na loopbacku oraz przepuszcza ICMP Echo Request.
Wszystko inne jest logowane (rsyslog ustawiony by leciało gdzie indziej niż do sysloga) a następnie dropowane.
Ostatnio edytowany przez enether (2013-04-06 21:55:46)
Offline
no to moze zacznijmy od nowa:
jako ze przezucilem strone na nowy serwer z dostepem ssh,
mam pytanie jak sobie bezpiecznie i wygodnie skonfigurowac klienta ssh do tego servera.
klucze RSA i tym podobne sprawy mnie interesuja.
jako ze jest to komercyjny webhosting dostep do konfiguracji servera mam ograniczony.
Offline
W kwestii kluczy - lepiej niż załoga G tego nie ujmę, więc zarzucę tylko linkiem
http://www.gentoo.org/doc/pl/articles/openssh-key-management-p1.xml
(oraz części następne)
Offline
dzieki za link enether
udalo sie, dziala logowanie po kluczach jeszcze pozostaje konfiguracja ssh-agent i keychain.
Ostatnio edytowany przez pink (2013-04-07 01:38:47)
Offline
ssh-agent i keychain można używać, ale nie ma takiego obowiązku.
Raczej dla bezpieczeństwa lepiej przenieść klucze z domyślnej lokalizacji ~/.ssh, w jakąś niestandardową, albo zablokować dostęp innych programów do folderu z kluczami przy pomocy jakiegoś systemu ACL.
W ogóle najpierw trzeba ustalić, czy klucz ssh działa, a dopiero później odpalać ssę-agenta i keychain.
Ssh-agent natomiast się przyda przy Gnome-keyring czy Kwallet.
Sznurki:
https://wiki.archlinux.org/index.php/GNOME_Keyring#SSH_Keys
https://wiki.archlinux.org/index.php/KDE_Wallet
enether napisał(-a):
Krótki opis: Wpuszcza jedynie połączenia nawiązane i powiązane z ruchem wychodzącym, wpuszcza wszystko na loopbacku oraz przepuszcza ICMP Echo Request.
Wszystko inne jest logowane (rsyslog ustawiony by leciało gdzie indziej niż do sysloga) a następnie dropowane.
Na te logi firewalla masz osobny dysk, czy starcza osobna partycja?
Kod:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
Jak Ci ktoś kiedyś przyśle kilka tysięcy pakietów ICMP, to pokochasz moduł limit firewalla całym sercem.
W normalnych warunkach ICMP się wpuszcza najwyżej X/s, modułem limit, albo 3/s per pacjent hashlimitem.
Ostatnio edytowany przez Jacekalex (2013-04-07 10:17:54)
Offline
mowisz o limicie logow???
troche to dla mnie czarna magia, uzywam tej konfiguracji iptables bo ktos mi ja kiedys polecil ( sami go sprawdzalisce o ile pamietam) ale za bardzo to go nie rozumiem, cos z nim nie tak???.
albo zablokować dostęp innych programów do folderu z kluczami przy pomocy jakiegoś systemu ACL.
o to by mozna zrobic a zwyczajnie chown-em tudziez chmod-em nie wystarczy.
na arch wiki jest cos takiego
sudo chattr +i ~/.ssh
ale nie wiem czy to ma byc na server czy na klient ???
i jeszcze znalazlem takie cos ale na server.
http://www.cyberciti.biz/tips/linux-unix-bsd-openss … ractices.html
Ostatnio edytowany przez pink (2013-04-07 13:14:30)
Offline
Jacekalex napisał(-a):
enether napisał(-a):
Krótki opis: Wpuszcza jedynie połączenia nawiązane i powiązane z ruchem wychodzącym, wpuszcza wszystko na loopbacku oraz przepuszcza ICMP Echo Request.
Wszystko inne jest logowane (rsyslog ustawiony by leciało gdzie indziej niż do sysloga) a następnie dropowane.Na te logi firewalla masz osobny dysk, czy starcza osobna partycja?
Kod:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPTJak Ci ktoś kiedyś przyśle kilka tysięcy pakietów ICMP, to pokochasz moduł limit firewalla całym sercem.
W normalnych warunkach ICMP się wpuszcza najwyżej X/s, modułem limit, albo 3/s per pacjent hashlimitem.
Tak, zdaję sobie z tego doskonale sprawę. Ale w myśl ogólnej zasady "skoro działa nie ruszać" jestem zbyt leniwy by to poprawić.
Poza tym to lapek, nie serwer. Okazji do DoS'owania go specjalnie nie ma. W sumie muszę logi polimitować, bo mniej miłe od odcięcia sieci jest zapchanie dysku, więc przy okazji dorzucę limit na pakiety.
Można prosić o sugestię w kwestii w miarę logicznego i wydajnego logowania pakietów per źródło? Dajmy na to 60 pakietów per IP na minutę?
Bo można by w sumie dorzucić do linijki z -j LOG jeszcze -m limit --limit 60/m ale to będzie miało zastosowanie globalne, tzn 60 wpisów do logu ogólnie, nie per IP.
EDIT:
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 10/sec --limit-burst 20 -m conntrack --ctstate NEW -j ACCEPT -A INPUT -m limit --limit 1/sec --limit-burst 20 -j LOG --log-prefix "netfilter: "
I zobaczymy jak to się będzie sprawować.
Ostatnio edytowany przez enether (2013-04-07 20:39:13)
Offline