Co można zrobić, aby zabezpieczyć serwer Ubuntu?

35

Mam projekt, aby zabezpieczyć serwer Ubuntu w jak największym stopniu. Serwer jest serwerem hostingowym. Na serwerze będą działać LAMP, Mail i DNS.

One Zero
źródło
Jakie usługi będą działały?
wojox
LAMPA, Poczta, DNS
One Zero
Zrobiłem ściągę na serwer Ubuntu i chciałbym się nią z tobą podzielić. Pierwsze kilka stron to ogólne polecenia systemu Linux, następnie określone pakiety serwerów, a ostatnia strona to lista kontrolna bezpieczeństwa serwera. Lista kontrolna łączy wskazówki i ulepszenia z wielu stron internetowych. Mam nadzieję, że Ci to pomoże! Licencjonowany na licencji WTFPL . Możesz wyświetlić / pobrać / cokolwiek z listy kontrolnej tutaj . Od czasu do czasu aktualizuję.
Noah Krasser

Odpowiedzi:

43

Oto lista rzeczy, które robię, aby zabezpieczyć mój serwer.

  1. Włącz UFW ( sudo ufw enable), a następnie zezwól tylko na faktycznie używane porty. ( sudo ufw allow 80)
  2. Upewnij się, że MySQL zezwala tylko na połączenia z hosta lokalnego.
  3. Włącz TLS w usługach pocztowych. Nawet jeśli jest to certyfikat z podpisem własnym. Nie chcesz, aby hasła były przesyłane jednoznacznie.
  4. Zainstaluj blokery ssh bruteforce, takie jak denyhosts lub fail2ban. ( sudo apt-get install denyhosts)
  5. Spójrz na robienie tylko loginów opartych na kluczach ssh.
  6. Dowiedz się AppArmor. Jeśli używasz dość waniliowych konfiguracji, jest to niezwykle łatwe. Tylko upewnij się, że jest włączony. Pomoże to zmniejszyć exploity zero-day.
  7. W zależności od fizycznego dostępu do serwera, możesz nawet chcieć przyjrzeć się szyfrowaniu danych na dysku twardym.
  8. Postępuj zgodnie z innymi zaleceniami w tym linku. EDYCJA: Zapomniałem edytować to, gdy nie miałem wystarczającej reputacji, aby dodać więcej linków. Link oznaczony tutaj to ostatni link poniżej.
  9. Nigdy nie ufaj swoim użytkownikom. Jeśli masz wielu użytkowników z dostępem do systemu, zablokuj ich. Jeśli musisz dać im dostęp sudo, daj im tylko to, czego potrzebują.
  10. Użyj rozumu. Zastanów się, jak byś się dostał, gdybyś był kiedykolwiek zablokowany. Następnie zamknij te dziury.

Jeszcze kilka rzeczy do rozważenia. Większość ludzi zapomina o fizycznym dostępie. Wszystkie konfiguracje oprogramowania na świecie nic nie znaczą, jeśli mogę fizycznie wejść z LiveCD i ukraść twoje dane. Strzeż się inżynierii społecznej. Zadawaj pytania, aby sprawdzić, kto rozmawia przez telefon i upewnij się, że ma upoważnienie do złożenia żądanego wniosku.

Ponieważ nadal jestem „nowym” użytkownikiem, nie mogę opublikować więcej niż 2 linków. Możesz przeczytać więcej na ten temat tutaj: https://help.ubuntu.com/12.04/serverguide/index.html i zwrócić szczególną uwagę na https://help.ubuntu.com/12.04/serverguide/security.html

Patrick Regan
źródło
2
Alternatywą dla korzystania z UFW (podczas gdy nadal używasz wbudowanych zapór ogniowych w Ubuntu) jest zablokowanie systemu za pomocą bardzo szczegółowych iptableszasad, aby uniemożliwić zewnętrzny dostęp do jakiejkolwiek usługi, z której nie będziesz korzystać, jeśli masz dziwne- ustawienie piłki, które wymaga zaawansowanego routu i tak dalej.
Thomas Ward
2
@LordofTime uzgodnione. Właściwie sam używam iptables, ale ufw jest w porządku dla większości podstawowych instalacji. Poza tym UFW to mniej więcej opakowanie dla większości popularnych konfiguracji iptables. Podstawowy system jest nadal taki sam.
Patrick Regan,
2
+1 dla ufw, nie jesteś nowym użytkownikiem, jesteś członkiem na 1 rok: p
Tachyons
1
Rzeczywiście, chciałem tylko zauważyć, że w niektórych przypadkach iptables będą miały lepszą użyteczność niż ufw w niektórych przypadkach
Thomas Ward
1
Rozważ BastilleLinux, który jest także dobrym pakietem do zwiększania bezpieczeństwa.
pl1nk
13

