LINUX.ORG.RU
ФорумAdmin

iptables на маршрутизаторе

 , ,


0

1

Здравствуйте. Прошу помощи в настройке iptables на маршрутизаторе. Имеется маршрутизатор Zyxel Keenetic, на нем поднят OpenVPN в качестве сервера. С рабочего компа (соответственно, выступает в качестве клиента) через Интернет подключаюсь к нему. Настроил все по инструкциям в Интернете, оттуда же взял список правил для iptables. В настоящее время доступ есть из домашний сети (которая за маршрутизатором) к клиенту, от клиента в домашнюю сеть, от клиента к внутренним ресурсам маршрутизатора (веб-админка, USB-диск, FTP-сервер) и от клиента в Интернет через данный OpenVPN-сервер. Т.к. в качестве клиента выступает компьютер на работе, к которому теоретически имеют доступ 3-и лица, то хотелось бы возможность доступа от клиента в домашнюю сеть, а также к внутренним ресурсам маршрутизатора прикрыть. Подскажите, пожалуйста, какие из строк, приведенных ниже, нужно оставить по минимуму, чтобы выполнить описанную мной задачу:

#!/bin/sh
iptables -I FORWARD 1 --source 172.10.0.0/24 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -I INPUT -i tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -t filter -A INPUT -i lo -j ACCEPT
С unix, а тем более iptables вообще не знаком, пытался разобраться, но не понял ничего :(

172.10.0.0/24 - подсеть OpenVPN;

br0 - наверно, интерфейс домашней сети;

tun0 - интерфейс OpenVPN;

lo - не уверен, но мне кажется это интерфейс для доступа к внутренним ресурсам маршрутизатора.

P.S. Может кого нибудь не затруднит простым языком объяснить, что делает каждая строчка - может я тогда и сам смогу разобраться как правильно составить iptables. Надеюсь на помощь.

lo это loopback интерфейс для программ внутри компьютера (маршрутизатора в вашем случае) по ip-протоколу (udp, tcp).

Для закрытия доступа к внутренним ресурсам маршрутизатора нужно заменить правило:

iptables -I INPUT -i tun0 -j ACCEPT
на
iptables -I INPUT -i tun0 -j DROP

Что такое br0 я не занаю, поэтому дальше советовать не буду, посмотрите вывод команды ″ip addr″ или ″ifconfig -a″, там будут ip-адреса на интерфейсах, можно будет понять куда какой интерфейс смотрит.

По правилам iptables достаточно много документации, есть и на русском, гуглите. Единственное, что не факт, что это все правила, которые у вас сейчас загружены в маршрутизаторе, лучше смотрите вывод команды ″iptables-save″ или ″iptables -L -n -v″, чтобы были видны все правила и политики встроенных цепочек.

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

Спасибо за ответ. br0 - действительно, интерфейс, смотрящий в локалку.

Это правила, которые я в ручную загружаю в маршрутизатор.

Не подскажите, что делает каждая из этих строчек?

Документацию на iptables читал, но не понял очень многого :-(

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

но не понял очень многого

Возможно, что вам нужно начнать читать более общее, в целом про то, что представляет собой поток данных на уровне ip-пакетов — пакеты ходят через интерфейсы, у каждого есть src и dst ip-адреса, всегда имеются пакеты от клиента к серверу и от сервера к клиенту и нужно, чтобы проходили и те и другие.

Ваши правила записаны в странном порядке. Так, обычно пишут ″-A″ — добавить правило в конец цепочки, у вас ″-I″ — добавить правило в начало цепочки, поэтому в iptables эти правила в другом порядке, чем в вашем скрипте.

iptables -I FORWARD 1 --source 172.10.0.0/24 -j ACCEPT разрешить прохождение не локальных пакетов с src-адресом из подсети 172.10.0.0/24 (172.10.0.0--172.10.0.255).

iptables -I FORWARD -i br0 -o tun0 -j ACCEPT разрешить прохождение не локальных пакетов пришедших с интерфейса br0 и уходящих в интерфейс tun0

iptables -I FORWARD -i tun0 -o br0 -j ACCEPT аналогично предыдущему, но интерфейсы в другом порядке (для пакетов в обратном направлении)

iptables -I INPUT -i tun0 -j ACCEPT разрешить пришедщие через tun0 локальные пакеты (пакеты, адресованные маршрутизатору).

iptables -I FORWARD -i tun0 -j ACCEPT разрешить прохождение не локальных пакетов, пришедших с интерфейса tun0 (это правило делает бессмысленным предыдущее, с ″-i tun0 -o br0″)

iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE SNAT (замена src-ip адреса) всех уходящих через br0 пакетов с использованием первого ip-адреса на интерфейсе br0

iptables -t filter -A INPUT -i lo -j ACCEPT разрешить локальные пакеты, идущие через интрейфес lo (пакеты, генерируемые сами маршрутизатором и предназначенные для него же)

Пакет идёт последовательно по различным цепочкам/таблицам iptables, вот здесь вот есть схема прохождения http://en.wikipedia.org/wiki/Iptables , там в прямоугольниках с зелёной полоской указана таблица/цепочка.

mky ★★★★★ ()

Т.к. в качестве клиента выступает компьютер на работе, к которому теоретически имеют доступ 3-и лица, то хотелось бы возможность доступа от клиента в домашнюю сеть, а также к внутренним ресурсам маршрутизатора прикрыть. Подскажите, пожалуйста, какие из строк, приведенных ниже, нужно оставить по минимуму, чтобы выполнить описанную мной задачу

Имхо как-то так:

#!/bin/sh
iptables -A FORWARD -i tun0 -o br0 -j DROP
iptables -A INPUT -i tun0 -j DROP
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT

1. Запрещаем трафик VPN -> LAN

2. Запрещаем трафик с VPN на сами ресурсы маршрутизатора.

3,4. Разрешаем остальной трафик для VPN.

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