Files
Basic-Ubuntu-Server-Setup/README.md

516 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Базовая (Стартовая) настройка Ubuntu Server
[Termius_KeyGen]: images/Termius_KeyGen.png
[Termius_GetKey]: images/Termius_GetKey.png
# Содержание
* [Используемые программы](#используемые-программы)
* [Подготовка](#подготовка)
* [Установка Termius клиента](#установка-termius-клиента)
* [Установка OpenSSH на сервере](#установка-openssh-на-сервере)
* [Установка Nano на сервере](#установка-nano-на-сервере)
* [Установка whois на сервере](#установка-whois-на-сервере)
* [Установка fail2ban на сервере](#установка-fail2ban-на-сервере)
* [Настройки доступа по SSH](#настройки-доступа-по-ssh)
* [Создание публичного и приватного ключа](#создание-публичного-и-приватного-ключа)
* [Добавление публичного ключа в OpenSSH](#добавление-публичного-ключа-в-openssh)
* [Редактирование конфигурации OpenSSH](#редактирование-конфигурации-openssh)
* [Проверка доступа по ключу](#проверка-доступа-по-ключу)
* [Окончательное редактирование конфигурации OpenSSH](#окончательное-редактирование-конфигурации-openssh)
* [Настройки UFW](#настройки-ufw)
* [Редактирование файла приложения OpenSSH-Server](#редактирование-файла-приложения-openssh-server)
* [Создание файла приложения HTTP](#создание-файла-приложения-http)
* [Создание файла приложения HTTPS](#создание-файла-приложения-https)
* [Настройка и запуск UFW](#настройка-и-запуск-ufw)
* [UFW и Docker - особенности](#ufw-и-docker---особенности)
* [Настройки fail2ban](#настройки-fail2ban)
* [Настройка правил jail](#настройка-правил-jail)
* [Запуск fail2ban](#запуск-fail2ban)
# Используемые программы
| Название | Описание | Ссылка |
|:---|:----:|:---:|
| **Ubuntu Server** | *Ubuntu Server обеспечивает экономическую и техническую масштабируемость для корпоративного центра обработки данных, а также для публичного или частного облака. Независимо от того, планируете ли вы развернуть облако на базе OpenStack, кластер Kubernetes или рендер-ферму из 50 000 узлов, Ubuntu Server обеспечит вам наилучшую производительность при горизонтальном масштабировании.* | <a href="https://ubuntu.com/server" target="_blank">Официальный сайт</a> |
| **Termius** | *Termius — это современный SSH-клиент для Mac, Windows, Linux, iOS и Android. Подключайтесь одним щелчком мыши с любого устройства.* | <a href="https://termius.com" target="_blank">Официальный сайт</a> |
| **OpenSSH** | *OpenSSH — это ведущий инструмент для удаленного входа по протоколу SSH. Он шифрует весь трафик, предотвращая перехват данных, взлом соединений и другие атаки. Кроме того, OpenSSH предлагает обширный набор функций безопасного туннелирования, несколько методов аутентификации и расширенные возможности настройки.* | <a href="https://www.openssh.org/" target="_blank">Официальный сайт</a> |
| **Nano** | *GNU nano — это небольшой редактор для работы в терминале. Он поддерживает подсветку синтаксиса, проверку орфографии, выравнивание по ширине,* | <a href="https://www.nano-editor.org/" target="_blank">Официальный сайт</a> |
| **whois** | *Пакет whois в Ubuntu — это клиент командной строки для получения информации о доменах и IP-адресах из баз данных WHOIS.* | <a href="https://launchpad.net/ubuntu/+source/whois" target="_blank">Launchpad ubuntu</a> |
| **fail2ban** | *Fail2Ban сканирует файлы журналов, такие как /var/log/auth.log, и блокирует IP-адреса, с которых совершается слишком много неудачных попыток входа. Для этого он обновляет правила системного брандмауэра, чтобы на настраиваемый период времени отклонять новые подключения с этих IP-адресов. Fail2Ban изначально настроен на чтение многих стандартных файлов журналов, таких как файлы sshd и Apache, и его легко настроить на чтение любого выбранного вами файла журнала для отслеживания любых нужных вам ошибок.* | <a href="https://github.com/fail2ban/fail2ban" target="_blank">GitHub репозиторий</a> |
# Подготовка
Первоначальный действия и проверки для начала работы.
## Установка Termius клиента
**Шаг 1:**
Перейдите на <a href="https://termius.com" target="_blank">официальный сайт</a> Termius.
**Шаг 2:**
Зарегистрируйтесь на сайте.
**Шаг 3**
Скачайте приложение Termius для вашей операционной системы.
**Шаг 4:**
Установите приложение Termius в свою операционную сисстему.
## Установка OpenSSH на сервере
**Если не установлен и Вы подключались к серверу по RDP или VNC.**
> *Предполагается что Вы вошли под root правами*
**Шаг 1:** Обновление пакетов и файлов операционной системы:
```bash
apt update && apt update -y
```
**Шаг 2:** Установка OpenSSH-Server:
```bash
apt install openssh-server
```
**Шаг 3:** Запуск и автозагрузка OpenSSH-Server:
```bash
systemctl enable --now ssh
```
**Шаг 4:** Проверка статуса службы:
```bash
systemctl status ssh
```
## Установка Nano на сервере
*Проверить, а не установлен ли Nano:*
```bash
nano --version
```
> Если вывел версию, то Nano уже установлен.
---
> *Предполагается что Вы вошли под root правами*
**Шаг 1:** Обновление пакетов и файлов операционной системы:
```bash
apt update && apt update -y
```
**Шаг 2:** Установка Nano:
```bash
apt install nano
```
**Шаг 3:** Проверка установки Nano:
```bash
nano --version
```
> Если вывел версию, то Nano установлен успешно.
## Установка whois на сервере
> *Предполагается что Вы вошли под root правами*
**Шаг 1:** Обновление пакетов и файлов операционной системы:
```bash
apt update && apt update -y
```
**Шаг 2:** Установка Whois:
```bash
apt install whois
```
**Шаг 3:** Проверка установки Whois:
```bash
whois google.com
```
> Если Whois установлен успешно: Вы получите данные о регистраторе, дате создания и истечения срока регистрации, а также DNS-серверах.
## Установка fail2ban на сервере
> *Предполагается что Вы вошли под root правами*
**Шаг 1:** Обновление пакетов и файлов операционной системы:
```bash
apt update && apt update -y
```
**Шаг 2:** Установка fail2ban:
```bash
apt install fail2ban
```
**Шаг 3:** Создание локального конфига:
```bash
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
```
> Никогда не редактируйте файл /etc/fail2ban/jail.conf напрямую, так как он заменяется при обновлениях.
**Шаг 4:** Проверка базовой конфигурации:
```bash
nano /etc/fail2ban/jail.local
```
Вы должны увидеть:
```ini
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
```
> Если файл пуст, то вставьте в него код выше.
> Если enabled = false, измените на enabled = true.
Сохраните файл `Ctrl+X` -> `y` -> `Enter`.
**Шаг 5:** Перезапуск:
```bash
systemctl restart fail2ban
```
```bash
systemctl enable fail2ban
```
**Шаг 6:** Проверка:
```bash
fail2ban-client status sshd
```
> Эта команда покажет список заблокированных IP-адресов в данный момент.
# Настройки доступа по SSH
## Создание публичного и приватного ключа
**Шаг 1:** Запустите Termius
**Шаг 2:** Выберите пункт меню Keychain (1)
**Шаг 3:** Выбирите Kay type ED25519 (2)
**Шаг 4:** Введите удобное для Вас название ключа в поле Label (3)
**Шаг 5:** Введите удобный для Вас пароль для ключа в поле Passphrase (4)
**Шаг 6:** Нажмите кнопку Generate & save
![Termius_KeyGen][Termius_KeyGen]
**Шаг 8:** Скопируйте публичный ключ
![Termius_GetKey][Termius_GetKey]
**Шаг 9:** Сохраните публичный ключ в удобное для Вас место
> ПРИМЕР ПУБЛИЧНОГО КЛЮЧА:
```pem
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJsxETJS8K1IgvWsgZaXToAlacvnt9pJgAdxmQPP+AsM Generated By Termius
```
## Добавление публичного ключа в OpenSSH
> *Предполагается что Вы вошли под root правами*
Для добавления ключей авторизации по SSH в OpenSSH используется файл `authorized_keys` который находится в каталоге `~/.ssh`
**Шаг 1:** Создать каталог `.ssh`
```bash
mkdir ~/.ssh
```
Эта команда создаст нужный каталог или выведет:
> mkdir: /root/.ssh: File exists
**Шаг 2:** Установить права доступа к каталогу `~/.ssh`
```bash
chmod 700 ~/.ssh
```
**Шаг 3:** Создать файл `authorized_keys` в каталоге `~/.ssh` и добавить в него Ваш публичный ключ
```bash
nano ~/.ssh/authorized_keys
```
Скопируйте [Ваш публичный ключ](#создание-публичного-и-приватного-ключа) и вставте его в файл authorized_keys сочетанием клавиш `Ctrl+Shift+V`
Сохраните файл `Ctrl+X` -> `Y` -> `Enter`
**Шаг 4:** Установить права доступа к файлу `authorized_keys`
```bash
chmod 600 ~/.ssh/authorized_keys
```
## Редактирование конфигурации OpenSSH
Для включения авторизации по ключу необходимо отредактировать конфигурационный файл OpenSSH
**Шаг 1:** Открыть файл конфигурации OpenSSH путь к файлу `/etc/ssh/sshd_config`
```bash
nano /etc/ssh/sshd_config
```
<details>
<summary>Вы увидите файл конфигурации OpenSSH вида:</summary>
```ini
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# In general, the first uncommented definition of an option takes precedence.
# For options that accept multiple values, like 'Port', subsequent definitions
# are appended to the configuration.
#
# Note that the above implies that configuration options from snippets in
# /etc/ssh/sshd_config.d/*.conf take precedence over those defined in this
# file. In addition, configuration snippet files are processed in lexical
# order, so options defined in files with names that sort earlier take
# precedence.
#
# Such configuration snippets may be present in default installations of
# Ubuntu.
# Include /etc/ssh/sshd_config.d/*.conf
# When systemd socket activation is used (the default), the socket
# configuration must be re-generated after changing Port, AddressFamily, or
# ListenAddress.
#
# For changes to take effect, run:
#
# systemctl daemon-reload
# systemctl restart ssh.socket
#
Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication no
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to "no" here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to "yes" to enable keyboard-interactive authentication. Depending on
# the system's configuration, this may involve passwords, challenge-response,
# one-time passwords or some combination of these and other methods.
# Beware issues with some PAM modules and threads.
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin prohibit-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale and color environment variables
AcceptEnv LANG LC_* COLORTERM NO_COLOR
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
```
</details>
> Файл /etc/ssh/sshd_config управляет безопасностью и поведением SSH-сервера, где активные (не закомментированные) директивы переопределяют значения по умолчанию. Ключевые настройки включают использование порта 22, включение PAM, поддержку SFTP и, в данном случае, разрешение прямого входа под root-пользователем (PermitRootLogin yes).
**Шаг 2:** Изменить строчку: `#PubkeyAuthentication no` на `PubkeyAuthentication yes`
**Шаг 3:** Сохранить изменения `Ctrl+X` -> `Y` -> `Enter`
<details>
<summary>Ниже разбор всех ключевых параметров из конфига, разбитый по логическим группам.</summary>
> Важное правило этого файла: если строка начинается с #, параметр закомментирован и работает значение по умолчанию. Если # нет — настройка активна.
1. Сетевые настройки
Port 22: Стандартный порт для SSH. Часто меняют на нестандартный (например, 2222), чтобы спастись от ботов-сканеров.
AddressFamily any: Разрешает подключения и через IPv4, и через IPv6.
ListenAddress: Позволяет указать конкретный IP-адрес сервера, на котором SSH будет ждать подключений (по умолчанию — на всех).
2. Ключи сервера и шифрование
HostKey: Пути к секретным ключам самого сервера. Они нужны, чтобы клиент (твой ПК) мог убедиться, что подключается именно к тому серверу, к которому планировал.
RekeyLimit: Настройка того, как часто сервер будет обновлять сессионные ключи (по умолчанию — раз в 1 ГБ данных или раз в час).
3. Логирование
SyslogFacility AUTH: Категория системного журнала (syslog), куда полетят логи авторизации.
LogLevel INFO: Степень детализации логов. INFO — золотая середина (кто зашел, когда, ошибки).
4. Доступ и ограничения (Аутентификация)
LoginGraceTime 2m: Время, которое дается пользователю на ввод пароля. Если не успел — дисконнект.
PermitRootLogin yes: (Важно!) Разрешает вход под пользователем root. В целях безопасности лучше ставить prohibit-password (только по ключам) или no.
StrictModes yes: Проверяет права доступа к файлам в папке .ssh. Если они открыты для всех, SSH откажется работать (защита от кражи ключей).
MaxAuthTries 6: Сколько попыток ввода пароля дается, прежде чем соединение оборвется.
MaxSessions 10: Максимальное количество открытых сессий (окон) в рамках одного сетевого соединения.
5. Методы входа
PubkeyAuthentication: Разрешает вход по SSH-ключам (самый безопасный способ).
AuthorizedKeysFile: Путь, где лежат публичные ключи клиентов, которым разрешен вход.
PasswordAuthentication: Разрешает или запрещает вход по обычному паролю.
PermitEmptyPasswords no: Запрещает вход пользователям с пустым паролем.
KbdInteractiveAuthentication no: Отключает "интерактивный" ввод (часто используется для одноразовых паролей или хитрых систем PAM).
6. Взаимодействие с системой
UsePAM yes: Подключает систему PAM (Pluggable Authentication Modules). Она позволяет использовать системные пароли, политики блокировки и другие модули Linux для авторизации.
PrintMotd no: Не показывать "сообщение дня" (Message of the Day) при входе.
AcceptEnv: Разрешает клиенту передавать свои переменные окружения (например, язык системы LANG).
7. Дополнительные возможности
X11Forwarding yes: Разрешает пробрасывать графические интерфейсы (если ты запустишь GUI-приложение на сервере, оно откроется в окне на твоем компе).
Subsystem sftp: Указывает путь к программе, которая обеспечивает работу SFTP (передачу файлов через SSH).
Match User: Специальный блок в конце. Позволяет задать индивидуальные настройки для конкретного пользователя или группы (например, одному юзеру запретить всё, кроме SFTP).
</details>
**Шаг 4:** Перезапустить службу ssh
```bash
systemctl restart ssh
```
## Проверка доступа по ключу
Теперь **ВАЖНО** подключится к серверу по ключу.
Используйте Termius.
Как добавить Host и выполнить авторизацию по ключу можно прочитать в документации к Termius.
## Окончательное редактирование конфигурации OpenSSH
> !!!Если авторизация по ключу прошла успешно, то можно приступить к окончательному редактированию конфигурации!!!
> Дополнительно изменим порт подключения по SSH - это необходимо для безопасности
**Шаг 1:** Открыть файл конфигурации OpenSSH путь к файлу `/etc/ssh/sshd_config`
```bash
nano /etc/ssh/sshd_config
```
**Шаг 2:** Изменить строчку: `Port 22` на `Port 2222` - 2222 как пример, укажите любой свободный порт.
> Изменения порта - защита от сканеров
**Шаг 3:** Сохранить изменения `Ctrl+X` -> `Y` -> `Enter`
**Шаг 4:** Перезапустить службу ssh
```bash
systemctl restart ssh
```
> Теперь получить доступ к серверу можно ТОЛЬКО через ключ
# Настройки UFW
## Редактирование файла приложения OpenSSH-Server
## Создание файла приложения HTTP
## Создание файла приложения HTTPS
## Настройка и запуск UFW
## UFW и Docker - особенности
## Настройки fail2ban
## Настройка правил jail
## Запуск fail2ban