Bezpieczna pamięć współdzielona

/ dev / shm może być użyty w ataku na działającą usługę, taką jak httpd. Zmodyfikuj / etc / fstab, aby był bardziej bezpieczny.

Otwórz okno terminala i wprowadź następujące dane:

sudo vi /etc/fstab

Dodaj następujący wiersz i zapisz. Musisz ponownie uruchomić, aby to ustawienie zaczęło obowiązywać:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Wzmocnij sieć z ustawieniami sysctl

Plik /etc/sysctl.conf zawiera wszystkie ustawienia sysctl. Zapobiegaj routingowi źródłowemu przychodzących pakietów i rejestruj zniekształcone adresy IP, wprowadź następujące informacje w oknie terminala

sudo vi /etc/sysctl.conf

Edytuj plik /etc/sysctl.conf i usuń komentarz lub dodaj następujące wiersze:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Aby ponownie załadować sysctl z najnowszymi zmianami, wprowadź:

sudo sysctl -p

Zapobiegaj fałszowaniu adresów IP

Otwórz terminal i wprowadź następujące dane:

sudo vi /etc/host.conf

Dodaj lub edytuj następujące linie:

order bind,hosts
nospoof on

Zaostrz PHP dla bezpieczeństwa

Edytuj plik php.ini:

sudo vi /etc/php5/apache2/php.ini

Dodaj lub edytuj następujące linie:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Zapora sieciowa - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Chroń przed atakami DDOS (Denial of Service) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Skanuj dzienniki i blokuj podejrzane hosty - DenyHosts i Fail2Ban

@DenyHosts

DenyHosts to program w języku Python, który automatycznie blokuje ataki SSH poprzez dodawanie wpisów do /etc/hosts.deny. DenyHosts poinformuje również administratorów Linuksa o obrażających hostach, zaatakowanych użytkownikach i podejrzanych logowaniach.

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install denyhosts

Po instalacji edytuj plik konfiguracyjny /etc/denyhosts.conf i zmień adres e-mail oraz inne ustawienia zgodnie z wymaganiami.

Aby edytować ustawienia administratora, otwórz okno terminala i wprowadź:

sudo vi /etc/denyhosts.conf

Zmień następujące wartości zgodnie z wymaganiami na serwerze:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban jest bardziej zaawansowany niż DenyHosts, ponieważ rozszerza monitorowanie dziennika na inne usługi, w tym SSH, Apache, Courier, FTP i inne.

Fail2ban skanuje pliki dziennika i blokuje adresy IP, które pokazują złośliwe znaki - zbyt wiele awarii haseł, szukanie exploitów itp.

Zasadniczo Fail2Ban następnie aktualizował reguły zapory sieciowej w celu odrzucenia adresów IP na określony czas, chociaż można również skonfigurować dowolne inne działanie. Po wyjęciu z pudełka Fail2Ban zawiera filtry dla różnych usług (apache, kurier, ftp, ssh itp.).

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install fail2ban

Po instalacji edytuj plik konfiguracyjny /etc/fail2ban/jail.local i utwórz reguły filtrów zgodnie z wymaganiami.

Aby edytować ustawienia, otwórz okno terminala i wprowadź:

sudo vi /etc/fail2ban/jail.conf

Aktywuj wszystkie usługi, które chcesz monitorować fail2ban, zmieniając włączone = false na * włączone = true *

Na przykład, jeśli chcesz włączyć monitorowanie SSH i banowanie więzienia, znajdź wiersz poniżej i zmień opcję z false na true . To jest to.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Jeśli chcesz otrzymywać e-maile od Fail2Ban, jeśli hosty są zbanowane, zmień następujący wiersz na swój adres e-mail.

destemail = root@localhost

i zmień następujący wiersz z:

action = %(action_)s

do:

action = %(action_mwl)s

Możesz także utworzyć filtry reguł dla różnych usług, które chcesz monitorować fail2ban, które nie są domyślnie dostarczane.

sudo vi /etc/fail2ban/jail.local

Dobre instrukcje konfiguracji fail2ban i tworzenia różnych filtrów można znaleźć w HowtoForge - kliknij tutaj, aby zobaczyć przykład

Po zakończeniu konfiguracji Fail2Ban uruchom ponownie usługę za pomocą:

sudo /etc/init.d/fail2ban restart

Możesz także sprawdzić status za pomocą.

sudo fail2ban-client status

Sprawdź rootkity - RKHunter i CHKRootKit.

Zarówno RKHunter, jak i CHKRootkit w zasadzie robią to samo - sprawdź system pod kątem rootkitów. Bez szkody przy użyciu obu.

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install rkhunter chkrootkit

Aby uruchomić chkrootkit, otwórz okno terminala i wprowadź:

