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

Из чего выбирать?

Решения для балансировки сетевой нагрузки, только на первый взгляд выглядят одинаково. На самом деле в процессе участвуют множество технологий и алгоритмов, поэтому найти два одинаковых можно даже и не пробовать. Кроме очевидного — поддержка определенных протоколов (например, только HTTP или любые), есть и множество других параметров.
Так системы балансировки нагрузки могут перенаправлять трафик клиентов на избранный сервер несколькими способами. Самые популярные: трансляция сетевых адресов (Network Address Translation) и шлюз TCP (TCP gateway). В первом случае балансировщик на лету подменяет в пакете IP адреса, чем скрывает IP сервера от клиента и наоборот. Если же IP-клиента нужно конечному приложению для статистики или любых других операций, его обычно сохраняют в HTTP заголовке X-Forwarded-for. При использовании другого протокола следует убедиться что подобная возможность реализована. В случае TCP gateway балансировщик умеет управлять трафиком на L4 (транспортом) уровне и даже на уровне приложения (L7). Для этого он устанавливает соединение и смотрит внутрь пакета. Обычно клиент и приложение обмениваются информацией через балансировщик. Но в последнее время становится все более популярной конфигурация сервера с прямым возвратом (Direct Server Return, DSR) когда ответ от сервера идет к клиенту напрямую, а не через устройство балансировки. Использование DSR уменьшает нагрузку на балансировщик, но не позволяет использовать куки, и расшифровывать SSL. Данный способ на порядок быстрее чем использование NAT балансировки и позволяет сервисам видеть реальные IP адреса клиентов.
Также в системах можно встретить разные методы балансировки. Разберемся с назначениям некоторых из них. В настройках продуктов они могут иметь отличные названия или свои особенности в реализации, но часто их суть одна.
Самый простой Round Robin DNS — это специальный DNS сервер содержащий несколько «А» записей и опционально их вес, и выдающий при запросе клиентов различные IP адреса. Минусы очевидны. Он абсолютно не владеет информацией о текущей загрузке и состоянии бэкэндов, не учитывает предыдущие подключения клиентов (немного сглаживает ситуацию DNS кэш).
Есть аналогичный по названию алгоритм но реализован средствами самого балансировщика — Round Robin. Все клиенты равномерно распределяются по бэкэндам, и обычно какие либо другие параметры не учитываются. Алгоритм распределения по весу (Round Robin Weighted) учитывает значение параметра Weight указанного для каждого сервера. Проставив больший вес для более мощного сервера мы сможем направить к нему больше клиентов. Несколько иначе работает распределение по приоритету. В этом алгоритме работает только сервер с большим приоритетом, остальные подключаются, как правило, только в случае его отказа. Этот вариант позволяет строить кластер с одним активным узлом (активный — пассивный), например когда второй сервер выполняет другую роль и только подстраховывает первый. Least Connection (Least Session) — соединение принимает сервер обслуживающий наименьшее количество соединений (сессий), но соединения могут быть разные (пользователь активен или пассивен) и соответственно давать разную нагрузку на сервер. А вот алгоритм Least Bandwidth учитывает действительную загрузку на сеть.
Hash: sticky client – клиент привязывается к одному серверу, для этого в специальную таблицу помещается хеш-строка указывающая на его IP. Возможны варианты. Клиент всегда идет к одному серверу, а в случае его выхода подключение невозможно. Или когда не отвечает «родной» он соединяется с другими системами.
Доступность бэкэндов определяется двумя: активный (keepalives, балансировщик сам опрашивает сервера) и пассивный (In-Band, контролируются текущие соединения, ответы сервиса).

BalanceNG

Проект номер один в списке — BalanceNG (inlab.de/balanceng), представляет дальнейшее развитие идей заложенных в OpenSource решении [Balance] (inlab.de/balance.html), но распространяемое уже под двойной лицензией (коммерческой и бесплатной Free Basic License). По условиям последней можно подключать один виртуальный сервер и два узла, чего с учетом возможностей достаточно чтобы без проблем справиться со средней, а иногда и большой нагрузкой. Представляет собой решение для балансировки IP нагрузки поддерживающее IPv6, предлагает несколько методов управления выбора бэкэнда (Round Robin, Random, Weighted Random, Least Session, Least Bandwidth, Hash, Agent и Randomized Agent).
В продукте использован оригинальный движок работающий на Layer 2 (Ethernet), балансировка ведется на основе IP-адреса клиента, без учета привязки к портам т. е. Это может быть любой сервис. Поддерживает DNS GSLB (Global Server Load-Balancing) и конфигурацию сервера с прямым возвратом Direct Server Return (DSR). Содержит настраиваемый агент проверки UDP, поддерживает VRRP для установки высоко доступных конфигураций на многих узлах. Встроенные механизмы позволяют произвести захват и сохранение пакетов при помощи pcap для дальнейшего исследования. Предусмотрено несколько вариантов проверки работоспособности конечных систем: агент, ping, TCP Open, скрипт и другие инструменты вроде wget.
Возможно резервирование балансировщика с репликацией NAT состояний между основным и резервным узлам, Клиент при переподключении подключается к тому же серверу. Для сохранения сессии используется IP-адрес клиента и порт назначения. Поддерживается Linux bonding. Все таблицы хранятся в ОЗУ, но требования невелики, для 4 миллионов сессий достаточно 512 Мб памяти.
Может работать в Linux (с использованием сокета API PF_PACKET) и SPARC/Intel Solaris (STREAMS/DLPI API). Для установки предлагается rpm (Red Hat RHEL6/CentOS) и deb (Debian/Ubuntu) пакеты и тарбал для остальных дистрибутивов. Также доступен готовый образ для виртуальной машины (на базе Ubuntu 8.04), что позволяет быстро развернуть нужную функциональность. Во время закачки будут показаны все пароли для входа. Агент (bngagent) поставляется с открытым исходным кодом и поддерживает Linux, Solaris, Mac OS-X, HP-UX и другие.
Какой либо интерфейс для настройки не предусмотрен, все установки производятся при помощи конфигурационного файла /etc/bng.conf. В принципе сложным его назвать нельзя, особенно учитывая что на сайте проекта доступно более десятка готовых примеров, часто нужно лишь выбрать наиболее подходящий и отредактировать под себя.

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

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

HAProxy

[HAProxy] (haproxy.1wt.eu) балансировщик нагрузки и прокси-сервер уровня приложений Layer7 для TCP и HTTP. Собственно проект начинался, как очень простой HTTP-прокси Webroute, но постепенно оброс новыми возможностями. Особенностью HAProxy является использование для регулирования соединений cookie и контента, для встраивает cookie и проверяет содержимое пакета при подключении. Анализ пакетов на Layer7 позволяет фильтровать несанкционированный трафик и протоколы. Проверяя HTTP запрос при помощи регулярных выражений можно задать любые правила для выбора сервера, например реализуя ACL и геолокацию. В случае необходимости обработки IP клиента на конечном сервер можем сохранить его в “X-Forwarded-for”. Движок стабилен, безопасен оптимизирован, в результате HAProxy способен одновременно обрабатывать большое количество подключений (20 000 в сек и более).
Обработкой всех подключений занимается один процесс, за счет оптимизации и планировщика обеспечивающий большое количество одновременных соединений на очень высоких скоростях. Такие системы не очень хорошо масштабируются на многопроцессорных системах, но не болеют блокировками и ограничениями памяти. Но здесь мы не увидим продвинутых функций вроде поддержки SSL и Keep-Alive, по утверждению разработчиков они усложняют и «утяжеляют» процесс. Отказоустойчивость HAProxy сервера обеспечивается через использование демона keepalived проверяющего его работоспособность, синхронизация с резервным сервером (протокол VRRP) обеспечивает дублирование.
Обеспечивается логирование соединений и предоставление разнообразных отчетов (статистика выводится на отдельном порту). Ориентирован в первую очередь для веб-сайтов, но используется и в других сценариях, например в качестве балансировщика для multi-master серверов MySQL.

Статистика HAProxy

Статистика HAProxy

Поддерживается фильтрация пользователей и подключение к тому же серверу (для RDP и HTTP), аутентификация HTTP.
HAProxy в качестве балансировшика используется в нескольких компаниях из списка Fortune 500: Amazon RDS, Github, Stackoverflow, Serverfault, Twitter…
Возможности расширяются при помощи аддонов, их полный список есть на сайте. Все настройки производятся при помощи конфигурационного файла (на сайте есть примеры). Кроме того известны два интерфейса сторонних разработчиков: коммерческий веб [Snapt](snapt.net) и свободный [HATop] (feurix.org/projects/hatop).
Работает на нескольких архитектурах x86, x86_64, Alpha, SPARC, MIPS, PARISC. Официально поддерживает Linux 2.6.32+ (рекомендуется для максимальной производительности) и 2.4, Solaris 8-10, FreeBSD, OpenBSD. Установка и настройка тривиальны, хотя пакеты в репозиториях не присутствует. Проект предлагает исходный код под лицензией GPL v2 и готовые бинарники под Linux/x86 Glibc 2.2 и Solaris8/Sparc.

Веб-интерфейс Snapt для настройки HAProxy

Веб-интерфейс Snapt для настройки HAProxy

Pound — прокси и балансировка HTTP и HTTPS

