Привет, Хабровчане! 
Сегодня хотелось бы поделиться опытом создания устройства для защиты периметра сети небольшой организации, построенного на базе open source решений: стандартного линуксового межсетевого экрана NETFilter с графическим интерфейсом Firewall Builder, системы обнаружения и предотвращения вторжений Suricata с веб-интерфейсом Snorby и шлюза удаленного доступа OpenVPN на одной виртуальной машине.
Надеюсь, статья поможет молодым администраторам в решении возможных проблем, которые могут возникнуть при установке open source решений по безопасности сети.
Всех заинтересовавшихся приглашаю под кат.
Собирать мы будем UTM-решение (что такое UTM, можно прочитать здесь), которое в себе объединит межсетевой экран, IPS и VPN-шлюз.
Порядок установки и настройки следующий:
• Установка и настройка Snorby (веб-интерфейс мониторинга для Suricata), barnyard2 (утилита для связи Suricata и Snorby) и Suricata (собственно, сама IPS);
• Установка Firewall Builder (графический интерфейс настройки NETFilter), настройка политики межсетевого экранирования (ACL и NAT);
• Установка и настройка сервера и клиента OpenVPN.
Сами решения по безопасности (NETFilter, Suricata, OpenVPN) были выбраны по той причине, что они являются своеобразной «классикой» и очень распространены, так что в случае необходимости можно найти кучу инфы о настройке и работе с ними. Графические интерфейсы устанавливаем же только для удобства настройки и мониторинга, не более, при желании можно обойтись и без них.
Платформой для нашего UTM-решения будет виртуальный сервер с ОС Ubuntu 14.04 на борту и следующей конфигурацией:
• 4 ядра;
• 4 Гб оперативной памяти;
• 40 Гб жесткий диск.
Т.е. для решения задачи защиты периметра сети небольшой организации подойдет самый средненький по характеристикам сервер.
Перед началом лучше обновиться:
Устанавливаем необходимые пакеты:
Устанавливаем wkhtmltopdf:
Устанавливаем gems:
Устанавливаем Snorby:
Редактируем файл /var/www/snorby/config/database.yml (если его нет, то можно отредактировать *.example):
Редактируем файл /var/www/snorby/config/snorby_config.yml (если его нет, то можно отредактировать *.example):
Запускаем настройку Snorby:
Настройка mysql:
Возвращаемся к редактированию файла /var/www/snorby/config/database.yml, куда вписываем нового пользователя и пароль:
Установка Apache2 и необходимых пакетов:
Установка passenger:
Создаем файл /etc/apache2/mods-available/passenger.load и пишем туда:
Активация модулей:
Создаем файл /etc/apache2/sites-available/snorby и пишем туда:
Активируем сайт:
Перезапускаем apache:
Из /var/www/snorby запускаем:
В файле /etc/apache2/sites-available/000-default.conf меняем строчку:
Делаем тестовый пуск snorby. В папке /var/www/snorby запускаем:
Идем на http://localhost:3000 и, если видим окно входа, то значит мы на правильном пути.

Далее будем ставить непосредственно саму Suricata.
Установка необходимых пакетов:
Установка yaml:
Установка barnyard2:
Установка suricata:
В файле /etc/suricata/suricata.yaml меняем строчки:
Настройка barnyard2:
Изменим строки в файле /etc/suricata/barnyard2.conf:
Последний штрих и все должно заработать:
Если снова зайти на http://localhost:3000, то увидим дашборд и информацию по некоторым событиям.

На этом настройка IPS закончена.
Скачиваем последнюю сборку по ссылке.
Устанавливаем необходимый пакет:
Устанавливаем FWBuilder:
Запускаем FWBuilder и создаем элемент Firewall. Для этого жмем Create new firewall и заполняем поля:

Теперь настраиваем интерфейсы:


Создаем минимально необходимый набор правил:


В принципе, все довольно наглядно, так что дальше можно создавать правила под свои нужды.
Когда правила готовы, жмем Install, вводим логин/пароль и адрес шлюза:

