5 приемов и хитростей для работы с ssh и кое-что ещё

Авторизация SSH по ключам

Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.

Для настройки нам понадобится файловый менеджер, например, Far Manager с плагином WinSCP, и Putty

Итак, вот инструкция:

  1. Распаковываем архив, открываем PUTTYGEN:

    Открываем PUTTYGEN (PuTTY Key Generator)

  2. Вводим и выбираем всё как на скриншоте: и ключ длиной и жмём Generate
    Во время генерации ключей водим мышкой по специальному полю под статусной строкой, чтобы пошла генерация ключей (она использует набор из координат мыши)

    Генерируем ключи

  3. Теперь нужно заполнить (это пароль для доступа к приватному ключу). Заполнять не обязательно, но его наличие повысит безопасность, так как любой, кто имеет доступ к приватному ключу, сможет с его помощью авторизоваться на сервере по ssh:

    Сохраняем ключи

  4. Сохраним приватный ключ где-нибудь в надёжном месте — . Назовём его, к примеру,
  5. А вот публичный ключ нужно сохранить на сервере, куда устанавливаем доступ — Назовём его . Авторизуемся по ssh по паролю и переходим в директорию пользователя, под которым будет происходить авторизация.

    В целях безопасности нежелательно работать под рутом, но я покажу пример команд для root, а вы уже скорректируете под своё имя пользователя

    Итак, копируем файл в .
    Далее нужно импортировать данные в файл

    ssh-keygen -i -f /root/.ssh/sheensay.ru.pub >> /root/.ssh/authorized_keys

    После можно удалить

  6. Осталось настроить подключение. Я пользуюсь Far Manager в связке с плагином WinSCP.

    имеет встроенный NetBox, последователя WinSCP, так что, ничего дополнительно устанавливать не придётся.

    Открываем Far Manager, Alt + F1, выбираем , далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл в
    При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу

    Настройка подключения по SSH

  7. Подключаемся. Если при генерации ключей вы вводили пароль, то в этом случае при подключении у вас будет запрашивать пароль к приватному файлу.

Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка , то есть Сервер не принял наш ключ. В этом случае пройдитесь по всем пунктам последовательно и поищите ошибку

Отключить авторизацию по паролю

Теперь, когда всё настроено, совсем не лишним будет отключить авторизацию по паролю. Для этого внесём изменения в конфигурационный файл:

PasswordAuthentication no

Server-Side Configuration

The option in the OpenSSH server configuration file must be enabled on the server to allow port forwarding. By default, forwarding is allowed. Possible values for this option are or to allow all TCP forwarding, to prevent all TCP forwarding, to allow local forwardings, and to allow remote forwardings.

Another option of interest is , which can be used to forward Unix domain sockets. It allows the same values as . The default is .

For example:

The configuration option as described above also affects remote port forwardings. Possible values were (only local connections from server host allowed; default), (anyone on the Internet can connect to remote forwarded ports), and (client can specify an IP address that can connect, anyone can if not specified).

ssh-copy-id

Я предпочитаю использовать с флагом -i и задавать путь до нужного ключа

sudo ssh-copy-id -i ~/.ssh/andrei-key.pub andrei@192.168.0.2

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: «/home/andrei/.ssh/andrei-key.pub»
The authenticity of host ‘192.168.0.2 (192.168.0.2)’ can’t be established.
ECDSA key fingerprint is SHA256:abcdefgh1234567890abcdefgh1234567890abc+def.
Are you sure you want to continue connecting (yes/no/)?

Введите yes

Are you sure you want to continue connecting (yes/no/)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
andrei@192.168.0.2’s password:

Введите пароль

Number of key(s) added: 1

Now try logging into the machine, with: «ssh ‘andrei@192.168.0.2′»
and check to make sure that only the key(s) you wanted were added.

Теперь на хосте 192.168.0.2 в файле
/home/andrei/.ssh/authorized_keys
появилась новая запись вида

ssh-rsa AAAAB3NzaC1y … lseP/jXcq … Uydr/2CwQ &hellip ++TpY19pHqD/AnhL … Az62T/Ipyx … 8U2T andrei@host.andrei.com

Знак … заменяет длинные последовательности случайных символов для экономии места.

Проверить ключ можно командой

ssh -i ~/.ssh/mykey user@host

В нашем случае

ssh -i ~/.ssh/andrei-key andrei@192.168.0.2

Если вы не задавали пароль для ключа, то попадёте на удалённый хост без лишних движений

Last login: Sun Jan 10 16:48:27 2021 from 192.168.0.1

Требования

Для работы вам понадобятся базовые знания SSH и некоторых параметров подключения. Вы также можете настроить SSH-аутентификацию на основе ключей для некоторых ваших пользователей или хостов (по крайней мере, для тестирования).

Структура и алгоритм интерпретации конфигурационного файла SSH
Каждый пользователь локальной системы может поддерживать конфигурационный файл SSH на стороне клиента. Этот файл может содержать любые параметры подключения, которые нужно использовать в командной строке, что позволяет автоматически обрабатывать их при подключении. Значения, определенные в конфигурации, всегда можно переопределить во время соединения с помощью обычных флагов ssh.

Расположение конфигурационного файла клиента SSH
Клиентский конфигурационный файл называется config, он находится в домашнем каталоге пользователя, в подкаталоге конфигурации .ssh. Часто этот файл не создается по умолчанию, поэтому вам может понадобиться создать его самостоятельно:

touch ~/.ssh/config

SSH против Telnet

Telnet был одним из первых протоколов интернет-приложений, и он использовался для запуска и поддержки эмуляции терминала на удаленном хосте.

SSH и Telnet функционально похожи, но основное различие между ними — SSH использует криптосистему с открытым ключом. Так он аутентифицирует конечные точки при настройке сеанса терминала и шифрует команды сеанса и вывода.

Telnet в основном используется для эмуляции терминала, но и SSH может использоваться для этого. Ещё он может удалённо выдавать команды, как с rsh, передавать файлы с использованием протокола передачи файлов SSH (SFTP) и туннелировать другие приложения.

Пример. ssh-keygen. Ключи для Azure

Создание ssh ключей для виртуальной Linux в Microsoft Azure. Для создания и использования ключей SSH с Azure выполните описанные ниже действия.

cd .ssh
ssh-keygen -t rsa -b 2048 -N "" -C 'your-email@example' -f azuressh -q

Будут созданы два ключа azuressh и публичный azuressh.pub. Чтобы без ошибок скопировать содержимое azuressh.pub и вставить его в поле при создании VE, используйте ssh-keygen. Весь вывод, без исключений нужно копировать.

ssh-keygen -e -f azuressh.pub
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA
...
---- END SSH2 PUBLIC KEY ----

Не забудьте настроить файл config, для большего удобства.

Дополнительная документация SSH

  • Seahorse — GUI утилита для генерации и хранения SSH ключей. Оболочка для GPG.
  • Host-based аутентификация в OpenSSH

  • Bog BOS: SSH и OpenSSH: принципы работы, установка и настройка

  • Русские man: Команды и прикладные программы пользовательского уровня )

  • Генерация и преобразование ключей

  • Getting started with SSH

  • Руководство FreeBSD. ssh-agent и ssh-add. Туннелирование SSH

  • Защита с помощью SSH ключей

  • Как сгенерировать открытый/закрытый SSH-ключ в Linux

Реализации SSH

Как открытый протокол SSH был реализован для большинства платформ, а OpenSSH с открытым исходным кодом чаще всего встречается в Unix-like системах.

OpenSSH был портирован для работы в Windows PowerShell, начиная с 2015 года, а в 2018 году в Windows 10 была добавлена дополнительная поддержка OpenSSH. 

PuTTY — ещё одна реализация SSH с открытым исходным кодом, доступная для Windows, macOS и BSD.

