OpenVPN: Настройка на собственном сервере. Часть 3 — iptables
- OpenVPN: Настройка на собственном сервере. Часть 0 — подготовка системы.
- OpenVPN: Настройка на собственном сервере. Часть 1 — сертификаты.
- OpenVPN: Настройка на собственном сервере. Часть 2 — конфигурация сервера.
- OpenVPN: Настройка на собственном сервере. Часть 3 — iptables
- OpenVPN: Настройка на собственном сервере. Часть 4 — конфигурация клиента.
В предыдущей части мы наконец-то сервер запустили. Но достучаться до него возможности нет поскольку iptables все еще не настроены и блокируют все подряд.
Как сказали на одном из формумов: в сети есть множество руководств по iptables для openvpn, но ни одно из них не работает.
В продолжении еще одно :)
Разрешаем коннекты к серверу (в прошлый раз мы настроили дефолтный впн через udp. Поэтому здесь мы открываем только подключение udp.
iptables -I INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
Обратите внимание, что нужно использовать модификатор -I, который добавит это правило первым к цепочке. Если же использовать -A как рекомендуют некоторые, то правило будет добавлено к цепочке последним. А как мы знаем - последним правилом в цепочке стоит reject. И это значит, что добавляй после него или не добавляй правила - ничего не заработает.
Кстати из-за подобной ошибки (способа добавления правила в цепочку можно порой у некоторых видеть такую ошибку:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
Это как раз значит, что сервер не смог ответить на “рукопожатие”. Т.е. порт заблокирован или где-то на пути к серверу не работает форвардинг пакетов.
Теперь разрешим интерфейсу tun коммуникацию с другими интерфейсами в системе.
iptables -I FORWARD -i tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
Включим nat (как вы помните из предыдущей части - сервер настроен в режиме роутера, а не моста - поэтому nat обязателен).
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
В цепочке POSTROUTE чаще всего нет reject. Поэтому смело используем -A.
И последний шаг - разрешить исходящий трафик на tun-инмерфейсе.
iptables -A OUTPUT -o tun+ -j ACCEPT
Теперь самый важный шаг: проверить, что все заработало
$ sudo nmap -sU -p1194 X.X.X.X
Starting Nmap 7.00 ( https://nmap.org ) at 2016-01-24 21:33 MSK
Nmap scan report for X.X.X.X
Host is up (0.089s latency).
PORT STATE SERVICE
1194/udp open|filtered openvpn
Nmap done: 1 IP address (1 host up) scanned in 1.08 seconds
Если у вас похожий вывод - сохраняем правила iptables и генерируем клиентский конфиг в следующей части.
$ sudo /usr/libexec/iptables.init save
Ниже конфиг /etc/sysconfig/iptables, который я приведу для сравнения (если у вас что-то не заработало).
*nat
:PREROUTING ACCEPT [80:8210]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [24:11832]
:POSTROUTING ACCEPT [24:11832]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [66:10292]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o tun+ -j ACCEPT
COMMIT
Категории: HowTo