Первоначальная цель проекта [Pound] (apsis.ch/pound) являлось распределение нагрузки между несколькими серверами Zope, в итоге получился узконаправленный инструмент, представляющий собой обратный прокси и балансировщик нагрузки для HTTP и HTTPS.
Балансировка производится по состоянию сессии и другим параметрам (URL, аутентификации, cookies, HTTP headers). Полная поддержка WebDAV. В отличие от HAProxy обрабатывает SSL. Разработан в IT компании, занимающейся безопасностью, что также сказалось на возможностях продукта. Особенностью является наличие базовых функций Web Application Firewall, Pound умеет контролировать корректность заголовков HTTP и HTTPS, отбрасывая неправильные. По умолчанию пропускаются все запросы, но можно создать шаблоны URL, и тип запросов (стандартные, расширенные, RPC и WebDAV) которые будут проверяться на соответствие. По результатам выбирается конечный сервер или соединение блокируется. Дизайн изначально предусматривает минимальное вмешательство в трафик (например встраивание cookie), но может прописывать “X-Forwarded-for” для передачи на бэкенд сервера IP адрес пользователя.
Поддерживает IPv6, может перебрасывать IPv6 клиентов к серверам IPv4. Информация о сеансе сохраняется и клиент в последующем подключается к своему серверу.
Из специфики — возможна не только отправка соединения к бэкенду, но и редирект на другой URL.
Pound не требует много ресурсов, примечательно что кроме считывания SSL сертификатов демон не обращается к харду. Может быть запущен в chroot и использовать setuid/setgid. Каких-либо встроенных механизмов отказоустойчивости нет. Проверка работоспособности бэкендов производится всегда по HTTP.
На процессоре уровня Pentium D позволяет достичь примерно 600-800 HTTP и 200-300 HTTPS соединений в секунду. Поэтому конек Pound небольшие проекты с упором на доступность, безопасность и больший контроль над трафиком. Для большей нагрузки сами разработчики Pound рекомендуют воспользоваться другими решениями.
Установка и настройка не представляют больших сложностей, хотя и производятся при помощи конфигурационных файлов (документация очень подробная). Официально был протестирован на Linux, Solaris и OpenBSD. Проект предлагает только исходные тексты, в репозитариях SuSE, Debian и Ubuntu, можно найти готовые пакеты, кроме этого на сайте есть ссылки для RedHat и готового дистрибутива собранного на базе FreeBSD.

В конфигурационном файле Pound разобраться легко

В конфигурационном файле Pound разобраться легко

Crossroads

Crossroads или [XR](crossroads.e-tunity.com) обеспечивает балансировку нагрузки к любым TCP сервисам, поэтому подходит не только для HTTP(S), но и для SMTP, SSH, баз данных и других. В обычном варианте он просто гарантирует подключение к бэкенду, не вникая во внутренности, обеспечивая в этом режиме максимальную производительность. Один сервер может обслуживать несколько сайтов с разными бэкэндами и протоколами. Но есть специальный режим “HTTP mode” при котором обрабатываются и при необходимости меняются заголовки сеанса. Это обеспечивает возможность перенаправления пользователя на тот же сервер (session stickiness) и сохранение IP клиента в X-Forwarded-For. Сам по себе “HTTP mode” и особенно модификация пакета влияет на производительность (потери до 30%).
По умолчанию клиент перенаправляется на сервер принимающий меньше подключений, но при необходимости алгоритм легко изменить на Round-Robin, Least-Connections и First-Available или определяться внешней программой или скриптом. Клиентов можно закреплять за определенным сервером (Hash sticky client), жестко или с возможностью подключения к другому серверу если «свой» не отвечает. При возобновлении работы бэкэнда, он автоматически включается в работу. Возможно управление доступом к Crossroads на основе IP адреса (“allow” и “deny”).
В версии 2.х все подключения обслуживает один процесс работающий в пространстве пользователя, это положительно сказалось на скорости работы и на управлении. Может работать как stand-alone демон или запускаться через inetd. Удобно, что все настройки и команды можно отдавать на лету (при помощи утилиты xr), изменение параметров не требует перезапуска Crossroads. Например, настроим балансировку для двух веб-сайтов и серверов MySQL.

	# /usr/sbin/xr --verbose -S --server http:0:80 --host-match www.host1.com --backend 192.168.1.10:80 --backend 192.168.1.20:80 \ --host-match www.host2.com --backend 192.168.2.10:80 --backend 192.168.2.20:80 2>&1 >> /var/log/xr.log
	# /usr/sbin/xr --verbose --server tcp:0:3306 --backend 192.168.1.1:3306 --backend 192.168.1.2:3306 2>&1 >> /var/log/xr.log &

Статистика выводится при помощи веб-интерфейса, порт которого задается вместе с ключом -W (—web-interface). Также с его помощью можно изменить три параметра: максимальное количество соединений для Crossroads и бэкэндов, вес бэкэндов.
Для удобства все их записывают в отдельный файл который и указывают при загрузке или используют специальный конфигурационный файл в формате xml (/etc/xrctl.xml, в поставке несколько готовых примеров).
Может быть запущен на любой POSIX системе — Linux, Mac OS X, Solaris. Проект предлагает исходные текст (сборка проблем не вызывает), готовые пакеты доступны в репозитариях основных дистрибутивов.

В поставке Crossroads несколько готовых конфигурационных файлов

В поставке Crossroads несколько готовых конфигурационных файлов

ZEN Load balancer

Решение несколько отличающееся от остальных участников обзора. Разработчики справедливо решили, что под балансировку выделяется отдельный сервер, а поэтому лучше сразу предоставить готовый дистрибутив, чтобы упростить развертывание, повысить производительность и безопасность. Основой [ZEN Load balancer] (zenloadbalancer.org) является оптимизированная и урезанная версия Debian 6. Поддерживается балансировка на Layer 4 для протоколов TCP, UDP и на Layer 7 для HTTP/HTTPS. Специальный режим L4xNAT позволяет настроить балансировку на транспортном уровне без учета номеров портов (фактически без привязки к сервису), в этом случае ZEN просто пропускает через себя весь трафик, распределяя его по серверам. Если у Zen и фишка — режим DATALINK. В этом случае Zen выступает в качестве шлюза по умолчанию обеспечивая равномерную нагрузку на канал и резервирование при подключении к нескольким провайдерам (балансировка на Layer 3).
Реализовано несколько алгоритмов выбора бэкэнда Round Robin, по весу (Weight), по приоритету (Priority) или подключение к определенному серверу (Hash sticky client). Возможен возврат пользователя в открытую сессию, он определяется несколькими способами (по IP-адресу, сookie, запрашиваемому URL, по заголовку HTTP). Предусмотрено сохранение IP в X-Forwarded-For.
Технология FarmGuardian позволяет определять доступность сервисов при помощи специального скрипта, и распределять по ним подключения. Zen может выполнять роль SSL-прокси, шифруя поток к клиенту, на участке Zen — бэкэнд данные идут в открытом виде. Поддерживается VLAN.
Из других особенностей можно назвать простую систему резервирования и восстановления конфигурации, работа нескольких балансировщиков в кластере, система мониторинга и вывода различной статистики в том числе и в виде наглядных графиков.
И главное все настройки производятся при помощи веб-интерфейса (по умолчанию на HTTPS/444, логин/пароль — admin/admin). Предлагается две версии. Бесплатная только в x86 варианте и без технической поддержки. Ее возможностей вполне хватает для большинства сетей среднего размера. Платная версия предоставляется уже в x64 сборке. Развернуть готовую систему очень просто, на сайте доступна вся необходимая информация по настройкам (на английском).

Все настройки ZEN Load balancer производятся через веб-интерфейс

Все настройки ZEN Load balancer производятся через веб-интерфейс

Облачные сервисы для балансировки нагрузки

С ростом популярности облачных сервисов, все больше систем размещаются на внешних площадках образуя гибридные облака. Большинство разработчиков предлагает ко всему прочему и возможность балансировки нагрузки, это очень удобно так как не требует от клиента установки дополнительного оборудования и готово к применению почти сразу. Хотя возможностей по управлению такой способ дает как правило меньше. Все основные игроки уже предложили свои решения. Например, [Amazon Route 53] (aws.amazon.com/route53/) являющийся частью Amazon Web Services и предоставляющий балансировку при помощи Round Robin DNS. Стоимость услуги небольшая и составляет 1$ в месяц, плюс 0.50$ за первый миллион запросов и 0.25$ за каждый следующий. Предусмотрен удобный API для редактирования, добавления и удаления записей.
Также нужная функциональность доступна в специализированных облачных продуктах — WAF или решениях для защиты от DDOS. Например, сервис [Akamai Global Traffic Management] (akamai.com/html/solutions/gtm.html).

Заключение

Выбирать есть из чего. Каждый продукт имеет свои сильные и слабые стороны, зная которые легко определиться который из них подходит для определенной ситуации. Так HAProxy подкупает производительностью, BalanceNG возможностью, простой в настройках Pound обеспечивает разборку HTTP, а Crossroads гибкостью. Если все же нужен веб-интерфейс то альтернативы ZEN Load balancer нет, ну если только не хочется платить за Snapt для HAProxy.

Вышел майский номер № 5 (150) журнала Системный Администратор за 2015 год.
cover05(150)

В номере:

  • OpenStack Keystone. Знакомство с сервисом идентификации
    Продолжаем знакомство с OpenStack [1]. Теперь приступим к практическому общению с сервисами облачной операционной системы. Почти для всех служб OpenStack требуется работающий сервис Keystone. С него и начнем.
  • Инструменты управления множеством контейнеров Docker
    Docker предоставляет удобные средства для манипуляции виртуальными окружениями, но, когда счет контейнеров идет на тысячи, этих средств, к сожалению, может оказаться недостаточно.
  • Уборка файлового мусора
    Поиск решения проблемы захламления файлового сервера с примером сценария VBScript для очистки хранилища от устаревших файлов.
  • На пути к новым технологиям: миграция с Windows Server 2003
    В момент выхода новой операционной системы у пользователей появляется интерес к ее новым возможностям и технологиям.
  • Проектирование отказоустойчивых систем. Часть 2. Этапы проектирования
    Продолжаем рассказ о нюансах, встречающихся на этапе проектирования [1]. В этой части затронем вопросы аудита, составления техзадания и проекта.
  • Средства безопасности в облачных офисах
    Облачные офисные пакеты получают все большее распространение. Каким функционалом по обеспечению информационной безопасности они обладают?
  • Демон BSD на острове пингвинов: перестроение огненных стен
    Преобразование набора правил ipfw из брандмауэра FreeBSD в набор правил iptables брандмауэра Linux – дело весьма непростое, практически не автоматизируемое и даже вручную скрывающее немало сюрпризов.
  • Active Directory и безопасность. Часть 8. Защита станций привилегированных пользователей
    Безопасность службы каталога Active Directory требует решения целого комплекса задач. Обеспечение безопасности рабочих станций привилегированных пользователей является одной из них.
  • Как унифицированные коммуникации могут повысить эффективность вашего бизнеса
    Унифицированные коммуникации играют важную роль в росте производительности через повышение мобильности, обеспечение взаимодействия и экономию времени сотрудников. С помощью таких функций, как статус присутствия, программные телефоны и видеоконференции, сотрудники могут более продуктивно использовать свое время, а также взаимодействовать с коллегами и заказчиками.
  • Делаем Call-центр на 1С
    В статье рассматриваются возможности и проблемы интеграции решений на платформе 1С с АТС Asterisk.
  • Эффективность индексов. Опыт использования индексов в Oracle
    Статья основана на практике разработки, сопровождения и использования в запросах эффективных индексов.
  • «1С:Предприятие» вместе с «1С-Битрикс». Часть 7. Оптимизация скорости работы
    Давайте узнаем, почему обмен с сайтом может «тормозить», и как с этим бороться.
  • Антон Русаков: «Мой выбор был связан с конъюнктурой рынка – что рынок хотел, то я ему и давал»
    На вопросы «Системного администратора» отвечает Senior Software Engineer в Badoo Антон Русаков.
  • Rack – основа веб-фреймворков в Ruby
    Библиотека Rack – простой объектный интерфейс для написания веб-приложений.
  • Валерий Лунин: «Нашим выпускникам доступно многое»
    В гостях у «Системного администратора» Валерий Лунин, директор Института автоматики и вычислительной техники Национального исследовательского университета «МЭИ», и Андрей Кондрат, помощник проректора по учебной работе.
  • Вакансия: программист под ОС Linux
    Операционная система Linux становится все популярнее среди компаний, которые занимаются разработкой ПО в России. Но вот подготовка таких специалистов для рынка информационных технологий пока оставляет желать лучшего. Чтобы выяснить, какие знания и навыки программистов под ОС Linux востребованы, мы обратились к представителям компаний.
  • Реализация решения головоломки судоку: подход на основе полного перебора
    Головоломки и игры – логические задачи – удобны для обучения нахождению связей и структур, используемых при таких построениях. В статье приводятся анализ, алгоритм и итоговые программы для решения головоломки судоку.
  • Многообразие решений задачи построения ряда Фибоначчи на примере особенностей PHP 5.6
    В статье приводится разбор одной из популярных задач на собеседованиях. Тот самый случай, когда рекурсия оказывается худшим вариантом. Даются примеры решения задачи разными способами, с использованием генераторов и ООП-подхода.
  • Хиты от Hitachi
    У большинства потребителей на всех континентах имя-бренд Hitachi ассоциируется прежде всего с бытовой электроникой. На самом деле японский, а фактически давно уже транснациональный многопрофильный гигант чем только не занимается!
  • Гадкий утенок на Рождество
    Очередной экспонат нашего виртуального музея ИТ и компьютерных технологий на первый взгляд напоминает неряшливый эскиз будущего шедевра скульптора-авангардиста. Какое-то странное стилизованное «сердечко» из непонятного материала (оргстекла?) с металлическим цилиндриком размером чуть больше 10 миллиметров и торчащими во все стороны закрученными проволочными «усиками»… На самом деле перед нами – первый в истории полупроводниковый усилитель, или транзистор. Открывший новую страницу уже компьютерной истории. С этого неэстетичного кристалла германия с торчащими проводами началась Великая кремниевая революция, главным результатом которой стали знакомые сегодня каждому персональные компьютеры.

samag_cover4(149)

В номере:

  • За пределами nss_ldap, или Еще о методах авторизации
    О методах авторизации в Active Directory, которые возможны без использования nss_ldap и при этом нисколько не теряют его функциональности, а, наоборот, более безопасны, потому как могут и не требовать задания пароля открытым текстом.
  • Управление Windows Defender с помощью PowerShell
    Начиная с Windows 8 продукт Windows Defender (Защитник Windows) получил функционал Microsoft Security Essentials и из простейшего сканера шпионских программ теперь стал полнофункциональным антивирусным решением, способным обнаруживать широкий спектр потенциально вредоносного ПО.
  • Проектирование отказоустойчивых систем Часть 1. Термины и определения
    Статья посвящена терминологии построения отказоустойчивых ИТ-систем. Помимо описания самих терминов, рассказывается о принципах создания надежной инфраструктуры.
  • Облачная операционная система OpenStack. Часть 1. Введение
    Статья открывает цикл, в котором автор планирует рассказать о проекте по созданию платформы облачных вычислений «инфраструктура как сервис» OpenStack. Сейчас рассмотрим, что такое OpenStack, его историю иосновные компоненты.
  • Обзор сборок QEMU для Windows
    Эмулятор QEMU является популярным средством виртуализации в мире Linux. В статье сравниваются различные сборки QEMU для Windows.
  • Стеганография: реализация и предотвращение
    Возможность прятать одни данные внутри других может позволить злоумышленнику незаметно похищать массу информации. Поговорим о том, как это реализуется и как с этим бороться.
  • Active Directory и безопасность. Часть 7. Виртуализация и защита контроллеров домена
    Безопасность службы каталога Active Directory требует решения многих задач [1-7]. Нетрудно заметить, что обеспечение безопасности контроллеров доменов (DC) оказывает серьезное влияние на всю систему в целом.
  • Мониторинг блокировок в Oracle. Методы предупреждения и автоматического устранения
    Многолетний опыт эксплуатации баз данных в Oracle в нашей организации показал, что среди проблем, возникающих в базах данных (БД), особое место занимают блокировки, которые могут привести к невозможности дальнейшей работы БД, в связи с чем потребуются срочные меры по их устранению.
  • Конвертация: правильная миграция данных в 1С
    Миграция данных между различными конфигурациями – задача не из тривиальных. Путей решения, как всегда, несколько, но не все они оптимальны. Попробуем разобраться в нюансах переноса данных и выбрать универсальную стратегию решения подобных вопросов.
  • Все, что вы хотели знать об итогах в 1С
    В статье речь пойдет о механизме итогов, существующем в платформе «1С:Предприятие» для ускорения чтения данных.
  • «1С:Предприятие» вместе с «1С-Битрикс». Часть 6. Пример настройки интеграции в картинках
    На основе информации, представленной в предыдущих статьях цикла, будет пошагово разобран пример настройки интеграции. Не обойдется, как обычно, и без подводных камней.
  • Практика использования WebKit
    WebKit – разработанная компанией Apple библиотека, на базе которой строятся браузеры. В статье будут рассмотрены варианты ее использования.
  • Язык программирования Go. Подготовка среды для разработки под Windows
    В статье рассматриваются особенности языка программирования Go и описывается способ подготовки среды для разработки программ на этом языке под операционной системой Windows.
  • Создание контейнера IoC под себя
    С темой IoC-контейнеров связано достаточно много «черной магии». На самом деле все очень просто; мы покажем это на примере создания своего IoC-контейнера.
  • Андрей Крюковский: «Фирменный стиль нашего факультета – участие студентов в серьезной научно-исследовательской работе»
    Российский новый университет (РосНОУ) – один из признанных флагманов системы негосударственного высшего образования России. В гостях у «Системного администратора» – Андрей Крюковский, декан и научный руководитель факультета информационных систем и компьютерных технологий РосНОУ, а также член редакционной коллегии нашего журнала.
  • Вакансия: программист PHP
    Веб-разработчики пользуются на рынке труда большим спросом, даже в кризис. Среди языков программирования одним из неизменных лидеров является PHP, который согласно рейтингу TIOBE за март 2015 года продемонстрировал рост популярности. Мы решили выяснить у представителей компаний, какие они предъявляют требования к потенциальным сотрудникам.
  • Секреты механизмов подпрограмм
    В статье мы обсудим основные механизмы функционирования подпрограмм: вызовы и особенно способы их завершения. Для этого мы заглянем вглубь – туда, куда обычно программисты не смотрят (а многие, увы, даже иглубин не знают). Придется немножко повозиться с адресами памяти и переходами, но это необходимо.
  • Шведское телефонное право
    Компания Еricsson в следующем году торжественно отпразднует свое 140-летие. За без малого полтора века скромная шведская фирма по ремонту импортных телефонов выросла в транснациональный гигант на рынке коммуникаций.
  • Применение Scilab для расчета параметров макромоделей операционного усилителя
    В настоящей работе представлены результаты разработки программ расчета параметров макромоделей операционного усилителя первого и второго уровней с применением математического пакета Scilab. Проведена верификация рассчитанных параметров макромоделей на наборе тестовых схем включения ОУ с применением подсистемы схемотехнического моделирования LTSpice.
  • Компьютерное моделирование радиационного заряжения слабопроводящих диэлектриков
    Проведено компьютерное моделирование радиационного заряжения диэлектриков с удельной объемной проводимостью 10-9–10-14 Ом-1∙м-1. Показано, что чем выше проводимость, тем лучше обеспечивается сток заряда, вносимого в диэлектрик при электронном облучении, и уменьшается вероятность возникновения электростатических разрядов. Результаты моделирования находятся в хорошем согласии с экспериментальными данными, полученными для ряда специально изготовленных образцов композитного модельного диэлектрика с задаваемыми значениями удельной объемной проводимости.
  • Первый звонок
    Впервые он, как известно, прозвучал по телефону – прототипу современного телефона – вечером 10 марта 1876 года в Бостоне. Первые в истории слова «в трубку» произнес изобретатель телефона американец шотландского происхождения Александр Грэм Белл, а услышал их его помощник Томас Уотсон. Первый запатентованный телефонный аппарат – сегодняшний экспонат нашего виртуального музея компьютерной и коммуникационной техники.

Анонсирован мартовский номер № 3 (148) журнала Системный Администратор за 2015 год.

cover03(148)

В номере:

  • Проект Ansible. «Дирижируем» ИТ-инфраструктурой
    Знакомим читателей с системой удаленного управления конфигурацией Ansible и ее дополнением Ansible Tower. В статье раскрываются возможности и освещаются вопросы установки, настройки, использования Ansible для управления удаленными ПК на базе ОС Linux и Windows.
  • Проект Docker. Управляем виртуальными окружениями
    В Linux все большую популярность приобретает виртуализация с использованием контейнеров, основанная на механизмах, встроенных в ядро ОС. А на роль высокоуровневого средства управления такими контейнерами не без оснований претендует Docker.
  • Простой менеджмент конфигураций сетевого оборудования
    С ростом количества рабочих мест увеличивается и численность сетевых устройств, соответственно возникает необходимость в менеджменте конфигураций маршрутизаторов, коммутаторов и прочего оборудования подобного класса.
  • Архивариус SCDPM 2012 R2. Часть 2. Защита данных сервера, баз данных, виртуальных машин
    В статье описываются принципы и понятия, возможности и процессы по резервному копированию и восстановлению сервера с нуля, баз данных MS SQL Server, виртуальных машин в среде Hyper-V.
  • Диски против лент. Выбор средств резервного копирования
    Рассмотрим достоинства и недостатки различных инструментов резервного копирования, познакомимся с эффективными технологиями сохранения данных.
  • Управление Google Chrome в корпоративной среде
    Сегодня многие компании переходят на альтернативные Internet Explorer браузеры, одним из основных при этом является Google Chrome.
  • Приключения демона BSD на острове пингвинов
    Необыкновенные и удивительные приключения демона BSD на острове пингвинов, написанные им самим. Или о всем том необычном, странном, непривычном и удивительном, с чем придется столкнуться, если вдруг возникнет необходимость после длительной работы с FreeBSD перейти на использование Linux.
  • Евгений Питолин: «91% компаний малого и среднего бизнеса существенно недооценивают современные киберугрозы»
    На вопросы «СА» отвечает Евгений Питолин, руководитель отдела по развитию СМБ‑сегмента «Лаборатории Касперского».
  • Устройства Arduino для ИТ и ИБ
    С помощью недорогих макетных плат семейства Arduino можно самому разработать множество устройств. В этой статье речь пойдет о наиболее интересных решениях.
  • Защита SSH от перебора пароля
    Стоит «засветиться» сервису в общедоступной сети, как он сразу становится объектом для атаки. Одна из проблем – попытка получения доступа посредством перебора паролей. И SSH не исключение.
  • Детект уязвимости CVE-2014-8609. Sine ira et studio
    В предыдущей статье мы рассмотрели уязвимость CVE-2014-8609 (напомним, что для большинства устройств закрывающее ее обновление недоступно), которая позволяет полностью удалить все данные с устройства, а также создавать фейковые СМС.
  • Сергей Грушко: «Внедрение IP-телефонии на базе Asterisk – это полноценная бизнес-ниша»
    Asterisk – свободное решение компьютерной телефонии. Приложение работает на операционных системах Linux, FreeBSD, OpenBSD и Solaris и др. Asterisk дает уникальный телефонный функционал для своих пользователей. Не использовать его преимущества в бизнесе – значит, давать конкурентам возможность опередить себя, считает Сергей Грушко.
  • Топ-10 преимуществ системы 3CX Phone System
    Почему вашей следующей телефонной системой должна быть программная АТС от компании 3CX.
  • PGCONF.RUSSIA 2015
    В феврале в Москве, в бизнес-центре Digital October, прошла конференция PGCONF.RUSSIA 2015 для пользователей и разработчиков свободно распространяемой объектно-реляционной системы управления базами данных PostgreSQL.
  • Олег Бартунов: «Нам нужны люди, которые хотят делать карьеру в Open Source!»
    О том, как ему удается вести множество проектов, что ждет Postgres-сообщество в ближайшем будущем, зачем он ходит в горы, и еще о многом другом Олег Бартунов рассказал нашему журналу.
  • WMS на 1С: миф или реальность?
    Обладает ли платформа 1С возможностями, которые подходят под специфичные требования, предъявляемые к WMS-системам относительно традиционных учетных систем?
  • «1С:Предприятие» вместе с «1С-Битрикс». Часть 5. Тонкости настройки интеграции
    Изучаем особенности интеграции «1С:Предприятия» и «1С-Битрикс». Знакомимся с гибкой системой настроек, позволяющей делать интересные вещи.
  • Handler Socket в кластере
    Информация о MySQL-плагине Handler Socket, разработанном японцем Akira Higuchi в 2010 году, не является новинкой. Однако на практике при работе с большим потоком данных выявляется много разных интересных нюансов.
  • Внедряем «Луну»
    Ищете возможность реализовать конфигурацию, с помощью которой можно сформулировать сложную логику работы приложения, критичного к производительности? Перед тем, как создавать свою систему конфигурирования, давайте сначала посмотрим на Lua.
  • Артем Воронов: «Магистратура Физтеха – большой карьерный шанс для выпускников региональных вузов»
    Московский физико-технический институт в 2016 году будет отмечать двойной юбилей: 70 лет с момента основания физико-технического факультета МГУ и 65 лет со дня основания собственно МФТИ. Институт давно и прочно занимает ведущие позиции в подготовке научных и управленческих кадров для высокотехнологичного сектора. В гостях у «Системного администратора» – Артем Воронов, проректор по учебной работе и довузовской подготовке МФТИ
  • Вакансия: бэкенд-веб-разработчик
    Одна из востребованных специальностей в области веб-разработки – это создание бэкенда, то есть серверной части веб-приложения. Для успешного трудоустройства профессионалов необходим определенный багаж знаний и умений. Представители компаний рассказывают, каких специалистов они хотели бы видеть в своей команде.
  • Братская помощь дому и офису
    На перефразированный вопрос из культового фильма: «В чем сила, Brother?» – ведущая японская корпорация могла бы ответить своим нынешним рекламным слоганом: в том, что за век с небольшим всегда оставалась «на вашей стороне» (At Your Side). На «вашей» – в смысле на стороне клиента.
  • Процедурно-генерируемые логотипы в дизайне интерфейсов: технологии создания, возможности и ограничения использования
    Компьютерные интерфейсы – одни из самых динамично развивающихся компонентов виртуальной среды. В своем развитии они прошли несколько последовательных этапов, и сегодня мы вступаем в новую эру самонастраивающихся интерфейсов. Процедурная генерация становится ведущей технологией проектирования контента сайтов и их визуального наполнения. В статье на конкретных примерах рассмотрены преимущества и недостатки использования данной технологии и методов визуализации динамически создаваемых логотипов, описаны основные приемы, с помощью которых можно создать генеративный логотип и сохранить его узнаваемость
  • Семнадцать знаков, которые изменили мир
    Именно 17, если точно посчитать буквы, цифры и знаки препинания (в данном случае – дефисы и точки) в странной фразе, напоминающей сокращенный адрес. Или какое-то зашифрованное послание. А на самом деле обозначающей дату и место рождения замечательного изобретения, без которого и ныне, почти 80 лет спустя, человечество – как без рук..

Уже более 14 лет сетевые соединения Linux защищает iptables, это очень мощный инструмент в руках опытного пользователя. Но по мере развития функциональности появлялись и проблемы, а поэтому пришла идея его полностью заменить. Разработка нового решения длилась почти 6 лет и результатом стал пакетный фильтр nftables.

Чем не устраивает iptables?

Проект netfilter/iptables был основан в 1998, его автором является Расти Расселл (Rusty Russell), занимавшейся до этого разработкой предшественника ipchains. Годом позже образовалась команда Netfilter Core Team, которая и координирует все что связанно с фильтром пакетом в Linux. В марте 2000 г. код был включен в ядро Linux 2.3, и с версии ядра 2.4 используется по умолчанию. iptables сохранил основную идею заложенную еще в ipfwadm — список правил, состоящих из критериев и действия, которое выполняется если пакет соответствует критериям.

До появления iptables, для обеспечения возможностей межсетевого экрана в Linux использовались проекты ipchains в Linux 2.2 и ipfwadm в Linux 2.0 (основанный на ipfw из BSD).

Но netfilter позволял подключать дополнительные модули, ранее архитектура ядра такой возможности не предоставляла. Это дало возможность очень просто развивать подсистему фильтрации, и со временем появилось большое количество новых функций и модулей. Полноценная поддержка IPv6 появилась только в 2011 году, что правда потребовало редизайна netfilter. В результате модуль NAT разделили на два независимых компонента, один из которых включает в себя ядро подсистемы NAT, а второй реализует поддержку протокола третьего уровня. Модули кроме фильтрации обеспечивают классификацию трафика (вплоть до 7 уровня OSI), балансировку нагрузки, манипуляцию с пакетами, маршрутизацию и т.п.

iptables содержит большое количество модулей

Но постепенно накапливались проблемы на функциональном уровне и в дизайне. Код ядра дублировался, становится все сложнее его поддерживать и добавлять новые возможности. Обработка некоторых параметров жестко вшита в ядро, модуль не редко обслуживает только свой протокол. Например, за извлечение номера порта UDP и TCP отвечают два разных модуля. Для реализации любой функции в userspace требуется поддержка модулем ядра, это затрудняет разработку и без пересборки не редко не обойтись. Правила загружаются как один большой дамп, в случае изменения правила выгружаются, меняются и весь набор отправляется обратно. Ядро не в состоянии связать старые правила новыми. Без учета дополнительных расширений, количество опций конфигурирования в ядре давно уже перевалило за сотню.
Дополнительные расширения к iptables со своим синтаксисом создают еще большую путаницу
Еще важный мотив — необходимость сбросить текущий ABI (Application Binary Interface), представляющий собор набор соглашений между программами, библиотеками и ОС, обеспечивающих их взаимодействие на низком уровне. В iptables ABI жестко прописаны специфические для протоколов поля, поэтому расширить его сложно. Как результат приходится сразу запускать iptables, arptables и ebtables, по существу выполняющих одну работу, но каждый на своем уровне. По общим оценкам дублируется 10000 строк кода. Учитывая что все защитные механизмы и цепочки (даже пустые) грузятся изначально и активны, iptables изначально потребляет больше ресурсов, чем реально необходимо.
Администраторам управлять большим количеством правил очень тяжело, сложно сходу разобрать что делают все цепочки, правила начинают повторяться, становится их сложно обслуживать и обновлять. Чтобы настроить два разных действия (вроде MARK и ACCEPT) правила приходится дублировать. Каждое расширение имеет свой синтаксис, одни поддерживают диапазоны, отрицание, префиксы, другие нет.

В Nftables добавлен модуль совместимости с iptables

Назначение nftables

Впервые заговорили о nftables (netfilter.org/projects/nftables) в октябре 2008 года на Netfilter Workshop. Задача проекта заменить подсистемы iptables, ip6table, arptables и ebtables единственным решением. Разработкой новой подсистемы пакетной фильтрации занимается та же команда под управлением Патрика МакХарди (Patrick McHardy). Альфа была представлена уже в марте 2009 года, хотя до 2012 года проект практически спал.
Дерево патчей состояли из более 100 патчей, которые в конце октября 2013 были соединены в 17, в стандартную ветку nftables включен с релиза ядра 3.13. Хотя высокоуровневые инструменты все еще находятся в разработке, документация ориентированная на пользователя отсутствует. Старая и новая подсистемы будут некоторое время сосуществовать рядом, так как nftables еще требует доработки и тестирования. Для обеспечения обратной совместимости предоставляется специальная прослойка, позволяющая использовать iptables/ip6tables поверх инфраструктуры Nftables.
В Nftables реализована идея схожая с BPF (Berkeley Packet Filters) правила фильтрации в пространстве пользователя компилируются в байткод, а затем через Netlink API передаются в ядро, для принятия решения по дальнейшим действиям с пакетом выполняются с использованием конечного автомата (pseudo-state machine), представляющего собой простейшую виртуальную машину выполняющую байткод.
Виртуальная машина способна манипулировать наборами данных (как правило, IP-адреса), позволяя заменить несколько операций сравнения единым набором поиска. Для принятия решений на основе этих данных могут быть использованы арифметика, битовые операторы и операторы сравнения. Возможен и обратный процесс декомпиляции объектов позволяющий воссоздать текущую конфигурацию в ядре.
Использование userspace значительно упрощает код ядра и позволяет гораздо более проще анализировать и принимать решения по отдельным протоколам. Отсутствует дублирование кода, особенности каждого протокола уже не встраиваются.
Все операции по определению условий и связанных с ними действий выполняются в пространстве пользователя, в ядре производится только базовый набор операций, таких как чтение данных из пакета, сравнение данных и т.п. Присутствует поддержка словарного маппинга и поиска по наборам правил (sets), работа которых реализована через хеши и rb-деревья. При этом элементы наборов могут быть заданы в виде диапазонов значений (можно определять подсети).
В качестве базовых блоков по-прежнему используются компоненты Netfilter, в том числе существующие хуки, система отслеживания состояния соединений, компоненты организации очередей и подсистема ведения лога. Хотя работа в userspace позволяет получать больше отчетов об ошибках.
Соответственно отличается и алгоритм работы, который сделан более универсальным, теперь разборкой пакета занимаются операторы (expression). Специальное payload expression загружает данные из пакета в один из регистров общего назначения. Базовое смещение специфичное для протокола берется из struct nft_pktinfo, модулей netfilter (IPv4, ARP и т.д.). То есть уже нельзя сказать, «сравни IP источника с IP 192.168.0.1″, теперь механизм «знает», что нужно извлечь определенную часть заголовка, помещает его в переменную и затем сравнивает с нужным адресом. При этом становится очень простой обработка пакета несколькими правилами, используя так называемый «verdict register», то есть мы можем запретить пакет, активировать счетчик, запротоколировать и т. д. Также легко пропустить ненужные операции, вроде счетчиков, если в них нет необходимости, меньше ресурсов требует поиск и сопоставление с диапазоном.
В итоге простое правило iptables в памяти занимает 112 байт, аналогичное nftables — 24 байта. Проверка пинга “-d 192.168.0.1 -p icmp –icmp-type echo-request”, 152 и 96 банта соответственно.
Улучшенный API позволяет производить инкрементные обновления правил или атомарную замену правила, гарантирующие эффективность и согласованность, без выгрузки/загрузки всего набора в пределах одной транзакции Netlink.
Для взаимодействия kernel < -> userspace nftables API использует особый компонент ядра Netlink (man netlink (7)) позволяющий через обычный сокет передавать и принимать сообщения, сформированные особым образом. При этом сам Netlink позволяет:

  • получать уведомления об изменении сетевых интерфейсов, таблиц маршрутизации и состоянии пакетного фильтра;
  • управлять параметрами сетевых интерфейсов, таблицами маршрутизации и параметрами netfilter;
  • управлять arp таблицей;
  • взаимодействовать со своим модулем в ядре.

Именно через Netlink работает утилита iproute2, пришедшая на смену ifconfig и route.
Собственно взаимодействие с кодом, работающим на уровне ядра, возложено на интерфейсные библиотеки libmnl (Netlink), libnftables (userspace Netlink API) и построенный поверх фронтэнд, работающий на уровне пользователя. Для формирования правил фильтрации в nftables подготовлена утилита nft, которая проверяет корректность правил и транслирует их в байткод. Утилита iptables-nftable позволяет использовать правила iptables.

Правила

Конечно писать низкоуровненые правила системные администраторы не будут, доступен понятный язык описания. Новый синтаксис правил не похож на iptables, главное отличие использование иерархических блочных структур вместо линейной схемы. Группировка позволяет легко составлять, читать и понимать настройки без особых пояснений. Синтаксис при этом, чем то напоминает ipfw из FreeBSD. Язык классификации правил основан на реальной грамматике, при обработке которой используется парсер bison. К сожалению документация в этом вопросе мало помогает, она просто еще не готова. О возможностях можно судить по отрывкам информации и анализе исходного кода.
Правила могут содержать:

  • таблицы — контейнеры для одного семейства протоколов, поддержка мультипротокола не реализована в netfilter, хотя в будущем вероятно и что-то изменится;
  • цепочки (chains) — контейнеры для правил, могут использован в действии перехода (jump), но в отличие от iptables, цепи не содержат счетчики.
  • базовые цепочки (base chains) — особый тип цепи, которые регистрируются с хуками netfilter крюк обеспечивая отправную точку для таблиц. Регистрируются при вставке первого правила.
  • правила (rules) — атомарная единица содержащая “expressions”

Сами правила очень просты и легко читаются. Разрешаем ping (ICMP-сообщения echo-request):

nft add rule filter input icmp type echo-request accept

Для настройки правил используется утилита nft

Теперь разрешаем доступ с подсети 192.168.1.0/24 и IP 192.168.0.10 по SSH, блокируем для всех доступ по 80 порту и разрешаем все пакеты уже установленного соединения (connection tracking).

nft add rule ip global filter ip daddr {192.168.1.0/24, 192.168.0.10} tcp dport {22} accept
nft add rule ip filter input tcp dport 80 drop
nft insert rule filter input ct state established accept

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

nft add rule ip filter output ip daddr 192.168.0.1 counter drop

В iptables администратор так легко бы не отделался. Вместо IP в правилах возможно использование доменного имени:

nft add rule ip6 filter output ip6 daddr example.org accept

Фильтр интерфейса позволяет указывать правило для конкретной сетевой карты (она должна присутствовать в системе иначе оно не будет активным):

nft insert rule filter input meta iif eth0 accept

Еще один ньюанс. Утилита nft может работать в трех режимах, чем то напоминая управление в Cisco. Например, все настройки можно указать в файле и затем просто скормить его nft, это очень удобно для переноса на несколько ПК. В каталоге files/nftables с исходными текстами уже имеются ряд шаблонов, перед началом использования nftables необходимо выбрать нужные и активировать:

# nft -f files/nftables/ipv4-filter
# nft -f files/nftables/ipv6-filter

Режим командной строки, когда нужная настройка указывается сразу и интерактивный режим CLI. Перейти в CLI просто:

# nft -i

Теперь можем последовательно давать команды или считывать настройки. Единичные правила объединяются в таблице, образуя иерархическую блочную структуру, чем-то напоминающая pf и npf.

nft> list table filter -n -a
 
table filter {
 chain output {
 table filter hook output priority 0;
 ip protocol tcp counter packets 190 bytes 21908 # handle 7 
 ip daddr 192.168.1.100 drop # handle 8
 }
}

Правило можно вставить в нужную позицию (handle), здесь работают две директивы add и insert. Первая добавляет правило позволяет после указанной позиции, а вторая — перед. Например, чтобы вставить правило перед handle 8 пишем.

nft insert rule filter output position 8 ip daddr 127.0.0.1 drop

Удаляются правила в цепочке при помощи параметра delete:

nft delete rule filter output handle 9

Если не указывать номер правила, то будет очищена вся цепочка. При помощи flush сбрасывается вся таблица:

nft flush table filter

Настройка NAT не сложнее, вначале необходимо загрузить модули.

modprobe nft_nat
modprobe nft_chain_nat_ipv4
modprobe nft_chain_nat_ipv6

Создаем цепочку:

nft add table nat
nft add chain nat post \{ type nat hook postrouting priority 0 \; \}
nft add chain nat pre \{ type nat hook prerouting priority 0 \; \}

И теперь добавляем в нее правила:

nft add rule nat post ip saddr 192.168.1.0/24 meta oif eth0 snat 192.168.1.1
nft add rule nat pre udp dport 53 ip saddr 192.168.1.0/24 dnat 8.8.8.8:53

Первое активирует NAT для всего трафика с 192.168.1.0/24 на интерфейс eth0, второе перенаправляет весь DNS трафик на 8.8.8.8.
В поставке Nftables идут шаблоны правил

Установка nftables в Ubuntu

В ближайшее время вряд ли увидим nftables в поставке дистрибутивов, поэтому единственный выход изучить новинку, это установить его самостоятельно. Сам процесс сложным назвать нельзя. Нам потребуются библиотеки и стандартный набор для сборки ПО:

$ sudo apt-get install autoconf2.13 dh-autoreconf libmnl-dev libmnl0

Библиотеку можно ставить и из сырцов (git://git.netfilter.org/libmnl), но пока версии доступной в репозитарии достаточно. Копируем код libnftables и nftables.

$ git clone git://git.netfilter.org/libnftables
$ git clone git://git.netfilter.org/nftables

Сборка в обеих случаях стандартная, переходим в каталог и даем команды:

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

В некоторых системах (в Ubuntu например) при конфигурировании nftables следует активировать ряд функций:

ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ./configure

Далее вводим make oldconfig, переходим в Core Netfilter Configuration, где находим специфичные для nftables настройки (их кстати на порядок меньше, чем для iptables), собираем ядро.
Конфигурирование поддержки Nftables в ядре Linux

Журналирование в nftables

Для регистрации событий используется Netfilter, при помощи модулей xt_LOG (регистрирует в syslog) и\или nfnetlink_log. Последний использует демон сбора информации ulogd2, вышедший примерно полтора года назад и способный накапливать данные на уровне отдельных пакетов или потоков и сохранять их в том числе и в БД. Затем механизм журналирование для каждого протокола настраивается через /proc.

# cat /proc/net/netfilter/nf_log
 
0 NONE (nfnetlink_log)
1 NONE (nfnetlink_log)
2 ipt_LOG (nfnetlink_log,ipt_LOG)

По номером два у нас скрывается IPv4. Меняем на nfnetlink_log

echo "nfnetlink_log" >/proc/sys/net/netfilter/nf_log/2

Заключение

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

Сканеры уязвимости позволяют в автоматическом режиме произвести оценку эффективности защиты систем. OpenSource решение OpenVAS по своим возможностям не уступает коммерческим аналогам.

Интерес к сканерам уязвимости или безопасности в последнее время заметно утих, хотя их значимость от этого не изменилась ни сколько. Это по прежнему нужный инструмент в руках администратора. Хотя некоторые администраторы игнорируют такой класс программ, обычно ссылаясь на то что они периодически обновляют ПО и им бояться нечего. На самом деле наличие свежей версии программы вовсе не означает отсутствие проблем. И например уязвимость может проявляться только при определенных настройках, версия ПО роли не играет. Также критически сервисы многие стараются не трогать пока работает. Сканер уязвимости здесь будет очень кстати, так как про такие системы бывает просто забывают.
Сами сканеры уязвимости являются логическим продолжением сетевых сканеров, они умеют обнаруживать узлы и идентифицировать сервисы (по банеру, заголовку и т.д.) и проверять их по базам известных уязвимостей и на наличие специфических дыр связанных с неправильной настройкой. Для некоторых проверок может производится имитация атаки (тесты безопасности). По итогам администратор получает отчет, в котором наглядно показана текущая ситуация. Нужно помнить что сканер уязвимости это не панацея, он не может найти то чего нет в базе.
Список продуктов очень велик Nessus vulnerability scanner, Xspider, GFI LanGuard, SAINT, BeyondTrust Retina Network Security Scanner и другие. Практически все решения ранее предлагавшиеся бесплатно сегодня коммерцизировались и максимум что можно получить это ограниченную версию. Поэтому наличие бесплатных программ вроде OpenVAS (openvas.org) очень кстати.

Возможности OpenVAS

Распространяемый по лицензии GNU GPL OpenVAS (OpenSource Vulnerability Assessment Scanner) является форком популярного сканера безопасности Nessus, изначально открытого, но в 2005 году ставшего закрытым продуктом. И хотя они в чем то сохранили схожесть, на данный момент это совершенно разные решения. С версии 6 в OpenVAS реализована новая концепция управления информацией о безопасности. В основе работы OpenVAS лежит коллекция NVT (Network Vulnerability Tests) тестов безопасности (более 30000), позволяющих выявить уязвимость. Описание известных проблем затем проверяется по базам автоматизированного управления уязвимостями CVE и OpenSCAP (Security Content Automation Protocol). Сам OpenSCAP (open-scap.org) поддерживает несколько спецификаций: XCCDF, OVAL, ARF, CCE, CVSS и CVE.
Как и Nessus OpenVAS построен по клиент-серверной схеме и состоит из нескольких из нескольких сервисов и инструментов. Ядром является сервис OpenVAS Scanner, который собственно и выполняет сканирование (работает на 9391 порту). Причем в процессе проверок систем используются известные продукты: nmap и pnscan, ike-scan, pnscan, strobe и другие. Вся интеллектуальная часть содержится в OpenVAS Manager (порт 9390), которая может собирать и анализировать результаты собранные с нескольких установок OpenVAS. Это основной сервис который обеспечивает полной контроль над уязвимостями, реализованы управление политиками, сканирование по расписанию, обнаружение ложных срабатываний, представление отчетов в самых разных форматах (XML, HTML, LateX и др.). Для управления сканерами используется протокол OTP (OpenVAS Transfer Protocol), сам может получать команды по XML подобном OpenVAS Management Protocol (OMP). Все настройки и собранная информация хранится централизованно в SQL базе данных (SQLite).
Управление всеми функциями (основные учетными записями и потоками OpenSCAP ) производится через OpenVAS Administrator (порт 9393), который реализован в виде инструмента командной строки или может работать как сервис. Реализованы три клиентские части: консольная OpenVAS CLI (omp), веб-интерфейс Greenbone Security Assistant (GSA) (порт 443 или 9392, используется свой microhttpd веб-сервер) и настольный Qt клиент Greenbone Security Desktop (GSD). При этом CLI и GSD доступны для Linux и Windows.
Кроме этого поддерживается интеграция с другими продуктами, класса ISMS (Information Security Management System) и системами мониторинга (Nagios).
Мажорные обновления OpenVAS выходят каждые 12 месяцев.

Развертывание OpenVAS

Проект для установки предлагает исходные тексты, также на сайте OpenVAS доступны ссылки на репозитарии для CentOS/RedHat 6, Debian 6-7, Fedora 15-20, openSUSE. Открыв репозиторий (download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/v6/) для Debian находим ссылки на репозитарии для Ubuntu 12.10-13.04, SUSE Linux Enterprise 11 и Mandriva 2011. Также разработчики Ubuntu предлагают неофициальный репозитарий для этой ОС (launchpad.net/~openvas). Для проверки правильности установки предлагается специальный скрипт openvas-check-setup (svn.wald.intevation.org/svn/openvas/trunk/tools/openvas-check-setup) который может обнаружить любые ошибки в конфигурации и наличие нужных служб, а также выдает рекомендации по их устранению.
Также предлагается OVA образ для виртуальных машин который совместим с VirtualBox и ESXi (внутри Debian Squeeze). В большинстве случаев это самый удобный вариант, его и рассмотрим далее. В системе несколько аккаунтов по умолчанию: root/root, openvas/openvas и администратор веб-панели admin/admin. Все пароли следует обязательно изменить при помощи команды passwd и для admin Extras/My Settings. После загрузки виртуальной машины заходим как пользователь root, после чего обновляем ОС:

# apt-get dist-upgrade
# apt-get upgrade

Раскладка в локальной консоли не очень удачная (ее можно поменять в /etc/default/keyboard), поэтому лучше все настройки системы и запуск консольных команд производить удаленно через ssh.

# apt-get install openssh-server

Адрес для входа в веб-интерфейс автоматически отображается в консоли после регистрации пользователя openvas, его также можно узнать при помощи ifconfig.
Далее рекомендуется изменить ключи:

# gpg --homedir=/usr/local/etc/openvas/gnupg --delete-secret-keys 94094F5B
# gpg --homedir=/usr/local/etc/openvas/gnupg --delete-keys 94094F5B
# openvasmd --create-credentials-encryption-key 
# /etc/init.d/openvas-manager restart

Этого достаточно. Более подробная информация по некоторым настройкам приложений можно получить в файлах INSTALL и README в подкаталогах /root/build, в меню Greenbone (Help – Contents или нажав знак «?» в подменю), и конечно же на сайте проекта.

Производим сканирование

Интерфейс GSA вообще не сложен, и хотя не локализован сориентироваться в настройках очень легко. В самом верху расположено меню содержащее 7 пунктов соответствующих определенной задаче или настройкам. После регистрации можно сразу приступить к проверке, в этом поможет мастер встречающий в окне приветствия, по нажатию на фиолетовый значок в панели Tasks. Поле «Quick start: Immediately scan an IP address» (рис.1) позволяет сразу же создать задачу для проверки узла или сети. Для этого нужно просто указать IP или имя. Сканирование производится с настройками по умолчанию (Full and fast), выбрав гиперссылку рядом сразу можем просмотреть установки.

Мастер позволяет быстро создать задание на проверку

Сами политики сканирования настраиваются в Configuration – Scan Configs. Здесь уже имеется 5 политик: одна пустая (empty) и 4 преднастроенные. По количеству тестов (на момент написания этих строк 33144) преднастроенные политики между собой не отличаются. Разница лишь в настройках сканера. Готовые политики делятся также на fast и deep. Вторые не учитывают результаты предыдущих тестов и вся процедура каждый раз повторяется сначала. По опыту скажу что deep редко когда выдает что-то особенное, но вот время сканирования увеличивается в разы. Поэтому при первом сканировании достаточно использовать Full and fast или Full and fast ultimate, в последующем критические системы можно (для самоуспокоения) дополнительно проверить deep политиками. Настройки конкретной политики легко узнать выбрав в поле Actions фиолетовую кнопку «Scan Config Detail» (рис.2).

Настройки отдельного теста

Настройки готовых политик менять нельзя, но их можно экспортировать (зеленая Export Scan Config) или клонировать чтобы создать на их основе свою, для просто нажимаем оранжевую Clone. В результате появляется еще одна политика с окончанием Clone 1. Используя кнопку Edit Scan Config изменяем параметры. Их здесь очень много, все NVT тесты сгруппированы по различным типам операционных систем и сетевого оборудования, содержат настройки nmap, ping, snmpwal, настройки логина, использование ARP, проверки паролей и много другого. Конечно некоторое время потребуется чтобы во всем разобраться (если нет желания использовать установки по умолчанию). Сами тесты могут быть динамическими (добавляются самостоятельно) или статическими.
В подразделе Configuration имеется еще ряд полезных пунктов с которым следует ознакомится, так как затем настройки будут фигурировать в задании. Например, в Targets — Port List задается список портов, которые будут проверяться на конечных узлах. Здесь 9 преднастроек, по умолчанию в задании используется OpenVAS Default. В Targets – Credential указываются учетные записи пользователей от имени которых будет производится подключение к удаленным узлам и проверка системы (если пользователь доменный, то логин указываем в формате домен\логин). Для аутентификации можно использовать как логин и пароль, так и публичный/приватный ключ. В Configuration – Slave добавляются дополнительные OpenVAS Manager, который будет использоваться для проверки узлов. Задания можно запускать вручную, но лучше это производить автоматически во время меньшей загруженности систем. Для этого следует в Configuration – Schedules создать задачи. Выбираем New Schedule и в предложенных полях указываем название, время первого запуска, часовой пояс (если не совпадает с текущим), и периодичность.
Теперь настраиваем узлы которые будут сканироваться. Переходим в Configuration – Target, здесь находим готовое задание для проверки локальной системы и созданное при помощи Quick start. Нажимаем New Target (звездочка) и указываем название, вписываем узлы ( IP, диапазон, имя узла), Port List, подключаем Credential. Возможно прописать все узлы в текстовый файл, который и указать при помощи «From file».
Все готово чтобы создать новую задачу проверки безопасности. Переходим в раздел Scan Management — New Task, и заполняем поля (рис.3): указываем имя и описание, в выпадающих списках выбраем все, что мы раньше настраивали — политику сканирования, узлы, расписание и т. д.
Создание задачи на проверку в OpenVAS

Некоторые параметры подписаны как optional их можно не трогать. Нажимаем Create Task, задача появляется в Scan Management — Task. Текущее состояние отображается в поле Status, в поле Actions находятся кнопки позволяющие управлять задачей: запустить, остановить, изменить настройки, клонировать, экспортировать и т. д. Нажимаем Start и ожидаем окончания сканирования (перед этим лучше установить автообновление окна, чтобы видеть прогресс). По окончании сканирования можем просмотреть отчет, для этого следует нажать на Task Detail (рис.4).
Результат проверки

Отчет содержит две позиции Threat (угрозы) и Scan Results. Все предупреждения разбиты на 4 позиций по уровню опасности. Основное внимание следует обратить на High, Medium и Low, которые собственно и указывают на проблемы. Отчеты None, Log и False Pos показывают обычно предупреждения о неудачных операциях. Подробный отчет можно увидеть нажав Details, и затем выбрать формат для экспорта (PDF, TXT, HTML, XML и другие) и при необходимости фильтры. Кнопка Compare позволяет сравнить отчеты. Это очень полезная операция, позволяющая увидеть что изменилось со времени последнего сканирования, например оценить эффективность принятых мер безопасности.
В Asset Management — Hosts доступен еще один вид отчета Prognostic Report позволяющий оценить все предупреждения относящиеся к конкретнуму узлу полученные в ходе предыдущих проверок. Вполне вероятно что некоторые отчеты сканера могут содержать ложные срабатывания, чтобы они не мешали используется раздел Override В Note можно прописывать некоторое объяснение которое привязывается к NVT тесту.
Периодически следует обновлять NVT/SCAP/CERT базы, все настройки находятся в Administration, в трех одноименных разделах. Кроме этого можно использовать консольные команды:

# openvas-nvt-sync
# openvas-scapdata-sync
# openvas-certdata-sync
# openvassd
# openvasmd --rebuild
# killall openvassd
# /etc/init.d/openvas-scanner restart
# /etc/init.d/openvas-manager restart
# /etc/init.d/openvas-administrator restart
# /etc/init.d/greenbone-security-assistant restart

Для удобства их лучше запускать при помощи cron, обновляя базы перед сканированием.

***

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

cover01-02(146-147)
Анонсирован январь-февральский номер № 1-2 (146-147) журнала Системный Администратор за 2015 год.

В номере:

  • «Интернет как поле битвы». Исчезнет ли в будущем Интернет? Станет ли в 2015 году больше государственных кибератак? Какая мобильная ОС, с технической точки зрения, лучше защищена от вредоносных файлов? Используется ли антивирусное ПО в проекте «Золотой щит»? Подорожают ли антивирусы? На эти и другие вопросы читателей
    журнала «Системный администратор» отвечают эксперты «Лаборатории Касперского».
  • Прямые и косвенные проверки надзорных органов ИТ-инфраструктуры бизнеса. Чем больше бизнес, тем сильнее
    внимание государственных надзорных органов, контролирующих бизнес в соблюдении требований норм, описанных в законодательных документах, часть которых напрямую регулирует деятельность ИТ-службы компании. Давайте рассмотрим, какие бывают проверки и с чем можно столкнуться
  • Архивариус SCDPM 2012 R2. Часть1. Возможности, описание, настройка бэкапа клиентского ПК. Познакомимся
    с продуктом System Center Data Protection Manager 2012 R2 (SCDPM), предназначенным для создания резервных копий данных, произведем защиту пользовательских компьютеров
  • VBScript на службе системного администратора. Всем известно, что с помощью shell-скриптов в UNIX можно творить чудеса. А как обстоит дело с чудесами в Windows? Реализуем с помощью VBScript резервное копирование данных
  • Магнитная лента в резервном копировании. Применение накопителей и носителей на магнитной ленте в современных ИТ-системах
  • Восстановление элементов в Exchangе 2013 без использования резервных копий. Как быть, если из почтового
    ящика оказалось удалено или потеряно важное сообщение?
  • Кластер виртуализации. Часть 3. Разворачиваем бюджетное отказоустойчивое решение. Обеспечиваем контроль
    целостности данных кластера – настраиваем экстренное выключение сбойного узла (STONITH), мониторинг и управление ИБП.
  • Подключаемся к Active Directory c помощью realmd. Несмотря на то что Linux и Windows уже не редкость в одной сети, интеграции из коробки до сих пор нет. Как нет и единого решения. Проект realmd упрощает подключение Linux-систем к AD.
  • 36 Open Linux Management Infrastructure. Инструментарий удаленного администрирования от Red Hat. С точки зрения
    корпоративного сектора одно из преимуществ Red Hat Enterprise Linux (RHEL) и построенных на его основе систем – наличие мощных автоматизированных средств администрирования большого парка машин.
  • Автоматический мониторинг ошибок в БД Oracle с рассылкой результатов мониторинга по e-mail. Существуют
    разнообразные средства мониторинга БД Oracle. Каждое из них успешно решает ту или иную задачу по администрированию и мониторингу БД. Вместе с тем эти средства не решали в комплексе перечень задач, которые
    возникли в нашей организации в процессе эксплуатации нескольких БД
  • Защита Windows с помощью EMET. Для Windows доступно не мало защитных технологий, способных усложнить атаку на операционную систему, но они не затрагивают установленные в ней приложения. EMET помогает решить эту проблему.
  • Возможности файрволов уровня приложений. Шлюзы уровня приложений – это серьезное средство их защиты или бесполезная трата денег?
  • Active Directory и безопасность. Часть 6. Защищая информацию посредством шифрования, нужно помнить, что все, что зашифровано, может быть рано или поздно расшифровано.
  • Разбор уязвимости CVE-2014-8609, или Когда можно будет спать спокойно. Вредоносные программы – это плата
    за популярность ОС. Да, конечно, троянцы существуют и для очень редких ОС, но куда проще зарабатывать на распространенных системах, в которых трудится огромное количество непрофессионалов. Многие
    из них уверены в том, что «уж они-то заметят, когда вирус будет заражать их систему».
  • Завести пингвина или умереть. ОC Windows небезопасна, неза висимо от того, установлены ли у вас последние обновления, используется ли антивирус и защищен ли доступ к ней брандмауэром. ОC Windows
    небезопасна изначально, и единственный способ защитить свои данные это не использовать ее для работы. Таково мое мнение
  • «1С:Предприятие» вместе с «1С-Битрикс». Часть 4. Настраиваем обмен заказами. Следующий этап после задания
    параметров выгрузки товаров – настройка обмена заказами.
  • Новое в Tarantool. Вышла версия, которая в корне отличается от предыдущих. Чем же она хороша, и что нового нас ожидает?
  • Реверс-инженер – это хакер. Но белый и пушистый. Мы решили побеседовать о том, что значит быть реверс-инженером,
    какие перспективы у этой профессии и можно ли ее отнести к «белому хакерству», с теми, кто уже много лет этим занимается. Знакомьтесь – реверс-инженеры компании Parallels Михаил Филиппов и Василий Жданов.
  • Исследование операции поиска символа в строке (PHP).
    В статье рассказывается о способе измерения времени выполнения и сравнения эффективности конструкций языка программирования PHP.
  • Гибкие методологии разработки современных программных приложений. Краткий обзор наиболее распространенных
    стандартных гибких методологий, успешно применяемых в разработке современных программных приложений разных уровней сложности. Взгляд автора на преимущества и недостатки при практическом использовании
  • Статический анализ типов в JavaScript. Пробуем анали затор Flow от Facebook. Компания Facebook представила открытый проект Flow – статический анализатор кода для языка JavaScript. Основной целью разработки анализатора является упрощение поиска ошибок.
  • Альтернативы JavaScript от Microsoft и Google. Надоели «сюрпризы» JavaScript? Не понимаете, как можно жить без классов? Не приемлете идею прототипированного наследования, и вас просто трясет от отсутствия строгой типизации? А с другой стороны, без JavaScript сейчас ведь просто не обойтись… Беда. Но выход есть! Даже несколько!
  • Средства самопознания в Ruby. Что программа на Ruby может знать о самой себе? Практически все современные
    языки программирования содержат средства, позволяющие во время выполнения программы получить какие-то данные о структуре самой этой программы.
  • OpenGL для Android на Java и C++. В данной статье поговорим о программировании компьютерной графики на основе OpenGL на примере операционной системы Android.
  • Александр Тихонов: «Ребята не стали менее талантливы, да и мы пока умеем учить!» Московский институт
    электроники и математики – одно из старейших учебных заведений России, со своими славными традициями и научными школами. В январе этого года МИЭМ переехал в новое современное здание, и у вуза начался новый этап жизни и развития. В гостях у «Системного администратора» – Александр Николаевич Тихонов, научный руководитель,
    директор МИЭМ НИУ ВШЭ.
  • Вакансия: программист Python. Согласно рейтингу TIOBE Index в нынешнем январе Python занимал восьмое место. Профессия программиста востребована – представители компаний рассказывают, каких специалистов они хотят видеть в своей команде. Рекрутинговая компания SuperJob представляет аналитический обзор спроса и предложений.
  • Незаменимая роскошь. В статье рассказывается о роли ИТ и поднимаются вопросы о перспективах отечественного бизнеса
  • Карл Винсент: «Наша реальность заканчивается там, где перестает тянуть Wi-Fi». Современные компьютерные
    и интернет-технологии все глубже проникают в нашу повседневность и для многих начинают определять образ жизни. ИТ позволяют не только работать удаленно, но и радикально изменять наше качество жизни, попутно меняя мировоззрение. Яркий пример тому – наш собеседник Карл Винсент, активист движения цифровых отшельников.
  • Творец роботов. Вообще-то слово «робот» ввел в языки мира чешский писатель Карел Чапек – в 1920-м, в пьесе «R.U.R.». Но в том же году – вот ведь совпадение! – 2 января в другой стране родился другой писатель, которому мы обязаны не только образами «разумных» роботов, но и первой системой морали для этих человеко-
    подобных существ.
  • Оптимизация временных затрат на проверку проектной документации на предприятиях топливно-
    энергетического комплекса.
    В статье представлен метод определения полноты проектной документации на предприятиях
    топливно-энергетического комплекса, разработанный для сокращения трудозатрат на этапах принятия текстовых документов проектной документации. Приведены результаты сравнения различных комбинаций
    методов. Представлены результаты работы метода и сравнение с проверкой вручную.
  • Прогнозирование развития парадигм построения компьютерных интерфейсов. Рассмотрено развитие
    компьютерных интерфейсов на протяжении последних 10 лет, среди которых авторы выделяют три основных парадигмы их построения: завершившийся миметический скевоморфизм, пришедший ему на смену флэт, будущее интерфейсостроения – глитч или самонастраивающиеся интерфейсы. Прогнозирование осуществляется с опорой
    на антропологические и культурологические методы, позволяющие проводить аналогии между развитием интерфейсов и развитием культуры в ХХ веке, что дает возможность определить тенденции в индустрии до того, как они начнут получать реальное воплощение в UX/UI-продуктах.
  • Разработка и исследование программной системы принятия решений с методом выбора доминирующе-
    го варианта.
    Разрабатывается и исследуется программная система поддержки принятия решений с методом стохастической аппроксимации с выбором доминирующего варианта.
  • Общесистемный объект НСИ – основа единой НСИ. Ведение НСИ – одна из важнейших задач, необходимых для обеспечения функционирования информационных систем предприяти
  • Робот за «отца» отвечает. С создателем фантастических роботов – Айзеком Азимовым – читатель уже познакомился в статье, опубликованной в этом номере журнала. А экспонат нашего виртуального музея компьютеров и ИТ, с которым знакомство только предстоит, – это один из самых совершенных на сегодня реальных роботов.
    Точнее, роботов-андроидов – иначе говоря, человекоподобных
Наверх