воскресенье, 15 февраля 2015 г.

OpenVPN - объединение Центрального офиса с подразделением (сервер-клиент). Ubuntu 14.04

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




0. Что имеем:
a. Interfaces на сервере
auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet static
        address 1.2.3.174
        netmask 255.255.255.0
        network 1.2.3.0
        broadcast 1.2.3.255
        gateway 1.2.3.1
        dns-nameservers 8.8.8.8

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        bridge_ports eth0
        bridge_fd 0


b. Interfaces на клиенте

# The loopback network interface
auto lo
iface lo inet loopback

auto em0
iface em0 inet static
address 1.2.33.123
network 1.2.33.0
gateway 1.2.33.1
netmask 255.255.255.0
broadcast 1.2.33.255
dns-nameservers 8.8.8.8

auto eth0
iface eth0 inet manual

auto wlan0
iface wlan0 inet manual

auto br0
iface br0 inet static
address 192.168.11.1
network 192.168.11.0
netmask 255.255.255.192
broadcast 192.168.11.63
bridge-ports eth0 wlan0
bridge_fd 0

1. На сервере ставим:
apt-get install openvpn easy-rsa libssl-dev openssl

и на клиенте:
apt-get install openvpn

2. Переходим на сервер, и копируем:
cp -Rp /usr/share/easy-rsa/ /etc/openvpn/vpn-tun/

3. Подправим основные параметры в файле vars, чтобы значения в дальнейшем подставлялись сами:
nano /etc/openvpn/vpn-tun/vars

export KEY_COUNTRY="RU"
export KEY_PROVINCE="SZFO"
export KEY_CITY="SPb"
export KEY_ORG="Firma"
export KEY_EMAIL="it@firma.com"
export KEY_OU="FirmaHead"

4. Перейдем в папку:

cd /etc/openvpn/vpn-tun/

Инициализируем PKI:

. ./vars
 и 
./clean-all

5. Генерируем сертификат авторизации (СА) и ключ, для этого выполняем команду:

./build-ca

Большинство параметров должно подхватиться из файла vars, если что-то не так - указываем явно.

6. Генерируем секретный ключ Диффи-Хелмана (займет продолжительное время):

./build-dh

7. Генерируем сертификат, и секретный ключ сервера:

./build-key-server servername

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

8.Также сгенерим ключ для TLS шифрования:
openvpn --genkey --secret keys/ta.key

9. Сгенерируем ключи для клиента:

./build-key clientname

Вместо "clientname" придумайте свое имя, и укажите его в параметре Name при генерации ключа.

Если через некоторое время Вам понадобится включить еще один офис в Вашу сеть надо будет запустить команду:

. ./vars

После чего сгенерируйте ключи для клиента:

./build-key clientname

Не забудьте только создать ccd файл для нового клиента. Об ccd ниже.

10. Создаем папку для ccd файлов:

mkdir /etc/openvpn/vpn-tun/ccd/

затем:

nano /etc/openvpn/vpn-tun/ccd/clientname
(имя файла должно совпадать с названием ключа для клиента см. п.8)
внесем след. параметры:

#disable
ifconfig-push 192.168.255.5 192.168.255.6
iroute 192.168.11.0 255.255.255.192
push "route 192.168.1.0 255.255.255.0"

Если в дальнейшем какой-либо клиент придется отключить, просто раскомментируйте #disable.

11. Теперь создадим conf-файл OpenVpn-сервера:

nano /etc/openvpn/server-tun.conf

dev tun
port 1194
proto udp

tls-server
tls-server
tls-auth /etc/openvpn/vpn-tun/keys/ta.key 0
tls-timeout 120
auth SHA1

cipher BF-CBC



server 192.168.255.0 255.255.255.0
ifconfig 192.168.255.1 192.168.255.2

push "route 192.168.1.0 255.255.255.0"

route 192.168.11.0 255.255.255.192 # подсеть clientname (см. п.8)

#если будут другие клиенты пишем здесь же роуты:
#route 192.168.2.0 255.255.255.0 #например

ca /etc/openvpn/vpn-tun/keys/ca.crt
cert /etc/openvpn/vpn-tun/keys/server.crt
key /etc/openvpn/vpn-tun/keys/server.key
dh /etc/openvpn/vpn-tun/keys/dh2048.pem

client-to-client
client-config-dir /etc/openvpn/vpn-tun/ccd
comp-lzo
persist-tun
persist-key
verb 3
keepalive 10 60
ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов

log-append /var/log/openvpn_tun.log
status /var/log/openvpn_status_tun.log

12. Теперь настроим iptables на сервере, добавим правила:

-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A FORWARD -i br0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o br0 -j ACCEPT

Если на самом сервере кроме OpenVpn находятся другие сервисы, к которым необходимо дать доступ во внутренней сети добавим правило:
-A INPUT -i tun0 -j ACCEPT
Если мучает паранойя уточним условия:
-A INPUT -i tun0 -p tcp -m multiport --dports ХХ,ХХХХ -j ACCEPT
если нужен UDP:
-A INPUT -i tun0 -p udp -m multiport --dports ХХ,ХХХХ -j ACCEPT
где XXX нужные порты.

13. Переходим клиент, создадим conf файл клиента :

nano /etc/openvpn/clientname_to_server.conf

remote ip_servera 1194
client
verb 5
dev tun0
proto udp
resolv-retry infinite
nobind

tls-client
tls-auth /etc/openvpn/ta.key 1
auth SHA1
cipher BF-CBC

remote-cert-tls server


persist-key
persist-tun
ca "/etc/openvpn/ca.crt"
cert "/etc/openvpn/clientname.crt"#см.п.8
key "/etc/openvpn/clientname.key"#см.п.8
comp-lzo
verb 4
mute 20
verb 3
#redirect-gateway
log-append /var/log/clientname_to_server.log#см.п.8


13. Любым удобным для Вас способом перемещаем сертификаты и ключ (ca.crt, clientname.crt, clientname.key, ta.key) с сервера на клиент, и помещаем их в /etc/openvpn. 

14. Настроим iptables на клиенте, добавим правила:

-A FORWARD -i br0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o br0 -j ACCEPT

Если нужен доступ к локальным ресурсам, расположенным на клиенте см.п. 11.


15. Рестартуем OpenVpn:
/etc/init.d/openvpn restart
и на клиенте и на сервере, и пробуем начинать пинговать хосты в подсетях. Если что-то не так - смотрим логи. Удачи.



вторник, 3 февраля 2015 г.

Collectd+Collectd Graph Panel+Lighttpd

До недавнего времени для мониторинга системы пользовался графиками MRTG, но установив Сollectd с Collectd Graph Panel-ю понял насколько последний инструмент гибче, удобнее и красивее.

1. Готовим почву - cтавим lighttpd и необходимые пакеты:
apt-get install lighttpd php5-cgi php5
2. Включаем поддержку выполнения cgi скриптов:
lighty-enable-mod fastcgi fastcgi-php
3.Рестарт lighttpd:
service lighttpd restart
4. Ставим collectd:
apt-get install collectd
5. Добавим поддержку git:
apt-get install git
6. Создаем копию git репозитория для установки Collectd Graph Panel:
cd /var/www/
git clone https://github.com/pommi/CGP.git
Теперь по адресу
http://192.168.Х.Х/CGP
должна появиться web-панель с графиками.
Графики можно маштабировать с помощью мыши.
7. Для уменьшения нагрузки на процессор включим рендеринг на стороне клиента:
nano /var/www/CGP/conf/config.php
Найдем строку
$CONFIG['graph_type'] = 'png';
и зменим ее на:
$CONFIG['graph_type'] = 'canvas';
8.Включим кэширование в плагине RDD-tools:
nano /etc/collectd/collectd.conf
и там расскомментируем и изменим строки:

DataDir "/var/lib/collectd/rrd"
CacheTimeout 300
CacheFlush 900


9. Все, можно перегрузить collectd:
service collectd restart
10.Включать и отключать, а также настраивать плагины можно в файле collectd.conf. Результат: