Cześć,
Trafiła się okazja jak ślepej kurze ziarno dawno temu i upolowałem domenę za darmo sysadmin.info.pl. Pierwotnie zamysł był taki, aby użyć jej do pracy inżynierskiej i tak też się stało. Trzy miesiące później znów nadarzyła się okazja, której nie mogłem przegapić. Tym razem wirtualna maszyna na OpenVZ za śmieszne wręcz pieniądze. Zainteresowanych odsyłam do https://mikr.us . Po kliknięciu w link dostaniesz 5% zniżki na serwer na rok.
Tym sposobem stało się możliwe posiadanie wersji live własnej strony, której konfigurację opiszę poniżej krok po kroku. Przy okazji pokażę jak to można wszystko dobrze zabezpieczyć i udowodnić, że domyślna konfiguracja 128 MB RAM i 128 MB swap w zupełności wystarcza, aby posiadać stronę opartą o a jakże popularny CMS WordPress, który jest najczęściej atakowanym CMS-em na świecie. Ale o tym może w innym wpisie. Hardening Linux był tematem mojej pracy inżynierskiej, więc przy okazji podzielę się paroma uwagami związanymi z tą tematyką, jak i też pokażę, co na mikrusie można, a czego nie można.
Poprosiłem o zmianę domyślnego Ubuntu 16:04 na CentOS 7 i dostałem wersję 7.6. No bomba, to mi się podoba. Po małych problemach udało mi się w końcu przywrócić moją stronę do żywych i przy okazji odświeżyć sobie wiedzę z zakresu stawiania serwera web na CentOS. A więc zaczynamy.
Założenie konta na cloudflare.com i ustawienie domeny
Załóż darmowe konto (free basic) na https://www.cloudflare.com/
Potwierdź maila i przejdź do konfiguracji domeny tam, gdzie masz panel od domeny. Zmień tam serwery DNS (ns1 oraz ns2) na:
aragorn.ns.cloudflare.com
vida.ns.cloudflare.com
Zaloguj się do cloudflare. Dodaj domenę (add domain).
Ustaw rekord AAAA , jako name nazwę domeny i jako adres IPv6 adres w wersji IPv6. Znajdziesz ten adres wpisując w terminalu polecenie:
|
|
Będzie on podany w tej postaci: 2001: ….
Skopiuj go sobie, albo spisz bez ostatnich elementów: /128
Wklej go w pole content. Zapisz zmianę.
Kliknij w ikonę SSL/TLS i ustaw jak na obrazku poniżej:
Kliknij w Edge Certificates i ustaw:
Poniżej będą opcje, które powinny być włączone:
Następnie kliknij w Page rules i dodaj regułę klikając w Create Page Rule.
Nazwę domeny na np.
http://strona.com.pl
(pamiętaj o http nie https).
Wybierz Automatic HTTPS rewrites z rozwijanej listy i ustaw na ON.
Kliknij save and deploy.
W razie pytań o inne ustawienia, napisz w komentarzu, co Ciebie nurtuje.
Logowanie ssh oraz jego zabezpieczenie.
Dostęp do wirtualnej maszyny jest możliwy tylko i wyłącznie po ssh.
W pierwszej kolejności należy dla bezpieczeństwa zmienić hasło root, ponieważ dostajemy tymczasowe hasło do logowania, adres serwera i możemy użyć do pierwszego logowania tylko i wyłącznie konta root, co samo w sobie bezpieczne nie jest.
|
|
Po ustawieniu hasła, musimy dodać sobie użytkownika, którego będziemy używać do logowania się po ssh i w zastępstwie za root, ze względów bezpieczeństwa, Aby jednak móc w razie potrzeby wykonać czasem polecenia na prawach roota, dodamy użytkownika do grupy sudoers.
|
|
W następnej kolejności należy zablokować użytkownika root dla połączeń ssh. W tym celu trzeba edytować plik sshd_config.
|
|
Znajdujemy wpis i ustawiamy go w ten sposób: PermitRootLogin no
Aby móc edytować , wciskamy insert, zmieniamy wartość z yes na no. W następnej kolejności wciskamy Esc, wpisujemy :wq i naciskamy Enter. W ten sposób zapisaliśmy zmiany. Teraz pozostaje jeszcze restart demona ssh.
|
|
Zakładam, że każdy wie, jak się łączyć do serwera przy pomocy terminala czy putty. Poniżej opiszę dwie metody generowania pary kluczy (prywatnego i publicznego) zarówno w putty, jak i w terminalu. Otwórz PuTTYgen.exe, naciśnij przycisk Generate, porusz myszą, w celu wygenerowania losowo pary kluczy z wykorzystaniem algorytmu RSA. Po wygenerowaniu kluczy wpisz hasło (passphrase) (wybierz „trudne do odgadnięcia”). Zapisz klucz publiczny. Zapisz klucz prywatny. 2048 bitów w zupełności wystarczy, lecz jeśli ktoś chce zwiększyć poziom bezpieczeństwa, może ustawić 4096 bitów w oknie.
Następnie po zalogowaniu się przy pomocy ssh i swojego konta użytkownika, w naszym przypadku będzie to user, wykonaj poniższe polecenia.
|
|
Kopiujemy z pola od ssh-rsa do końca wszystko, przechodzimy do zalogowanej sesji, wciskamy insert, wklejamy prawym myszki całość, następnie wciskamy Esc, wpisujemy :wq i naciskamy Enter. Potem ustawiamy plik tylko do odczytu poleceniem:
|
|
W następnej kolejności edytjemy plik /etc/ssh/sshd_config, jak wyżej. Zmieniamy wartości na: RSAAuthentication yes oraz PubkeyAuthentication yes, a także PermitEmptyPasswords no oraz PasswordAuthentication no. Zapisujemy plik analogicznie, jak wyżej to opisałem. (zakładam, że używanie vi już zostało zrozumiane). Restartujemy ssh poleceniem:
|
|
W połączeniu w putty lub w terminalu musimy wskazać plik klucza prywatnego do autoryzacji. Lub w przypadku putty kliknąć dwa razy na plik prywatny, podać hasło i program pageant.exe powinien załadować klucz prywatny do pamięci. Jeśli nie mamy pageant, to serwer zapyta nas o hasło do klucza prywatnego (passphrase), który został ustawiony po wygenerowaniu klucza (to zwiększa poziom bezpieczeństwa, ponieważ nawet w sytuacji, gdy ktoś zdoła przechwycić klucz, nie zna do niego hasła).
W przypadku, gdy korzystasz z terminala, generujesz na swoim komputerze klucz z poziomu terminala poleceniem:
|
|
Następnie kopiujesz klucz do serwera poleceniem:
|
|
Numer portu 12345 zmieniasz na ten, który dostałeś w mailu, a nazwę analogicznie, jak numer portu. Powyżej opisałem, jak zablokować dostęp do ssh dla użytkownika root. Teraz wystarczy tylko zrestartować demona ssh.
|
|
Rozłączyć się poleceniem
|
|
i połączyć ponownie za pomocą
|
|
Zwiększenie poziomu zabezpieczeń można jeszcze uzyskać poprzez dodanie grupy do logowania ssh i dodanie do tej grupy użytkownika.
|
|
Wyświetli się: user : user sudo grupassh lub user : user wheel grupassh
|
|
Dodaj:
|
|
|
|
Dla bezpieczeństwa użytkowników Ubuntu/Debian polecam zainstalować policies.
|
|
Określają one długość hasła, ile razu użytkownik może się zalogować, ile razy można używać tych samych znaków w haśle, określa kompleksowość hasła, jego siłę, liczbę cyfr, małych, dużych liter oraz znaków specjalnych.
Instalacja serwera web/www z użyciem Apache
W pierwszej kolejności wyczyść managera pobierania. W CentOS używany jest yum, natomiast w Debian/Ubuntu apt-get a w nowszych distro apt.
CentOS section
|
|
Debian section
|
|
Zainstaluj wszystkie aktualizacje:
CentOS section
|
|
Debian section
|
|
W następnej kolejności zainstaluj Apache (httpd w CentOS, apache2 w Debian/Ubuntu)
CentOS section
|
|
Debian section
|
|
Włącz Apache2 przy starcie systemui uruchom usługę.
CentOS section
|
|
Debian section
|
|
Status usługi możesz sprawdzić:
CentOS section
|
|
Debian section
|
|
Konfiguracja wirtualnego hosta
W przypadku CentOS tworzymy plik wirtualnego hosta dla http (port 80) za pomocą poniższego polecenia:
|
|
Natomiast w przypadku Debian
|
|
|
|
Dla Debian/Apache musimy jeszcze włączyć stronę
|
|
Co spowoduje stworzenie dowiązania symbolicznego w katalogu /etc/apache2/sites-enabled.
Tworzenie fizycznej struktury i wgranie WordPress na serwer.
Teraz należy stworzyć katalog dla strony w katalogu /var/www/html
|
|
(wpisz hasło użytkownika, którego utworzyłeś na samym początku)
|
|
Utwórz katalog o nazwie src w katalogu swojej witryny, aby przechowywać nowe kopie plików źródłowych WordPress. W tym przewodniku jako przykład wykorzystano katalog domowy /var/www/html/strona.com.pl/. Przejdź do tego nowego katalogu:
|
|
Ustaw użytkownika serwera WWW, www-data, jako właściciela katalogu domowego swojej witryny. www-data jest grupą. W przypadku CentOS będzie to grupa apache.
CentOS section
|
|
Debian section
|
|
Zainstaluj najnowszą wersję WordPress i wypakuj ją używając odpowiedniej nazwy w zależności od używanego systemu:
|
|
Zmień nazwę pliku latest.tar.gz na wordpress, a następnie ustaw datę przechowywania kopii zapasowej oryginalnych plików źródłowych. Będzie to przydatne, jeśli zainstalujesz nowe wersje w przyszłości i będzie potrzeba powrócić do poprzedniej wersji:
|
|
Utwórz katalog public_html, który będzie katalogiem głównym WordPress. Przenieś pliki WordPress do folderu public_html:
|
|
Nadaj folderowi public_html uprawnienia dla grupy www-data lub apache:
CentOS section
|
|
Debian section
|
|
Przejdź do katalogu, do którego wyodrębniono WordPress, skopiuj przykładową konfigurację i ustaw ją tak, aby korzystała ze zdalnej bazy danych:
|
|
Zmień zmienne logowania tak, aby pasowały do bazy danych i użytkownika. Edytuj plik:
|
|
|
|
Dodaj klucze bezpieczeństwa, aby zabezpieczyć wp-admin.
Użyj Generatora kluczy bezpieczeństwa WordPress, aby utworzyć losowe, skomplikowane hashe, których WordPress użyje do zaszyfrowania danych logowania. Skopiuj wynik i zastąp odpowiednią sekcję w pliku wp-config.php:
|
|
Instalacja i konfiguracja Maria DB 10.4 w CentOS 7.6.
|
|
|
|
Podczas konfiguracji potwierdź y puste hasło root w MariaDB, a w następnym kroku ustaw hasło roota (tego od MariaDB). To hasło powinno być inne, niż hasło roota, które dostałeś w mailu po założeniu serwera na mikr.us.
|
|
|
|
|
|
Po zalogowaniu się do bazy danych utwórz bazę danych i przypisz ją do użytkownika.
|
|
|
|
Wpisz hasło użytkownika user, którego właśnie stworzyłeś
|
|
Jeśli wyświetli się wersja MariaDB, to znaczy, że wszystko działa.
|
|
Zrestartuj serwer baz danych oraz web poleceniami:
|
|
Instalacja i konfiguracja Maria DB 10.3 w Ubuntu 16.04 LTS
Aby zainstalować MariaDB 10.3 na Ubuntu 16.04, musisz dodać repozytorium MariaDB do systemu. Uruchom następujące polecenia, aby zaimportować klucz PGP repozytorium MariaDB i dodać repozytorium.
|
|
Zaktualizuj listę pakietów systemowych i zainstaluj MariaDB.
|
|
Zostaniesz poproszony o podanie hasła roota MariaDB. Musisz podać je dwukrotnie. Zatwierdź zmianę hasła. Możesz potwierdzić zainstalowaną wersję MariaDB, logując się jako użytkownik root.
|
|
Po zalogowaniu się wpisz status; (pamiętaj o średnikach w składni SQL). Następnie wpisz exit.
Zalecam przeprowadzenie dokładnie tej samej procedury, co w przypadku instalacji na CentOS. Powyżej widać, jakie kroki po kolei muszą zostać podjęte.
|
|
Następnie należy wykonać poniższe polecenia:
|
|
Bazę użytkownika utwórz identycznie, jak w przypadku tworzenia bazy w CentOS.
Instalacja i konfiguracja certyfikatu SSL za pomocą Let’s Encrypt.
Wykorzystamy do tego stronę https://certbot.eff.org
Z rozwijanej listy Software wybieramy Apache, system operacyjny, to albo Ubuntu 16.04, albo Debian 9, albo CentOS/RHEL 7 i postępujemy zgodnie ze wskazówkami.
Wybierz stronę bez www, lub z www, jak tobie pasuje, ponieważ certbot nam rozpozna wirtualny host dla http, który utworzony został wcześniej.
Nie włączaj przekierowania z http na https, ponieważ to zrobisz po stronie Cloudflare. Inaczej napotkasz błąd. Dlatego wybierz 1 , gdy zapyta o redirect.
Certbot zainstaluje automatycznie certyfikat, utworzy plik wirtualnego hosta. Teraz tylko trzeba wejść do katalogu:
|
|
Polecam zmodyfikować plik wirtualnego hosta dla https, aby ostatecznie wyglądał tak:
CentOS section
|
|
Debian section
|
|
|
|
Konfiguracja silnika MyISAM w MariaDB zamiast InnoDB.
CentOS 7.6 section
W CentOS edytujemy plik my.cnf
|
|
Teraz w zasadzie wystarczy zastąpić ten plik tym, co poniżej:
|
|
Zapisać zmiany, zrestartować httpd oraz mariadb
|
|
Ubuntu 16.04 section
W przypadku Ubuntu 16.04 lokalizacja pliku jest nieco inna.
|
|
Wystarczy wkleić w ten plik to, co jest w sekcji [mysqld] powyżej. Aczkolwiek zalecam włączenie logowania błędów do mariadb i ustawić w my.cnf logowanie błędów, jak poniżej jest to widoczne.
|
|
Zapisać zmiany, zrestartować apache2 oraz mariadb
|
|
Instalacja PHP 7.3
CentOS 7.6 section
Założenie jest takie, że istnieje użytkownik dodany do grupy wheel (sudoers) na samym początku tutoriala. Po sudo -i podaje się hasło użytkownika, nie roota.
|
|
Ubuntu 16.04 section
|
|
Ustawienie limitu pamięci w PHP
|
|
CentOS 7.6 section
|
|
Ubuntu 16.04 section
|
|
Ustaw:
|
|
Optymalizacja Apache
CentOS 7.6 section
|
|
Ubuntu 16.04 section
|
|
Na końcu tego pliku dodaj to:
|
|
Zapisz plik i wyjdź z edycji.
Instalacja i konfiguracja iptables
CentOS 7.6 section
Instalacja i konfiguracja iptables w CentOS 7.6
Wyłącz firewalld:
|
|
Zainstaluj iptables i włącz.
|
|
Sprawdź status iptables oraz reguły
|
|
Dodaj reguły dla iptables
|
|
Zapisz zmiany
|
|
Ubuntu 16.04 section
Instalacja i konfiguracja iptables w Ubuntu 16.04
|
|
Podczas instalacji zapyta czy zachować bieżące reguły oraz czy chcesz używać zarówno IPv4, jaki IPv6. Na wszystkie te pytania odpowiedz twierdząco.
|
|
Dodaj porty:
|
|
Zapisz zmiany i przeładuj usługę:
|
|
Przejdź teraz po adres https://strona.com.pl i zainstaluj WordPress.
Zalecam po skończonej instalacji, instalację wtyczki Cloudflare i integrację z serwisem.