На этом настройка межсетевого экрана закончена.
Устанавливаем OpenVPN и easy-rsa:
Создаем ключи:
Меняем в конце файла строки:
Создаем конфигурационный файл сервера:
Создаем конфигурационный файл клиента:
Включаем маршрутизацию на шлюзе, если она не включена:
в файле /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1, потом
Перезапускаем OpenVPN:
Создание клиентских ключей:
Из папки /etc/openvpn/easy-rsa/2.0/keys берем файлы ca.crt, dh2048.pem, client.crt, client.key, ta.key, они пригодятся для клиента.
Идем на клиентскую машину (я использовал Windows XP) и устанавливаем OpenVPN Client.
После установки необходимо файлы ca.crt, dh2048.pem, client.crt, client.key, ta.key, которые мы создали на сервере скопировать в папку /config в директории, куда установлен OpenVPN Client (у меня это C:\Program Files\OpenVPN\config).
Теперь остается создать конфиг для клиента. В папке /config создаем файл client.ovpn со следующим содержанием:
Теперь можно пробовать подключаться к серверу.
На этом настройка UTM завершена, надеемся, что статья будем вам полезна.
Всем спасибо за внимание!
Глебов Максим

Сегодня хотелось бы поделиться опытом создания устройства для защиты периметра сети небольшой организации, построенного на базе open source решений: стандартного линуксового межсетевого экрана NETFilter с графическим интерфейсом Firewall Builder, системы обнаружения и предотвращения вторжений Suricata с веб-интерфейсом Snorby и шлюза удаленного доступа OpenVPN на одной виртуальной машине.
Надеюсь, статья поможет молодым администраторам в решении возможных проблем, которые могут возникнуть при установке open source решений по безопасности сети.
Всех заинтересовавшихся приглашаю под кат.
Что и куда будем устанавливать
Собирать мы будем UTM-решение (что такое UTM, можно прочитать здесь), которое в себе объединит межсетевой экран, IPS и VPN-шлюз.
Порядок установки и настройки следующий:
• Установка и настройка Snorby (веб-интерфейс мониторинга для Suricata), barnyard2 (утилита для связи Suricata и Snorby) и Suricata (собственно, сама IPS);
• Установка Firewall Builder (графический интерфейс настройки NETFilter), настройка политики межсетевого экранирования (ACL и NAT);
• Установка и настройка сервера и клиента OpenVPN.
Сами решения по безопасности (NETFilter, Suricata, OpenVPN) были выбраны по той причине, что они являются своеобразной «классикой» и очень распространены, так что в случае необходимости можно найти кучу инфы о настройке и работе с ними. Графические интерфейсы устанавливаем же только для удобства настройки и мониторинга, не более, при желании можно обойтись и без них.
Платформой для нашего UTM-решения будет виртуальный сервер с ОС Ubuntu 14.04 на борту и следующей конфигурацией:
• 4 ядра;
• 4 Гб оперативной памяти;
• 40 Гб жесткий диск.
Т.е. для решения задачи защиты периметра сети небольшой организации подойдет самый средненький по характеристикам сервер.
Установка Suricata, Snorby, barnyard2
Перед началом лучше обновиться:
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade
Устанавливаем необходимые пакеты:
sudo apt-get install gcc g++ build-essential libssl-dev libreadline6-dev zlib1g-dev linux-headers-generic libsqlite3-dev libxslt-dev libxml2-dev imagemagick git-core libmysqlclient-dev mysql-server libmagickwand-dev default-jre ruby1.9.3
Устанавливаем wkhtmltopdf:
wget http://sourceforge.net/projects/wkhtmltopdf/files/0.12.1/wkhtmltox-0.12.1_linux-trusty-i386.deb sudo dpkg -i wkhtmltox-0.12.1_linux-trusty-i386.deb
Устанавливаем gems:
sudo gem install thor i18n bundler tzinfo builder memcache-client rack rack-test erubis mail text-format rack-mount rails sqlite3
Устанавливаем Snorby:
sudo git clone http://github.com/Snorby/snorby.git /var/www/snorby
Редактируем файл /var/www/snorby/config/database.yml (если его нет, то можно отредактировать *.example):
snorby: &snorby adapter: mysql username: root password: <enter the mysql root password here> host: localhost
Редактируем файл /var/www/snorby/config/snorby_config.yml (если его нет, то можно отредактировать *.example):
development: domain: localhost:3000 wkhtmltopdf: /usr/bin/wkhtmltopdf #путь может отличаться - /usr/local/bin/wkhtmltopdf test: domain: localhost:3000 wkhtmltopdf: /usr/bin/wkhtmltopdf production: domain: localhost:3000 wkhtmltopdf: /usr/bin/wkhtmltopdf
Запускаем настройку Snorby:
cd /var/www/snorby sudo bundle update activesupport railties rails sudo gem install arel ezprint && sudo bundle install sudo bundle exec rake snorby:setup
Настройка mysql:
mysql -u root -p create user 'snorbyuser'@'localhost' IDENTIFIED BY 'новый_пароль'; grant all privileges on snorby.* to 'snorbyuser'@'localhost' with grant option; flush privileges; exit
Возвращаемся к редактированию файла /var/www/snorby/config/database.yml, куда вписываем нового пользователя и пароль:
snorby: &snorby adapter: mysql username: snorbyuser password: новый_пароль host: localhost
Установка Apache2 и необходимых пакетов:
sudo apt-get install apache2 apache2-prefork-dev libapr1-dev libaprutil1-dev sudo apt-get install libcurl4-openssl-dev sudo service apache2 start
Установка passenger:
sudo gem install --no-ri --no-rdoc passenger sudo /usr/local/bin/passenger-install-apache2-module -a
Создаем файл /etc/apache2/mods-available/passenger.load и пишем туда:
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /var/lib/gems/1.9.1/gems/passenger-4.0.48 PassengerDefaultRuby /usr/bin/ruby1.9.1 </IfModule>
Активация модулей:
sudo a2enmod passenger sudo a2enmod rewrite sudo a2enmod ssl sudo chown www-data:www-data /var/www/snorby -R
Создаем файл /etc/apache2/sites-available/snorby и пишем туда:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName snorby.local DocumentRoot /var/www/snorby/public <Directory "/var/www/snorby/public"> AllowOverride all Order deny,allow Allow from all Options -MultiViews </Directory> </VirtualHost>
Активируем сайт:
sudo ln -s /etc/apache2/sites-available/snorby /etc/apache2/sites-enabled/snorby
Перезапускаем apache:
sudo service apache2 restart
Из /var/www/snorby запускаем:
sudo bundle pack && sudo bundle install --path vender/cache
В файле /etc/apache2/sites-available/000-default.conf меняем строчку:
DocumentRoot /var/www/
Делаем тестовый пуск snorby. В папке /var/www/snorby запускаем:
sudo bundle exec rails server -e production
Идем на http://localhost:3000 и, если видим окно входа, то значит мы на правильном пути.

Далее будем ставить непосредственно саму Suricata.
Установка необходимых пакетов:
sudo apt-get install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libcap-ng-dev libnet1-dev mysql-client wget http://security.ubuntu.com/ubuntu/pool/main/m/mysql-dfsg-5.1/libmysqlclient16_5.1.73-0ubuntu0.10.04.1_i386.deb sudo dpkg -i libmysqlclient16_5.1.73-0ubuntu0.10.04.1_i386.deb wget http://www.netfilter.org/projects/libnfnetlink/files/libnfnetlink-1.0.1.tar.bz2 sudo tar xvfz libnfnetlink-1.0.1.tar.bz2 sudo ./configure && sudo make && sudo make install
Установка yaml:
wget http://pyyaml.org/download/libyaml/yaml-0.1.3.tar.gz sudo tar xvfz yaml-0.1.3.tar.gz cd yaml-0.1.3 sudo ./configure && sudo make && sudo make install
Установка barnyard2:
wget http://ftp.psu.ac.th/pub/snort/barnyard2-1.9.tar.gz sudo tar xvfz barnyard2-1.9.tar.gz cd barnyard2-1.9 sudo ./configure --with-mysql && sudo make && sudo make install
Установка suricata:
sudo apt-get install suricata sudo cp /etc/suricata/suricata-debian.yaml /etc/suricata/suricata.yaml cd /etc/suricata sudo wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz sudo tar xvfz emerging.rules.tar.gz
В файле /etc/suricata/suricata.yaml меняем строчки:
default-rule-path: /etc/suricata/rules/ HOME_NET: "[ip_адрес/маска]" # пример "[192.168.0.0/24]"
Настройка barnyard2:
sudo cp downloads_folder/barnyard2-1.9/etc/barnyard2.conf /etc/suricata/
Изменим строки в файле /etc/suricata/barnyard2.conf:
config reference_file: /etc/suricata/reference.config config classification_file: /etc/suricata/classification.config config gen_file: /etc/suricata/rules/gen-msg.map config sid_file: /etc/suricata/rules/sid-msg.map output database: log, mysql, user=snorbyuser password=новый_пароль dbname=snorby host=localhost sensor_name=sensor1
Последний штрих и все должно заработать:
sudo mkdir /var/log/barnyard2 sudo iptables -I FORWARD -j NFQUEUE sudo suricata -c /etc/suricata/suricata.yaml -q 0
Если снова зайти на http://localhost:3000, то увидим дашборд и информацию по некоторым событиям.

На этом настройка IPS закончена.
Установка FWBuilder и настройка iptables
Скачиваем последнюю сборку по ссылке.
Устанавливаем необходимый пакет:
sudo apt-get install libqt4-gui
Устанавливаем FWBuilder:
sudo dpkg -i fwbuilder_5.1.0.3599-ubuntu-precise-1_i386.deb
Запускаем FWBuilder и создаем элемент Firewall. Для этого жмем Create new firewall и заполняем поля:

Теперь настраиваем интерфейсы:


Создаем минимально необходимый набор правил:


В принципе, все довольно наглядно, так что дальше можно создавать правила под свои нужды.
Когда правила готовы, жмем Install, вводим логин/пароль и адрес шлюза:

На этом настройка межсетевого экрана закончена.
Установка и настройка OpenVPN
Устанавливаем OpenVPN и easy-rsa:
sudo su apt-get install openvpn easy-rsa
Создаем ключи:
mkdir /etc/openvpn/easy-rsa cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0 cd /etc/openvpn/easy-rsa/2.0 nano vars
Меняем в конце файла строки:
export KEY_COUNTRY="RU" export KEY_PROVINCE="Moscow" export KEY_CITY="Moscow" export KEY_ORG="IT" export KEY_EMAIL="test@lab.local" export KEY_OU="Security Department" export KEY_NAME="UTM"
cp openssl-1.0.0.cnf openssl.cnf . ./vars ./clean-all ./build-ca ./build-key-server server ./build-dh openvpn --genkey --secret keys/ta.key cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/
Создаем конфигурационный файл сервера:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ cd /etc/openvpn gunzip -d /etc/openvpn/server.conf.gz nano /etc/openvpn/server.conf
port 1194 proto udp dev tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key # This file should be kept secret dh /etc/openvpn/keys/dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /etc/openvpn/ipp.txt push "route 192.168.1.0 255.255.255.0" keepalive 10 120 tls-server tls-auth /etc/openvpn/keys/ta.key 0 tls-timeout 120 auth SHA1 comp-lzo max-clients 1 persist-key persist-tun status /var/log/openvpn/openvpn-status.log verb 3 mute 20
mkdir /var/log/openvpn
Создаем конфигурационный файл клиента:
mkdir /etc/openvpn/ccd nano /etc/openvpn/ccd/client iroute 192.168.1.0 255.255.255.0
Включаем маршрутизацию на шлюзе, если она не включена:
в файле /etc/sysctl.conf расскомментируем #net.ipv4.ip_forward=1, потом
sudo sysctl -p
Перезапускаем OpenVPN:
openvpn restart
Создание клиентских ключей:
cd /etc/openvpn/easy-rsa/2.0 . ./vars ./build-key client ./build-key-pass client
Из папки /etc/openvpn/easy-rsa/2.0/keys берем файлы ca.crt, dh2048.pem, client.crt, client.key, ta.key, они пригодятся для клиента.
Идем на клиентскую машину (я использовал Windows XP) и устанавливаем OpenVPN Client.
После установки необходимо файлы ca.crt, dh2048.pem, client.crt, client.key, ta.key, которые мы создали на сервере скопировать в папку /config в директории, куда установлен OpenVPN Client (у меня это C:\Program Files\OpenVPN\config).
Теперь остается создать конфиг для клиента. В папке /config создаем файл client.ovpn со следующим содержанием:
client dev tun proto udp remote 10.10.0.184 1194 resolv-retry infinite ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\client.crt" key "C:\\Program Files\\OpenVPN\\config\\client.key" tls-client tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 auth SHA1 # по-умолчанию. Можно MD5 cipher BF-CBC remote-cert-tls server comp-lzo persist-key persist-tun status "C:\\Program Files\\OpenVPN\\log\\openvpn-status.log" log "C:\\Program Files\\OpenVPN\\log\\openvpn.log" verb 3 mute 20
Теперь можно пробовать подключаться к серверу.
На этом настройка UTM завершена, надеемся, что статья будем вам полезна.
Всем спасибо за внимание!
Глебов Максим