Большинство реализаций пакета SSH содержат три утилиты: slogin (безопасный вход), ssh и scp (безопасное копирование), которые являются безопасными версиями более ранних утилит Unix: rlogin, rsh и rcp. 

Opening Backdoors into the Enterprise

Remote SSH port forwarding is commonly used by employees to open backdoors into the enterprise. For example, the employee may set get a free-tier server from Amazon AWS, and log in from the office to that server, specifying remote forwarding from a port on the server to some server or application on the internal enterprise network. Multiple remote forwards may be specified to open access to more than one application.

The employee would also set on the server (most employees do not have fixed IP addresses at home, so they cannot restrict the IP address).

For example, the following command opens access to an internal Postgres database at port 5432 and an internal SSH port at port 2222.

Как настроить PuTTY

В настройках программы нет ничего сложного. Давайте откроем программу и посмотрим, что в ней есть. После запуска перед нами отобразится окно конфигурации приложения, где слева находятся различные категории, а справа – их настройки.

Программа включает в себя 4 основных раздела:

  • Session — основная вкладка, предназначенная для подключения к удаленному компьютеру. Здесь вводятся параметры подключения, порт, адрес, а также вносятся так называемые пресеты, которыми можно воспользоваться, чтобы не вводить каждый раз данные для входа. Достаточно один раз прописать настройки сессии, сохранить ее и использовать при следующем запуске программы.
  • Terminal — необходима для включения или отключения возможностей терминала.
  • Window — здесь производятся все настройки интерфейса: внешний вид окна, цвет, шрифт и кодировка.
  • Connection — настройка параметров подключения, алгоритма шифрования, сжатия, ключей аутентификации и других значений.

Нам потребуется всего две вкладки: Session и SSH. Первым делом перейдем ко второй и убедимся, что версия протокола стоит в значении «2». Как правило, сейчас используется понятие SSH-2, так как первая версия практически не применяется из-за существенных недостатков, например, ошибки в схеме обеспечения безопасности.

Вернемся к разделу Session, где находятся основные параметры, которые потребуются нам для подключения к серверу по SSH. Давайте немного остановимся и поговорим о них:

  1. Первый блок включает в себя основные параметры, необходимые для подключения: окно ввода IP-адреса и порта, строку с выбором типа подключения.
  2. Следующий блок предназначен для создания пресетов, которые можно использовать для быстрого подключения к удаленному компьютеру. В строку «Saved Sessions» вводится название сессии, оно сохраняется с помощью кнопки «Save». Чтобы воспользоваться сохраненным пресетом, достаточно его загрузить с помощью кнопки «Load».
  3. Последний блок – параметры закрытия окна при выходе. Доступные значения: always, never, only on clean exit.

Как видите, в настройках PuTTY нет ничего сложного. Теперь давайте перейдем к подключению по протоколу SSH.

Загрузка ключа на сервер

Когда генерация ключей завершена, нам осталось только загрузить ключ на сервер. Для загрузки ключа можно использовать несколько способов. В некоторых случаях вы можете указать ключ в панели управления сервером, например, сPanel или любой другой. Но мы такой способ рассматривать не будем. Мы рассмотрим ручные способы.

Самый простой способ скопировать ключ на удаленный сервер — это использовать утилиту ssh-copy-id. Она тоже входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH. Синтаксис команды:

При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id.rsa.pub для загрузки его на сервер в файл ~/.ssh/authorized_keys. Дальше вы можете выполнять аутентификацию с помощью этого ключа.

Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог ~/.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа >>, это позволит не перезаписывать существующие ключи:

Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль. Теперь вы можете использовать созданный ключ для аутентификации на сервере:

Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа.

Настройка ssh клиента

В Debian настройки клиентской части ssh делятся на глобальные и пользовательские. Глобальные клиентские настройки находятся в файле /etc/ssh/ssh_config и применяются ко всем пользователям. Пользовательские настройки могут находиться в домашнем каталоге пользователя, в ~/.ssh/config и применяются к одному пользователю. Файл пользовательских настроек не создаётся автоматически в отличие от файла глобальных настроек клиентской части ssh. Для большинства выполняемых задач подойдут настройки по умолчанию, но для удобства использования, так сказать для тюнинга или для выполнения нестандартных задач клиентские настройки изменяются. Рассмотрим вкратце некоторые из этих настроек. Полезно помнить о приоритетах настроек: высший приоритет имеют ключи командной строки, затем следуют настройки пользователя, а после них используются глобальные настройки клиентской части.

Параметр Host. Ограничивает множество хостов, к которым применяются последующие (до ближайшей новой директивы Host) директивы, по указанным шаблонам (хост должен соответствовать хотя бы одному шаблону). Шаблон, состоящий из одного символа *, соответствует любому хосту. Под хостом в данном контексте понимается аргумент имя_хоста передаваемый в командной строке (т.е. никаких преобразований перед сравнением не выполняется).

Параметр HostName. Устанавливает соответствие между псевдонимами, сокращениями и настоящими именами хостов. По умолчанию используется имя, передаваемое в командной строке. Допустимо непосредственное указание IP-адресов.

Параметр Port. Порт на удалённой машине, к которому следует подключаться. Значение по умолчанию — 22

Параметр User. Имя пользователя, которое следует использовать при регистрации в удалённой системе. Полезно, когда на разных серверах используются разные имена, т.к. избавляет от надобности вспоминать каждый раз нужное имя.

В качестве примера я создам файл пользовательских настроек /home/selifan/.ssh/config следующего содержания:

Host sunup

HostName sunup.aitishnik.local

Port 2203

User andrey

Host windbag

HostName windbag.nnov.ru

Port 2280

User joker

Host 212.177.65.1

HostName 212.177.65.1

Port 2222

User forester

Теперь при подключении к компьютерам sunup.aitishnik.local, windbag или по ip адресу 212.177.65.1 мне не нужно вспоминать, ни имя пользователя, ни ssh порт подключения, достаточно после ssh набрать имя сервера. Просто и удобно! Описания всех параметров, значений и некоторых примеров находятся в man ssh_config. Продолжаем настраивать SSH и читаем «Генерация ключей SSH».

Об авторе:

Меня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.

Создание ключей SSH

Первый шаг для настройки аутентификации ключей SSH на сервере заключается в том, чтобы сгенерировать пару ключей SSH на локальном компьютере.

Для этого мы можем использовать специальную утилиту , которая входит в стандартный набор инструментов OpenSSH. По умолчанию она создает пару 2048-битных ключей RSA, что подходит для большинства сценариев использования.

Сгенерируйте на локальном компьютере пару ключей SSH, введя следующую команду:

Утилита предложит вам выбрать место размещения генерируемых ключей. По умолчанию ключи хранятся в каталоге внутри домашнего каталога вашего пользователя. Закрытый ключ будет иметь имя , а соответствующий открытый ключ будет иметь имя .

На этом этапе лучше всего использовать каталог по умолчанию. Это позволит вашему клиенту SSH автоматически находить ключи SSH при попытке аутентификации. Если вы хотите выбрать нестандартный каталог, введите его сейчас, а в ином случае нажмите ENTER, чтобы принять значения по умолчанию.

Если ранее вы сгенерировали пару ключей SSH, вы можете увидеть следующий диалог:

Если вы решите перезаписать ключ на диске, вы больше не сможете выполнять аутентификацию с помощью предыдущего ключа. Будьте осторожны при выборе варианта yes, поскольку этот процесс уничтожает ключи, и его нельзя отменить.

Далее вам будет предложено ввести парольную фразу для ключа. Это опциональная парольная фраза, которую можно использовать для шифрования файла закрытого ключа на диске.

Возможно вам будет интересно, в чем заключаются преимущества ключа SSH, если вам все равно нужна парольная фраза. Вот некоторые его преимущества:

  • Закрытый ключ SSH (защищенная паролем часть) никогда не доступен через сеть. Парольная фраза используется только для расшифровки ключа на локальном компьютере. Это означает, что парольную фразу нельзя взломать через сеть методом прямого подбора.
  • Закрытый ключ хранится в каталоге с ограниченным доступом. Клиент SSH не принимает закрытые ключи, хранящиеся в каталогах, доступ к которым не ограничен. У самого ключа могут быть ограниченные разрешения (чтение и запись доступны только владельцу). Это означает, что другие пользователи системы не смогут создать уязвимость.
  • Для попытки взлома защищенного парольной фразой закрытого ключа SSH злоумышленнику уже необходим доступ к системе. Это означает, что у него уже должен быть доступ к учетной записи пользователя или учетной записи root. Если вы окажетесь в такой ситуации, парольная фраза может помешать злоумышленнику сразу же попасть на ваши другие серверы. Это может дать вам достаточно времени, чтобы создать и внедрить новую пару ключей SSH и запретить доступ с взломанным ключом.

Поскольку закрытый ключ недоступен через сеть и защищен системой разрешений, доступ к этому файлу будет только у вас (и у пользователя root). Парольная фраза служит дополнительным уровнем защиты на случай взлома одной из этих учетных записей.

Парольная фраза представляет собой необязательное дополнение. Если вы решите ее использовать, вам нужно будет вводить ее при каждом использовании соответствующего ключа (если вы не используете программный агент SSH, хранящий зашифрованный ключ). Мы рекомендуем использовать парольную фразу, но если вы не хотите ее задавать, вы можете просто нажать ENTER, чтобы пропустить этот диалог.

Теперь у вас есть открытый и закрытый ключи, которые вы можете использовать для аутентификации. Следующим шагом будет размещение открытого ключа на сервере, что позволит использовать аутентификацию SSH для входа в систему.

Как сделать forwarding и перенаправить порты

Функция forwarding необходима для двух целей: во-первых, чтобы организовать переброс различных ip-адресов и портов и создания туннелей, а во-вторых, агент forwarding позволяет клиенту переходить между серверами. Начнем со второго предназначения агента forwarding — он нужен, если у вас не один сервер и вы не хотите каждый раз проходить авторизацию заново, а желаете используя один и тот же публичный ключ перемещаться с сервера 1 на сервер 2. Чтобы настроить такой forwarding, вам необходимо изменить настройки файла конфигураций — прописать следующую строку в нем: ForwardAgent yes.

Теперь разберемся с туннелями между хостами и тем, как при помощи forwarding настроить переброс с одного ip-хоста с определенным портом на другой. А сделать это весьма просто. К примеру, если вы хотите настроить 2220 порт для переброса ip-адреса 97.86.77.66 на 10.12.11.13 мы вводим следующую строку: ssh -f -N -R 2222:10.12.11.13:22 username@97.86.77.66. Где буква -f это и есть функция forwarding. Теперь, когда пользователь введет запрос для получения доступа к локальному хосту 97.86.77.66, сработает переброс (forwarding) и он будет перемещен на 2222-й порт 10.12.11.13. Аналогично этому принципу можно настроить forwarding для перебрасывания любого ресурса куда угодно, к примеру, для перенаправления в Сеть.

Что касается целей создания туннелей, они могут быть самыми разнообразными. Поскольку SSH использует шифрование данных, то туннелирование может понадобится для передачи различных зашифрованных файлов, например, IMAP IRC или VNC. Туннелирование позволит вам принимать на сервер различные типы трафика. Кроме того, часто перенаправление портов и IP-адресов используют для обхода плохо настроенных маршрутиризаторов, сетевых анализаторов трафика и прочих ограничителей. Но учитывайте, что после добавления переадресации, возможно, понадобится изменить настройки некоторых программ, через которые вы осуществляете соединение по SSH каналам.

Проверка службы SSH на сервере

Доступ по SSH обычно можно включить при создании сервера или во время настройки конфигурации. Убедиться в том, что он разрешен, можно через консоль. Она доступна в панели управления сервером. 

Например, у меня VDS на Timeweb. Чтобы попасть в консоль, я авторизуюсь по логину и паролю, выданному хостером, выбираю свой сервер в списке VDS и перехожу на вкладку «Консоль». 

