Kompletna instalacja serwera Debian 10.2 (Buster) z Apache, Bind, Devecot, PureFTP, ISPConfig 3.1, serwer www, mysql, php

W tym poradniku napiszę i postaram się szczegółowo opisać każdy krok, co i dlaczego instalujemy, żeby nasz serwer był funkcjonalny i zabezpieczony.

Do instalacji bierzemy Debiana 10 (Buster) do tego zainstalujemy apache2, Bind, Dovecot, a następnie ISP Config 3.1

Ogólny założenia i plan jest taki:
  1. Instalacja nowego serwera na Debian 10.2:
  • Przygotowanie USB do instalacji,
  • Ustawienie partycji,
  • Instalacja servera ssh
  • Konfiguracja ssh
  • Konfiguracja Hostname
  • Aktualizacja pakietów Debiana
  • Zmiana domyślnych ustawień Shell
  • Synchronizacja lokalizacji i godziny servera
  • Instalacja Postfix
  • Instalacja Dovecot
  • Instalacja MariaDB
  • Instalacja rkhunter
  • Instalacja Binutils
  • Instalacja Amavisd-new
  • Instalacja SpamAssassin
  • Instalacja ClamAV
  • Instalacja Apache Web Server
  • Instalacja Let`s script
  • Instalacja Mailman
  • Instalaccja PureFTPd
  • Instalacja Quota
  • Instalacja BIND DNS Server
  • Instalacja Webalizer
  • Instalacja AWStats
  • Instalacja Jailkid
  • Instalacja fail2ban
  • Instalacja UFW Firewall
  • Instalacja PHPMyAdmin Database Admin Tool
  • Instalacja RoundCube (najnowsza wersja!)
  • Pobranie panelu ISPConfig 3.1
  • Instalacja ISPConfig 3.1
  • Instalacja Manuala ISP Config 3.1
ZABEZPIECZENIE SERWERA
  • zmiana portu ssh
  • napisanie skryptu do powiadomień o logowaniu ssh
  • ustawienie powiadomień o loginie ssh
  • zamknięcie wszystkich portów i praca z whitelists
  • zapobieganie atakom brute force z Fail2Ban
  • wykrywanie rootkitów z rkhunter
  • konfiguracja monit
  • monitoring usług z Monit
  • instalacja freshclem
  • instalacja SPF
  • instalacja DKIM
  • instalacja DMARC
  • monitorowanie dysków z pomocą smartmontools
  • sprawdzenie czy IP serwera lub domeny nie wpadały na międzynarodową blackliste
PRZYGOTOWANIE POD BACKUP AUTOMATYCZNY:
  • Instalacja Clonezilli
  • Konfiguraja Clonezilli
  • Konfiguracja Crone
Co z tego wyjdzie zobaczymy 🙂 Zaczynamy

1. Tworzenie dysku instalacyjnego Debian 10.2 (Buster).

Ściągamy najnowsze iso ze strony producenta, debian 10.2 wersja minimalna (https://www.debian.org/distrib/netinst).
Po ściągnięciu tworzymy USB bootowalne co opisałem  https://riken24.pl/jak-stworzyc-boot-owalny-pendrive-usb-na-z-ubuntu-18-04/ dla linux.

2. Instalacja Debian 10.2 Server (Buster)

  • Podpinamy naszego świeżo stworzonego Pena (chyba poprawne politycznie), do gniazdka USB na serwerze.
  • W BIOS-ie ustawiamy bootowanie z USB lub jak u mnie na serwerze HP przy starcie komputera wciskamy F11 i wybieramy USB.
Partycje dla dysku 2TB, czyli użtkowe (~1,82 TB):
Na potrzeby serwera tutaj utworzyłem partycje:

3. Instalacja serwera OpenSSH

Co to jest SSH i szczegółowy opis znadziecie ( http://riken24.pl/co-to-jest-ssh-i-do-czego-mozna-go-wykorzystac/)
Instalacja serwera OpenSSH, żeby mieć dostęp zdalnie np. przy użyciu putty.
Przechodzimy na root-a i wpisujemy:
apt-get install ssh openssh-server
Następnie klikamy (T)ak lub (Y)es zależy od języka systemu.

4. Instalacja edytora tekstu VI lub NANO.

apt-get install nano vim-nox

5. Konfiguracja Hostname

  • Nazwa hosta niech nie będzie domeną główną tylko subdomeną np. serwer.primehost.pl (a nie samo primehost.pl)
  • Sprawdzamy jak u nas to wygląda
nano /etc/hosts
Przy ustawieniach:
Zapisujemy ctrl+O, następnie restartujemy serwer „systemctl reboot”
Teraz możemy sprawdzić nasze zmiany.
wpisujemy „hostname” u mnie primehost
natomiast „hostname -f” u mnie server.primehost.pl
Czyli wszystko się zgadza 🙂

6. Aktualizacja źródeł i repozytoriów.

nano /etc/apt/sources.list
Jeśli wszystko nam się zgadza:
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
To możemy odpalić:
apt-get update
a następnie:
apt-get upgrade

7. Synchronizacja zegara systemowego.

Najlepiej z synchronizować z serwerem NTP (Network Time Protocol)
apt-get -y install ntp
Mamy teraz ustawioną datę, czas i będzie nam się automatycznie synchronizował.

8. Instalacja OpenSSL, Postfix, dovecot, mariaDB, rkhunter i Binutils

Najlepiej to wszystko zainstalować jednocześnie, żeby nie pojawiły się konflikty.
Skoro wiemy co instalujemy to lecimy 🙂
apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo
Wybieramy: strona internetowa, a następnie (nazwa.example.com) w moim przypadku server.primehost.pl

9. Uruchomienie bazy MariaDB

mysql_secure_installation
  • Ustalamy nowe hasło, [Y/n]
    • New password: nowe hasło bazy danych MariaDB root password
    • Re-enter new password – powtórz nowe hasło MariaDB root
  • Usuwamy testowych użytkowników, [Y/n]
  • Zdalny dostęp do root-a, [Y/n]
  • Usuwamy testową bazę danych i dostęp do niej, [Y/n]
  • Przeładowujemy tabele bazy danych, [Y/n]

10. Konfiguracja Postfix

Żeby poczta wysyłała informacje, konieczna jest konfiguracja SMTP dla Postfix, aby tego dokonać należy edytować plik master.cf, który się znajduje w /etc/postfix.
nano /etc/postfix/master.cf
Teraz w pliku usuwamy „#” dla syslog_name, tls_security, sasls_auth_enable, i client_restriction.
Plik master.cf po edycji ma wyglądać następująco:
[…]
submission inet n – – – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n – – – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[…]
Gdy dokonamy zmian zapisujemy plik master.cf (ctrl+O i „enter”), ctrl+X wychodzimy z edytora.
Teraz pora zrestartować Postfix używając systemctl restart postfix
systemctl restart postfix

11. Ustawienie nasłuchiwania MySQL

Chcemy, aby MySQL działał poprawnie na wszystkich interfejsach, do tego będzie potrzebna nam edycja pliku 50-server.cnf , znajdującego się w /etc/mysql/mariadb.conf.d/
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Teraz, żeby wszystko działało poprawnie nie tylko na lokalu, to musimy za hashować (#) linijkę bind-address = 127.0.0.1, więc plik powinien wyglądać następująco.
[…]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
[…]

12. Ustawienie możliwości logowania z zewnątrz MariaDB

 

13. Ustawienie hasła dla MYSQL / MariaDB

Musimy edytować plik debian.cnf ,który zanajduję się w /etc/mysql/ oraz wpisać hasło w linijce password = TwojeHasłoSQL.
Edytujemy plik:
nano /etc/mysql/debian.cnf
Będzie to wyglądać tak:
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = TwojeHasłoSQL
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = TwojeHasłoSQL
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

14. Ustawienie większych limitów dla MariaDB

Żebyśmy ustawili większe limity musimy edytować plik limits.conf ,który znajduje się w folderze /etc/security/
nano /etc/security/limits.conf
i na końcu tego pliku dodajemy te dwie linie:
mysql soft nofile 65535
mysql hard nofile 65535
Teraz utworzymy nowy katalog przy pomocy komendy mkdir
mkdir -p /etc/systemd/system/mysql.service.d/
i w nim tworzymy nowy plik limits.conf
nano /etc/systemd/system/mysql.service.d/limits.conf
w tym pliku dodajemy:
[Service]
LimitNOFILE=infinity
Następnie zapisujemy i zamykamy edytor.

15. Ponowne ładowanie systemd i restart MariaDB

systemctl daemon-reload
systemctl restart mariadb
Teraz możemy sprawdzić czy połączenie MySQL działa poprawnie.
netstat -tap | grep mysql
Jeśli wszystko w porządku to wyglądać będzie to tak:
tcp6 0 0 [::]:mysql [::]:* LISTEN 16623/mysqld

16. Instalacja Amavisd-new, SpamAssassin i ClamAV

Najlepiej te biblioteki zainstalować równocześnie
Żeby zainstalować powyższe Antywirusy, antyspamy i integrator tego wszystkiego.
Dodatkowo nasze pakiety będą skanować pliki z archiwum zip, rar, arj, bzip2 etc. dlatego doinstalujemy od razu je, żeby nie miały problemów z analizą maili, w sumie to z ich załącznikami spakowanymi.
Oto kod:
apt-get install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full lrzip apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl libdbd-mysql-perl postgrey
Instalator ISPConfig 3, który docelowo będziemy instalować, używa amavisd, który ładuje wewnętrznie bibliotekę filtrów SpamAssassin, dzięki czemu możemy zatrzymać SpamAssassin, aby zwolnić trochę pamięci RAM:
systemctl stop spamassassin
systemctl disable spamassassin

17. Instalacja Apache Web Server i PHP

Powoli zbliżamy się do celu instalując kolejne pakiety, dzięki którym będziemy mogli odpalić nasz serwer web-owy. Teraz nadszedł czas na instalacje Apache2, PHP, FCGI, suExec, Pear i mcrypt.
Co to jest PHP, opisałem tutaj:
Co to jest mcrypt, został wyrzucony aktualnie z pakietu PHP 7.2, lecz dla starszych wersji warto go zainstalować.
Skoro wiemy co mamy instalować i jakie biblioteki potrzebujemy to lecimy:
apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7.3-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached libapache2-mod-passenger php7.3-soap php7.3-fpm php7.3-opcache php-apcu
Teraz możemy włączyć zainstalowane moduły wklepujemy:
sudo a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers actions proxy_fcgi alias
Teraz żeby upewnić się iż nasz serwer nie jest atakowany i nie będzie co najmniej przez lukę w HTTPOXY, wyłączamy globalnie nagłówek w apache. /etc/apache2/conf-available/httpoxy.conf
Ważne by tutaj zwrócić uwagę iż nie jest to httproxy tylko httpoxy !
nano /etc/apache2/conf-available/httpoxy.conf
i wklejamy kod:
<IfModule mod_headers.c>
RequestHeader unset Proxy early
</IfModule>
zapisujemy ctrl+O i wychodzimy ctrl+X
Teraz możemy włączyć bezpiecznie moduł a2enconf i zrestartować apache2
sudo a2enconf httpoxy
systemctl restart apache2
No to podstawa serwera www już stoi na naszym Debianie 10.2 (Buster) 🙂
Pamiętajmy jednak, że docelowo chcemy używać panelu ISP Config 3.1, więc wypadałoby doinstalować kolejne pakiety zanim go odpalimy.

18. Instalacja Mailman

ISP Config umożliwia nam zarządzanie tworzenie/modyfikowanie/usuwanie list mailingowych czy grupami dyskusyjnymi do tego właśnie służy pakiet MailMan, jeśli chcemy z tego skorzystać (jak najbardziej polecam), to go zainstalujmy.
apt-get install mailman
Następnie klikamy (T/n) lub (Y/n), zależy od wersji.
Wybieramy język, pl (Polish) polecam 🙂 (zaznaczamy spacją)
Klikamy [ok] i [ok]
Teraz zanim będziemy mogli uruchomić Mailman, wypadałoby utworzyć listę mailingową o nazwie mailman. Robimy to w ten sposób:
sudo newlist mailman
Podajemy e-mail opiekuna listy: np. admin@serwer.pl
Podajemy hasło do listy: np. HasłoMailing12
Teraz możemy edytować aliasy z /etc/aliases :
nano /etc/aliases
i dodać linie, które dadzą dostęp użytkownikowi mailman, czyli nam.
[…]
## mailman mailing list
mailman: „|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: „|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: „|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: „|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: „|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: „|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: „|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: „|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: „|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: „|/var/lib/mailman/mail/mailman unsubscribe mailman”
ctrl+O, [enter], ctrl+X i uruchamiamy listę:
newaliases
i restartujemy całego postfix-a
systemctl restart postfix
Na koniec włączamy konfiguracje Apache Mailman:
ln -s /etc/mailman/apache.conf /etc/apache2/conf-enabled/mailman.conf
Ha teraz mamy zdefiniowany alias/cgi-bin/mailman dla wszystkich vhostów apache, więc z administratora będziemy mogli zarządzać wszystkimi listami na naszym serwerze. Tak samo będziemy mogli dawać dostęp klientom czy użytkownikom stron.
Skoro wszystko skonfigurowane to możemy zrestartować apache i daemona z mailman 🙂
systemctl restart apache2
systemctl restart mailman

19. Przed nami instalacja PureFTPd i Quota

Co to jest PureFTPd, Popularny i prosty w instalacji serwer FTP. Jednak wypada zmienić trochę domyślnych ustawień dla bezpieczeństwa 🙂
Co to jest Quota,  jest wygodną funkcjonalnością systemów plików, umożliwiającą limitowanie miejsca dyskowego, z którego użytkownik może korzystać. Jest to szczególnie ważne na wielkich serwerach z tysiącami użytkowników, aby użytkownicy nie mogli całkowicie zapchać dysków.