Настройка сервера на Ubuntu 20.04 (LEMP на VPS)

Категория: Linux

Быстрая настройка LEMP сервера от Hetzner на Ubuntu 20.04 (Linux + Nginx + MySQL + PHP).

На этапе создании нового VPS сервера, сгенерируйте на локалке SSH-ключ и укажите *.pub ключ в форме создания сервера:

ssh-keygen -t ed25519 -q -N "" -C "service,user" -f ~/.ssh/id_ed25519_service_user
ssh-keygen -t ecdsa -b 521 -q -N "" -C "service,user" -f ~/.ssh/id_ecdsa_service_user
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_YOUR_SERVER -C "key description" -q -N ""

См. Настройка SSH доступа по RSA ключу.

Ставим bash-completion:

sudo apt install bash-completion && . /etc/profile.d/bash_completion.sh

Меняем SSH порт 22 на нестандартный (замените XXXXX на желаемый порт):

sed -Ei 's|^#?Port [0-9]+|Port XXXX|g' /etc/ssh/sshd_config; grep ^Port /etc/ssh/sshd_config
sudo systemctl restart sshd || sudo service ssh restart

Ставим защиту от брутфорса SSH fail2ban:

sudo apt install fail2ban -y

## Проверить статус сервиса
systemctl status fail2ban

## Посмотреть активные "клетки"
fail2ban-client status

Утилита fail2ban смотрит ssh логи и при превышении неудачных вводов пароля подряд (по умолчанию 5) банит IP на заданное время (по умолчанию 10m).

Конфиги fail2ban
sudo nano /etc/fail2ban/fail2ban.conf
sudo nano /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.d/defaults-debian.conf

Пример настройки:

sudo gedit /etc/fail2ban/jail.local
[sshd]
enabled   = true
maxretry  = 3
findtime  = 1d
bantime   = 4w
ignoreip  = 127.0.0.1/8
sudo systemctl restart fail2ban
Как посмотреть неудачные попытки ssh авторизации
grep "Failed password" /var/log/auth.log

Задать временную зону (time zone):

timedatectl list-timezones | grep Kiev
sudo timedatectl set-timezone Europe/Kiev
#sudo systemctl restart mysql.service      ## @note Перезапустить необходимый сервис

Ставим необходимое:

sudo apt install zip unzip byobu -y

Ставим git и добавляем алиасы:

sudo apt install git -y
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.type 'cat-file -t'
git config --global alias.dump 'cat-file -p'

Ставим Nginx:

sudo apt update -qq
sudo apt install nginx -y

Ставим MySQL (нужно будет интерактивно настроить безопасность и пароль mysql root):

sudo apt install mysql-server
## Настройка уровня требований к паролям VALIDATE PASSWORD COMPONENT
sudo mysql_secure_installation

# Would you like to setup VALIDATE PASSWORD component? Y
# 0 = LOW, 1 = MEDIUM, 2 = STRONG (Length >= 8, numeric, mixed case, special characters and dictionary file)
# Please set the password for root here << Укажите пароль root
# Remove anonymous users? Y
# Disallow root login remotely? Y
# Remove test database and access to it? Y
# Reload privilege tables now? Y
Примечание

При ошибке: "ERROR 1698 (28000): Access denied for user 'root'@'localhost'"

Сменить плагин авторизации:
В Ubuntu для авторизации mysql пользователя по умолчанию используется плагин auth_socket.
Этот плагин подразумевает, что при авторизации к mysql будет использоваться системная учетка юзера (system user credentias).
Варианты:
1. Сменить плагин авторизации на mysql_native_password.
2. Создать mysql пользователя вместе с системным пользователем.
Подробнее: https://stackoverflow.com/a/42742610
Меняем плагин авторизации:
sudo mysql -u root
Далее:
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
mysql> UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_ROOT_PASSWORD';
mysql> FLUSH PRIVILEGES;
mysql> exit;
И:
sudo service mysql restart

Готово.

Удалить mysql-server:
sudo apt remove --purge mysql-server
sudo apt purge mysql-server
sudo apt autoremove
sudo apt autoclean
sudo apt remove dbconfig-mysql

Ставим PHP:

sudo apt install php-fpm php-mysql -y

См. Настройка пользователя tuner для управления LEMP сервером.

См. Настройка HTTPS для сайта с помощью Lets Encrypt.

См. Установка Composer под Linux.

Опционально, зависимости PHP для Laravel 7:

sudo apt install php7.4-mbstring php7.4-xml -y

Остальное устанавливаем по необходимости.

#server #vps server #ubuntu 20.04, #lemp #fail2ban #instance #setup

категория: Linux