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