sudo chkrootkit

Aby zaktualizować i uruchomić RKHunter. Otwórz terminal i wprowadź następujące dane

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Skanuj otwarte porty - Nmap

Nmap („Network Mapper”) to darmowe narzędzie typu open source do wykrywania sieci i audytu bezpieczeństwa.

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install nmap

Przeskanuj system w poszukiwaniu otwartych portów za pomocą:

nmap -v -sT localhost

Skanowanie SYN za pomocą:

sudo nmap -v -sS localhost

Analizuj systemowe pliki dziennika - LogWatch

Logwatch to konfigurowalny system analizy dzienników. Logwatch analizuje dzienniki systemu i tworzy raport analizujący określone obszary. Logwatch jest łatwy w użyciu i będzie działał od razu w pakiecie na większości systemów.

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install logwatch libdate-manip-perl

Aby wyświetlić dane wyjściowe z zegarka, użyj mniej:

sudo logwatch | less

Aby wysłać raport z zegarem z ostatnich 7 dni na adres e-mail, wprowadź następujące dane i zastąp [email protected] wymaganym adresem e-mail. :

sudo logwatch --mailto [email protected] --output mail --format html --range 'between -7 days and today' 

Audyt bezpieczeństwa systemu - Tiger.

Tiger to narzędzie bezpieczeństwa, które może być używane zarówno jako audyt bezpieczeństwa, jak i system wykrywania włamań.

Otwórz terminal i wprowadź następujące dane:

sudo apt-get install tiger

Aby uruchomić tygrysa, wprowadź:

sudo tiger

Wszystkie dane wyjściowe Tiger można znaleźć w / var / log / tiger

Aby wyświetlić raporty bezpieczeństwa tygrysa, otwórz terminal i wprowadź następujące dane:

sudo less /var/log/tiger/security.report.*

Aby uzyskać więcej pomocy

One Zero
źródło
PHP magic_quotes_gpc = On. Magiczne cytaty zostały najpierw przestarzałe, a następnie usunięte: php.net/manual/en/security.magicquotes.whynot.php
Tim
13

Ponieważ powiedziałeś, że jest to serwer hostingowy ... Chciałbym podzielić się moimi najlepszymi praktykami i doświadczeniem z 5 długich lat w branży hostingowej.

  1. Z moich przeszłych doświadczeń, zamiast od razu przejść do konfiguracji piekła, powinieneś najpierw złożyć nisko wiszące winogrona bezpieczeństwa, jak wskazano w danym artykule.

  2. Ponieważ masz LAMP, musisz być bardzo ostrożny wobec PHP i jego ustawień php.ini. To dobry link do zabezpieczenia PHP. PHP ma super moce, które mogą stać się pętlą bezpieczeństwa, jeśli nie są odpowiednio skonfigurowane.

  3. Możesz użyć zadania cron, aby sprawdzić, kiedy Twoje pliki zostały zmodyfikowane bez Twojej zgody i ewentualnie włamane; za pomocą tego zadania cron . Wolę Notepad ++, aby porównać wyniki cron (bezpośrednio pobierz e-mail cron z serwera WWW i otwórz w Notepad ++).

  4. Jeśli chcesz zainstalować SEM, najlepiej wybrać cPanel (niezależnie od tego, czy jest płatny). Webmin i zpanel są bardzo dobrymi darmowymi alternatywami. Webmin jest lepszy, ponieważ przynajmniej używa samopodpisanych certyfikatów i zwiększa bezpieczeństwo.

  5. Jeśli chcesz, aby coś działało od razu po wyjęciu z pudełka, możesz wybrać system Linux pod klucz. Jest oparty na Ubuntu, niezwykle łatwy do wdrożenia i elastyczny dla twoich potrzeb. Przy bardzo małym wysiłku zyskujesz bezpieczeństwo po wyjęciu z pudełka. To jest ich stos LAMP . Ja osobiście używam i wolę tylko to.

  6. Jeśli zaczynasz od zera, możesz także zainstalować ISPconfig3. Instrukcja tutaj .

  7. możesz przetestować swoje bezpieczeństwo, próbując przeniknąć do swojego bezpieczeństwa przy użyciu Back-Track-Linux .

  8. przechowuj złożone długie i losowe hasła. Nie przechowuj ich na komputerze. spisać je. Użyj płyty CD na żywo, aby uzyskać dostęp do tych danych logowania.

  9. uzyskaj oprogramowanie do ochrony przed brutalną siłą , takie jak fail2ban.

  10. Nie uruchamiaj demonów, których nie potrzebujesz.

  11. Zablokuj wszystkie niepotrzebne porty . bądź bardzo ostrożny z portem SSH (22).

  12. Zdobądź statyczny adres IP w systemie, przez który będziesz zarządzać serwerem. Zrób większość rzeczy, blokując adres IP i zezwól tylko twojemu adresowi IP na dostęp do tych miejsc konfiguracji, takich jak port 22.

