Tökéletes szerver: Debian 9 (stretch) V1.0

botond küldte be 2019. 01. 21., h – 17:40 időpontban

Az 1. oldal tartalma

 

Bevezető

Ebben a leírásban elkészítjük a tökéletes szerver Debian 9 (Stretch) változatát. Ezt a szervert 1.0-ás verziószámmal jelölöm meg, mert még később sok mindennel fog kiegészülni, így könnyebben tudok a verziószámokkal hivatkozni az adott telepítésre. A szerver egyébként már korábban elkészült a Debian 8 (Jessie) változatában is, ez pedig itt tekinthető meg.

A leírást a Howtoforge receptje alapján készítem el.

A szerver nagyon sok összetevőt tartalmaz, így elkészítése is több időt vesz igénybe. Amennyiben egy egyszerűbb szerver összeállításra van szükség, ajánlom helyette a Debian 9 (Stretch) LAMP szerver elkészítését.

Frissítés: 2020-01-02:
Elkészült a szerver újabb változata Debian 10-re: Tökéletes szerver: Debian 10 (Buster) V1.0

 

 

Előfeltételek

A telepítéséhez szükség van az alaprendszerre, amire építjük a szervert. Ennek a telepítő leírása itt található, amely fontos beállításokat is tartalmaz.

Debian csomagok frissítése

Mint minden nagyobb telepítőmunka előtt, most is a csomagok frissítésével kezdjük. A csomagok frissítése előtt azonban a csomagtárolókat is megfelelően be kell állítani. Ha még nem tettük volna meg az alaprendszer telepítésének végén, akkor a csomagtárolók bővítését most mindenképpen pótoljuk!

Ha viszont már ezzel megvagyunk, akkor frissítsük az APT csomagkezelő adatbázisát, és a csomagokat:

apt-get update
apt-get upgrade

Hálózat és hosztnév beállítása/ellenőrzése

A hálózat és hosztnév megfelelő beállítása is nagyon fontos, ezért ha régebben telepítettük az alaprendszert, és nem vagyunk benne biztosak, ellenőrizzük a korábbi útmutató alapján.

Ennek a szervernek a hosztnevét a hostname parancs segítségével kérhetjük le:

hostname
debian9

A teljes szervernév pedig a hostname -f kapcsolójával:

hostname -f
debian9.linuxportal.vm

Ebben a telepítő leírásban tehát ezekkel a hosztnév beállításokkal fogok végighaladni. Telepítéskor a saját szervernevünket használjuk.

Alapértelmezett shell beállítása

A Debian 9 alapértelmezetten a Dash shell-t használja, ami ehhez a telepítéshez nem megfelelő, ezért át kell állítanunk a Bash-ra:

dpkg-reconfigure dash

Alapértelmezett shell beállítása

Itt válasszuk a nem opciót. Ekkor a rendszer átállítja a szimbolikus linkeket a Bash-ra. Ez fontos a későbbi ISPConfig kezelőpanel telepítésénél, mert enélkül nem indulna el.

Rendszeróra szinkronizálása

A rendszer óráját célszerű szinkronizálni az NTP protokoll segítségével, hogy mindig pontos legyen az idő a szerveren:

apt-get install ntp

 

Postfix, Dovecot, MySQL, rkhunter, és Binutils telepítése

Telepítsük a címben említett összetevőket egyetlen apt-get paranccsal:

apt-get install -y \
    postfix postfix-mysql postfix-doc \
    mariadb-client mariadb-server \
    openssl getmail4 rkhunter binutils \
    dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd\
    sudo

A Debian 9-ben a MySQL helyett a MariaDB van a disztribúció csomagtárában, ezért ezt telepítjük. Nagyfokú kompatibilitása miatt teljes mértékben tudja helyettesíteni a MySQL-t.

Ha valaki azonban mégis a MySQL-t szeretné telepíteni, később is kicserélhető, erről egy másik leírásban lesz szó.

Postfix beállítása

A parancs futtatására elindul a telepítő, majd közben előjön pár kérdés az SMTP szerver (Postfix) beállításaival kapcsolatban:

Debian 9 (Stretch) - Tökéletes szerver telepítése - Postfix általános konfiguráció

Ha éles használatra telepítjük a szervert, akkor itt válasszuk az "Internet Site" opciót.

Otthoni, tesztkörnyezet telepítésénél pedig választhatjuk a "Local only" beállítást is, de ebben az esetben is választható az "Internet Site" lehetőség, mert például egy relay host beállítással egy külső szerveren keresztül is tudunk leveleket küldeni az otthoni gépünkről.

Debian 9 (Stretch) Tökéletes szerver telepítése - Postfix konfiguráció - Domain név beállítása

Itt pedig ha korábban jól állítottuk be a hosztnevet, akkor a rendszer fel is ajánlja az FQDN nevet. Vagy állítsuk be magunk a megfelelő domain nevet, amiről kiküldjük a leveleinket.

Ezután nyissuk meg a /etc/postfix/master.cf fájlt,

nano /etc/postfix/master.cf

és végezzük el a TLS/SSL beállításokat, hogy pontosan így nézzen ki a konfigurációs fájlnak ez a része:

[...]
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
[...]

Mentsük le, majd indítsuk újra a postfixet:

service postfix restart

 

 

MySQL/MariaDB beállítása

Tegyük biztonságossá az adatbázis konfigurációnkat a teszt adatbázis és az anonymous felhasználó és a hozzájuk kapcsolt jogosultságok letiltásával Ehhez futtassuk a mysql_secure_installation parancsot:

mysql_secure_installation

 

Ez is a MariaDB MySQL-el való kompatibilitásának része, hogy a parancsok, csomagok és konfigurációs nevekben megmaradtak a "mysql" nevek, így mindent ugyanúgy lehet konfigurálni, mint a MySQL esetén.

 

A parancs futtatására ismét előjön pár kérdés:

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Itt az adatbázis root jelszavát kell megadnunk. Mivel a friss telepítésben még nincs jelszó beállítva, nyomjunk egy entert.

Ezután megkérdi, hogy szeretnénk-e módosítani a root jelszavát:

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n]

Nyomjunk "Y" -t, majd adjuk meg az új jelszót és az ismétlését. Ezzel beállítottuk a MariaDB root jelszavát.

Ezután leírja, hogy a MariaDB alap telepítésben van egy anonymous felhasználó, amivel bárki be tud lépni külön felhasználói fiók nélkül. Ezt csak teszt célokra szánták, és javasolják, hogy vegyük ki éles használat esetén.

Itt ennek megfelelően válaszoljunk a kérdésre:

Remove anonymous users? [Y/n]

Éles használat esetén mindenképpen az "Y" opciót válasszuk.

Ezután a root felhasználó távoli belépési lehetőségének letiltását kérdi meg:

Disallow root login remotely? [Y/n]

Itt válasszuk az "Y" opciót, hacsaknem szükségünk lenne távoli root belépésre.

A távoli belépés alatt azt értjük, hogy például egy távoli gépen futtatott adatbázis kliens programmal próbálunk root-ként belépni, vagy egy távoli gépről direktben csatlakozni root-ként a szerveren futó adatbázisokhoz.
A phpMyAdmin belépés nem számít távoli belépésnek, mert az a szerveren fut, ezért az helyi kapcsolatnak számít, bárhonnan is használjuk. Így ha letiltjuk a távoli root belépést az "Y" opcióval a phpMyAdmin felületén továbbra is be fogunk tudni lépni root-ként is.

Ezután megkérdi, hogy a szintén teszt célokra létrehozott "test" adatbázist – amihez bármilyen felhasználóval hozzáférhetünk – törölje-e:

Remove test database and access to it? [Y/n]

Éles használat esetén töröljük mindenképpen: "Y".

 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

Ekkor törli a test adatbázist, és a hozzá kapcsolódó jogosultságokat. Utána megkérdi, hogy újra töltse-e a jogosultságokat. Itt nyomjunk "Y"-t.

