Перенос проекта с общего хостинга на выделенный/виртуальный сервер дает массу новых возможностей, однако предъявляет повышенные требования к квалификации администратора. Одним из основных становится вопрос обеспечения безопасности сервера. И если проблемами физической безопасности оборудования и крупных DoS-атак попрежнему занимается хостер, то защита на сетевом интерфейсе - всецело задача арендатора. Рассмотрим основные пути повышения безопасности сетевого интерфейса для типового проекта на Windows Server 2008 VDS/VPS.
Основные размышления
При обдумывании мер по повышению безопасности на Windows VDS/VPS необходимо учитывать два момента. Во-первых прямого физического доступа к серверу обычно нет, а есть удаленное подключение к различным сервисам и опосредованный физический доступ через админов службы технической поддержки хостера. Поэтому в процессе "закручивания гаек" безопасности надо постараться не забанить самого себя, иначе процесс восстановления котроля над сервером может затянуться. Во вторых, производительность сервера ограничена, а хорошие программные систмы безопасности обычно довольно требовательны к ресурсам. Кроме того, хорошие системы безопасности для платформы Windows зачастую стоят дополнительных денег. Таким образом, при настройке сетевой безопасности сервера необходимо преследовать следующие цели:
- минимизировать потенциальную угрозу безопасности со стороны третьих лиц, сохранив при этом удобство удаленной работы для самого себя;
- выполнить первый пункт при помощи встроенных средств Windows Server либо при помощи нетребовательных к ресурсам и приемлимых по цене аналогов.
Подавляющее большинство сетевых угроз, с которыми может столкнуться администратор Windows VDS/VPS в первое время, сводятся к одному - многочисленным попыткам получить доступ к ресурсам сервера, воспользовавшись уязвимостью. Уязвимости системы бозопасности сервера могут являться следствием неправильной настройки, нарушения парольной политики или быть "врожденными" у небезопасных сервисов и протоколов. В любом случае, злоумышленники пытаются реализовать конкретный сценарий атаки на каждый вид уязвимости, используя типовые идентификаторы. Таким образом для достижения поставленных целей повышения сетевой безопасности Windows VDS/VPS необходимо решить следующие задачи:
Безопасность RDP
Доступ по RDP для Windows систем является жизненной необходимостью - только он позволяет воспользоваться всем арсеналом инструментов операционной системы. Кроме того, RDP при желании позволяет отказаться от удаленного доступа к SQL (конфигурование через установленные на сервере SQLCMD или SMS) и FTP (для разовых переносов файлов). RDP, не смотря на мифы, позволяет получить безопасное соединение с шифрованием трафика и защитой от MITM-атак, однако по умолчанию сервер обычно настроен на режим максимальной совместимости. Настройки безопасности RDP осуществляются через оснастку Terminal Services Configuration административной консоли.

В окне RDP-Tcp Properties необходимо настроить Encryption level (уровень шифрования), выбрав один из режимов:
- Low - данные от клиента к серверу шифруются по алгоритму RC4 с максимальной длиной ключа 56 бит, данные от сервера к клиенту не шифруются, режим поддерживается большинством RDP-клиентов;
- Client Compatible - данные между сервером и клиентом шифруются по алгоритму RC4 с максимальной длиной ключа 56 или 128 бит, длина ключа определяется RDP-клиентом;
- High - данные между сервером и клиентом шифруются по алгоритму RC4 с максимальной длиной ключа 128 бит, RDP-клиенты без поддержки этого режима не могут подключиться;
- FIPS Compliant - данные между сервером и клиентом шифруются по алгоритму 3DES с максимальной длиной ключа 168 бит, RDP-клиенты без поддержки этого режима не могут подключиться.
Начиная с Windows 2003 Server SP1 и Windows XP SP3 у RDP появилась возможность защиты от MITM-атак путем аутентификации сервера. Настроить это можно через выбор Security layer (слой безопасности):
- RDP Security layer - используется только шифрование из Encryption level, никакой аутентификации;
- Negotiate - используется шифрование из Encryption level, дополнительный уровень безопасности определяется настройками клиента;
- SSL (TLS 1.0) - используется шифрование из Encryption level, и дополнительная аутентификация при помощи SSL-сертификатов.
В Windows 2008 и Windows Vista механизм аутентификации по SSL был расширен и получил название Network Level Authentication (NLA). В частности NLA позволяет проводить быструю аутентификацию до открытия RDP-сессии, решая вопрос DoS-атак для RDP. Чтобы задействовать NLA необходимо включить Allow connections only from computers running Remote Desktop with Network Level Authentication. Чтобы не утратить удаленный контроль над сервером рекомендуется сначала убедиться, что используемый RDP-клиент поддерживает все выбранные настройки.
После включения шифрования RDP необходимо также сменить типовые идентификаторы. Наиболее распространены атаки по RDP на учетную запись администратора (администратору всегда разрешен удаленный доступ, а авторизация под администратором дает полный контроль). Соответственно, необходимо переименовать учетную запись администратора.
Cуществуют и другие способы повышения безопасности RDP, среди них перенос RDP со стандартного порта TCP 3389, перенаправление RDP в безопасные туннели SSH и VPN, ограничение диапазона внешних IP-адресов для RDP, создание ограниченной учетной записи для RDP и т.д., но они не соответствуют поставленным целям.
Безопасность FTP
Протокол FTP довольно древний и небезопасный, пароли передаются по сети в незашифрованной виде, и лучше его вообще не использовать. Однако компания Microsoft продолжает поддерживать FTP во всех своих продуктах и часто это единственная возможность для синхронизации проектов. Настройки безопасности FTP осуществляются через оснастку Internet Information Services (IIS) Manager административной консоли.

FTP-сервис был полностью переписан для Windows Server 2008 и в качестве опции предлагает один из безопасных вариантов пассивного FTP - FTP over SSL (FTPS). Для его настройки необходимо указать SSL-сертификат в настройках FTP SSL Settings. В SSL Policy необходимо указать Require SSL connections для принудительного использования FTPS или Allow SSL connections для установления соединения FTP/FTPS по выбору клиента. По умолчанию поток данных шифруется с максимальной длиной ключа 40 бит, можно слегка пожертвовать ресурсами сервера и увеличить максимальной длину ключа до 128 бит, отметив Use 128-bit encryption for SSL connections.
Если FTP-сервис используется коллективно, то полезно также убедиться, что в настройках FTP User Isolation включена одна из политик изоляции. Это позволит минимизировать возможный вред от взлома одного из акаунтов. В любом случае с точки зрения безопасности лучше, если корневая папка FTP не содержит каких-либо важных данных, а является "перевалочной базой".

При выборе/создании учетных записей для FTP также рекомендуется избегать типовых идентификаторов Administrator/User/Guest.
Существуют иные методы повышения безопасности FTP, такие как использование SFTP или перенаправление FTP в другие безопасные туннели, однако они не соответствуют поставленным целям.
Безопасность MSSQL
Как уже отмечалось, удаленный доступ к MSSQL при наличии RDP не является необходимостью, тем не менее он требуется для проектов с самостоятельной клиентской частью или при установке SQL Server в минимальной конфигурации. Удаленное подключение к MSSQL по TCP/IP довольно небезопасно, методы борьбы аналогичны FTP - включаем шифрование SSL. Настройки безопасности MSSQL осуществляются через оснастку SQL Server Configuration Configuratiin Manager административной консоли.

В свойствах SQL Server Network Configuration на закладке Certificate необходимо выбрать SSL-сертификат, эта настройка включает шифрование аутентификационных данных. Чтобы включить шифрование всего трафика, необходимо на закладке Flags выставить Force Encryption в Yes.

После настройки шифрования TCP/IP необходимо также сменить типовые идентификаторы для MSSQL. Львиная доля атак по словарю на MSSQL пытается угадать пароль для логина sa. Проще всего заблокировать этот логин, выполнив в SQLCMD или из-под SMS
USE MASTER
GO
ALTER LOGIN SA DISABLE
GO
По умолчанию MSSQL-сервер слушает на порту TCP 1433, бывает полезно изменить это для внешнего IP сервера. В настройках TCP/IP-протокола SQL Server Network Configuration на закладке Protocol необходимо отключить функцию Listen All.

На закладке IP Addresses перечислены все IP-адреса, доступные MSSQL. Необходимо указать для внешнего IP-адреса сервера нестандартный (и не занятый) номер порта, для IP-адресов 127.0.0.1 и ::1 указать стандартный номер порта, а все остальные можные отключить (Enabled=No).

Существуют и другие способы повышения безопасности MSSQL, в том числе ограничение всех внешних IP-адресов на фаерволе или работа по протоколу Shared Memory, но они не соответствуют поставленным целям.
Заключение
Как видно, для повышения сетевой безопасности Windows Server 2008 широко используются SSL-сертификаты. Сертификаты могут быть выданы CA или подписаны самостоятельно, оба типа сертификатов позволяют получить криптостойкое шифрование данных. Однако, самоподписанные сертификаты не являются хорошей защитой от MITM-атак. Кроме того необходимо помнить, что SSL-сертификаты выдаются на определнный срок (обычно 1-3 года) и требуют периодического перевыпуска.