Довольно часто появляются задаче по полной настройке и оптимизации web-серверов. Как правило, это физические сервера с хорошими характеристиками. В данном посте я скомпоновал весь свой опыт по начальной настройке. На правильность эти действия ни коем образом не претендуют. Быть может надо делать как-то иначе и будет лучше... Я просто напишу как делаю я.
Далее всё будет относится к операционной системе Ubuntu 18.04. На других Убунтах и Дебианах инструкции будут аналогичные.
При установке Убунту можно нажать F4 и выбрать там Install minimal system. Нам ведь не нужен мусор из стандартного дистрибутива вроде lxc или python3?
Устанавливаем операционную систему.
После установки прежде всего обновим информацию о репозиториях и далее обновим все пакеты.
apt-get update
apt-get upgrade
apt-get autoremove
Отредактируем файл /etc/default/grub так чтобы в нём присутствовала такая строчка:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Это нужно для ускорения работы docker, а быть может и других программ. Далее нужно обновить GRUB:
update-grub
Подробности того зачем это надо можно найти тут:
https://askubuntu.com/questions/417215/how-does-kernel-support-swap-limit
Убунта могла обновить ядро, поэтому на всякий случай перезагружаемся:
shutdown -r now
В будущем обновлять ядро я категорически не рекомендую. А пока сервер пустой, мы ничем не рискуем.
После перезагрузки установим кое-какие пакеты, чтобы можно было по человечески работать с системой:
apt-get install nano mc htop iftop
nano - консольный текстовый редактор
mc - файловый менеджер "для людей"
htop - красивое отображение текущей ситуации на сервере (процессоры, память, запущеные приложения)
iftop - мониторинг трафика
Далее я всё делаю через mc. Гуляю по папкам, вношу изменения. Если надо набрать консольные команды, то жму Ctrl + O и всё делаю. Обратно в mc - тоже Ctrl + O. Если нужно отредактировать файл - жму F4. Чтение - F3. Сохранение - F2. Выход из файла - два раза ESCAPE. Всё там просто и классно! Для того чтобы мне было удобно я ещё настраиваю
это. Далее лучше перезайти на сервер по своему SSH. Я считаю, что новичкам тоже лучше всё делать через mc. Иначе ты не видишь систему с которой работаешь.
Также рекомендую повесить SSH на какой-нибудь другой порт, потому что по 22 обычно ломятся китайцы. Инструкции описаны, например,
тут. После смены порта желательно проделать и это:
"Данное правило ограничивает больше 20-ти подключение к 80 порту(web) за 15 секунд с 1 ip адреса.
(кстати, подобное правило есть на уровне nginx, но сжирает огромное количество ресурсов)":
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
"Правило ограничивает количество подключений к SSH, не более 4-х подключений за 1 минуту":
iptables -A INPUT -p tcp --dport 354 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 354 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
"Где 354 порт вашего ssh сервера. На деле у меня не получалось авторизовать более 1 раза за минуту. Далее это правило вы дальше можете адаптировать под себя и другие сервисы."
Добавляем правила для запрета Simple Service Discovery Protocol (SSDP) чтобы датацентр не просил нас это сделать в будущем. Также блокируем все порты кроме тех что нам нужны (в этом примере открываем только порт 22):
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 1900 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 1900 -j DROP
-A FORWARD -i eth0 -p tcp --dport 22 -j ACCEPT
-A FORWARD -i eth0 -j DROP
-A FORWARD -i eth0 -p tcp -m tcp --dport 1900 -j DROP
-A FORWARD -i eth0 -p udp -m udp --dport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p tcp -m tcp --sport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p udp -m udp --sport 1900 -j DROP
Где 234.165.140.130 - это IP адрес вашего сервера в интернете.
Или так:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp -m tcp -m multiport --dports 22 -j ACCEPT
-A INPUT -i eth0 -m conntrack -j ACCEPT --ctstate RELATED,ESTABLISHED
-A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p tcp -m tcp --sport 1900 -j DROP
-A OUTPUT -s 234.165.140.130/32 -p udp -m udp --sport 1900 -j DROP
-A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth0 -j DROP
После рестарта системы все правила обнулятся, по этому делаем следующее:
apt-get install ifupdown
Далее создаем и редактируем файл /etc/network/if-up.d/00-iptables
nano -w /etc/network/if-up.d/00-iptables
Пишем в него:
#!/bin/sh
iptables-restore < /etc/firewall.conf
сохраняем и делаем
Читать далее...