Чтобы пользоваться консолью, нужно авторизоваться. Логин и пароль для доступа к серверу хостер присылает в письме. Сначала нужно ввести логин и нажать на клавишу Enter. Появится строка Password. В ней необходимо ввести пароль и снова нажать на клавишу Enter.

Важно:в целях безопасности при вводе пароля на экране не отображаются никакие символы, даже привычные звездочки. 

После авторизации в консоли можно проверить, запущена ли служба SSH на сервере.

Выполните команду systemctl status sshd.
Обратите внимание на строчку Active. В ней должна быть выделенная зеленым запись active (running)

Это состояние говорит о том, что служба запущена.

Если служба не активна, добавьте ее самостоятельно. Выполните команду sudo apt install openssh-server и подтвердите установку пакетов.

Кроме того, для подключения вам может понадобиться настройка брандмауэра. Чтобы межсетевой экран не блокировал входящие соединения, можно на время отключить его командой sudo ufw disable.

Как работает SSH?

Этот протокол создавали для замены незащищённых эмуляторов терминала или программ входа в систему: Telnet, rlogin и rsh и т.п. Ещё SSH должен был заменять программы передачи файлов: например, FTP или rcp.

В основном SSH используется, чтобы подключиться к удаленному хосту для сеанса терминала. Форма команды следующая: 

После этой команды клиент попытается подключиться к серверу с именем server.example.com по ID пользователя UserName. Если соединение устанавливается впервые, пользователю предложат ввести открытый ключ удаленного хоста и запрос на подключение: 

Ответ «да» продолжит сеанс, а ключ хоста сохранится в файле known_hosts локальной системы. Это скрытый файл, который по умолчанию хранится в скрытом каталоге с именем /.ssh/known_hosts в домашнем каталоге пользователя. 

Когда ключ сохранится в файле known_hosts, клиентская система может снова подключиться к этому серверу без согласований — ключ хоста аутентифицирует соединение. 

Обмен ключами шифрования

Когда мы запускаем SSH-клиент и говорим ему соединиться с нужным сервером, происходит следующее:

  • Сервер отправляет клиенту протоколы шифрования, с которыми он умеет работать. Если клиент тоже умеет работать с ними — всё отлично, идём дальше.
  • Сервер и клиент с помощью криптографической магии устанавливают защищённое соединение, которое невозможно взломать или изменить (как они сами думают).
  • Теперь у каждой стороны есть секретный ключ, которым зашифровывается и расшифровывается каждое сообщение.

Если всё прошло штатно, то при самом первом подключении сервер пришлёт в ответ что-то вроде этого:

Здесь сервер спрашивает, точно ли мы хотим установить это соединение. Если да — вводим в ответ yes. Это значит, что мы получили уникальный «отпечаток пальцев» для нашего соединения. Теперь, когда поменяются настройки SSH-сервера или его полностью переустановят, отпечаток уже не совпадёт и клиент будет бить тревогу. Всё для того, чтобы сделать соединения более безопасными в будущем.

Аутентификация на сервере с использованием ключей SSH

Если вы успешно выполнили одну из вышеописанных процедур, вы сможете войти на удаленный хост без пароля учетной записи для удаленного хоста.

Базовый процесс выглядит аналогично:

Если вы подключаетесь к этому хосту первый раз (если вы используете указанный выше последний метод), вы сможете увидеть следующее:

Это означает, что ваш локальный компьютер не распознает удаленный хост. Введите «yes» и нажмите ENTER, чтобы продолжить.

Если вы не указывали пароль для своего закрытого ключа, вы войдете в систему немедленно. Если вы указали парольную фразу для закрытого ключа при его создании, вам нужно будет ввести ее сейчас. После этого для вас будет создан новый сеанс подключения через оболочку с учетной записью на удаленной системе.

Если эта процедура будет выполнена успешно, переходите к следующему разделу, чтобы узнать, как полностью защитить сервер.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector