iptables и VPN (Не ходят пинги по ВПН при включенном фаерволе)

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

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

Ale][R
Сообщения: 60
ОС: CentOS

iptables и VPN

Сообщение Ale][R »

Собственно имеем
Локалка 192.168.100.0/24
Удаленка 192.168.103.0/24
VPN между этими сетями от провайдера.
Структура примерно такая
(LocaNet-192.168.100.0/24) <=> (LAN-192.168.100.2(Zyxel1)WAN-Bridge) <=> (WAN-Bridge(Zyxel2)LAN-192.168.100.3) <=> (192.168.100.4(CiscoVLANПровайдера)192.168.103.4) <=> (LAN-192.168.103.3(Zyxel3)WAN-Bridge) <=> (WAN-Bridge(Zyxel4)LAN-192.168.103.2) <=> (RemoteNet-192.168.103.0/24)
В LocaNet-192.168.100.0/24 есть маршрутизатор под CentOS и соответственно на всех клиентах он указан шлюзом. На самам маршрутизаторе

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

# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1
[b]192.168.103.0   192.168.100.4   255.255.255.0   UG        0 0          0 eth1[/b]
192.168.0.0     192.168.100.252 255.255.255.0   UG        0 0          0 eth1
192.168.110.0   192.168.100.252 255.255.255.0   UG        0 0          0 eth1
192.168.120.0   192.168.100.252 255.255.255.0   UG        0 0          0 eth1
192.168.105.0   192.168.100.252 255.255.255.0   UG        0 0          0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
0.0.0.0         192.168.10.4    0.0.0.0         UG        0 0          0 eth0

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

#
# /usr/local/firewall.sh
#

#!/bin/sh
IPTABLES="/sbin/iptables"

# Задаем переменные
EXTIP=192.168.10.202
INTIP=192.168.100.202

# Отчищаем все правила в таблицах filter, nat и mangle

$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

# Удаляем все пользовательские цепочки в таблицах filter, nat и mangle

$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Задаем политики по умолчанию

$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP

# Создаем пользовательские цепочки. Как строить firewall каждый решает сам.
# Но лично мне удобно настраивать фаервол, когда все разбито по цепочкам
# и как бы разложено по своим полочкам. Тогда я точно знаю, что и где надо
# искать или исправлять. Думаю, названия цепочек говорят сами за себя.

$IPTABLES -N eth1-eth0 # С локалки на внешку
$IPTABLES -N eth0-eth1 # С внешки на локалку
$IPTABLES -N eth0-out # Исходящие с внешки
$IPTABLES -N eth1-out # Исходящие с локального интерфейса
$IPTABLES -N eth0-in # Входящие на внешний интерфейс
$IPTABLES -N eth1-in # Входящие на внутренний интерфейс
$IPTABLES -N icmp_packets # Пакеты ICMP

# Направляем все входящие пакеты в соответствующие цепочки.

$IPTABLES -A INPUT -d $INTIP -j eth1-in
$IPTABLES -A INPUT -d $EXTIP -j eth0-in

# Направляем все исходящие пакеты в соответствующие цепочки.

$IPTABLES -A OUTPUT -s $INTIP -j eth1-out
$IPTABLES -A OUTPUT -s $EXTIP -j eth0-out

# Разрешаем весь трафик с петлевого интерфейса.

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Разрешаем следующие типы icmp пакетов.

$IPTABLES -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT

# Для удобства фильтрации, направляем все транзитные пакеты,
# в соответствующие цепочки.
# eth1-eth0 локальная сеть -> мир
# eth0-eth1 мир -> локальная сеть

$IPTABLES -A FORWARD -i eth1 -o eth0 -j eth1-eth0
$IPTABLES -A FORWARD -i eth0 -o eth1 -j eth0-eth1

# eth1-eth0. В данную цепочку попадают все транзитные пакеты,
# направленные из локальной сети в мир.

$IPTABLES -A eth1-eth0 -p icmp -j icmp_packets
$IPTABLES -A eth1-eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-eth0 -p tcp --dport 110 -j ACCEPT
$IPTABLES -A eth1-eth0 -p tcp --dport 25 -j ACCEPT
$IPTABLES -A eth1-eth0 -p tcp --dport 23 -j ACCEPT
$IPTABLES -A eth1-eth0 -p tcp --dport 22 -j ACCEPT
$IPTABLES -A eth1-eth0 -p tcp --dport 5190 -j ACCEPT
#Для банка VPN
$IPTABLES -A eth1-eth0 -p udp --dport 87 -j ACCEPT
$IPTABLES -A eth1-eth0 -p udp --dport 99 -j ACCEPT
#/#Для банка VPN
$IPTABLES -A eth1-eth0 -j LOG --log-prefix "fp=eth1-eth0:99 a=DROP "
$IPTABLES -A eth1-eth0 -j DROP

# eth0-eth1. В данную цепочку попадают все транзитные пакеты,
# направленные из мира в локальную сеть.

$IPTABLES -A eth0-eth1 -j ACCEPT
$IPTABLES -A eth0-eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-eth1 -j LOG --log-prefix "fp=eth0-eth1:99 a=DROP "
$IPTABLES -A eth0-eth1 -j DROP

# eth1-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из локальной сети.

$IPTABLES -A eth1-in -j ACCEPT
$IPTABLES -A eth1-in -p icmp -j icmp_packets
$IPTABLES -A eth1-in -p tcp --dport 22 -j ACCEPT
$IPTABLES -A eth1-in -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth1-in -p tcp --dport 3128 -j ACCEPT
$IPTABLES -A eth1-in -p tcp --dport 6666 -j ACCEPT
$IPTABLES -A eth1-in -p tcp --dport 6667 -j ACCEPT
$IPTABLES -A eth1-in -p tcp --dport 5190 -j ACCEPT
#$IPTABLES -A eth1-in -p tcp --dport 110 -j ACCEPT
#$IPTABLES -A eth1-in -p tcp --dport 25 -j ACCEPT
#$IPTABLES -A eth1-in -p tcp --dport 87 -j ACCEPT
$IPTABLES -A eth1-in -j LOG --log-prefix "fp=eth1-in:99 a=DROP "
$IPTABLES -A eth1-in -j DROP

# eth0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из мира. Например www, smtp, ftp

$IPTABLES -A eth0-in -p icmp -j icmp_packets
$IPTABLES -A eth0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-in -j LOG --log-prefix "fp=eth0-in:99 a=DROP "
$IPTABLES -A eth0-in -j DROP

# eth1-out.

$IPTABLES -A eth1-out -j ACCEPT
$IPTABLES -A eth1-out -p icmp -j icmp_packets
$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-out -j LOG --log-prefix "fp=eth1-out:99 a=DROP "
$IPTABLES -A eth1-out -j DROP

# eth0-out.

$IPTABLES -A eth0-out -p icmp -j icmp_packets
$IPTABLES -A eth0-out -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth0-out -p tcp -m multiport --dport 80,443,8443,8080 -j ACCEPT
$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-out -j LOG --log-prefix "fp=eth0-out:99 a=DROP "
$IPTABLES -A eth0-out -j DROP

# Производим сетевую трансляцию адресов (NAT)

#$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/24 \
#-o eth0 -j SNAT --to-source 212.42.65.50
$IPTABLES -t nat -A POSTROUTING -s 192.168.100.0/24 \
-o eth0 -j SNAT --to-source $EXTIP

# "Заварачиваем" весь http трафик на squid.

$IPTABLES -t nat -A PREROUTING -s 192.168.100.0/24 \
-i eth1 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128


на маршрутизаторе
eth1 - локалка (192.168.100.202/24)
Т.е. на клиенте
IPv4-адрес. . . . . . . . . . . . : 192.168.100.90
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз. . . . . . . . . : 192.168.100.202
Делаю

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

tracert -d 192.168.103.2
Трассировка маршрута к 192.168.103.2 с максимальным числом прыжков 30
  1    <1 мс    <1 мс    <1 мс  192.168.100.202
  2     *        *        *     Превышен интервал ожидания для запроса.
  3     *        *        *     Превышен интервал ожидания для запроса.
  4     *        *        *     Превышен интервал ожидания для запроса.

Выключаю фаервол

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

# iptables -L -v
Chain INPUT (policy ACCEPT 392 packets, 210K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 DROP       icmp --  any    any     anywhere             anywhere            icmp timestamp-request

Chain FORWARD (policy ACCEPT 27 packets, 4205 bytes)
 pkts bytes target     prot opt in     out     source               destination
  338 78053 ACCEPT     all  --  eth0   eth1    anywhere             anywhere            state RELATED,ESTABLISHED
  374 32000 ACCEPT     all  --  eth1   eth0    anywhere             anywhere

Chain OUTPUT (policy ACCEPT 397 packets, 209K bytes)
 pkts bytes target     prot opt in     out     source               destination

Тогда все в порядке

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

tracert -d 192.168.103.2
Трассировка маршрута к 192.168.103.2 с максимальным числом прыжков 30
  1    19 ms    <1 мс    <1 мс  192.168.100.202
  2     2 ms     6 ms     2 ms  192.168.100.4
  3     3 ms     6 ms     6 ms  192.168.103.2
Трассировка завершена.

Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: iptables и VPN

Сообщение danger08 »

Где-то у вас транзитный ICMP режется, а вместе с ним и пинги.

Где именно, точно не скажу. Напрягает мотать листинги и следить за кучей цепочек, что там у вас куда :rolleyes:
Блогосайт - http://www.fateyev.com
Спасибо сказали:
Ale][R
Сообщения: 60
ОС: CentOS

Re: iptables и VPN

Сообщение Ale][R »

Где-то у вас транзитный ICMP режется

Совневаюсь....
Т.к. если разрешаю все всем - то пинги идут, запускаю постоянный пинг и применяю данные правила. Пинги идут. Значит они жестко не режутся...
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: iptables и VPN

Сообщение danger08 »

Ale][R писал(а):
16.02.2011 17:18

Где-то у вас транзитный ICMP режется

Т.к. если разрешаю все всем - то пинги идут, запускаю постоянный пинг и применяю данные правила. Пинги идут. Значит они жестко не режутся...

Если пинги не идут (со включенным файерволом), значит они режутся правилами.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: iptables и VPN

Сообщение Postum »

Тоже визуально не осилил.
Последними правилами в основных цепочках также включите LOG - там будут отмечаться пакеты, которые попадают в политику (DROP). Вот там и должны проявиться пакеты, которые где-то не попали под явные правила, с ними и разбирайтесь.
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: iptables и VPN

Сообщение KiWi »

Странные правила.
Особенно, под первым номером:

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

$IPTABLES -A eth0-eth1 -j ACCEPT


Если на практике его небыло, то стоит сделать так:

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

$IPTABLES -I 1 eth0-eth1 -p icmp -j icmp_packets
Спасибо сказали:
Ale][R
Сообщения: 60
ОС: CentOS

Re: iptables и VPN

Сообщение Ale][R »

Пардон, правило
$IPTABLES -A eth0-eth1 -j ACCEPT
забыл удалить. Это я уже экспериментировал....
Если на практике его небыло, то стоит сделать так:
Код
$IPTABLES -I 1 eth0-eth1 -p icmp -j icmp_packets

Не совсем согласен - это правило дает прохождение ICMP между eth0 (External) и eth1 (Internal)
По факту же у меня прописан маршрут
192.168.103.0 192.168.100.4 255.255.255.0 UG 0 0 0 eth1
т.е. должно быть как то так
LocalClient(допустим 192.168.100.25) => Шлюз(Eth1) => Шлюз(192.168.100.4) => удаленка(192.168.103.2)
Т.е. пакет идущий в сеть 192.168.103.0/24 должен входить через eth1 и через него же выходить на шлюз 192.168.100.4 а там уже дальше....
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: iptables и VPN

Сообщение KiWi »

Ale][R писал(а):
19.02.2011 23:50

Т.е. пакет идущий в сеть 192.168.103.0/24 должен входить через eth1 и через него же выходить на шлюз 192.168.100.4 а там уже дальше....

А обратно icmp магическим образом вернётся?
Просто у меня, например, нет уверенности, что conntrack нормально отловит icmp-пакеты, используемые при traceroute.
Спасибо сказали:
Ale][R
Сообщения: 60
ОС: CentOS

Re: iptables и VPN

Сообщение Ale][R »

В сети 192.168.103.0/24 шлюзом стоит 192.168.103.4, который является маршрутизатором....
И потом когда отключаю фаервол - все работает....
Спасибо сказали:
Ale][R
Сообщения: 60
ОС: CentOS

Re: iptables и VPN

Сообщение Ale][R »

Добавил правило
$IPTABLES -A FORWARD -i eth1 -o eth1 -s 192.168.100.0/24 -d 192.168.103.0/24 -j ACCEPT
Все заработало.....
Спасибо сказали: