icon

Fekete BT

Apache és Certbot

Ha weboldalt szeretnénk host-olni, akkor elég sok felé elindulhatunk. Részemről az egyik legjobban az Apache vált be, mint webszerver. Mivel érdemes https-en kommunikálni a nagy világban, emiatt szükségünk lesz egy tanúsítványra. Ebben segít nekünk megbízható tanúsítvány kiállítóként a Let's Encrypt. Ők ingyenesen biztosítanak a weblapunknak három hónapra tanúsítványt. Az automatikus megújításban és cserében pedig a Certbot fog a segítségünkre sietni. Természetesen a Let's Encrypt-től egy jobb megoldás, ha veszünk egy tanúsítványt, de ugye az pénzbe kerül és általában évente cserére szorul.

Részletekbe menő leírással nem tudok szolgálni. Minden use case más és más. Ez inkább csak egy gyorstalpalóval ér fel. Mindenki saját maga tudja, hogy hogyan lehet érdemes az adott webszervert konfigurálni, illetve mire van szüksége.

Apache telepítése és konfigurálása

Az Apache telepítése:

sudo apt install -y apache2

Engedélyezzük az automatikus indulást:

sudo systemctl enable apache2

A default konfig letiltása:

a2dissite 000-default.conf

Mint írtam, full leírást sajnos nem lehet adni az Apache-hoz. Mindenkinek érdemes megnézni, hogy amire használni szeretné ott mi az ajánlott. Ha egyszerű webszervert szeretnénk csak összedobni, akkor nem kell nagy fába vágnunk a fejszét. A Certbot úgy fogja módosítani a konfigurációs fájlokat, ahogy számára a legjobb. Az alapvető http (80) porton kiszolgál az Apache, ezt fogja majd a Certbot átforgatni https-re (443-ra), automatikus átirányítással. Azzal, hogy letiltottuk az alap konfigot, semmi rosszat nem csináltunk. Sőt, most kezdődhet a saját konfigurációs fájl létrehozása. A Certbot miatt az Apache konfigurációs állományában módosításokat nem kell feltétlenül végeznünk. Bővebben a következő fejezetben a hardening-ről, ami persze opcionális.

Hozzunk létre egy könyvtárat a saját domain nevünknek megfelelően:

sudo mkdir /var/www/domain.hu

Állítsunk megfelelő jogosultságokat hozzá:

sudo chown -R $USER:$USER /var/www/domain.hu
	sudo chmod -R 755 /var/www/domain.hu

Ebbe a mappába tudjuk feltölteni a használni kívánt webtartalmat. Ami fontos, hogy rendelkezzünk egy index.html vagy index.php fájllal. Általában ez a kezdő oldal, de a konfig fájlban megadhatunk egy tetszőlegeset is.

Konfigurációs fájl létrehozása:

sudo nano /etc/apache2/sites-available/domain.hu.conf

Alapvető konfig fájl minta. Igény szerint szabjuk testre: (A nyitó zárójelek elé raktam a HTML miatt egy plusz space-t, ezt töröljük a másolást követően!)

< IfModule mod_ssl.c>
        < VirtualHost _default_:80>
                ServerAdmin mail@domain.hu
                ServerName domain.hu
                ServerAlias www.domain.hu
                DocumentRoot /var/www/domain.hu

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                < Directory /var/www/domain.hu>
                        Options Indexes FollowSymLinks
                        AllowOverride None
                        Require all granted
                 < /Directory>

                < IfModule mod_dir.c>
                        DirectoryIndex index.html
                < /IfModule>
		< /VirtualHost>
	< /IfModule>

A főbb blokkok magyarázata:

Annak érdekében, hogy ne legyen hiba a konfigurációs fájlunkban, érdemes egy ellenőrzést futtatni:

apache2ctl configtest

Ha nem található hiba benne, akkor az általunk létrehozott konfig fájlt a következő paranccsal tudjuk engedélyezni:

a2ensite domain.hu.conf

Indítsuk újra az Apache-t:

systemctl restart apache2

Majd ellenőrizzük a futását:

systemctl status apache2

Apache network hardening

A network hardening egy olyan dolog, hogy "Oké, hogy csinálom, de van mindig egy okosabb ellenlábas!". Belső hálózati környezetben a legnagyobb ellenfele általában a felhasználó. A nagy világban meg támadó. Ettől függetlenül van pár dolog, ami megfontolandó. Minden módosítást a globális konfig fájlban végzünk.

sudo nano /etc/apache2/apache2.conf

Az alap Directory direktívákat érdemes kommentelni és csak az általunk használt mappákat felvenni.

Ezen kívül még ezeket érdemes felvenni: (A nyitó zárójel elé raktam a HTML miatt egy plusz space-t, ezt töröljük a másolást követően!)

< Directory />
    Options -Indexes
    AllowOverride None
	< /Directory>
	< Directory "/">
    Require all denied
	< /Directory>
	

Ezekkel akadályozhatjuk meg azt, hogy egy külső kliens hozzáférhessen a .htaccess és a .htpasswd fájlhoz: (A nyitó zárójel elé raktam a HTML miatt egy plusz space-t, ezt töröljük a másolást követően!)

< FilesMatch "^\.ht">
    Require all denied
	< /FilesMatch>
	< Files ".ht*">
    Require all denied
	< /Files>
	

A fájl végére másoljuk be ezeket:

ServerSignature Off
	ServerTokens Prod
	FileETag None

Az első kettővel a szerverre vonatkozó információkat tüntethetjük el. Az utolsóval pedig az Entity Tag-t.

Illetve, ami még fontos, hogy ne telepítsünk fel olyan modult az Apache-ra, amit nem fogunk használni.

Egyedi port használata:

Előfordulhat, hogy szeretnénk egyedi portot használni. Nem feltétlenül hardening miatt, hanem más okból kifolyólag is előfordulhat. Az Apache alapértelmezett portja a TCP 80. Ha ezt meg akarjuk változtatni, akkor a következő fájlban írhatjuk át a "Listen" résznél:

nano /etc/apache2/ports.conf

Az ssl modul portját is itt változtathatjuk meg. Az az alapértelmezett a TCP 443. Ez az "IfModule ssl_module" "Listen" résznél lehetséges.

Saját tanúsítvány használata Apache-csal

Ha nem szeretnénk Certbot-ot használni, mivel rendelkezünk saját tanúsítvánnyal, úgy engedélyezni kell a dövetkező modult:

a2enmod ssl

Ha egy beépülő modult tiltani szeretnénk, akkor pedig:

a2dismod ssl

Illetve a következő pár sorra lesz szükségünk még a saját konfig fájlunkba:

SSLEngine on
   	SSLCertificateFile /crt/fájl/abszolút/elérési/útvonala
   	SSLCertificateKeyFile /key/fájl/abszolút/elérési/útvonala

Illetve, ha netán wildcard-os tanúsítványt használunk (*.domain.hu), akkor ezeket az opciókat megadhatjuk a globál konfigban is. A saját konfig fájlunkkal, ezt felül lehet írni, ha netán más domain-t is host-olnánk.

Certbot telepítése és használata

A hivatalos útmutató alapján, csak snap segítségével lehet telepíteni. Ha nem rendelkeznénk snap-pel:

sudo apt update
	sudo apt install snapd

A Certbot telepítése:

sudo snap install --classic certbot

Certbot parancs létrehozása:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Amennyiben apache-t használunk paraméterként meg kell adni a Certbot számára. A futtatása a következőképpen történik:

sudo certbot --apache

Az első indításnál a Certbot kérni fog egy e-mail címet, el kell fogadni a felhasználási feltételeket és, hogy szeretnénk-e marketing célú e-maileket kapni.

Ha a fent látható módon hoztunk létre konfiguréciós fájlokat, akkor automatikusan kiolvassa azokat a Certbot, más esetben manuálisan kell megadni a domain nevet.

fekete@feketebt:/var/www/feketebt.net$ sudo certbot --apache
    	Saving debug log to /var/log/letsencrypt/letsencrypt.log
    	Which names would you like to activate HTTPS for?
    	We recommend selecting either all domains, or all domains in a VirtualHost/server block.
    	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    	1: domain.hu
    	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 

A számunkra megfelelőre indítsuk el a folyamatot. Miuátán a Let's Encrypt tanúsítvány legenerálódott, azt követően még rákérdez egy prompt keretében, hogy minden http forgalom átirányításra kerüljön-e a https portra. Itt érdemes azt az opciót választani, hogy automatikusan átirányításra kerüljön a https portra (kettes opció).

Működés tekintetében azt fogjuk látni, hogy az eddig http-n működő weboldalunk https-en lesz elérhető és lekérhetjük a tanúsítványunk adatait. Apache szempontjából pedig létrehozásra kerül egy új konfigurációs fájl a sites-available mappában, valamint a saját konfig fájlunkba is belemókol a Certbot.

Az új konfigurációs fájlunk a "/etc/apache2/sites-available/domain.hu-le-ssl.conf". Különféle plusz módosításokat itt lesz érdemes csinálni ezek után.

A régibe pedig a következő 3 sor kerül be:

RewriteEngine on
	RewriteCond %{SERVER_NAME} =domain.hu
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Tömören összefoglalva ez írja át a http kéréseket https-re.

Parancsok:

Csak tanúsítványt hoz létre:

sudo certbot certonly --apache

Az automatikus megújítás tesztelése:

sudo certbot renew --dry-run

Kilistázza a tanúsítványokat:

sudo certbot certificates

Interaktívan törölhetjük a tanúsítványokat:

sudo certbot delete

!Figyelem!
Mindenki a saját maga meglátása és megítélése szerint cselekedjen az itt olvasottakkal és látottakkal kapcsolatban. Felelőléssget NEM válalok semmi iránt amit leírok, ez szimplán csak annak a dokumentálása, ami számomra működött. Senkit nem buzdítok arra, hogy illegális forrásból szerezzen be bármit is. A lehetséges adatvesztésért felelősséget nem vállalok. A SAJÁT CSELEKEDETEIDÉRT, SAJÁT MAGAD FELELSZ!