Mam zamiar wykupić wirtualna maszynę na linuxie dla backendu w javie.
Pytanie na co zwrócić uwagę co zainstalować/skonfigurować aby zabezpieczyć taki serwer przed włamaniem?
Generalnie backend i baza danych bedzie odpalona z dockera. Chciałbym wystawiać tylko potrzebne porty dla backendu i nie stracić zdalnej kontroli maszyny. Serwer ma wbudowany Ddos ale to pewnie za malo.
Jestem zielony w zabezpieczeniach serwerowych, dlatego proszę o wskazówki ;)
.
- Wybierz prostą dystrybucję Linuksową (w stylu Ubuntu), nie baw się w żadne fancy systemy (które może i są nieco bezpieczniejsze, ale mają mniej materiałów dostępnych online oraz sprawiają, że łatwiej jest się poparzyć bez odpowiedniej wiedzy),
- Zainstaluj firewall (ufw / iptables wbudowane w Ubuntu wystarczą), poblokuj niewykorzystywane porty (czy raczej w drugą stronę: zostaw odblokowane tylko te porty, które są potrzebne; ufw chyba tak nawet działa domyślnie),
- Skonfiguruj serwer SSH na losowym porcie¹, wyłącz logowanie przez hasło (zostawiając tylko logowanie przez klucz publiczny), wyłącz logowanie na użytkownika
root
, - Nie wystawiaj na zewnątrz bazy danych (np. nie odblokowuj portu 5432/TCP w przypadku Postgresa),
- Aktualizuj system na bieżąco :-)
¹ choć security by obscurity nie jest najlepszym modelem bezpieczeństwa, nawet taka głupia zmiana portu pozwoli Ci się zabezpieczyć przed wieloma botami, które skanują komputery podpięte do sieci i próbują wykorzystać 0daye (bo takie boty często nie skanują wszystkich otwartych portów, a jedynie na pałę sprawdzają domyślny port danej usługi)
Prócz tego co wymienił @Patryk27 i na co przyklaskuję, to prócz bezpośredniego zabezpieczenia systemu dodałbym też utrudnienie dotarcia do niego. A więc ten backend schowałbym za chmurą jak Cloudflare by IP nie było podane na tacy. Trudniej włamać się do domu konkretnej osoby nie wiedząc gdzie ta osoba mieszka ;)
Dodatkowo masz kolejne warstwy chronione przed ddos i sporo narzędzi do np. filtrowania ruchu.
Ogólnie środowisko powinno zapewniać minimalne uprawnienia potrzebne do poprawnego działania aplikacji. Szukaj pod hasłem "* hardening".
- Docker hardening
- Linux hardening
- Postgres/MySQL/... hardening
https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html
https://github.com/trimstray/the-practical-linux-hardening-guide/wiki
Doczytaj o mechanizmie capabilities:
https://www.cybereason.com/blog/container-escape-all-you-need-is-cap-capabilities
Polecam zapoznać się z tą specyfikacją (dostępna po rejestracji są też wersje dla poszczególnych dystrybucji i niektórych aplikacji):
https://www.cisecurity.org/benchmark/distribution_independent_linux
To prawdopodobnie daleko więcej niż potrzebujesz, ale myślę, że warto przejrzeć i wybrać co ci potrzebne.