Настройка Web сервера на Ubuntu 20.04
Привет. Недавно стал осваивать Laravel и столкнулся с тем, что там нужно перепиновать скрипт для его авто запуска. На хостинге это сделать нельзя. По этому было принято решение пересесть с хостинга на VPS. Я выбрал VPS от компании Beget.
Я плачу за него всего 11 рублей в день. Если вы нашли дешевле, то обязательно напишите об этом в комментариях.
Выбор Control Panel
Мне хотелось настроить ВПС так, чтобы было удобно его администрировать, т.е. большая часть работы, чтобы выполнялась мышкой. Потратил два дня, перебрал кучу бесплатных СП панелей, полдня даже сервер проработал на весте, пока не случилась беда с бекапами.
В итоге я остановился на панели от компании FastPanel. Вот её то я и буду здесь настраивать. Там особо настроек нет, но не для подготовленного человека командная строка вызывает ужас и отторжение.
Так же расскажу про саму настройку сервера, а именно про настройку fail2ban и другие моменты. Все это делаю я в первую очередь для себя, чтобы через некоторый момент времени не проходить этот путь заново.
Настройка сервера
Выбрал я самый дешевый тариф VPS сервера. Его характеристики:
- CPU: 1,
- RAM: 1 Гб,
- SSD: 15 Гб.
Для моих нужд вполне хватит. Заходим в панель управление Beget, жмем создать VPS. Готово! Сервер устанавливается примерно в течение 10 секунд. Доступы Ssh приходит на почту. Перво на перво на свежо установленном сервер нужно обновить пакеты.
sudo apt-get update sudo apt-get upgrade
Дальше ставим Midnight Commander, чтобы было удобно выполнять манипуляции с сервером.
sudo apt-get inctall mc
Настройка fail2ban
Дальше нужно обезопасить сервер. Fail2ban — Это некое подобие фаервола для спамеров и ботов. Также он поможет от ddos атак. Я долго не мог понять как он работает. Но, оказалось все довольно просто. Он использует логи сервера, fail2ban их читает и если видит однотипные действия, то маркирует их и следит за ними. Если такие действия встречаются в его правилах, то он совершает определённые действия над ip адресом плохого или хорошего человека.
Устанавливаем:
sudo apt-get install fail2ban
Для запуска службы вводим следующие команды:
systemctl enable fail2ban systemctl start fail2ban
Дальше открываем Midnight Commander на сервере и начинаем настраивать фаервол.
mc
Переходим в папку etc/fail2ban. Там есть файл jail.local вот его и будем редактировать. Я встречал варианты, что люди его не правят, а под каждый пул правил создают отдельный фаил в папке jail.d. Я решил пойти путем меньшего сопротивления.
Вот мой jail.local:
[DEFAULT] bantime.increment = true bantime.rndtime = 30m bantime.maxtime = 60d bantime.factor = 2 bantime = 3h findtime = 10m maxretry = 5 banaction = iptables-ipset-proto6 ignoreip = 127.0.0.1 [sshd] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/auth.log findtime = 600 maxretry = 3 bantime = 43200 [recidive] enabled = true bantime = 9w findtime = 3d [apache-auth] # Ban hosts with password authentication failures enabled = true port = http,https logpath = %(apache_error_log)s [apache-badbots] # Ban spammer robots crawling the web for email addresses. port = http,https logpath = %(apache_access_log)s bantime = 172800 maxretry = 1 [apache-noscript] # Ban hosts searching for scripts on the website to execute and exploit enabled = true port = http,https logpath = %(apache_error_log)s maxretry = 6 [apache-overflows] # Ban hosts attempting to request unusually long and suspicious URLs enabled = true port = http,https logpath = %(apache_error_log)s maxretry = 2 [apache-nohome] # If you do not provide access to web content within users’ home directories enabled = true port = http,https logpath = %(apache_error_log)s maxretry = 2 [exim] enabled = true [exim-spam] enabled = true [postfix] enabled = true [wordpress-hard] enabled = true port = http,https filter = wordpress-hard logpath = /var/log/auth.log bantime = 1h maxretry = 1 [non-standard] enabled = true port = port your app/service uses logpath = where its log file is located
После сохранения нужно перезагрузить fail2ban:
systemctl restart fail2ban
На этом и закончим, расписывать команды, за что каждая отвечает я не буду, из названий вроде ясно, если нет пишите в коментах.
В этом видео автор хорошо объясняет, как работать и про настройки самого фаервола.
Самый быстрый способ, чтобы разблокировать ваш IP. Перезагрузите ваш роутер.
Настройка FastPanel
Тут все просто выполните эту команду:
wget http://repo.fastpanel.direct/install_fastpanel.sh -O - | bash -
После окончания установки в командной строке отобразится адрес, логи и пароль.
Баги FastPanel
Я столкнулся сразу с двумя багами. Первый баг точно этой панели, а другой не факт, пока не разобрался со вторым.
Права на паки
Захожу Управление сайтом -> Файлы. В колонке доступ, права на папку показывает как 644, пробую сменить их, нажатием на 644. Вылезает модальное окно, где указываю права 744, ставлю галочку применить только к каталогам. Жму ок. Все выполняется. Дальше снова выделяю все папки в корне сайта, жму все то же самое, только права выбираю 644, ставлю применить только для файлов, жму ок. Получаю read unix @->/run/filemanager/microfo.ru.sock: read: connection reset by peer. При этом права на каталоги где-то становятся с правами 644.
С первым багом разобрался просто, выставляю права на папку через консоль.
cd find yvka.ru/ -type d -exec chmod 755 {} \; //выставить всем папкам права 755
Кстати, если заливать файлы через FTP, то они будут иметь группу и пользователя root, что не есть хорошо. Чтобы это изменить попользуйтесь командой:
chown -R siteName.ru:siteName.ru /var/www/keycheck.ru/data/www/siteName.ru
Загрузка ЦП
Этот баг я пока не победил, как осилю его, то сразу допишу решение. В двух словах о баге: происходит что-то странное с файлом подкачки.
update: Я победил, дело было в криво настроенном сайте, есть у меня один проект, который со мной с 1999 года, так вот в нем была беда.
Настройка Фаервола
Довольно все удобно сделали через админ панель. Единственный недостаток в том что нельзя сразу выбрать входящий и исходящий трафик, приходится плодить сущности. Скидываю свой список правил.
Название | Диапазон портов | Протокол | Тип | Политика |
---|---|---|---|---|
SSH | 22 | TCP | INPUT | PARTIAL ACCEPT |
WEB | 80 | TCP | INPUT | PARTIAL ACCEPT |
WEB | 443 | TCP | INPUT | PARTIAL ACCEPT |
FTP | 21 | TCP | INPUT | PARTIAL DROP |
SMTP | 25 | TCP | INPUT | PARTIAL ACCEPT |
SMTP | 25 | TCP | OUTPUT | PARTIAL ACCEPT |
SMTP | 465 | TCP | INPUT | PARTIAL ACCEPT |
SMTP | 465 | TCP | OUTPUT | PARTIAL ACCEPT |
SMTP | 587 | TCP | INPUT | PARTIAL ACCEPT |
SMTP | 587 | TCP | OUTPUT | PARTIAL ACCEPT |
SMTP | 2525 | TCP | INPUT | PARTIAL ACCEPT |
SMTP | 2525 | TCP | OUTPUT | PARTIAL ACCEPT |
POP3 | 110 | TCP | INPUT | PARTIAL ACCEPT |
POP3 | 110 | TCP | OUTPUT | PARTIAL ACCEPT |
POP3 | 995 | TCP | INPUT | PARTIAL ACCEPT |
POP3 | 995 | TCP | OUTPUT | PARTIAL ACCEPT |
IMAP | 143 | TCP | INPUT | PARTIAL ACCEPT |
IMAP | 143 | TCP | OUTPUT | PARTIAL ACCEPT |
IMAP | 993 | TCP | INPUT | PARTIAL ACCEPT |
IMAP | 993 | TCP | OUTPUT | PARTIAL ACCEPT |
DB_ | 3306 | TCP | INPUT | PARTIAL ACCEPT |
DB_ | 3306 | TCP | OUTPUT | PARTIAL ACCEPT |
DB_ | 5432 | TCP | INPUT | PARTIAL ACCEPT |
DB_ | 5432 | TCP | OUTPUT | PARTIAL ACCEPT |
fastCP | 8888 | TCP | INPUT | PARTIAL ACCEPT |
fastCP | 8888 | TCP | OUTPUT | PARTIAL ACCEPT |
7777 | 7777 | TCP | INPUT | ACCEPT |
SFTP | 2222 | TCP | INPUT | PARTIAL ACCEPT |
И в самом конце добавляет глобальное правило, запретить все, что не разрешено.
Нашли ошибку, пишите.
Настройка бекапа
Никогда не хороните бекапы на там же сервере.
Так же все настраивается через панель. Можно сохранить в дроббокс, ftp или себе на сервер, а затем слить их оттуда.
Предыдущая
А почему настройка фаервола SSH только на INPUT?
OUTPUT не нужен?
а зачем OUTPUT, это же входящие, т.е. зачем с сервера разрешать куда-то стучаться по ssh?
Почему политика partial accept , а не accept?