The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как разграничить локальные подсети?, очевидно в цепочке FOR..., !*! gard, 02-Май-09, 18:59  [смотреть все]
Здравствуйте! =)
Есть проблема, но сначала предыстория.. Схема: Internet - ppp0(eth0) - Router(Ubuntu) - eth1 - LAN. В общем в правилах iptables локальной сети разрешено выходить в интернет, по причине желаемого ограничения скорости некоторых клиентов локальной сети эта сеть была разбита на 2.

То есть у меня есть eth1 192.168.20.1 которая принадлежит как уже понятно сети вида 192.168.20.0/24, адреса в этой сети раздаются по DHCP (который прицеплен на eth1), мной был создан алиас eth1:0 192.168.10.1 находящийся в своей подсети вида 192.168.10.0/24. Все это было проделано для:
- пользователям более "важной" группы отдаются адреса в подсети 192.168.10.0/24, прописываются ручками
- всем остальным пользователям при подключении автоматически присваивается адрес в подсети 192.168.20.0/24 сервером DHCP
- у первых скорость в Инете выше, у вторых ниже (шейпер)
- удобно быстро воткнуть новый компьютер.

Но все бы ничего, но проблема! Компьютер 192.168.10.2 у меня преспокойно пингует 192.168.20.1 (eth1), разве это возможно? Это же другая подсеть! Я вроде и в FORWARD в iptables уже написал:

$IPTABLES -A FORWARD -s $LAN1_IP_RANGE -d $LAN2_IP_RANGE -j DROP
$IPTABLES -A FORWARD -s $LAN2_IP_RANGE -d $LAN1_IP_RANGE -j DROP
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
где LAN1_IP_RANGE = "192.168.10.0/24", а LAN2_IP_RANGE = "192.168.20.0/24", LAN_IFACE = "eth0". Никаких маршрутов не прописывал, ибо неважно разбираюсь как то в них. Но.. пинг как шел так и идет.. а нужно (желательно) чтобы подсеть 10 не имела доступа к подсети 20, только к интернету. Жду помощи, советов, рассуждений и прочих отзывов. =)

Вот.. подумал что нелишним будет весь скрипт iptables:

#!/bin/bash
################################################################################
##########
#1.Конфигурация: интернет, локальная сеть, lo, модули не проверяем каждый раз..
INET_IFACE="ppp0"
LAN1_IP="192.168.10.1"
LAN1_IP_RANGE="192.168.10.0/24"
LAN2_IP="192.168.20.1"
LAN2_IP_RANGE="192.168.20.0/24"
LAN_IFACE="eth1"
LO_IFACE="lo"
LO_IP="127.0.0.1"
IPTABLES="iptables"

################################################################################
##########
#2.Очистка цепочек и удаление созданных цепочек.
$IPTABLES -t filter -F
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -t filter -X

################################################################################
##########
#3.Установка правил
#3.1.Устанвока политик по-умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

#3.2.Создание собственных цепочек _таблицы_filter_
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

#3.3.Наполнение собственных цепочек _таблицы_filter_ правилами
#цепочка bad_tcp_packets (syn/ask пакеты со сброшенным битом syn, со статусом new, но сброшенным битом syn)
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
#цепочка allowed, tcp, udp, icmp пакетов
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#>цепочка tcp_packets (разрешаем доступ извне по SSH, маскируя порт от сканирования)
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh --update --seconds 3600 --hitcount 8 -j REJECT
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh --set
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -j allowed
#>цепочка udp_packets (разрешаем прохождение ответов от внешнего DNS-сервера, ICQ, udp-наводнение пресекается политикой DROP)
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 5190 -j ACCEPT
#цепочка icmp_packets (пинг, ответ об умершем пакете, остальные д. принадлежать либо к ESTABLISHED либо к RELATED соединениям)
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#>>дополнительная защита от фрагментированных пакетов (вероятное ping-наводнение)
$IPTABLES -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "fragment icmp packets DROP: "
$IPTABLES -A icmp_packets --fragment -p ICMP -j DROP

