# Базовая (Стартовая) настройка 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 обеспечит вам наилучшую производительность при горизонтальном масштабировании.* | Официальный сайт | | **Termius** | *Termius — это современный SSH-клиент для Mac, Windows, Linux, iOS и Android. Подключайтесь одним щелчком мыши с любого устройства.* | Официальный сайт | | **OpenSSH** | *OpenSSH — это ведущий инструмент для удаленного входа по протоколу SSH. Он шифрует весь трафик, предотвращая перехват данных, взлом соединений и другие атаки. Кроме того, OpenSSH предлагает обширный набор функций безопасного туннелирования, несколько методов аутентификации и расширенные возможности настройки.* | Официальный сайт | | **Nano** | *GNU nano — это небольшой редактор для работы в терминале. Он поддерживает подсветку синтаксиса, проверку орфографии, выравнивание по ширине,* | Официальный сайт | | **whois** | *Пакет whois в Ubuntu — это клиент командной строки для получения информации о доменах и IP-адресах из баз данных WHOIS.* | Launchpad ubuntu | | **fail2ban** | *Fail2Ban сканирует файлы журналов, такие как /var/log/auth.log, и блокирует IP-адреса, с которых совершается слишком много неудачных попыток входа. Для этого он обновляет правила системного брандмауэра, чтобы на настраиваемый период времени отклонять новые подключения с этих IP-адресов. Fail2Ban изначально настроен на чтение многих стандартных файлов журналов, таких как файлы sshd и Apache, и его легко настроить на чтение любого выбранного вами файла журнала для отслеживания любых нужных вам ошибок.* | GitHub репозиторий | # Подготовка Первоначальный действия и проверки для начала работы. ## Установка Termius клиента **Шаг 1:** Перейдите на официальный сайт 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 ```
Вы увидите файл конфигурации OpenSSH вида: ```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 ```
> Файл /etc/ssh/sshd_config управляет безопасностью и поведением SSH-сервера, где активные (не закомментированные) директивы переопределяют значения по умолчанию. Ключевые настройки включают использование порта 22, включение PAM, поддержку SFTP и, в данном случае, разрешение прямого входа под root-пользователем (PermitRootLogin yes). **Шаг 2:** Изменить строчку: `#PubkeyAuthentication no` на `PubkeyAuthentication yes` **Шаг 3:** Сохранить изменения `Ctrl+X` -> `Y` -> `Enter`
Ниже разбор всех ключевых параметров из конфига, разбитый по логическим группам. > Важное правило этого файла: если строка начинается с #, параметр закомментирован и работает значение по умолчанию. Если # нет — настройка активна. 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).
**Шаг 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 UFW - Ubuntu Firewall ## Редактирование файла приложения OpenSSH-Server **Шаг 1:** Перейти в каталог `/etc/ufw/applications.d/` - тут хранятся файлы политик UFW для приложений ```bash cd /etc/ufw/applications.d/ ``` **Шаг 2:** Получить список файлов и катологов в каталоге `/etc/ufw/applications.d/` ```bash ls -la ```
Список файлов и катологов в каталоге `/etc/ufw/applications.d/` ```bash total 20 drwxr-xr-x 2 root root 4096 Oct 7 10:05 . drwxr-xr-x 3 root root 4096 Oct 7 09:51 .. -rw-r--r-- 1 root root 147 Oct 7 09:57 openssh-server ```
**Шаг 3** Изменить файл конфигурации для OpenSSH-Server ```bash nano openssh-server ```
Содержимое файла `/etc/ufw/applications.d/openssh-server` ```ini [OpenSSH] title=Secure shell server, an rshd replacement description=OpenSSH is a free implementation of the Secure Shell protocol. ports=22/tcp ```
**Шаг 4** Изменить порт на порт указанный в [Окончательное редактирование конфигурации OpenSSH](#окончательное-редактирование-конфигурации-openssh) - в инструкции - это порт 2222 ```ini [OpenSSH] title=Secure shell server, an rshd replacement description=OpenSSH is a free implementation of the Secure Shell protocol. ports=2222/tcp ``` > Сохранить изменения `Ctrl+X` -> `Y` -> `Enter` ## Создание файла приложения HTTP **Шаг 1** Созда файл конфигурации для HTTP ```bash nano http-server ``` > Дописать к http слово server через дефис обязательно **Шаг 2** Создать инструкцию в файле ```ini [HTTP] title=Hyper Text Transport Protocol description=Hyper Text Transport Protocol ports=80 ``` > Сохранить изменения `Ctrl+X` -> `Y` -> `Enter` ## Создание файла приложения HTTPS **Шаг 1** Созда файл конфигурации для HTTPS ```bash nano https-server ``` > Дописать к https слово server через дефис обязательно **Шаг 2** Создать инструкцию в файле ```ini [HTTPS] title=Hyper Text Transport Protocol Secure description=Hyper Text Transport Protocol Secure ports=443 ``` > Сохранить изменения `Ctrl+X` -> `Y` -> `Enter` ## Настройка и запуск UFW Для начала нужно проверить, все ли хорошо с созданными и отредактированными файлами конфигурации ```bash ufw app list ``` Вывод: ```bash Available applications: HTTP HTTPS OpenSSH ``` > Если так, то все хорошо **Шаг 1:** Применить политики ```bash ufw allow OpenSSH ``` После: ```bash ufw allow HTTP ``` После: ```bash ufw allow HTTPS ``` **Шаг 2:** Отключить все входящие подключения ```bash ufw default deny incoming ``` **Шаг 3:** Включить все исходящие подключения ```bash ufw default allow outgoing ``` **Шаг 4:** Запустить UFW ```bash ufw enable ``` **Шаг 5:** Проверить работу UFW ```bash ufw status verbose ``` Вывод: ```bash Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip To Action From -- ------ ---- 2222/tcp (OpenSSH) ALLOW IN Anywhere 80 (HTTP) ALLOW IN Anywhere 443 (HTTPS) ALLOW IN Anywhere 2222/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6) 80 (HTTP (v6)) ALLOW IN Anywhere (v6) 443 (HTTPS (v6)) ALLOW IN Anywhere (v6) ``` > Если так, то все хорошо ## UFW и Docker - особенности Docker-у плевать на UFW, он пробрасывает порты в обход. Например, может: 80:8080 - тогда будет работать порт 8080. > Но если Docker пробросит 4455:8080, например, а в UFW порт 4455 не открыт, то доступа к сервису в Docker контейнере на порту 8080 не будет. ## Настройки fail2ban ## Настройка правил jail ## Запуск fail2ban