Найти в Дзене
Louso Live

Свой прокси сервер с VPN каналом с домашнего роутера.(Часть 1: Сервер)

Оглавление

Очень грустно стало когда переблокировали все ресурсы откуда можно качнуть сериальчики. Ну и решил я выходить на всё это через прокси сервер.

Идея состояла в том что бы поднять свой виртуальный сервер на буржуйской площадке с буржуйским внешним адресом и через 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

На этот конфигурация сервера закончена. Конфигурировать роутер будем в следующей части.

Всем удачи в постижении науки!