Базовая настройка Ubuntu Server 18.04
После того как установлен Ubuntu Server необходимо его настроить
Вот что рекомендуется сделать:
Установите базовые программы
apt install aptitude mc nano htop iftop bwm-ng iperf iperf3 iotop tmux screen openntpd sshfs net-tools dnsutils iftop tshark iptraf
Ограничьте размер логов systemd
Создайте папку
mkdir -p /var/log/journal
Пропишите в /etc/systemd/journald.conf строчку:
SystemMaxUse=10G
Это строчка ограничивает максимальный размер логов в 10 гигабайт.
Перезагрузите конфигурацию systemd:
journalctl --flush
systemctl daemon-reload
Можно также в крон прописать строчку:
1 */12 * * * journalctl --vacuum-time=30d --vacuum-size=10G
Она будет оставлять логи за 30 дней
Создайте скрипт приветствия /etc/profile.d/01-locale.sh
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
export LANG
export LANGUAGE
export LC_CTYPE
export LC_NUMERIC
export LC_TIME
export LC_COLLATE
export LC_MONETARY
export LC_MESSAGES
export LC_PAPER
export LC_NAME
export LC_ADDRESS
export LC_TELEPHONE
export LC_MEASUREMENT
export LC_IDENTIFICATION
export LC_ALL
Создайте файл /etc/profile.d/01-editor.sh
export EDITOR=nano
Вместо кодировки en_US.UTF-8 укажите свою кодировку. Список установленных кодировок можно посмотреть через команду locale -a.
Создание пользователя
Инструкцию нужно выполнить, если пользователь не создан.
Создайте пользователя ubuntu
useradd ubuntu
Поставьте пароль от рута:
passwd ubuntu
Установите shell bash для нового пользователя
usermod -s /bin/bash ubuntu
Создайте домашнюю папку:
mkdir -p /home/ubuntu
chown -R ubuntu:ubuntu /home/ubuntu
Настройка sudo без пароля
Сделайте sudo su -l без ввода пароля
Добавьте группу wheel и в нее пользователя user
groupadd -r wheel
usermod -a -G wheel ubuntu
в /etc/sudoers добавьте строчку
%wheel ALL=(ALL:ALL) NOPASSWD: ALL
Попробуйте залогиниться к серверу через отдельный терминал. И сделать sudo su -l.
Настройка ssh
Настройте ssh (По желанию)
В конфиге /etc/ssh/sshd_config измените строчки:
Порт, следует изменить на нестандартный. например:
Port 22050
Запретить авторизацию через root по паролю, только через ключ
PermitRootLogin prohibit-password
либо, вообще запретить заходить под рутом (запрещать заходить по рутом не рекомендуется, т.к. вы не сможете потом сделать rsync под рутом)
PermitRootLogin no
Также можете указать:
ClientAliveInterval 5
ClientAliveCountMax 1000
Это позволит держать открытым ssh соединение 5000секунд при отсутствии активности. Это нужно, например, если вы используете sftp для редактирования файлов, и редактор переодически теряет соединение. Если такое происходит то нужно увеличить параметр ClientAliveCountMax, а интервал ClientAliveInterval поставить в 5сек
Разрешить авторизацию только определенным пользователям, укажите в самом конце файла:
AllowUsers root ubuntu
Сделайте перезапуск сервиса ssh
service sshd reload
Попробуйте залогиниться к серверу через отдельный терминал.
Настройка iptables
Установите iptables
aptitude install iptables-persistent
При работе с iptables будьте осторожны. Одно неверное движение и доступ к серверу может быть заблокирован!!!
Обратите на порт SSH. Укажите свой порт, вместо 22050.
Пропишите в /etc/iptables/rules.v4 следующее содержимое:
*filter
:INPUT ACCEPT [19:913]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39:3584]
:ALLOW-INPUT - [0:0]
:f2b-sshd - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# Fail2Ban SSH
#-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
# Разрешаем входящие соединения ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22050 -j ACCEPT
# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT
# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT
# Разрешить http
-A ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A ALLOW-INPUT -j RETURN
# Fail2ban
-A f2b-sshd -j RETURN
COMMIT
Обязателен ENTER в конце (перевод на новую строку).
Скопируйте rules.v4 в rules.v6
cp /etc/iptables/rules.v4 /etc/iptables/rules.v6
Установите новые правила iptables
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6
Чтобы добавлять новые правила в iptables, например, тот же nginx нужно редактировать файл. Также вы можете выполнить команды
iptables -I ALLOW-INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I ALLOW-INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Они добавят в начало цепочки ALLOW-INPUT два новых правила, но при этом файл не изменят.
Настройка времени
Настройте автоматическое обновление времени
cp /etc/openntpd/ntpd.conf /etc/openntpd/ntpd.orig.conf
echo "servers pool.ntp.org" > /etc/openntpd/ntpd.conf
Посмотрите список часовых поясов:
timedatectl list-timezones
Измените часовой пояс:
timedatectl set-timezone Asia/Almaty
Прочие настройки
Выключите mlocate.
Это ненужная служба, которая индексирует все файлы, и нагружает диск бесполезным IO.Удалите файл /etc/cron.daily/mlocate. Либо в начале этого файла пропишите exit 0
#! /bin/bash
exit 0
Перезагрузка сервера
Подключитесь к ssh с другого терминала. Если соединение происходит упешно, перезагрузите сервер. И попробуйте подключить еще раз.