Pod koniec dnia ... pracuj z całkowitym spokojem, nie przejmuj się instalacją, a stosowanie zdrowego rozsądku zabierze Cię znacznie dalej.

**My heartiest best wishes to you. good luck.**
Bhavesh Diwan
źródło
1
PHP może być również niebezpieczne, gdy ufasz wejściom użytkownika (np. Wstrzykiwanie SQL).
NoBugs
@NoBugs Absolutnie zgadzam się z tym punktem. Nie można skompresować wszystkiego w jednej odpowiedzi. Moja odpowiedź zawiera wiele hiperłączy, dlatego strony zawierające te strony są naprawdę bardzo przydatne. Mam nadzieję, że moja odpowiedź i zawarte linki pomogą społeczności :)
Bhavesh Diwan
2
# 9: Nie, ramdom passwrds są złe, klucz ma długość , tj. „D0g .....................” jest silniejszy niż „PrXyc.N (n4k77 # L! EVdAfp9”. Objaśnienie na wyjaśnienie wyjaśniające xkcd.com/2011/08/10 / hasło-siła
papukaija
2
@papukaija Sugeruję, aby google brute force attacksi dictionary attacks.. Losowe długie hasło to jedyny sposób, aby zabezpieczyć się przed takimi atakami.
Bhavesh Diwan
6

Skorzystaj z projektu Bastille Linux.

Zapewnia interaktywne narzędzie do wykonywania dodatkowych środków zwiększających bezpieczeństwo w celu zwiększenia ogólnego bezpieczeństwa i zmniejszenia podatności na kompromisy w systemie Ubuntu (z Bastille Linux ).

Oferuje funkcje oceny i raportowania, dzięki czemu można powiedzieć, które części systemu nie są zablokowane. Bada system w trybie tylko do odczytu, raportując stan każdego z jego elementów utwardzających. Na przykład Bastille może sprawdzić, czy serwer DNS jest zamknięty w więzieniu chroot, czy telnet jest wyłączony, a nawet jeśli wymagane jest, aby hasła były dobrej długości. Za pomocą tego linku możesz obejrzeć wersję demonstracyjną dostępną tylko w Internecie (więcej informacji ).

Możesz mieć podgląd w sieci (tylko) demo tutaj .

BastillleLinux

pl1nk
źródło
1
Mogę poprzeć to zalecenie. Aby uruchomić odsłonięte hosty (np. Serwery sieciowe), Bastille przechodzi długą drogę w kierunku zabezpieczenia systemu.
Floyd,
Wygląda to podobnie do systemu SELinux, który można znaleźć na CentOS / Redhat, ale założę się, że SELinux jest bardziej nowoczesny.
djangofan
3

Używaj nmapna wszystkich interfejsach komputera, abyś wiedział, jakie usługi uruchamiasz na swoim komputerze. Jest to niezbędne narzędzie bezpieczeństwa.

Usuń wszystkie niepotrzebne usługi z zewnętrznych interfejsów. Możesz skonfigurować MySQL, aby nasłuchiwał tylko na określonych interfejsach, takich jak localhost.

Użyj ufw, aby chronić swoją usługę SSH (i możliwe inne), aby nie zezwalała na zbyt wiele (nieudanych) połączeń na minutę z tego samego komputera. To utrudni ataki brutalną siłą. Zmiana numeru portu nie jest tak przydatna, po prostu niejasność, brak bezpieczeństwa.

Ograniczaj liczbę kont na swoim komputerze. Nie instaluj też więcej pakietów / programów niż faktycznie używasz. Instaluj tylko klientów X11, a nie serwer X11.

Zezwól tylko na logowanie ssh do urządzenia za pomocą certyfikatów cyfrowych, bez hasła. To sprawi, że brutalne ataki będą trudne / niemożliwe.

Anders
źródło
0

Bezpieczeństwo zawsze ma swoją cenę. Ustalenie realistycznych granic pomoże ci osiągnąć swoje cele. Rozważę następujące aspekty:

  • Przeciwko czemu się chronisz (jaki rodzaj złoczyńcy, jaki jest jego budżet)?
  • Jakie są twoje wektory ataku?

Sprawdzając wszystkie linki tutaj opublikowane, myślę, że ten należy dodać. Szczegółowo opisuje nie tylko sposób konfiguracji oprogramowania, ale także przemyślenie planu bezpieczeństwa. Na plus, każde polecenie do wykonania jest wyjaśnione ze źródłem.

Zabezpieczanie Ubuntu Webserver na Xenial 16.04

Daan
źródło