OpenVPN сервер для личных целей за несколько минут

1. Установка самостоятельно. OpenVPN Access Server

Количество пользователей ограничено лицензией, для free версии доступно только 2 пользователя.

Для CentOS 7
Код:
yum install net-toolsrpm -ihv http://swupdate.openvpn.org/as/openvpn-as-2.1.4-CentOS7.x86_64.rpm
Для Debian 8
Код:
wget http://swupdate.openvpn.org/as/openvpn-as-2.1.4-Debian8.amd_64.debdpkg -i openvpn-as-2.1.4-Debian8.amd_64.deb
На этом установка OpenVPN завершена. Все сопутствующие настройки и правила iptables пропишутся автоматически.
Осталось задать пароль пользователя openvpn для доступа.
Код:
passwd openvpn
Как полагается система попросит ввести пароль дважды.
Теперь Вы можете зайти в админ панель используя ссылку вида:
Код:
https://YourIpAddress:943/admin
Скачать OpenVPN клиент можно прописав в адресной строке:
Код:
https://YourIpAddress:943
Для мобильных устройств существует приложение OpenVPN Connect.


2. Установка OpenVPN без графического интерфейса
Количество пользователей не ограничено.

Для удобства дальнейшего пользования установим редактор mc
Код:
yum install mc -y
В данном примере установка производится одной командой:
Код:
wget  https://raw.github.com/host-eiweb/openvpn-install/master/openvpn-install.sh -O  openvpn-install.sh && bash openvpn-install.sh
Во время установки необходимо будет ответить на вопросы системы.
По окончании установки, скачайте файл для клиента, он будет находиться в директории root.

Что бы отключить логирование откройте конфигурационный файл server.conf и внесите необходимые изменения.
Код:
mcedit /etc/openvpn/server.conf
Установка firewalld
Далее необходимо немного защитить свой сервер.

В CentOS 7 установлен firewalld, но не все успели к нему привыкнуть и продолжают пользоваться старым добрым iptables.
Для них мы рассмотрим установку iptables на CentOS 7

Остановим и откличим firewalld
Код:
systemctl stop firewalld
systemctl disable firewalld
Установка
Код:
yum -y install iptables-services
Включим авто-запуск iptables
Код:
systemctl enable iptables
Далее создадим файл iptables.sh
Код:
mcedit /etc/iptables.sh
И пропишем в него примерно следующее:
Код:
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=000.000.000.000. ## IP Адрес сервера

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

#Блокируем нулевые пакеты
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#Закрываемся от syn-flood атак
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A  OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для DNS
$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
$IPT -A INPUT -i $WAN -p udp --dport 3978 -j ACCEPT  ## Порт который Вы указали при установке OpenVPN
$IPT -A INPUT -i $WAN -p udp --dport 80 -j ACCEPT
$IPT -A INPUT -i $WAN -p udp --dport 443 -j ACCEPT

# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef
$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw

# Логируем все из undef
$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "
$IPT -A undef_fw -j DROP

# Записываем правила
/sbin/iptables-save  > /etc/sysconfig/iptables
Даем файлу права на исполнение и запускаем:
Код:
chmod 0740 /etc/iptables_rules.sh
/etc/iptables_rules.sh
Проверить внесенные изменения можно командой
Код:
iptables -L -v -n
Установка fail2ban
В нашем случае необходимый репозиторий epel уже установлен. Если нет то необходимо установить.
Код:
wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
yum install epel-release-7-9.noarch.rpm
Установка
Код:
yum --enablerepo=epel install -y fail2ban ipset
Копируем дэфолтный конфиг
Код:
cd /etc/fail2ban/
cp jail.conf jail.local
Меняем его под себя
Код:
mcedit jail.local
переходим в
Код:
cd /etc/fail2ban/jail.d/
Создаем файл для мониторинга
Код:
touch sshd.local
Прописываем в него следущее
Код:
mcedit sshd.local
Код:
[sshd]
enabled = true
action = firewallcmd-ipset
bantime = 10800
Включаем в автозагрузку
Код:
systemctl enable fail2ban.service
Запускаем
Код:
systemctl start fail2ban.service
для проверки статуса воспользуйтесь командой
Код:
fail2ban-client status