# Безопасность сервера Asterisk

## Повышение безопасности Asterisk

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

Для начала, давайте разберемся, чем же грозят "дыры" в безопасности и какие последствия грозят бизнесу, если злоумышленник получит доступ к IP-АТС.

## Угроза взлома

В отличие от взлома персонального компьютера или почты, взлом АТС - это бесплатные для взломщика звонки, за которые придется заплатить владельцу АТС. Известно немало случаев, когда хакеры тратили колоссальные суммы, проведя на взломанной АТС всего несколько часов.

Как правило, целями злоумышленников становятся IP-АТС, которые доступны из публичной сети. Используя различные SIP-сканнеры и исследуя системные уязвимости, они выбирают места для атаки. Дефолтные (​default​) пароли, открытые SIP-порты, неправильно управляемый ​firewall ​или его отсутствие - всё это может стать причиной несанкционированного доступа.

К счастью, все эти уязвимости можно устранить и причём совершенно бесплатно.

## Простые шаги к повышению безопасности

1. Первое правило, которое необходимо соблюдать - это не афишировать адрес своей IP-АТС и следить за тем, чтобы доступ к сети имели только авторизованные пользователи. Разумеется, это правило распространяется и на физический доступ к серверу, на котором установлена IP-АТС.
2. Второе и самое очевидное - не использовать дефолтные (default) пароли, которые будет легко подобрать или угадать - "1234", "admin", "password", название компании и так далее.

Одной из самых распространённых ошибок, является создание внутренних номеров (`Extension`), у которых и номер и пароль совпадают. В `​sip.conf` ​это выглядит примерно так:

```sh
[101]
username=101
secret=101
host=dynamic
```

Допускать такого, категорически нельзя. Тем более что при создании внутреннего номера через интерфейс FreePBX, автоматически генерируется 32-значный надёжный пароль.

![asterisk_23](img/asterisk_23.png)

При настройке внутренних номеров также следует ограничивать IP-адреса, которые могут быть на них зарегистрированы вплоть до пула адресов локальной подсети. IP-АТС Asterisk имеет встроенные `​ACL` (**Access Control List**)​, в настройке `​sip.conf​`. При помощи команд `permit/deny​` можно разрешить лишь определенное количество IP-адресов для регистрации.

3. Другой важной мерой по усилению безопасности, является ограничение удаленного доступа к IP-АТС при помощи firewall. Будьте внимательны, так как в данном случае, главное грамотно настроить правила, по которым будет отрабатывать ​firewall​. Убедитесь, что настройка не блокирует порты, которые использует ваша IP-АТС и не позволяет анонимно посылать ICMP запросы из публичной сети. Если вы планируете предоставлять удаленный доступ для авторизованных сотрудников, лучше всего организовать его при помощи VPN сервера (например, ​OpenVPN​).
4. Если это возможно, то желательно использовать `​NAT` (**Network Address Translation**)​. При помощи NAT’а, можно присвоить IP-АТС приватный IP-адрес и существенно усложнить доступ к ней из Интернета.
5. Еще одним очень важным фактором, является разделение входящих и исходящих маршрутов (`​Inbound Routes` и `Outbound Routes​`). Необходимо, чтобы каждый маршрут принадлежал собственному контексту обработки вызова.
6. Отключите каналы и сервисы, которые не используются. Например, если вы не используете протокол `​MGCP` ​или `skinny`. Отключить эти модули можно в `/etc/modules.conf​` как показано ниже:

```sh
noload => chan_mgcp.so
noload => chan_skinny.so
noload => chan_oss.so
```

7. Чтобы усложнить работу всевозможным SIP-сканерам, необходимо в настройках `sip.conf` выставить следующее условие - `​alwaysauthreject=yes​`. Это будет препятствовать получению информации об использующихся внутренних номерах на вашей IP-АТС.
8. Рекомендуем создавать отдельные маршруты на звонки за рубеж (по сути, международное направление 810). Ставьте ограничения на звонки в таких маршрутах или закрывайте их PIN - кодом, который могут знать только сотрудники вашей организации.

## Какие порты открыть для Asterisk/FreePBX

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

### Доступ администратора системы

|Порт|Транспорт (UDP/TCP)|Назначение|Смена порта|Безопасность|Дополнительно|
|:-:|:-:|-|-|-|-|
|22|TCP|Подключение к SSH консоли|Может быть изменен только через Linux CLI|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Порт используется для SSH подключения к АТС извне|
|80 `FreePB X` 2001 `PBXact`|TCP|Графический интерфейс по HTTP (не HTTPS)|Можно поменять через графический интерфейс по пути `System Admin` > `Port management`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Используется для пользовательского доступа к WEB-интерфейсу АТС|
|443|TCP|Графический интерфейс по HTTPS|Можно поменять через графический интерфейс по пути `System Admin` > `Port management`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Используется для пользовательского доступа к WEB-интерфейсу АТС. Использует SSL шифрование|

![asterisk_24](img/asterisk_24.png)

## Доступ для SIP/IAX устройств

|Порт|Транспорт (UDP/TCP)|Назначение|Смена порта|Безопасность|Дополнительно|
|:-:|:-:|-|-|-|-|
|5060|UDP|Порт получения телефонной сигнализацией модулем `chan_PJSIP`|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Стандартный порт для сигнализации модуля `chan_PJSIP`|
|5061||Порт получения защищенной телефонной сигнализации модулем `chan_PJSIP`|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Защищенный порт для сигнализации модуля `chan_PJSIP`|
|5160|UDP|Порт получения телефонной сигнализацией модулем `chan_SIP`|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Стандартный порт для сигнализации модуля `chan_SIP`|
|5161||Порт получения защищенной телефонной сигнализации модулем `chan_SIP`|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Защищенный порт для сигнализации модуля `chan_SIP`|
|10000-20000|UDP|Получение `RTP` потока в рамках SIP сессии|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Можно открывать диапазон и, зачастую, это является требование SIP-провайдеров (RTP трафик зачастую приходит с различных IP-адресов)|Порты, необходимые для голосовой составляющей телефонного звонка|
|4569|UDP|Работа протокола `IAX`|Есть возможность изменить порт в рамках графического интерфейса АТС в модуле `SIP Settings`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Используется для транкового объединения серверов и оконечных устройств|

## Доступ к UCP (User Control Panel)

|Порт|Транспорт (UDP/TCP)|Назначение|Смена порта|Безопасность|Дополнительно|
|:-:|:-:|-|-|-|-|
|81|TCP|Графический интерфейс `UCP` по `HTTP` (не `HTTPS`)|Порт можно поменять через `FreePBX` в `System Admin` > `Port Management`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия). Для удаленных пользователей используется `HTTPS`|Порт к пользовательской панеле `UCP`|
|4443|TCP|Графический интерфейс `UCP` по `HTTPS`|Порт можно поменять через `FreePBX` в `System Admin` > `Port Management`|Можно оставлять открытым в сеть, так как трафик зашифрован, а так же происходит аутентификация пользователей|Порт доступа к пользовательской панеле `UCP` с помощбю `SSL` шифрования|
|8088|TCP|Порт для `WebRTC` клиентов|Порт можно поменять через FreePBX в `Advanced Settings` > `Asterisk Builtin mini-HTTP` > `HTTP Bind Port`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия). Для удаленных пользователей используется `HTTPS`|Необходим для реализации `WebRTC` звонков через `UCP` (звонок через браузер)|
|8089|TCP|Порт для шифрования `WebRTC` клиентов|Порт можно поменять через `FreePBX` в `Advanced Settings` > `Asterisk Builtin mini-HTTP` > `HTTP Bind Port`|Можно оставлять открытым в сеть, так как трафик зашифрован, а так же происходит аутентификация пользователей|Необходим для реализации `WebRTC` звонков с шифрованием через `UCP` (звонок через браузер)|
|8001|TCP|`Node Server` - получение информации в реальном времени в рамках `UCP`|Порт можно поменять через `FreePBX` в `Advanced Settings` > `UCP NodeJS Server` > `NodeJS Bind Port`|Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверия)|Процесс отвечает за *real-time* активности: всплывающая информация, чаты и прочее|
|8003|TCP|`Node Server` (защищенные подключения)|Порт можно поменять через `FreePBX` в `Advanced Settings` > `UCP NodeJS Server` > `NodeJS Bind Port`|Можно оставлять открытым в сеть, так как трафик зашифрован, а так же происходит аутентификация пользователей|Процесс отвечает за *real-time* активности: всплывающая информация, чаты и прочее|

Остальные порты зависят от ваших конкретных требований: наличие `​RMS` ​компонента мониторинга, `​Zulu​`, функционала провижининга (`​EPM​`) и прочие.

## FreePBX - обнаружение слабых паролей

Как известно, сильный пароль - это очень важная составляющая безопасности любого актива, к которому, тем или иным образом можно получить доступ. Не даром все *best practices* начинаются с рекомендаций устанавливать сильный, устойчивый к взлому пароль. В данном разделе мы будем говорить о прописных истинах, поэтому её можно считать скорее «дружеским советом» для тех, кто только начинает своё знакомство с FreePBX.

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

### Обзор

Начиная с версии 13 во FreePBX появился модуль `​Weak Password Detection` который автоматически детектирует и сообщает о том, что в системе имеется слабый пароль, а также указывает, где именно он обнаружен: на внутреннем номере (`​Extension​`), транке (`​Trunks​`), конференц - комнате (`​Conferences​`) и других модулях.

Чтобы проверить, имеется ли у вас в системе слабый пароль, откройте вкладку `Reports` > `Weak Password Detection`. Вот как должно выглядеть окно данного модуля у всех без исключения (окно нормального человека):

![asterisk_25](img/asterisk_25.png)

Данное сообщение говорит нам о том, что у нас в системе нет слабых паролей. А теперь, давайте-ка немножко похулиганим и создадим пару сущностей с очень слабыми паролями и посмотрим что из этого выйдет.

Наплевав на все *​best practices​*, создадим внутренний номер `1111` с паролем `​1111​`:

![asterisk_26](img/asterisk_26.png)

А ещё создадим транк с паролем `​000​`:

![asterisk_27](img/asterisk_27.png)

А теперь отправляемся в модуль `​Weak Password Detection​` и перед нами открывается «​окно курильщика​». Вот так не должно быть никогда:

![asterisk_28](img/asterisk_28.png)

Помимо этого, нам будут напоминать о слабых паролях в `​Dashboard`'е​:

![asterisk_29](img/asterisk_29.png)

Как только Вы настроите внутреннюю нумерацию, линии к провайдерам (транки), пользовательский доступ, не поленитесь, зайдите лишний раз в модуль `​Weak Password Detection​и` если там будет уведомление о слабом пароле в системе - незамедлительно смените его! Но помните, что сильный пароль - это не гарантия безопасности, это всего лишь один из уровней, который должен применяться в комплексе с остальными мероприятиями по защите системы.

## Конфигурация Firewall в FreePBX

Рассмотрим модуль, который стал доступен во FreePBX только с версии 13 и который позволяет создать первичную низкоуровневую защиту нашей IP-АТС - Firewall. Нужно отметить, что попытки создать нечто подобное на ранних версиях FreePBX всё-таки были, но все они не увенчались успехом и заставляли пользователей так или иначе идти на компромиссы для сохранения доступности функционала IP-АТС. Модуль ​Firewall ​был разработан с глубоким пониманием существующих проблем и его основной целью является защита "​средней​", или другими словами, типовой инсталляции при обязательном сохранении VoIP сервисов.

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

## Настройка модуля Firewall

Перейдем к настройке. Для того, чтобы попасть в модуль, нужно перейти по следующему пути: `​Connectivity` ​> `​Firewall​`, откроется следующее окно:

![asterisk_30](img/asterisk_30.png)

Чтобы включить модуль, нажмите кнопку `Enable Firewall`. Обратите внимание, после включения модуля никакие правила еще не задействованы, их нужно настроить.

Первое о чём сообщает модуль, это то, что IP-адрес, под которым мы зашли на IP-АТС не является членом "зоны доверия" (​Trusted Zone​) и предлагает добавить его для исключения возможных блокировок:

![asterisk_31](img/asterisk_31.png)

Для наибольшего понимания, давайте разберёмся с понятием зоны (Zone), которым оперирует модуль Firewall.

Все сетевые соединения, поступающие на ​VoIP-сервер ​считаются частью зоны. Каждый сетевой интерфейс и данные, поступающие на него принадлежат к определенной зоне. Стандартные зоны делятся на следующие:

- `Reject` ​- Все соединения, относящиеся к данной зоне, запрещены. Обратите внимание, что эта зона по-прежнему принимает RTP трафик, но никакие другие порты по умолчанию не прослушиваются. Трафик данной зоны может быть обработан с помощью Responsive Firewall, о котором будет сказано далее.
- `External` ​- Позволяет только https соединения для доступа к интерфейсу управления и UCP порту, если они определены. Трафик данной зоны может также быть обработан с помощью Responsive Firewall.
- `Other` ​- Используется на доверенных внешних сетях, или других хорошо известных сетях. По умолчанию, позволяет получить доступ к UCP, а также обеспечивает нефильтрованный SIP и IAX.
- `Internal` ​- Используется на внутренних локальных сетях, по умолчанию позволяет получить доступ ко всем сервисам IP-АТС.
- `Trusted` ​- Все сетевые соединения данной зоны разрешены. Пропускается весь трафик от доверенной зоны. Именно сюда нам предложат добавить наш IP-адрес при первом включении модуля.

Итак, чтобы добавить наш IP-адрес в список доверенных, нужно нажать ​`You can add the host automatically here​`.

![asterisk_32](img/asterisk_32.png)

Мы попадаем во вкладку `​Preconfigured​`. Предлагается два варианта, это добавление адреса хоста и добавление подсети `​Add Host​и ​Add Network​` соответственно:

![asterisk_33](img/asterisk_33.png)

Проверить, что адрес (или сеть) добавлены в список доверенных можно во вкладке `​Zones` в разделе `​Networks​`:

![asterisk_34](img/asterisk_34.png)

В модуле `​Firewall` ​есть также дополнительный элемент, который отслеживает сигнализационные запросы определенных сервисов и блокирует возможные атаки - `Responsive Firewall`​. Такими запросами могут быть запросы протоколов сигнализации SIP или IAX, например, запросы авторизации или вызова. Когда Responsive включен, то любой сигнализационный пакет исходящий от хоста проходит через `Firewall`, если после некоторого количества таких пакетов, хост отправлявший их не прошёл успешную регистрацию, то весь трафик от этого хоста сбрасывается на короткий промежуток времени (60 сек). Если после данной блокировки хост продолжает слать пакеты с запросом регистрации и безуспешно пытается зарегистрироваться, то блокируется уже его IP-адрес на 24 часа. Кроме того, если на сервере настроен `fail2ban`, то система ещё и письмо отправит о данном событии.

Чтобы включить данный функционал, на вкладке `​Responsive` ​нужно нажать на кнопку `Enable​`:

![asterisk_35](img/asterisk_35.png)

Далее необходимо указать, для каких протоколов должен работать данный функционал:

![asterisk_36](img/asterisk_36.png)

Известные IP-адреса или даже целые подсети, которые проявляли подозрительную активность и которые не должны иметь доступа к IP-АТС можно заблокировать во вкладке `Zones` > `​Blacklists​`.

![asterisk_37](img/asterisk_37.png)

И последний по счёту, но не по значимости, функционал модуля `Firewall`, о котором хотелось бы рассказать - `​Safe Mode​`. Данный функционал позволяет получить доступ к IP-АТС если случайно была применена неправильная конфигурация, которая привела к потере доступа, а доступа к консоли у вас нет.

![asterisk_38](img/asterisk_38.png)

При включении модуля `Firewall`, `Safe Mode` уже доступен, но чтобы его активировать, необходимо ​дважды ​перезапустить систему. Сначала необходимо выполнить перезапуск один раз, дождаться, пока сервер полностью загрузится, а затем произвести вторую перезагрузку. После чего, система отложит загрузку правил `Firewall`'а, а вы сможете спокойно убрать ту конфигурацию, из-за которой потеряли доступ.

О том, что система находится в `​Safe Mode​`, будет говорить огромное уведомление в самом верху страницы, которое исчезнет через пять минут, тогда же запустятся правила `Firewall`:

![asterisk_39](img/asterisk_39.png)

## Настройка SSL в FreePBX

Для управлениями сертификатами SSL в графическом интерфейсе FreePBX создан специальный модуль - `​Certificate Management​`. Но, перед тем как перейти к его настройке, давайте вспомним, для чего же нужен сертификат и что же такое SSL в Asterisk?

### SSL и FreePBX

Сертификат SSL позволяет вашему FreePBX иметь уникальную цифровую подпись, с помощью которой, каждый раз при обращении к интерфейсу будет создаваться защищенное соединение между web - сервером и клиентским устройством. SSL сертификат включает в себя информацию о его владельце и открытый ключ. Выдачей SSL сертификатов занимается специальный центр сертификации (`Certification authority`), честность которого априори неоспорима.

Помимо этого, сертификат позволяет совершать звонки по защищенному транспортному протоколу TLS и шифровать голосовые потоки через SRTP.

## Генерация CSR

Приступаем к получению сертификата. Центр сертификации попросит вас предоставить сгенерированный CSR файл (Certificate Signing Request). Это является обязательной частью подачи заявления на сертификат, и содержит в себе различные данные об организации, такие как наименование, полное имя домена, код страны и прочие.

Перейдем во вкладку `​Admin` > `​Certificate Management​`. В открывшемся окне модуля нажимаем `+ Generate CSR`. Откроется окно генерации CSR файла:

![asterisk_41](img/asterisk_41.png)

Разберемся поподробнее с каждым из пунктов:

- `Name` ​- имя для сгенерированного CSR файла. Когда файл будет сгенерирован, он будет иметь название, как указано в этом поле
- `Common Name (Host Name) (CN)`​- полное имя домена
- `Organization Name (O)` ​- полное наименование организации, как указано в учредительных документах
- `Organization Unit (OU)`​- наименование подразделения (отдела), на который выписывается данный сертификат
- `Country (C)​` - код страны из двух букв. В нашем случае RU.
- `State/Province (ST)` ​- наименование области или края, в котором вы находитесь. В нашем случае мы оставили это поле пустым
- `City or Locality (L)` ​- укажите город. Мы указали Moscow

По окончанию настроек нажмите ​Generate CSR​. После того, как CSR файл будет сгенерирован, он станет доступен для скачивания в главном интерфейсе модуля. Для его загрузки, нажмите на кнопку `​Download CSR`​. Сам файл представляет из себя ключ, заключенный в теги начала и окончания:

```sh
-----​BEGIN​ CERTIFICATE REQUEST-----
MIIC0zCCAbsCAQAwgY0xFDASBgNVBAMTC21lcmlvbmV0LnJ1MRgwFgYDVQQKEw9N
ZXJpb24gTmV0d29ya3MxCzAJBgNVBAsTAklUMQswCQYDVQQGEwJSVTEMMAoGA1UE
CBMDUUxEMQ8wDQYDVQQHEwZNb3Njb3cxIjAgBgkqhkiG9w0BCQEWE2ludmFsaWRA
ZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKvJYr==
-----​END​ CERTIFICATE REQUEST-----
```

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

### Загрузка сертификата

После того, как мы получили сертификат от сертификационного центра (CA), его необходимо загрузить на сервер. Нажимаем на кнопку `New Certificate` и выбираем `Upload Certificate`:

![asterisk_42](img/asterisk_42.png)

- `Name` ​- имя для сертификата
- `Description` ​- описание сертификата. Используется только внутри модуля и не влияет на импорт сертификата.
- `Passphrase` ​- кодовая фраза, то есть пароль. Необходима для доступа к сертификату и генерации сертификатов на стороне клиента. Если вы не укажете пароль в данном поле, то вам придется указывать его каждый раз, когда потребуется новый сертификат. К тому же, отсутствие пароля приводит к незащищенности приватного ключа сертификата.
- `CSR Reference` ​- в данном поле выберите сгенерированный CSR файл на предыдущем этапе.
- Поле `Certificat​e` - откройте файл сертификата, который вам предоставил сертификационный центр и полностью копируйте его в это поле, начиная от тэга `-----BEGIN CERTIFICATE-----` до `-----END CERTIFICATE-----`.
- Поле `Trusted Chain​` - порой, центр сертификации (CA), помимо самого сертификата может предоставить вам целый набор файлов. Они называется Trusted Chain, то есть цепочки доверия. Последовательно откройте каждый из файлов и скопируйте их содержимое в это поле.

По окончанию настроек нажмите `​Generate Certificate`​. По окончанию настроек вы сможете увидеть ваш сертификат в общем списке. В процессе эксплуатации он доступен для редактирования:

![asterisk_43](img/asterisk_43.png)

### Бесплатный сертификат Let’s Encrypt

Интерфейс FreePBX имеет встроенную возможность настройки бесплатного SSL сертификата с помощью сертификационного центра `Let’s Encrypt`. Чтобы воспользоваться бесплатным сертификатом, у вашего сервера должно быть настроено доменное имя, и его оно должно резолвиться по его IP-адресу.

Помимо этого, следующие хосты должны быть добавлены в разрешенные в настройках фаервола:

1. outbound1.letsencrypt.org
2. outbound2.letsencrypt.org
3. mirror1.freepbx.org
4. mirror2.freepbx.org

## Лучшие практики по защите SSH подключения

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

### Конфигурационные файлы

- `/etc/ssh/sshd_config​` - файл конфигурации сервера OpenSSH;
- `/etc/ssh/ssh_config​` - файл конфигурации клиентской части OpenSSH;
- `~/.ssh/` ​- директория, в которой хранятся пользовательские SSH настройки;
- `~/.ssh/authorized_keys` или `~/.ssh/authorized_keys​` - список ключей (RSA или DSA), которые используются для подключения к пользовательским аккаунтам;
- `/etc/nologin​` - если данный файл существует в системе, то `sshd` запретит подключаться всем пользователям кроме root в систему;
- `/etc/hosts.allow` и `/etc/hosts.deny​` - система запрета (часть безопасности). Работает по аналогии с `ACL`;
- `SSH порт по умолчанию​` - 22

![asterisk_44](img/asterisk_44.png)

### Не нужен - выключай

Если вашему серверу не требуется удаленное подключение по SSH, то обязательно отключите его. В таких системах как ​CentOS/RHEL ​делается это так:

```sh
chkconfig​ sshd ​off
yum erase openssh-server
```

### Используйте SSH второй версии

Протокол SSH первой версии имеет проблемы с безопасностью, которые закрыты во второй версии. Поэтому, используйте вторую версию. Убедитесь, что в файле `/etc/ssh/sshd_config​` указана опция ​`Protocol 2​`.

### Ограничивайте SSH доступ

По умолчанию, все системные пользователи имеют возможность подключаться к системе по SSH. Рекомендуем ограничить SSH доступ в целях безопасности. Например, разрешить SSH для пользователей `root`, `merion` и `networks`:

```sh
AllowUsers root merion networks
```

С другой стороны, вы можете разрешить доступ всем пользователям, кроме указанных:

```sh
DenyUsers root merion networks
```

### Время неактивности

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

```sh
ClientAliveInterval ​300
ClientAliveCountMax ​0
```

В данной настройке мы указали время бездействия равным 300 секунд (5 минут).

### Про файлы `.rhosts`

Дело в том, что данный файл содержит список хостов и пользователей. Если в данном файле содержится комбинация хоста и юзера, то данный пользователь сможет подключиться к системе по SSH без запроса пароля. Рекомендуем отключить эту «замечательную» фичу:

```sh
IgnoreRhosts​ ​yes
```

### Никакой аутентификации на базе хоста!

Так называемая `​Host-Based Authentication` позволяет пользователю с определенного хоста подключаться к серверу. Отключаем:

```sh
HostbasedAuthentication​ ​no
```

### Прямое подключение через root

Не нужно открывать `root`. Максимум, советуем использовать прямое `root` подключение на время проведения работ. Затем отключать. Лучше давать `su` (`sudo`) доступ для некоторых категория пользователей. Закрыть можно вот так:

```sh
PermitRootLogin​ ​no
```

### Сделайте баннер

Для каждого подключающегося [​сделайте](https://wiki.merionet.ru/servernye-resheniya/8/nastrojka-ssh-i-motd-bannera-v-centos/) баннер​, в котором можно угрожать злоумышленникам, которые пытаются совершить несанкционированный доступ. За настройку баннера отвечает параметр Banner.

### `22` порт только изнутри!

Сделайте доступ к `22` порту системы только через цепочку фаервол правил. Лучше всего, оставить доступ только изнутри `LAN`. Например, в `Iptables` можно дать доступ для `192.168.11.0/24`:

```sh
-A RH-Firewall​-1​-INPUT -s ​192.168.11.0​/​24​ -m ​state​ --​state​ NEW -p tcp --dport ​22​ -j ACCEPT
```

### Где слушать

По умолчанию SSH слушает подключения на всех доступных интерфейсах. Мы рекомендуем сменить порт по умолчанию и указать IP-адрес, на котором необходимо ожидать подключения. Например, мы укажем порт `962` и IP-адрес `192.168.11.24`:

```sh
Port ​962
ListenAddress ​192.168.11.24
```

### Запретить пустые пароли

Бывают пользователи без паролей. Их доступ к SSH так же необходимо запретить с помощью опции:

```sh
Port​ ​962
PermitEmptyPasswords ​no
```

### Анализируйте логи

Установите логирование событий в режим `​INFO` ​или `​DEBUG` ​- это позволит иметь расширенный контроль над системой:

```sh
LogLevel​ ​INFO
```

## Генератор устойчивых паролей

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

![asterisk_45](img/asterisk_45.png)

Генератор доступен по [ссылке​](https://wiki.merionet.ru/onlajn-generator-ustojchivyx-parolej/). Добавьте его в закладки браузера - при генерации паролей для транков, внутренних номеров, SSH/FTP/WEB или иного доступа, воспользуйтесь им.
