Pull to refresh
0

Open source UTM на защите периметра сети

Reading time7 min
Views24K
Привет, Хабровчане!

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

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

Глебов Максим
Tags:
Hubs:
Total votes 15: ↑14 and ↓1+13
Comments12

Articles

Information

Website
it.ru
Registered
Founded
Employees
1,001–5,000 employees
Location
Россия