Очень грустно стало когда переблокировали все ресурсы откуда можно качнуть сериальчики. Ну и решил я выходить на всё это через прокси сервер.
Идея состояла в том что бы поднять свой виртуальный сервер на буржуйской площадке с буржуйским внешним адресом и через vpn туннель лазить где заблагорассудится.
Да и что бы лазить могли все девайсы дома без дополнительных настроек, туннель должен быть с роутера.
Для этого я закупился сервером с IP адресом в Европе. Обходится 150 рублей за 2 ядра 2 гига оперативки и 20 гигабайт места на диске. Этого мне за глаза хватит! В принципе надо только поставить Linux и пару служб
1. OpenVPN - для поднятия шифрованного канада до роутера. (Чтоб никто не догадался что мы качаем)
2. Настроить NAT на Firewall. - что бы все кто сидит за VPN выходили в инет от имени этого сервера.
У меня ещё стоят Sockd и Squid, как прокси сервера остались с тех пор как Телеграмм был блокирован.
На сервере в качестве ОС поставил Centos 8. Просто так, потому, что на тот момент я его изучал. На этих серверах обычно стоят уже готовые системы по выбору, так что начнём настраивать!
Устанавливаем репозиторий и ставим OpenVPN и easy-rsa:
yum -y install epel-release
yum -y install openvpn easy-rsa
Сначала надо всё подготовить:
Идём в каталог easy-rsa:
cd /usr/share/easy-rsa/3
Дальше что бы не вводить одно и то же при создании ключей сделаем файлик:
vi vars
export KEY_COUNTRY="RU"
export KEY_PROVINCE="The_best_city"
export KEY_CITY="The_best_city"
export KEY_ORG="Roga&Kopita"
export KEY_EMAIL="master@yandekz.ru"
export KEY_CN="HOME"
export KEY_OU="HOME"
export KEY_NAME="name-openvpn-server.home.ru"
export KEY_ALTNAMES="name-openvpn-server"
Значения KEY_CN и KEY_OU - это для имени организации
KEY_NAME: - адрес, к которому будет подключаться
KEY_ALTNAMES — второй адрес.
Это всё для чего то надо но это не точно.
Запускаем созданный файл на исполнение:
. ./vars
1. Генерируем ключи
./easyrsa init-pki
Должна появится папка pki. смотрим коммандой ls.
Генерируем корневой сертификат (CA):
./easyrsa build-ca
После ввода Enter нужно придумать и ввести пароль и хорошенько его запомнить и никому потом не говорить.
Common Name просто нажать Enter.
Теперь надо сделать ключ Диффи-Хеллмана:
./easyrsa gen-dh
Основной комплект готов! Теперь для создания сертификата сервера необходимо создать файл запроса:
./easyrsa gen-req vpn-server nopass
Снова Common Name просто вводим Enter,
Ну и сам сертификат:
./easyrsa sign-req server vpn-server
Нужно будет ввети yes.
Confirm request details: yes
А так же наш секретный пароль который вводили для генерации, вот и пригодился.
Далее для создания ta ключа вводим команду:
openvpn --genkey --secret pki/ta.key
Сертификаты сервера изготовленны и находятся в каталоге pki.
Надо сделать каталог в /etc/openvpn, в котором будем прятать сертификаты:
mkdir -p /etc/openvpn/server/keys
Идём в каталог pki:
cd pki
И теперь копируем все созданные сертификаты:
cp ca.crt issued/vpn-server.crt private/vpn-server.key dh.pem ta.key /etc/openvpn/server/keys/
2. Запуск ракеты сервера
Проводим конфигурацию сервера openvpn:
nano /etc/openvpn/server/server.conf
Там надо написать что то типа:
local {Внешинй адрес сервера}
port 1194 #порт сервера
proto udp
dev tun
ca keys/ca.crt
cert keys/vpn-server.crt
key keys/vpn-server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 0
mute 20
daemon
mode server
tls-server
comp-lzo no
Надо вставить свои значения
local: IP-адрес, сервера
port: сетевой порт
Создаем каталог для логов сервера:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn:
systemctl enable openvpn-server@server
И запускаем его:
systemctl start openvpn-server@server
C ОpenVPN кончили, теперь надо натроить firewall.
Есть выбор firewalld и iptables.
Настроив на первом у меня возникли проблемы с нагрузкой на систему. Поэтому я перешел на тёмную сторону iptables.
Отключение firewalld:
systemctl stop firewalld
systemctl disable firewalld
Установка iptables:
yum -y install iptables-services
systemctl enable iptables.service
systemctl restart iptables.service
Настройка iptables:
Для управления правилами фаервола мы будем использовать скрипт. Создадим его:
nano /etc/iptables.sh
Туда вписываем такое:
#!/bin/bash
export IPT="iptables"
# Внешний интерфейс
export WAN=ens3
export WAN_IP={Адрес сервера}
# Локальная сеть
export LAN1=tun0
export LAN1_IP_RANGE=172.60.0.0/24
# Очищаем правила
$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
# Разрешаем localhost и локалку
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN1 -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN1 -j ACCEPT
# Рзрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Разрешаем исходящие подключения сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT
$IPT -A INPUT -i $WAN -j ACCEPT
# разрешаем установленные подключения
$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
# Отбрасываем неопознанные пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -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
# Блокируем доступ с указанных адресов
# $IPT -A INPUT -s 84.122.21.197 -j REJECT
# Разрешаем доступ из локалки наружу
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
# Закрываем доступ снаружи в локалку
$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
# Включаем NAT
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
# открываем доступ к SSH
$IPT -A INPUT -i $WAN -p tcp --dport 22022 -j ACCEPT
# Открываем SOCKD
$IPT -A INPUT -i $WAN -p tcp --dport 55514 -j ACCEPT
# OpenVPN
$IPT -A INPUT -i $WAN -p tcp --dport 1194 -j ACCEPT
# На всякий случай
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем доступ к web серверу
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Открываем доступ к DNS серверу
$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Сохраняем правила
/sbin/iptables-save > /etc/sysconfig/iptables
Вот такая портянка. Сохраняем скрипт, делаем исполняемым и запускаем:
chmod 0740 /etc/iptables.sh
/etc/iptables.sh
Посмотреть правила можно командой:
iptables -L -v -n
На этот конфигурация сервера закончена. Конфигурировать роутер будем в следующей части.
Всем удачи в постижении науки!