Привет, Хабровчане!

Сегодня хотелось бы поделиться опытом создания устройства для защиты периметра сети небольшой организации, построенного на базе 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 завершена, надеемся, что статья будем вам полезна.

Всем спасибо за внимание!

Глебов Максим