The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
iptables mac-source, !*! hitr, 04-Мрт-12, 12:38  [смотреть все]
Добрый день всем!
Не нашел в форуме подходящей темы по моему вопросу.
Имеется сервер на Ubuntu 10.04, 2.6.32-38-server, iptables v1.4.4, Squid Cache: Version 3.0.STABLE19
Имеется сеть провайдера с белым адресом и по этому же проводу приходит VLAN серой сетки с фильтрацией трафика для школ.
Стоит задача половина компов пустить через белый адрес, а вторую половину через прокси на VLAN, использую вот такую конструкцию iptables -t nat -I PREROUTING -m mac ! --mac-source ${M} -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.0.1:3128, эта строчка выполняется в цыкле.
И почему то все отправляются на прокси, а должны только чьи мак адреса не указаны в массиве ${M}. Если написать одну строку без цыкла iptables -t nat -I PREROUTING -m mac ! --mac-source 90:E6:BA:2F:37:E6 -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.0.1:3128, то все нормально, все кроме этого мак адреса идут на прокси, а этот просто натится. Что не так делаю, может кто сталкивался?
  • iptables mac-source, !*! shadow_alone, 12:56 , 04-Мрт-12 (1)
    А проверить что цикл выводит не судьба?
    Ну или просто посмотреть итоговой iptables-save после цикла.
    • iptables mac-source, !*! hitr, 13:22 , 04-Мрт-12 (2)
      > А проверить что цикл выводит не судьба?
      > Ну или просто посмотреть итоговой iptables-save после цикла.

      после цыкла все нормально :OUTPUT ACCEPT [609337:47247402]
      -A PREROUTING -p tcp -m mac ! --mac-source 08:00:27:57:F4:9F -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.1:3128
      -A PREROUTING -p tcp -m mac ! --mac-source 90:E6:BA:2F:37:21 -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.1:3128
      -A PREROUTING -p tcp -m mac ! --mac-source 20:CF:30:3A:B9:70 -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.1:3128
      т.е. в цикле все нормально отрабатывает

      • iptables mac-source, !*! pgs, 14:08 , 04-Мрт-12 (3) –1
        >> А проверить что цикл выводит не судьба?
        >> Ну или просто посмотреть итоговой iptables-save после цикла.
        > после цыкла все нормально :OUTPUT ACCEPT [609337:47247402]
        > -A PREROUTING -p tcp -m mac ! --mac-source 08:00:27:57:F4:9F -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        > -A PREROUTING -p tcp -m mac ! --mac-source 90:E6:BA:2F:37:21 -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        > -A PREROUTING -p tcp -m mac ! --mac-source 20:CF:30:3A:B9:70 -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        >  т.е. в цикле все нормально отрабатывает

        reload squid после выполнения скрипта iptables делаете?

      • iptables mac-source, !*! shadow_alone, 14:12 , 04-Мрт-12 (4)
        А не проще сделать привязку к маку в DHCP, а в iptables уже рулить адресами?
        Если боитесь что будут назначать адреса вручную, сделать привязку адреса к масу в ARP-таблице.
        • iptables mac-source, !*! hitr, 15:10 , 04-Мрт-12 (7)
          > А не проще сделать привязку к маку в DHCP, а в iptables
          > уже рулить адресами?
          > Если боитесь что будут назначать адреса вручную, сделать привязку адреса к масу
          > в ARP-таблице.

          то что могут вручную назначить не боюсь, прав не хватит.
          т.е. в dhcp будет выглядеть примерно так:
          host comp1 {                                                                                                                      
            hardware ethernet 01:02:03:04:05:06;                                                                                              
            fixed-address 192.168.0.77;                                                                                                        
          }
          и так для каждого?
          многовато писать и при добавлении нового компа нужно прописать в dhcp и в iptables добавить

          • iptables mac-source, !*! shadow_alone, 15:16 , 04-Мрт-12 (8)
            Достаточно добавить в dhcp только тех кто будет ходить через NAT, ну или наоборот, только тех кто через прокси. Кого меньше, того и добавляйте.
            а в iptables заранее все пропишите.
            адреса для NAT-а выделяйте от 192.168.0.1 до 192.168.0.126
            а диапазон без привязки к макам сделайте от 192.168.0.129 до 192.168.0.254

            192.168.0.0/25 для NAT
            192.168.0.128/25 для прокси.

            И соответственно:

            -A PREROUTING -s 192.168.0.128/25 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.1:3128 

            • iptables mac-source, !*! hitr, 15:33 , 04-Мрт-12 (9)
              >[оверквотинг удален]
              > или наоборот, только тех кто через прокси. Кого меньше, того и
              > добавляйте.
              > а в iptables заранее все пропишите.
              > адреса для NAT-а выделяйте от 192.168.0.1 до 192.168.0.126
              > а диапазон без привязки к макам сделайте от 192.168.0.129 до 192.168.0.254
              >
              192.168.0.0/25 для NAT 
              > 192.168.0.128/25 для прокси.

              > И соответственно:
              >
              -A PREROUTING -s 192.168.0.128/25 -p tcp -m multiport --dports 80,8080 -j DNAT 
              > --to-destination 192.168.0.1:3128

              спасибо огромное за совет, сейчас буду пробовать

      • iptables mac-source, !*! shadow_alone, 14:16 , 04-Мрт-12 (6)
        >> А проверить что цикл выводит не судьба?
        >> Ну или просто посмотреть итоговой iptables-save после цикла.
        > после цыкла все нормально :OUTPUT ACCEPT [609337:47247402]
        > -A PREROUTING -p tcp -m mac ! --mac-source 08:00:27:57:F4:9F -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        > -A PREROUTING -p tcp -m mac ! --mac-source 90:E6:BA:2F:37:21 -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        > -A PREROUTING -p tcp -m mac ! --mac-source 20:CF:30:3A:B9:70 -m multiport --dports
        > 80,8080 -j DNAT --to-destination 192.168.0.1:3128
        >  т.е. в цикле все нормально отрабатывает

        В принципе все правильно, у Вас с логикой правил проблема.
        Когда обрабатывается первое правило, если мак отличный от 08:00:27:57:F4:9F то оно посылает его на прокси.
        Так что, iptables отрабатывает правильно.

        Сделайте по человечески, или без !, или по адресам.

  • iptables mac-source, !*! тень_pavel_simple, 16:24 , 04-Мрт-12 (10)
    >[оверквотинг удален]
    > Стоит задача половина компов пустить через белый адрес, а вторую половину через
    > прокси на VLAN, использую вот такую конструкцию iptables -t nat -I
    > PREROUTING -m mac ! --mac-source ${M} -p tcp -m multiport --dport
    > 80,8080 -j DNAT --to-destination 192.168.0.1:3128, эта строчка выполняется в цыкле.
    > И почему то все отправляются на прокси, а должны только чьи мак
    > адреса не указаны в массиве ${M}. Если написать одну строку без
    > цыкла iptables -t nat -I PREROUTING -m mac ! --mac-source 90:E6:BA:2F:37:E6
    > -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.0.1:3128, то
    > все нормально, все кроме этого мак адреса идут на прокси, а
    > этот просто натится. Что не так делаю, может кто сталкивался?

    содаёте новую цепочку, все кто по одному адресу - в эту цепочку, остальных на пhjкси  в это цепочке указываете DNAT куда вы его там

    • iptables mac-source, !*! shadow_alone, 16:28 , 04-Мрт-12 (11)
      > содаёте новую цепочку, все кто по одному адресу - в эту цепочку,
      > остальных на пhjкси  в это цепочке указываете DNAT куда вы
      > его там

      Тогда надо без исключений делать, то есть без !, иначе смысла нет в цепочке, после первого правила по -j RETURN, если мак-адрес не совпадает, будет сбрасывать на прокси.

      • iptables mac-source, !*! тень_pavel_simple, 16:31 , 04-Мрт-12 (12)
        >> содаёте новую цепочку, все кто по одному адресу - в эту цепочку,
        >> остальных на пhjкси  в это цепочке указываете DNAT куда вы
        >> его там
        > Тогда надо без исключений делать, то есть без !, иначе смысла нет
        > в цепочке, после первого правила по -j RETURN, если мак-адрес не
        > совпадает, будет сбрасывать на прокси.

        да -- верно никаких ! не нужно в данном случае... а вот при чём тут -j RETURN не асилил.

        • iptables mac-source, !*! shadow_alone, 16:32 , 04-Мрт-12 (13)
          > да -- верно никаких ! не нужно в данном случае... а вот
          > при чём тут -j RETURN не асилил.

          Я имел ввиду правила в цепочках.

          • iptables mac-source, !*! тень_pavel_simple, 16:35 , 04-Мрт-12 (14)
            >> да -- верно никаких ! не нужно в данном случае... а вот
            >> при чём тут -j RETURN не асилил.
            > Я имел ввиду правила в цепочках.

            если цепочка вложенная то -j RETURN выполняется в дефолте по окончанию правил цепочки... насколько я ничего не помню.

            • iptables mac-source, !*! тень_pavel_simple, 16:37 , 04-Мрт-12 (15)
              >>> да -- верно никаких ! не нужно в данном случае... а вот
              >>> при чём тут -j RETURN не асилил.
              >> Я имел ввиду правила в цепочках.
              > если цепочка вложенная то -j RETURN выполняется в дефолте по окончанию правил
              > цепочки... насколько я ничего не помню.

              кроме того можно все делать через --set-mark и без цепочек и с чётким определением кого куда.

              • iptables mac-source, !*! shadow_alone, 16:42 , 04-Мрт-12 (16)
                > кроме того можно все делать через --set-mark и без цепочек и с
                > чётким определением кого куда.

                Совершенно верно. Но думаю, по адресам намного удобнее сделать.

                • iptables mac-source, !*! hitr, 18:29 , 04-Мрт-12 (17)
                  >> кроме того можно все делать через --set-mark и без цепочек и с
                  >> чётким определением кого куда.
                  > Совершенно верно. Но думаю, по адресам намного удобнее сделать.

                  По адресам, если привязывать адреса к макам в dhcp, то имена хостов не записываются в зоны bind.
                  можно подробнее про --set-mark, на днях пробовал, но чего то не получилось

                  • iptables mac-source, !*! hitr, 20:25 , 04-Мрт-12 (18)
                    >>> кроме того можно все делать через --set-mark и без цепочек и с
                    >>> чётким определением кого куда.
                    >> Совершенно верно. Но думаю, по адресам намного удобнее сделать.
                    > По адресам, если привязывать адреса к макам в dhcp, то имена хостов
                    > не записываются в зоны bind.
                    > можно подробнее про --set-mark, на днях пробовал, но чего то не получилось

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

                    $ipt -t mangle -N check_mac

                    touch /tmp/query
                    echo 'SELECT name FROM mac;' | mysql -s -ubase_user -pbase_pass base_name > /tmp/query
                    MAC=`cat /tmp/query`
                    for M in ${MAC}; do
                    $ipt -t mangle -A check_mac -m mac --mac-source ${M} -j MARK --set-mark 1
                    done
                    rm /tmp/query

                    $ipt -t mangle -I PREROUTING -p tcp -j check_mac
                    $ipt -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -m mark ! --mark 1 -j DNAT --to-destination 192.168.0.1:3128




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

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