iptables, пропуск pptp соединений (никак не могу понять принцип)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

iptables, пропуск pptp соединений

Сообщение bakulenko »

Доброе время суток.

Есть CentOS.
На ней стоит openvpn сервер, к которому коннектится один клиент.
Получается два интерфейса: eth0 и tun0.

Вот такой нехитрый набор правил.

Код: Выделить всё

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6714106:4959556549]
:RH-Firewall-1-INPUT - [0:0]
[17:1019] -A INPUT -p gre -j ACCEPT
[7646818:2173485262] -A INPUT -j RH-Firewall-1-INPUT
[9952937:5896139574] -A FORWARD -j RH-Firewall-1-INPUT
[198:422955] -A RH-Firewall-1-INPUT -i lo -j ACCEPT
[12976730:6555466094] -A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
[4622827:1513735787] -A RH-Firewall-1-INPUT -i tun0 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p esp -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p ah -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p gre -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 123 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
[0:0] -A RH-Firewall-1-INPUT -p gre -j ACCEPT
COMMIT


*nat
:PREROUTING ACCEPT [501386:35305754]
:POSTROUTING ACCEPT [13:768]
:OUTPUT ACCEPT [28023:1987182]
[235952:14953770] -A POSTROUTING -o eth0 -j MASQUERADE
COMMIT


С Линуксом работаю недавно, после фришного ipfw перейти на осмысление iptables как то сложновато.
Не понятен такой момент. НАТ работает. Пакеты с tun0 как положено модифицируются и выходят с внешнего адреса сервака, обратный трафик тоже входит легко и непринужденно.
Но как только клиент пытается подцепиться к некоторому PPTP-серваку, трафик по tcp:1723 идет двунаправленный, а gre-пакеты идут только наружу, ответы, как показал tcpdump в обратку идут, но не проходят eth0 или недоходят до tun0.
Просветите, пожалуйста, как такое может быть? В чем принципиальная разница между прохождением tcp пакета и gre-пакета?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables, пропуск pptp соединений

Сообщение pelmen »

А какой смысл делать кучу ACCEPT правил, если политики по умолчанию ACCEPT?
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

pelmen писал(а):
07.05.2010 09:30
А какой смысл делать кучу ACCEPT правил, если политики по умолчанию ACCEPT?


Ну может потому, что есть один REJECT и он реально срабатывает.
Собственно, сервак мне дали поглядеть, я только пару строк вставил от себя. Конфигурация такая с нуля. Причем сервак удаленный, а на удаленных машинах лучше по умолчанию все принимать, пока до конца не разберешься.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: iptables, пропуск pptp соединений

Сообщение KiWi »

ip_conntrack_proto_gre
ip_conntrack_pptp

Включены?
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

KiWi писал(а):
08.05.2010 01:10
ip_conntrack_proto_gre
ip_conntrack_pptp

Включены?


Спасибо, гляну.
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: iptables, пропуск pptp соединений

Сообщение taaroa »

bakulenko писал(а):
07.05.2010 06:57
С Линуксом работаю недавно, после фришного ipfw перейти на осмысление iptables как то сложновато.

Хм... ну я бы Вас еще мог понять, если сравнивать pf из OpenBSD с iptables...

По теме:

Код: Выделить всё

# zegrep '_PPTP|_GRE' /proc/config.gz
CONFIG_NF_CT_PROTO_GRE=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_NAT_PROTO_GRE=y
CONFIG_NF_NAT_PPTP=y

...и если так уж хочется простоты, удобства и наглядности в стиле pf, то можно использовать ferm.
:wq
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

taaroa писал(а):
08.05.2010 13:15
...и если так уж хочется простоты, удобства и наглядности в стиле pf, то можно использовать ferm.


Да по большому счету, не так уж и нужно простоты и удобства. Просто хочется понять, чем так отличается gre-пакет от tcp, если на freebsd он легко ходит без всяких излишеств - есть правило пропускать ip пакеты - идет, нет - не идет.
Да и фаер нужен в этом конкретном случае простой, главное чтоб пакеты натил с tun0.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

bakulenko писал(а):
08.05.2010 13:46
чем так отличается gre-пакет от tcp
только названием, конечно.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

sash-kan писал(а):
08.05.2010 17:59
bakulenko писал(а):
08.05.2010 13:46
чем так отличается gre-пакет от tcp
только названием, конечно.


Так отчего ж тогда ответные пакеты не проходят, раз дело в названии? Я вот смотрю на эти цепочки и понять не могу, что надо сделать то, чтоб заработало как надо.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

bakulenko
ирония без смайликов не воспринимается?

bakulenko писал(а):
08.05.2010 19:51
что надо сделать
насколько я понимаю, задействовать connection tracking для протокола gre.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: iptables, пропуск pptp соединений

