Настройка сервера на Ubuntu 20.04 (LEMP на VPS)
Быстрая настройка 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'"
Сменить плагин авторизации:
Этот плагин подразумевает, что при авторизации к 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