LINUX.ORG.RU
ФорумAdmin

Спрятать VDS веб сервер за VPN

 , ,


0

1

Есть VDS сервер с CentOS 7, iptables, apache, ssh. Есть купленный VPN аккаунт с выделенным ip. Необходимо чтобы VDS автоматически подключался к VPN. Апач должен работать только через VPN. SSH должен работать только через реальный IP.

OpenVPN на VDS установил; конфиг, сертификаты и ключ от VPN провайдера залил в /etc/openvpn. После подключения VDS к VPN сервак перестает пинговаться, веб страница не открывается ни по реальному IP, ни по выделенному VPN. Iptables отключал, не помогло.

Подскажите как быть? В интернете статей не нашел, может не правильно искал, но все статьи на тему «как поднять свой VPN сервер»...

В интерфейс с «реальным» айпи пробрасываешь общение по ssh а весь остальной трафик заварачиваешь в свой впн (default маршрут прописываешь на интерфейс опенвпна). На втором конце прописываешь правило для 80-го порта и пробрасываешь его на vds подключенный к впну.

anonymous
()
Ответ на: комментарий от anonymous

В интерфейс с «реальным» айпи пробрасываешь общение по ssh

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT Так верно?

а весь остальной трафик заварачиваешь в свой впн

думаю правильнее только 80 и 443 порты направить по VPN. В любом случае openvpn сам все прописывает, где там маршруты задавать?

На втором конце прописываешь правило для 80-го порта и пробрасываешь его на vds подключенный к впну.

Может здесь и есть вся загвоздка, но по идее весь траффик уже должен быть перенаправлен, т.к. я заказывал выделенный IP у VPN провайдера.

akokarev
() автор топика

Всё-таки проблема была с пробросом портов на стороне VPN сервера. Теперь VDS подключается к VPN, сайт открывается. Осталось сделать чтоб ssh работал напрямую.

Хостер рекомендовал удалить маршрут по-умолчанию в конфиге ovpn, но тогда не понятно как пробросить маршрут для WEB сервера через ovpn?

Конфиг OpenVPN

client
remote 77.77.77.202 443
proto tcp
dhcp-option DNS 8.8.8.8
redirect-gateway def1
ca in_ca.crt
cert in_123.crt
key in_123.key
ns-cert-type server
dev tap
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 4
mute 20

Скрипт настройки iptables

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=40.30.20.198

# Интерфейс VPN соединения
export VPN=tap0
export VPN_IP=10.10.10.200

# Очистка всех цепочек 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
$IPT -A OUTPUT -o $VPN -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

# Открываем порт для SSH
$IPT -A INPUT -i $WAN -p tcp --dport 2082 -j ACCEPT
$IPT -A INPUT -i $VPN -p tcp --dport 2082 -j ACCEPT

# Открываем порт для DNS
$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -i $VPN -p udp --dport 53 -j ACCEPT


# Открываем порт для NTP
$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT
$IPT -A INPUT -i $VPN -p udp --dport 123 -j ACCEPT


# Разрешаем отвечать на PING
$IPT -A INPUT -p icmp --icmp-type 8/0 -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 8/0 -j ACCEPT
# VPN пинги не проходят в любом случае

# Открываем порт для WEB
$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i $VPN -p tcp --dport 80 -j ACCEPT

# Открываем порт для FTP
# $IPT -A INPUT -i $WAN -p tcp --dport 21 -j ACCEPT
# $IPT -A INPUT -i $VPN -p tcp --dport 21 -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

Таблица маршрутизации

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.10.1      128.0.0.0       UG    0      0        0 tap0
0.0.0.0         40.30.20.193    0.0.0.0         UG    0      0        0 eth0
10.96.0.0       0.0.0.0         255.224.0.0     U     0      0        0 tap0
40.30.20.193    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
77.77.77.202    40.30.20.193    255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.10.10.1      128.0.0.0       UG    0      0        0 tap0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 40.30.20.198  netmask 255.255.255.255  broadcast 40.30.20.255
        inet6 fe80::5054:ff:fe0c:3f41  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:0c:3f:41  txqueuelen 1000  (Ethernet)
        RX packets 4046  bytes 893834 (872.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1974  bytes 175476 (171.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.10.200  netmask 255.224.0.0  broadcast 10.127.255.255
        inet6 fe80::40a7:62ff:fe2c:81be  prefixlen 64  scopeid 0x20<link>
        ether 42:a7:62:2c:81:be  txqueuelen 100  (Ethernet)
        RX packets 2972  bytes 489800 (478.3 KiB)
        RX errors 0  dropped 18  overruns 0  frame 0
        TX packets 103  bytes 25054 (24.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

akokarev
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.