Сообщение bormant »

Намёк:

Код: Выделить всё

egrep "tcp|gre" /etc/protocols
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

KiWi писал(а):
08.05.2010 01:10
ip_conntrack_proto_gre

Такого не нашел. Нашел ip_gre. Загрузил.

ip_conntrack_pptp
Включены?


Загрузил. Пошла двусторонняя связь по 47 протоколу.
Но впн цепляется с переменным успехом. Три попытки в молоко, потом зацепится. Отключишь, опять несколько неудачных попыток и опять зацепится.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

лог, что ли, покажите. этих удачных/неудачных попыток.
$ sudo pppd call <ваш провайдерский файл> dump debug nodetach hide-password
?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

sash-kan писал(а):
12.05.2010 05:17
лог, что ли, покажите. этих удачных/неудачных попыток.
$ sudo pppd call <ваш провайдерский файл> dump debug nodetach hide-password
?



Не совсем понял какой лог показать.
Схема такая. Есть сервер на openSuse. Он по openvpn клиентится к CentOs openvpn-серверу. И есть клиент на WinXp, для которого openSuse является роутером по умолчанию. Так вот клиент-PPTP XP хочет зацепиться к серверу в инете.

Клиент WinXP -----> (openSuse ------> CentOS ) ----> некий PPTP-сервер в инете

Опытным путем обнаружил, что первая попытка на сей момент увенчивается успехом. Правда PPTP-сервак беру свой. На других не проверял.
Потом отключаю виндовый впн. Пробую повторить. Все. Хана. Ошибка 619. Пробовал выждать какое то время, полагая, что может какие то остатки канала живут своей жизнью и не дают создать новый. Удалось установить, что # service iptables restart позволяет еще раз успешно подключиться.
Я даже убрал подгрузку модулей ip_gre и ip_conntrack_pptp - все в первый раз цепляется, последующие попытки неудачны.


Правка:
Убрал загрузку указанных выше модулей - уже три попытки подряд проходят как положено. Попробую соединиться с другим серваком.
Решительно ничего не понимаю, еще вчера эта схема без подгрузки модулей вообще не давала двусторонний обмен на 47 протоколе.
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

Попутно возник вопрос.
Когда я цепляюсь к своему PPTP серверу, tcpdump показывает, что первый пакет по 47 протоколу идет от имени openvpn сервера, то есть, это оттранслированый NAT'ом пакет. А когда цепляюсь к другому серверу - первый gre-пакет идет на вход к openvpn-шлюзу. И есть ощущение, что он тупо не проходит в сеть, ведь NAT еще не знает, к кому из внутренней сети его завернуть.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

bakulenko писал(а):
12.05.2010 12:27
Не совсем понял какой лог показать.
лог подключения. который выдаст в stdout приведённая команда. у вас ведь есть настроенный клиент под gnu/linux-ом? вот на нём и запускайте.

p.s. но если у вас там проблемы с маршрутизацией пакетов, то этот лог смотреть преждевременно — из него подробности о таких проблемах узнать практически невозможно.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

Так, появилось время, вернусь к проблеме.
После чтения советов в данной теме и гугления есть потребность в модуле ip_conntrack_proto_gre.
Но, его нет в системе, а модуль ip_gre, похоже, не для того создан, ибо с ним вроде и работает, но ровно первое соединение. После разрыва соединиться повторно не получается.

Вопрос. Где взять ip_conntrack_proto_gre? Предполагаю, что надо пересобрать ядро и скомпилить или вкомпилить данный модуль. Это единственный вариант?
Компилить ядро боязно, ибо комп находится в другом городе, и если ошибиться с вкомпиливанием железяк, можно остаться без сети и прощай удаленный доступ. Поэтому хочется знать, есть ли менее рискованные варианты?

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

bakulenko писал(а):
19.05.2010 12:34
есть ли менее рискованные варианты?
сформулируйте, пожалуйста, какая у вас на данный момент проблема. (насколько я понял из топика, conntrack у вас работает и собирать какие-то эфемерные модули не требуется).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: iptables, пропуск pptp соединений

Сообщение danger08 »

bakulenko, если не получится, попробуйте pptpproxy (на пограничном роутере сети).
Пакеты для CentOS есть здесь.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

sash-kan писал(а):
19.05.2010 13:43
bakulenko писал(а):
19.05.2010 12:34
есть ли менее рискованные варианты?
сформулируйте, пожалуйста, какая у вас на данный момент проблема. (насколько я понял из топика, conntrack у вас работает и собирать какие-то эфемерные модули не требуется).


Да нифига не работает. Вообще. Все, что поменялось - перегрузился с более свежим дефолтным ядром, обновленным через yum.
В ядре centos'a вообще не нашел опции XX_conntrack_proto_gre. В opensuse дома есть, а тут нет.
Никаких эфемерных модулей собирать не хотел, но везде в инете пишут о необходимости пользовать ip_conntrack_pptp и ip_conntrack_proto_gre. Второго в системе нет, соответственно, нет поддержки vpn-соединений.
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

danger08 писал(а):
24.05.2010 08:56
bakulenko, если не получится, попробуйте pptpproxy (на пограничном роутере сети).
Пакеты для CentOS есть здесь.


Качнул, поставил, запустил. Никакого толку. Обмен пакетами идет через прокси, но соединение не поднимается.
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

Так, я немного обманул в предыдущем посту. Совсем упустил из виду, что к openvpn я подключался через шлюз на еще одном линуксе. Получается, в цепочке у меня было два линукса: CentOS и OpenSUSE, через который я на CentOS и выхожу. На одном я шаманил, шаманил, а на втором то совсем забыл подгрузить модуль conntrack_pptp. Модуль для gre был уже запущен.
Но, ситуацию это изменило совсем немного. Работает соединение с удаленным PPTP-сервером ровно 1 раз - после перезапуска iptables. Делаешь дисконнект и все, больше не подсоединишься.
Полагаю, проблема все-таки в отсутствии на CentOS модуля p_conntrack_proto_gre.
Где его взять?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iptables, пропуск pptp соединений

Сообщение sash-kan »

bakulenko писал(а):
07.06.2010 10:48
В ядре centos'a вообще не нашел опции XX_conntrack_proto_gre
естественно. посмотрите версию ядра и сравните с той, в которой появился этот модуль: http://cateee.net/lkddb/web-lkddb/NF_CT_PROTO_GRE.html
до Sun Feb 4 10:44:54 2007 -0800, когда вышел релиз linux 2.6.20, как-то ведь и без этого модуля множественные pptp-туннели работали.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: iptables, пропуск pptp соединений

Сообщение danger08 »

bakulenko писал(а):
07.06.2010 13:00
Полагаю, проблема все-таки в отсутствии на CentOS модуля p_conntrack_proto_gre.
Где его взять?

У меня стоит pptpproxy для подключения извне к серверу, находящемуся в локалке.
То есть, схема такая: на CentOS-е "белый" адрес в Интернете (по нему производится подключение внешних клиентов) и pptp-прокси, который пробрасывает подключения в локалку на внутренний pptp-сервер. Никаких модулей дополнительных модулей (*_gre, *_pptp, *pptp/gre*_conntrack, etc) не загружено, все работает и так (что вполне логично для такой схемы).

Смотрите другой ваш шлюз, возможно там рубается GRE. Попробуйте для эксперимента разрешить весь транзитный GRE-трафик. Как вариант, вообще откажитесь от PPTP (у нас стоит из-за Windows в смартфонах, которые вроде ничего не умеют, кроме PPTP).
Блогосайт - http://www.fateyev.com
Спасибо сказали:
bakulenko
Сообщения: 202
ОС: Ubuntu 12.04

Re: iptables, пропуск pptp соединений

Сообщение bakulenko »

danger08 писал(а):
08.06.2010 15:37
У меня стоит pptpproxy для подключения извне к серверу, находящемуся в локалке.
То есть, схема такая: на CentOS-е "белый" адрес в Интернете (по нему производится подключение внешних клиентов) и pptp-прокси, который пробрасывает подключения в локалку на внутренний pptp-сервер. Никаких модулей дополнительных модулей (*_gre, *_pptp, *pptp/gre*_conntrack, etc) не загружено, все работает и так (что вполне логично для такой схемы).

Смотрите другой ваш шлюз, возможно там рубается GRE. Попробуйте для эксперимента разрешить весь транзитный GRE-трафик. Как вариант, вообще откажитесь от PPTP (у нас стоит из-за Windows в смартфонах, которые вроде ничего не умеют, кроме PPTP).


У меня клиенты подрубаются изнутри на внешние pptp-серверы, причем их количество мне не известно, не известны и все адреса, на которые они захотят подключиться. Сервак не мой, просто попросили поглядеть что и как.
Я поставил pptpproxy для пробы, все работает. Но я в документации для моего случая нашел лишь один вариант: слушать 1723 локально, и указывать фиксированный pptp-сервак в инете. Клиенты цепляются на CentOS, а она их редиректит на внешний сервер. Но как быть, если надо подрубиться к двум сервакам? Да и прозрачность не помешает. Не могу же я каждому клиенту сообщать, что ему клиента нужно настроить на подключение не к тому ppptp серваку, адрес которого ему выдали, а к моему редиректному.
В общем, есть нюансы, от которых я избавиться не могу, хотя для себя вариант отметил, спасибо.



Спасибо сказали: