Instalace Apache, MySQL, PHP a Let's Encrypt na Wedos VPS ON

Jak nainstalovat LAMP konfiguraci na Wedos VPS ON s čistou instalací Debian 9, včetně zprovoznění Let's Encrypt certifikátu.

Ihned po zprovoznění služby na email přijdou root přístupy na server pomocí SSH. Tento návod je koncipován pro Linux Debian 9. Verzi vašeho systému je možné zjistit pomocí příkazu:

cat /etc/debian_version

Přihlásíme se k serveru a provedeme upgrade:

apt-get update

apt-get upgrade

Pro snadnější orientaci v souborovém systému si nainstalujeme Midnight Commander příkazem:

apt-get install mc

Provedeme instalaci nadstavby apt a to konkrétně aptitude. Ta nám umožní pohodlnou instalaci ostatních nezbytných součástí.

apt-get install -y aptitude

Instalace APACHE

Nainstalujeme APACHE2 server

aptitude install apache2

Server spustíme

service apache2 start

A otestujeme zda vše funguje jak má, pomocí zadání IP adresy serveru, kterou najdete v emailu o aktivaci služby. Měla by se zobrazit defaultní stránka "Apache2 Debian Default Page".

Pro ověření správného fungování můžeme použít příkaz

service apache2 status

Apache běží, nicméně hlásí chybu "Could not reliably determine the server's fully qualified domain name". Nemámem nastaven ServerName, což je v ideálním případě konkrétní doména. Pro tyto účely si tedy zaregistrujeme doménu 2.řádu ve standardní zákaznické administraci Wedos. Jak nastavit DNS domény a následně direktivu ServerName se dostaneme později v tomto návodu.

Povolíme mod_rewrite modul pro přepisování adres:

a2enmod rewrite

Upravíme soubor /etc/apache2/apache2.conf tak, aby pro adresář var/www povolil přepisování adres.

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

V tuto chvíli ale Apache vypneme:

service apache2 stop

Instalace PHP 7

apt-get install apache2 libapache2-mod-php

Instalace PHP 5.6

apt-get install software-properties-common
apt-get install apt-transport-https lsb-release ca-certificates​
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg​
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
aptitude install php5.6

Instalace extensions pro PHP5.6

aptitude install memcached php5.6-memcache
apt-get install php5.6-gd
apt-get install php5.6-intl
apt-get install php5.6-mysql
apt-get install php5.6-mbstring
apt-get install php5.6-xml

Volba PHP

update-alternatives --config php

Toto nám umožní zvolit aktivní verzi PHP.

Test funkčnosti PHP

touch /var/www/html/test.php
echo -e '<?php\nphpinfo();' > /var/www/html/test2.php

Instalace MySQL

aptitude install mysql-server

Rovnou si vytvoříme uživatele, který bude mít přístup do MySQL

mysql

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'heslo123';
GRANT ALTER,INDEX,CREATE,INSERT,UPDATE,SELECT,DELETE,DROP ON *.* TO 'user1'@'localhost';
FLUSH PRIVILEGES;

Dodatečně dle potřeb nastavit innodb_buffer_pool_size.

Instalace FTP přístupu

apt-get install proftpd

Upravíme konfigurační soubor /etc/proftpd/proftpd.conf 

UseIPv6 off
DefaultRoot ~
Port 1980

A provedeme restart

systemctl restart proftpd 

Upravíme soubor /ets/shells a přidáme do něj řádek

/bin/false

Vytvoření FTP uživatele

adduser ftpuser1 --shell /bin/false

sudo passwd ftpuser1

chown ftpuser1 /var/www/html

systemctl restart proftpd

Příkaz pro případné smazání uživatele je

userdel ftpuser1

Restriktivní přístup pro FTP uživatele

Uživatelů je možno vitvořit více, včetně nastavení jejich přístupu do konkrétních složek. Klíčové je nastavení hodnoty DefaultRoot v souboru /etc/proftpd/proftpd.conf 

Ukázka jak lze oprávnění nastavit:

DefaultRoot ~
DefaultRoot /var/www/html/web1 ftpuser2
DefaultRoot /var/www/html/web2 ftpuser3

Po změně konfigurace ProFtpd je nutné službu restartovat:

systemctl restart proftpd

Uživatelské skupiny

Mnohem sofistikovanější způsob jak pracovat s uživateli je vytvoření skupiny, přiřazení uživatelů do skupiny a nastavení oprávnění skupiny.

sudo groupadd ftpusers
usermod -a -G ftpusers ftpuser1
usermod -a -G ftpusers ftpuser2
DefaultRoot /var/www ftpusers

Nastavení skupiny pro přístup k adresáři /var/www

chgrp -R ftpusers /var/www

Změna skupiny i vlastníka:

chown -R ftpuser2:ftpusers /var/www

Kontrola oprávnění lze provést příkazem

ls -l /var/www

Seznam všech skupin najdete v souboru /etc/group a seznam všech uživatelů v souboru /etc/passwd.


Zabezpečení FTP přístupu