#3.4.цепочка PREROUTING
#3.4.1.таблица mangle
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE -j TTL --ttl-inc 1
#пришедшие для SSH, , маркируем эти пакеты (для дальнейшей приоретизации скорости в iproute2)
#$IPTABLES -t mangle -A PREROUTING -p tcp -s 0/0 --dport 22 -j MARK --set-mark 11
#3.4.2.таблица nat
#перенаправление порта для организации прозрачного проксирования в squid (+ открыть в INPUT порт 3128 для LAN)
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -p tcp --dport 80 -j REDIRECT --to-ports 3128
#3.5.цепочка INPUT
#3.5.1.таблица mangle
#3.5.2.таблица filter
#проверка пакетов, идущих на маршрутизатор (валидность, из локальной сети, от самого себя)
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN1_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN2_IP_RANGE -j ACCEPT
#squid
#iptables -A INPUT -p TCP -s $LAN1_IP_RANGE --dport 3128 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
#остальные либо связанные с ESTABLISHED,RELATED соединениями, либо направляются в соответствующие цепочки
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#логирование не пропущенных пакетов
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "

#3.6.цепочка FORWARD
#3.6.1.таблица mangle
#3.6.2.таблица filter
#проверка транзитных пакетов (валидность, идут ли из локальной сети, принадлежат ли ESTABLISHED,RELATED соединениям)
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
$IPTABLES -A FORWARD -s $LAN1_IP_RANGE -d $LAN2_IP_RANGE -j DROP
$IPTABLES -A FORWARD -s $LAN2_IP_RANGE -d $LAN1_IP_RANGE -j DROP
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#логирование не пропущенных пакетов
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "

#3.7.цепочка OUTPUT
#3.7.1.таблица mangle
#маркировка пакетов для iproute2
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 0x3
$IPTABLES -t mangle -A OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x4
$IPTABLES -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x4
$IPTABLES -t mangle -A OUTPUT -p ALL -j MARK --set-mark 0x5
#3.7.2.таблица nat
#3.7.2.таблица filter
#проверка исходящих от роутера пакетов (валидность, идут с нашего $INET_IFACE, на $LAN1_IP или $LO_IP)
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN2_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT
#логирование не прошедших
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

#3.8.цепочка POSTROUTING
#3.8.1.таблица mangle
$IPTABLES -t mangle -A POSTROUTING -p udp --dport 53 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A POSTROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A POSTROUTING -p icmp -j MARK --set-mark 0x2
$IPTABLES -t mangle -A POSTROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x8
#<<изменение TTL на стандартное, чтобы замаскировать подсеть по ttl
$IPTABLES -t mangle -A POSTROUTING -o $INET_IFACE -j TTL --ttl-set 64
#$IPTABLES -t mangle -A POSTROUTING -p tcp --sport 80 --dport 80 -j MARK --set-mark 0x2
#3.8.2.таблица nat
#маскарадинг, DNAT на входе (PREROUTING) будет произведено автоматически
$IPTABLES -t nat -A POSTROUTING -s $LAN1_IP_RANGE -o $INET_IFACE -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $LAN2_IP_RANGE -o $INET_IFACE -j MASQUERADE

################################################################################
##########
#4.Настройка /proc
#4.1.Включаем возможность форвардинга
echo "1" > /proc/sys/net/ipv4/ip_forward
#4.2.Для защиты от syn флуда
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#другие опции


Вот, лог с ноутбука, которым тестирую-пингую роутер:
# traceroute 192.168.10.1
traceroute to 192.168.10.1 (192.168.10.1), 30 hops max, 38 byte packets
1  192.168.10.1 (192.168.10.1)  0.462 ms  0.409 ms  0.413 ms
# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:60:97:93:56:FA  
          inet addr:192.168.20.2  Bcast:192.168.20.255  Mask:255.255.255.0
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6780 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6370 errors:0 dropped:0 overruns:0 carrier:0
          collisions:138 txqueuelen:1000
          RX bytes:5767736 (5.5 MiB)  TX bytes:703835 (687.3 KiB)
          Interrupt:5 Base address:0x300
Видно, что сама сетевая карта ноутбука принадлежит другой подсети, но это не мешяет ей пинговать роутер во второй подсети. Реально ли разделить? Очень жду помощи! =)



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру