LINUX.ORG.RU
ФорумAdmin

Как настроить OpenVPN на CentOS, чтобы предотвратить несанкционированный доступ

 , ,


0

1

Всем привет,

Есть сервер на CentOS 7, установлен OpenVPN server и dnsmasq. К нему (OpenVPN) коннектятся клиенты - всё ок, но возникли вопросы:

1. правильно ли настроил iptables и «прячутся» (masquarde) ли подключенные клиенты от внешнего мира за внешним ip:

*nat
:PREROUTING ACCEPT [249:15245]
:POSTROUTING ACCEPT [29:2008]
:OUTPUT ACCEPT [29:2008]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source x.x.x.x #внешний ip сервера
COMMIT
*raw
:PREROUTING ACCEPT [5147:2173449]
:OUTPUT ACCEPT [2285:1959208]
COMMIT
*mangle
:PREROUTING ACCEPT [5147:2173449]
:INPUT ACCEPT [2239:389206]
:FORWARD ACCEPT [2908:1784243]
:OUTPUT ACCEPT [2285:1959208]
:POSTROUTING ACCEPT [5187:3742815]
COMMIT
*filter
:INPUT DROP [45:2526]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [2279:1958572]
:f2b-openvpn - [0:0]
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p udp -m multiport --dports 1194 -j f2b-openvpn
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport xxxx -j ACCEPT #тут порт ssh

2. Как сделать доступ из сегмента 10.8.0.x к 192.168.1.x? Т.е. клиент 10.8.0.2 «видит» клиентов с ip 192.168.1.x

Или так лучше не делать из-за:

NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x. Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.



Последнее исправление: JohnnyW (всего исправлений: 4)

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source x.x.x.x #внешний ip сервера

Зачем два раза? Для натов лучше всегда задавать интерфейс на котором он будет выполняться.

Т.е. если на eth0 допустим у Вас адрес 1.1.1.1 не меняется то

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
если меняется, то
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

trancefer ★★
()

2. Как сделать доступ из сегмента 10.8.0.x к 192.168.1.x? Т.е. клиент 10.8.0.2 «видит» клиентов с ip 192.168.1.x

Либо иметь маршрут на 192.168.1/24 в 10.8/24 (через default тоже будет работать, если для них default - Ваш VPN сервер).

Либо снатить на tun трафик из 10.8/24, т.е. если 192.168.1.1 - адрес VPN сервера в этой сети:

-A POSTROUTING -o tun0 -s 10.8.0.0/24 -d 192.168.1/24 -j SNAT --to-source 192.168.1.1

Подразумевается, что 10.8/24 - это VPN сеть.

trancefer ★★
()
Последнее исправление: trancefer (всего исправлений: 1)
Ответ на: комментарий от trancefer

Зачем два раза? Для натов лучше всегда задавать интерфейс на котором >он будет выполняться.

Не удалил после установщика OpenVPN. CentOS на VPS, поэтому вместо eth0 venet0.

Вот такие интерфейсы присутствуют:


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT                    
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue stat                    e UNKNOWN mode DEFAULT
    link/void
3: gre0: <NOARP> mtu 1476 qdisc noop state DOWN mode DEFAULT
    link/gre 0.0.0.0 brd 0.0.0.0
4: gretap0: <BROADCAST,MULTICAST> mtu 1476 qdisc noop state DOWN mode DEFAULT ql                    en 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast sta                    te UNKNOWN mode DEFAULT qlen 100
    link/none

JohnnyW
() автор топика
Ответ на: комментарий от trancefer

В общем, я окончательно запутался:

iptables -S показывает такое (вместо xxxx - порт SSH):

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N f2b-openvpn
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p udp -m multiport --dports 1194 -j f2b-openvpn
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport xxxx -j ACCEPT
-A INPUT -p tcp -m tcp --dport xxxx -m state --state NEW -m recent --set --name ssh --rsource
-A INPUT -p tcp -m tcp --dport xxxx -m state --state NEW -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A f2b-openvpn -j RETURN

В /etc/sysconfig/iptables такое:

*nat
:PREROUTING ACCEPT [249:15245]
:POSTROUTING ACCEPT [29:2008]
:OUTPUT ACCEPT [29:2008]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source x.x.x.x
#-A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source x.x.x.x   #добавил по вашей рекомендации
COMMIT
*raw
:PREROUTING ACCEPT [5147:2173449]
:OUTPUT ACCEPT [2285:1959208]
COMMIT
*mangle
:PREROUTING ACCEPT [5147:2173449]
:INPUT ACCEPT [2239:389206]
:FORWARD ACCEPT [2908:1784243]
:OUTPUT ACCEPT [2285:1959208]
:POSTROUTING ACCEPT [5187:3742815]
COMMIT
*filter
:INPUT DROP [45:2526]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [2279:1958572]
:f2b-openvpn - [0:0]
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p udp -m multiport --dports 1194 -j f2b-openvpn
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport xxxx -j ACCEPT
-A INPUT -p tcp -m tcp --dport xxxx -m state --state NEW -m recent --set --name ssh --rsource
-A INPUT -p tcp -m tcp --dport xxxx -m state --state NEW -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A f2b-openvpn -j RETURN
COMMIT

При этом «iptables-restore < /etc/sysconfig/iptables» не восстанавливает правила POSTROUTING и при повторном запуске iptables -S там ничего по POSTROUTING...

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

Ну дык ясное дело, Вы ему и не указали выводить таблицу nat. А по дефолту он выводит таблицу filter.

iptables -t nat -S
trancefer ★★
()
Ответ на: комментарий от trancefer

Добавил

-A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source x.x.x.x 

Как проверить, что это правило работает корректно?

JohnnyW
() автор топика
Ответ на: комментарий от trancefer

1. ping -I 10.8.0.3 <внешний ip сервера> дает такую ошибку:

bind: Cannot assign requested address

2. ping -I 10.8.0.1 <внешний ip сервера>:

PING <внешний ip сервера> (<внешний ip сервера>) from 10.8.0.1 : 56(84) bytes of data.

--- <внешний ip сервера> ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8000ms

3. ping -I 10.8.0.1 8.8.8.8

PING 8.8.8.8 (8.8.8.8) from 10.8.0.1 : 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=7.25 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=7.26 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=9.07 ms
...
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8008ms

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