cd /etc/ssl/private
openssl req -x509 -nodes -newkey rsa:2048 -keyout proftpd.pem -out proftpd.pem -days 365
chmod 600 proftpd.pem

Nastavíme konfiguraci proFTPD v souboru /etc/proftpd/proftpd.conf:

# odkomentujte řádek 138
Include /etc/proftpd/tls.conf

Nastavíme konfiguraci TLS v souboru /etc/proftpd/tls.conf

TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv23
TLSRSACertificateFile      /etc/ssl/private/proftpd.pem
TLSRSACertificateKeyFile   /etc/ssl/private/proftpd.pem

a restartujeme proFTPD

systemctl restart proftpd 

Nastavení systémového jména serveru

Je nutné nastavit jméno serveru v /etc/hostname

mujserver.tld

a také v /etc/hosts.

vase.ip.adre.sa   mujserver.tld

Poté doporučuji provést restart serveru.

reboot

Poté můžeme zkontrolovat jestli se správně nastavil HostName

hostnamectl

Instalace zasílání emailů z PHP

Nejdříve nainstalujeme sendmail:

apt-get install sendmail

Spustíme konfiguraci sendmail:

sendmailconfig

a na všechny dotazy je nutné odpovědět Y - ano.

Pak již stačí restartovat apache:

service apache2 restart

nyní je vše připraveno a z PHP lze odesílat funkcí mail() emaily.

HTTPS - Instalace Let's Encrypt

Do souboru etc/apt/sources.list přidáme řádek

deb http://ftp.debian.org/debian stretch-backports main

a provedeme update

apt update

Nainstalujeme si CERTBOTa

apt-get install python-certbot-apache -t stretch-backports
certbot --authenticator webroot --installer apache

Vygenerujeme si certifikát pro naši doménu

certbot certonly --webroot -w /var/www/html -d mujserver.tld -d www.mujserver.tld

Upravíme soubor /etc/apache2/sites-available/default-ssl.conf

DocumentRoot /var/www/html
ServerName mujserver.tld
SLEngine on
SLCertificateFile /etc/letsencrypt/live/mujserver.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mujserver.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mujserver.tld/chain.pem

Spustíme APACHE ssl extension, defaultní web a restartujeme APACHE:

a2enmod ssl
a2ensite default-ssl.conf
service apache2 restart

V tuto chvíli by mělo fungovat https://mujserver.tld

Zabezpečení FTP a SSH

Aby na server neútočili hackeři a roboti, bude nutné zabezpečit službu SSH a FTP přístup například pomocí souboru /etc/host.allow a /etc/host.deny

do souboru /etc/host.allow doplňte vaší IP adresu

sshd: xxx.xxx.xxx.xxx
proftpd: xxx.xxx.xxx.xxx

a do souboru /etc/host.deny

sshd: ALL
proftpd: ALL

a restartujte službu sshd

service sshd restart

Případné útoky na SSH jde zjistit pomocí 

journalctl

Zřejme bude log plný neplatných přihlášení pod různými uživateli.

Závěrem

A je to! V tuto chvíli máme vše nainstalováno.

UPDATE:

Instalace podpory MS SQL

sudo apt-get install php5.6-sybase freetds-common libsybdb5
​apach2ctl restart

Nastavení swapování systému

Narazil jsem na problém s padáním MySQL s hláškou "Error establishing a Database Connection" a jeho příčinou byla nedostatečná dostupná paměť RAM. V tomto případě to můžeme vyřešit nastavením swapovacího souboru systému, který je používán v případě, že není dostupná dostatečná paměť.

Podíváme se tedy do logu, co se děje..

/var/log/mysql/error.log

kde je následující problém..

[NOTE] Initializing buffer pool, size = 1.0G InnoDB: mmap(140574720 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] InnoDB: Plugin 'InnoDB' init function returned error.
[ERROR] InnoDB: Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Aborting

Také je vhodné prozkoumat syslog

grep "mysql" /var/log/syslog

Který obsahuje

Současně pokud zkontrolujeme využití paměti RAM

free -m

a zobrazí se 

Swap: 0 0 0

je evidentní, že budeme potřebovat nastavit swapování systému.

Vytvoříme si swapfile ( příkazy jsou v roli root )

fallocate -l 4G /swapfile
ls -lh /swapfile

Výsledkem bude..

-rw-r--r-- 1 root root 4.0G Apr 30 17:19 /swapfile

Nastavení zabezpečení

chmod 600 /swapfile

Kontrola zabezpečení

ls -lh /swapfile

mělo by se zobrazit..

-rw------- 1 root root 4.0G Apr 30 17:19 /swapfile

Řekneme systému o souboru

mkswap /swapfile
swapon /swapfile
swapon -s

Dodatečné nastavení tak, aby swap soubor byl permanentní..

nano /etc/fstab

do fstab tedy přidáme řádek

/swapfile swap swap defaults 0 0​​​​​​​

a zkontrolujeme zda je vše nastaveno

swapon --show

a také jestli je swap skutečně používán..

free -m