Инсталиране и конфигуриране на Apache, MariaDB, PHP-FPM на Debian 10 (Buster) с Firewall и Fail2ban

 

В тази статия ще покажа как да инсталирате LAMP (Linux, Apache, MariaDB, PHP, PHP-FPM) сървър на Debian 10 (Buster). Също така ще направя едни от най-важните и основни неща за да защитим нашия сървър. Идеята на статията е да бъде кратка и систематизирана. Предвидена е за средно напреднали и напреднали с Linux-а. 

Обновяване на repository и софтуерните пакети:

apt update
apt dist-upgrade

Инсталиране на помощни пакети, ако не са инсталирани преди това: 

apt install sudo
sudo apt install htop mc curl net-tools

Препоръчително е добавим админ user-a към Sudoers. Това става със следната команда:

usermod -aG sudo YOUR_USER

 

След като приключи инсталирането на помощните пакети вече може да започнем със инсталацията на Apache2.

Инсталиране на Apache2:

sudo apt install apache2 apache2-utils

Също така може да отворим следния адрес: http://IP-то-на-сървъра. Трябва да видим страницата по подразбиране на Apache.

Активираме най-използваните модули за Apache2:

sudo a2enmod rewrite ssl headers http2 vhost_alias

Препоръчително е да спрем 'directory listing' и да позволим 'AllowOverride'. Отваряме конфиг файла:

nano /etc/apache2/apache2.conf

Намираме <Directory /var/www/> и го променяме на:

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

С това приключи инсталирането на Apache2.

 

Инсталиране на MariaDB (MySQL server)

Изпълняваме следната команда:

sudo apt install mariadb-server mariadb-client

След като завърши инсталацията ще изпълним скрипта за secure installation:

sudo mysql_secure_installation

Следваме стъпките на скрипта:

  • слагаме парола на root акаунта;
  • премахваме анонимния акаунт;
  • Забраняваме remote логина с root акаунта;
  • премахваме test базата;

Сега ще създадем акаунт с пълни права за MySQL. Първо трябва да се свържем с MySQL:

mysql -u root -p

Въвеждаме root паролата.

След което изпълняваме следните заявки:

CREATE USER 'user'@'%' IDENTIFIED BY 'userpass';
GRANT ALL ON *.* TO 'user'@'%' WITH GRANT OPTION;

 

Инсталиране на PHP 8:

 

Добавяне на SURY repository:

apt-get -y install apt-transport-https lsb-release ca-certificates curl
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

 

 

Обновяване на repository:

sudo apt update

Инсталиране на PHP 8:

sudo apt install php8.1

 

С това инсталацията на PHP 8 е готова. Обаче много от WEB приложенията се нуждаят от допълнителни разширения. С тази команда ще инсталираме едни от най-известните PHP extentions:

sudo apt install php8.1-{fpm,mysql,intl,apcu,zip,dev,curl,cli,imagick,mbstring,gd,bcmath,redis,memcached,xml}

 

 

 

 

Активиране на Apache Fast CGI и PHP-FPM:

a2enmod proxy_fcgi setenvif
a2enconf php8.1-fpm

 

Рестартираме Apache2 и PHP-FPM:

sudo systemctl restart apache2 php8.1-fpm

 

 

Инсталиране на по-стари версии на PHP <= 7.x:

 

Инсталиране на PHP 7.4 с най-известните PHP extention:

sudo apt install php7.4 php7.4-{fpm,mysql,apcu,zip,dev,curl,cli,imagick,geoip,mbstring,gd,bcmath,json,redis,memcached,xml}

 

 

 

 

 

Инсталиране на PHP 7.3 с най-известните PHP extention:

sudo apt install php7.3 php7.3-{fpm,mysql,apcu,zip,dev,curl,cli,imagick,geoip,mbstring,gd,bcmath,json,redis,memcached,xml}

 

 

 

 

 

Настройки по сигурността:

 

Следа една кратка и важна стъпка - настройките по сигурността. Има доста неща които може да се правят свързани със сигурността. Тук ще посоча най-общите от тях. 

Инсталиране на firewall (ufw), ако не е инсталиран:

sudo apt install ufw

ufw allow ssh
ufw allow http
ufw allow https
ufw allow mysql

ufw enable

 

Инсталиране на fail2ban:

apt install fail2ban

Сега трябва да активираме някои Action Jails:

Отваряме jail.local файла:

nano /etc/fail2ban/jail.local

Поставяме следните редова:

[mysqld-auth]
enabled = true

По този начин активираме автоматичното блокиране на поредни неуспешни опити за вход в MySQL сървъра от едно и също IP.

 

С това завършихме основните настройки на сървъра!

Коментари