Fentebb letiltottuk a root felhasználó távoli hozzáférését. Most viszont engedélyezzük, hogy alapból csatlakozni lehessen más gépekről is az adatbázisokhoz, ne csak a localhostról (kivéve persze a root felhasználóval). Ehhez nyissuk meg a /etc/mysql/mariadb.conf.d/50-server.cnf fájlt:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Kommentezzük ki a "bind-address" kezdetű sort, és tegyük be az alatta lévő "sql-mode" kezdetű sort, hogy így nézzen ki ez a rész:

[...]
# 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

sql-mode="NO_ENGINE_SUBSTITUTION"
[...]

Mentsük le.

Állítsuk be a root felhasználó defaults fájlját, hogy többször ne kelljen a parancssorban beírkálnunk a root jelszavát.

nano /etc/mysql/debian.cnf

Adjuk meg mindkét helyen a root jelszót (ha a jelszó tartalmaz speciális karaktereket, akkor tegyük aposztrófok közé):

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = <root jelszó>
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = <root jelszó>
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Mentsük le.

A következő paranccsal állítsuk át a MariaDB root felhasználójának jelszó hitelesítési módját natívra, hogy később a PHPMyAdmin tudjon root-ként csatlakozni (két sorba törtem, de ez egy parancs):

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | \
    mysql --defaults-file=/etc/mysql/debian.cnf

Itt már nem kell begépelnünk az adatbázis root jelszavát, hála a defaults fájlunknak. (Az eredeti leírásban fordítva volt, de így logikusabb, hogy előbb állítjuk be a defaults fájlt, és rögtön utána már használhatjuk is. Ezért felcseréltem a két részt)

Ezután emeljük meg a MariaDB által maximálisan megnyitható fájlok számát. Nyissuk meg a /etc/security/limits.conf fájlt:

nano /etc/security/limits.conf

és adjuk a végéhez a következő két sort:

mysql soft nofile 65535
mysql hard nofile 65535

Hozzunk létre egy új könyvtárat (/etc/systemd/system/mysql.service.d/): 

mkdir -p /etc/systemd/system/mysql.service.d/

A könyvtárban hozzunk létre egy új fájlt:

nano /etc/systemd/system/mysql.service.d/limits.conf

És tegyük bele az alábbi két sort:

[Service]
LimitNOFILE=infinity

Mentsük le.

Szolgáltatások újraindítása

Frissítsük a systemd-t és indítsuk újra a MariaDB-t:

systemctl daemon-reload
service mysql restart

A második parancsnál dob egy warningot:

Warning: mysql.service changed on disk. Run 'systemctl daemon-reload' to reload units.

Első telepítéskor nem tudtam mire véljem ezt az üzenetet, így hát keresgélni kezdtem. A Howtoforge fórumában találtam két helyen is erre vonatkozó kérdést, az egyiket itt, és a másikat pedig itt. Mindkét topikban ugyanerre az üzenetre kérdeztek rá, és mindegyiknél választolt rá az eredeti leírás készítője, hogy figyelmen kívül hagyható ez az üzenet.

Ezt megerősítendő, hogy az asztali gépemre is feltelepítettem korábban ugyanezt a szervert, ugyanezt írta akkor is ki, de működik szépen, hiba nélkül.

Továbbá ellenőrizhetjük is, hogy megy-e a MySQL/MariaDB daemonja:

netstat -nap | grep mysql

A a kimenetnek pedig megfelelő működés esetén valami hasonlónak kell lennie:

tcp6       0      0 :::3306                 :::*                    LISTEN      13648/mysqld        
unix  2      [ ACC ]     STREAM     LISTENING     69347    13648/mysqld         /var/run/mysqld/mysqld.sock

És hogy teljesen nyugodtan aludhassunk, még így is rákereshetünk a futó szolgáltatások között:

systemctl | grep mariadb

Erre pedig ilyesmit kell adnia:

mariadb.service                   loaded active running   MariaDB 10.1.37 database server

Tehát minden szögből nézve jó. Elsőre persze én is aggódtam, ezért kerestem rá ezekre.

A következő oldalon folytatódik a leírás az Amavisd, SpamAssassin, és ClamAV vírusirtó és SPAM szűrőprogramok telepítésével...

 

 

Lapozó

Ez a leírás több oldalból áll: