Краткая история создания ресурса ( самоотчет )

Сайт был создан 13-ого мая 2018 года на виртуальный сервер. Сперва я захотел попробывать администрировать CentOS 7, установил Apache + Mysql + php командами yum install apache php mariadb-server. Покопался в /etc/php.ini, затем в /etc/httpd/httpd.conf. Настроил виртуальный хост на мой домен в файле /etc/httpd/conf.d/klyuchnikoff.website.conf, скопировав дефолтный файл и отредактировав пару строк. Решил установить самую знакомую CMS — WordPress. Написал пару страниц и чутка изменил тему. Затем решил настроить ftp и фаервол через firewall-cmd. Установил vsftpd, открыл порты через firewall-cmd. Затем был занят работой пару дней, сайтостроение не приносит мне доход. За это время кто-то решил побаловаться и начал брутфорсить панель админа WordPress. Это я обнаружил, когда RuVDS отключил сервер за перегрузку.
Ладно, подумал я и решил все переделать, поставив Ubuntu Server. На это раз я начал настройку с обновления apt-get update && apt-get upgrade, создания пользователя sudo через useradd -G admin sudo -d /home/admin -s /bin/bash admin и создание группы groupadd admin и создание директории mkdir /home/admin ( не пишите admin, не облегчайте задачу брутфорса), не забываем про пароль passwd admin ( лучше сильный пароль ). Затем идем в конфиг ssh ( я пользуюсь vim, но можно и nano, и любым другим): vi /etc/ssh/sshd.conf. Там меняем порт (port Number), убераем #, если закомментировано, и запрещаем работать руту через ssh: PerminRootLogin no. Далее включаем ufw: ufw enable.
Открываем нужные порты ufw allow http https NumberSSH. Устанавливаем fail2ban для защиты от брутфорса ( fail2ban читает логи и добавляет правила iptables в автоматическом режиме; позже надо будет подробнее познакомиться с iptables ) apt-get install fail2ban. По умолчанию fail2ban ничего не блокирует. Меняем конфиг через cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local , редактируем jail.local через vi:
ищем секции своих приложений [sshd] добавляем туда опции port=номер порта, который вы открыли; enabled = true ; bantime = время бана; maxretry = число попыток входа; findtime = время счета попыток авторизаций. Там же позже добавим опции для nginx и php. Далее запускаем fai2ban: systemctl enable fail2ban; systemctl start fail2ban. Также ufw reload и перезагрузка ssh: systemctl restart ssh. Можно перезагрузить весь сервер. Выходим и логинимся заново: ssh -p Номер порта admin@domain. Если не видно пути начальной директории, меняем оболочку через usermod -s /bin/bash admin. Также добавляем себя в необходимые группы usermod -a -G group_names. Пора ставить nginx: sudo apt-get install nginx. Также php и mariadb: sudo apt-get php7.0 php7.0-fpm php-mysql php-cli mariadb-server. Заводим скрипт безопасности mysql: mysql_secure_installation. Отвечаем на вопросы на английском и ставим пароль root.Запускаем сервисы nginx, php7.0-fpm, mariadb: systemctl enable nginx php7.0-fpm mysql && systemctl start nginx php7.0-fpm mysql. Заходим в mysql: mysql -u root -p. Добавляем пользователя базы: CREATE USER ‘user’@’localhost’ IDENTIFIED BY ‘пароль базы данных’;. Добавляем базу: CREATE DATABASE wordpress;. Меняем права на базу: GRANT ALL PRIVILEGES ON wordpress.* TO ‘user’@’localhost’; FLUSH PRIVILEGES; exit;. По умолчанию nginx не работает с php. Идем в конфиг /etc/nginx/sites-available/domain.conf. Редактируем виртуальный хост ( позже приведу примеры ).Включаем хост ссылкой: sudo ln -s /etc/nginx/sites-available /etc/nginx/sites-enabled. Если нужны php скрипты внутри html-страниц, идем в конфиг /etc/php/7.0/fpm/php-fpm/www.conf, редактируем строки. Раскомментируем в /etc/php/7.0/php.ini строку с cgi.fix_pathinfo=0 ( должно быть так ). Перезагрузка? Команды systemctl restart nginx php7.0-fpm. Дальше качаем wordpress: «wget https://ru.wordpress.org/wordpress-xxx.tar.gz». Перекидываем архив в нужную директорию: sudo mv /home/admin /html/domain. Распаковываем: tar -xvf wordpress-xxx.tar.gz. Меняем владельца файлов на www-data ( nginx работает от этого пользователя и группы ): sudo chown www-data:www-data -R /html/domain. Пора запускать wordpress. В настройках меняем пользователя базы и название базы на свою, пароли от базы свои. Ставим плагины Google captcha и limit login attempts. Может прикрутим https? Регистрируемся здесь reg.ru — мой доменный регистратор, получаем ssl сертификаты в письме. Сохраняем на локальном компьютере основной файл сертификата domain.crt и личный ключ domain.key. Через scp передаем файлы: scp -P «номер порта ssh» «/путь к файлу» admin@domain:/etc/ssl/certs. Пароль, естественно. Далее идем редактировать файл конфы nginx: vi /etc/nginx/sites-available/domain.conf. Добавляем пример:
server {
listen 443;

ssl on;
ssl_certificate /etc/ssl/certs/domain.crt;
ssl_certificate_key /etc/ssl/certs/domain.key;
server_name domain;

}

Проверяем конфиг nginx -t . Перезагружаем nginx: systemctl restart nginx. Все, рабочий wordpress на vps готов.