Page 1 of 4 123 ... LastLast
Results 1 to 15 of 55

Thread: Экспериментег.

  1. #1

    Экспериментег.

    Берём новый ASUS WL-500g Premium и настраиваем. Всё делаем по инструкции.

    Меняем прошивку(шьем последнее от Олега).
    Настраиваем DHCP+PPTP. Всё работает, всё замечательно.
    Разрешаем icmp from WAN (галочка в Internet Firewall -> Basic Settings)
    Разрешаем Web-интерфейс по порту 8080 из WAN(галочка в Internet Firewall -> Basic Settings)
    Разрешаем ssh from WAN(по инструкции с этого сайта, пару правил в iptables)
    Настраиваем Wireless...

    Итог:
    1) Интернет из домашней сети - есть !
    2) SSH, Web-interface из WAN - есть !
    И, кажется, всё замечательно.
    Но тут выплывает одна очень интересная фича(да-да, именно фича NAT)...

    Адреса транслируются в обе стороны. Входящие соединения, не имеющие сопоставлений в NAT-таблицах, успешно транслируются во внутреннюю подсеть.
    Мы можем добраться до внутренней подсети из внешней !
    И на этом ничего не заканчивается. Запуская роутер в такой конфигурации, мы предоставляем бесплатный Интернет всему сегменту городской сети, за что нас немедленно отключает наш провайдер. И он трижды прав.

    Эксперимент
    Настраиваем ASUS как я описал выше.
    Ему выдается IP 10.7.14.88(MAN). Роутер коннектится по PPTP и получает IP 212.1.xxx.xx (у меня внешний).

    Идём к соседу. У него на компе ип 10.7.14.89.
    У соседа интернета нет, баланс отрицательный, на VPN не пускает.
    Делаем у соседа:
    route add -host ya.ru gw 10.7.14.88
    route add -net 192.168.0.0/24(моя внутренняя сеть) gw 10.7.14.88


    И проверяем:
    ping 192.168.0.254 (внутренний ип роутера)
    ping 192.168.0.8 (домашняя тачка)
    ping ya.ru


    ВСЁ пингуется !

    ....высказываемся.
    Code:
    [root@gw /tmp]$ iptables --list
    Chain INPUT (policy DROP)
    target     prot opt source               destination
    DROP       all  --  anywhere             anywhere           state INVALID
    ACCEPT     all  --  anywhere             anywhere           state RELATED,ESTABLISHED
    ACCEPT     all  --  anywhere             anywhere           state NEW
    ACCEPT     all  --  anywhere             anywhere           state NEW
    SECURITY   all  --  anywhere             anywhere           state NEW
    ACCEPT     udp  --  anywhere             anywhere           udp spt:bootps dpt:bootpc
    ACCEPT     tcp  --  anywhere             gw                 tcp dpt:www
    ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:7776
    ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:webcam
    ACCEPT     icmp --  anywhere             anywhere
    ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:ssh flags:SYN,RST,ACK/SYN
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    DROP       all  --  anywhere             anywhere           state INVALID
    TCPMSS     tcp  --  anywhere             anywhere           tcp flags:SYN,RST,ACK/SYN TCPMSS clamp to PMTU
    ACCEPT     all  --  anywhere             anywhere           state RELATED,ESTABLISHED
    SECURITY   all  --  anywhere             anywhere           state NEW
    ACCEPT     all  --  anywhere             anywhere           ctstate DNAT
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain MACS (0 references)
    target     prot opt source               destination
    
    Chain SECURITY (2 references)
    target     prot opt source               destination
    RETURN     tcp  --  anywhere             anywhere           tcp flags:SYN,RST,ACK/SYN limit: avg 1/sec burst 5
    RETURN     tcp  --  anywhere             anywhere           tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
    RETURN     udp  --  anywhere             anywhere           limit: avg 5/sec burst 5
    RETURN     icmp --  anywhere             anywhere           limit: avg 5/sec burst 5
    DROP       all  --  anywhere             anywhere
    
    Chain logaccept (0 references)
    target     prot opt source               destination
    LOG        all  --  anywhere             anywhere           state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `ACCEPT '
    ACCEPT     all  --  anywhere             anywhere
    
    Chain logdrop (0 references)
    target     prot opt source               destination
    LOG        all  --  anywhere             anywhere           state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `DROP '
    DROP       all  --  anywhere             anywhere
    
    [root@gw /tmp]$ cat nat_rules
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :VSERVER - [0:0]
    -A PREROUTING -d 212.1.xxx.xx -j VSERVER
    -A PREROUTING -d 10.7.14.88 -j VSERVER
    -A VSERVER -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.254:80
    -A POSTROUTING -o ppp0 ! -s 212.1.xx.xx -j MASQUERADE
    -A POSTROUTING -o vlan1 ! -s 10.7.14.88 -j MASQUERADE
    -A POSTROUTING -o br0 -s 192.168.0.0/24 -d 192.168.0.0/24 -j MASQUERADE
    COMMIT
    Last edited by Lesnix; 04-10-2006 at 08:48.

  2. #2
    Да. Именно. NAT это трансляция. и не более. для защиты нужно использовать firewall

    поэтому у меня в файрволле в момент поднятия соединения добавляется правило

    в цепочку INPUT после state INVALID что то вроде

    0 0 DROP all -- ppp0 * 0.0.0.0/0 !83.237.4.187

    _примерно_ вот так

    iptables -I INPUT 2 -i $interface ! -d $ip -j DROP

    (все соединения я поднимаю не средствами прошивки, а своими скриптами)

    то есть дропаем все входящие если они адресованы не нашему ip

    а так же модифицирую FORWARD в post-firewall

    iptables -P FORWARD DROP
    iptables -A FORWARD -i br0 -s 192.168.0.0/24 -j ACCEPT

    то есть разрешаю форвардить пакеты только с адресами моей внутренней сети и с внутреннего интерфеса, а все остальное - по умолчанию дропается
    Last edited by gaaronk; 04-10-2006 at 09:15.

  3. #3
    Join Date
    Sep 2006
    Location
    Москва
    Posts
    38
    в фак этот момент непременно!!! желательно со стандартным решением.
    Ветеран броуновского движения

  4. #4
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,353
    Исправлять надо. Только что-то у меня пока в голове не рисуется, что сделать. Цепочку FORWARD надо изменять. Что-то типа

    iptables -A FORWARD ! -i br0 -j DROP

    Надо проверять, нет ли каких последствий от такой команды.

  5. #5
    Решение gaaronk, в принципе, подходит...
    Только при этом становится невозможно добраться до роутера из WAN по порту HTTP(8080)...
    Вообще странно, что dropbear ssh слушает на всех IP, а доступ по http организован только пробрасыванием порта 8080 на внутренний ип... это судя по VSERVER...
    я прав ?
    Last edited by Lesnix; 04-10-2006 at 16:04.

  6. #6
    Quote Originally Posted by Lesnix View Post
    Решение gaaronk, в принципе, подходит...
    Только при этом становится невозможно добраться до роутера из WAN по порту HTTP(8080)...
    Вообще странно, что dropbear ssh слушает на всех IP, а доступ по http организован только пробрасыванием порта 8080 на внутренний ип... это судя по VSERVER...
    я прав ?
    а почему??

    запрос приходит на внешний ip пропускается файрволлом, а потом обрабатывается портфорвардингом

    imho так

  7. #7
    Quote Originally Posted by Oleg View Post
    Исправлять надо. Только что-то у меня пока в голове не рисуется, что сделать. Цепочку FORWARD надо изменять. Что-то типа

    iptables -A FORWARD ! -i br0 -j DROP

    Надо проверять, нет ли каких последствий от такой команды.
    быть не должно. ответы на запросы обработаются ранее правилом с RELATED,ESTABLISHED или DNAT (для портфорвардинга)

    у меня еще более жесткое условие

    iptables -A FORWARD -i br0 -s 192.168.0.0/24 -j ACCEPT

    а остальное дропается. и год почти полет нормальный

    вот кусок post-firewall

    lanaddr=`nvram get lan_ipaddr`
    lanmask=`nvram get lan_netmask`
    lan_net=`ipcalc -s -n $lanaddr $lanmask | awk '{print(substr($1,9))}'`/$lanmask

    iptables -P FORWARD DROP
    iptables -A FORWARD -i br0 -s $lan_net -j ACCEPT
    Last edited by gaaronk; 04-10-2006 at 16:27.

  8. #8
    Разрешаем icmp from WAN (галочка в Internet Firewall -> Basic Settings)
    OFF: а где такая галочка там?

  9. #9
    Diablo-AD, смотри приложенный скриншот с галочкой

    gaaronk, я себе post-firewall практически аналогичный сделал.
    Code:
    #!/bin/sh
    
    inet_ip=`nvram get wan_ipaddr_t`
    man_ip=`nvram get wanx_ipaddr`
    
    lan_ip=`nvram get lan_ipaddr`
    lan_mask=`nvram get lan_netmask`
    lan_net=`ipcalc -s -n $lan_ip $lan_mask | awk '{print(substr($1,9))}'`/$lan_mask
    
    # set default policy
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    
    # Remove last default rule
    iptables -D INPUT -j DROP
    
    # allow internal routing
    iptables -A FORWARD -i br0 -j ACCEPT
    
    # Allow access to ssh server from WAN
    iptables -A INPUT -p tcp -i vlan1 --syn --dport 22 -j ACCEPT
    
    # deny all packets with dst-ip !our_ip
    iptables -I INPUT 2 -i ppp0 ! -d $inet_ip -j DROP
    iptables -I INPUT 2 -i vlan1 ! -d $man_ip -j DROP
    ...и вот с этими правилами мне НЕ виден порт роутер:8080 ни из MAN, ни из инета.
    web-access from wan включен. порт 8080.
    Attached Images Attached Images  
    Last edited by Lesnix; 05-10-2006 at 19:24.

  10. #10
    Quote Originally Posted by Lesnix View Post
    gaaronk, я себе post-firewall практически аналогичный сделал.

    Code:
    #!/bin/sh
    
    lan_ip=`nvram get lan_ipaddr`
    lan_mask=`nvram get lan_netmask`
    lan_net=`ipcalc -s -n $lan_ip $lan_mask | awk '{print(substr($1,9))}'`/$lan_mask
    зачем вычислять lan_net если все равно не используется?

    а веб? даже не знаю. лично для меня нет смысла выставлять его наружу, я это сразу отключил. да и потом что мешает включить логгирование в цепочках input и forward и посмотреть где чего дропается?

  11. #11
    На самом деле $lan_net используется в # allow internal routing, там добавлен параметр -s и указана подсеть. Просто выложена немного старая версия))

    Включить логгирование и посмотреть что где дропается мешает только одно обстоятельство - посредственное знание мною iptables, ибо делал что-либо, в основном, во фре. Впрочем, спасибо, попробую отследить.

  12. #12
    в самом конце post-firewall

    # logging

    iptables -A INPUT -j logdrop
    iptables -A FORWARD -j logdrop

  13. #13
    Мда, ну и дырень... Причём, судя по всему, фирменная.

    Кстати, даже включение WAN to LAN Filter не исправляет ситуацию в полном объёме - в случае PPTP добавляются правила с "-i ppp0 -o br0", при этом пакеты с vlan1 всё равно будут пролезать напрямую. Разве что модифицировать эти фильтры, чтобы вместо "-s wan_if" использовалось "! -s lan_if".

    Как минимум при включении NAT можно смело резать в конце FORWARD всё, что пришло не с br0. Стоит ли это делать при выключенном NAT - не знаю; получится как бы принудительное включение WAN to LAN Filter.

  14. #14
    На самом деле потестить асус на эту тему я решил после прочтения какой-то статейки на опеннете... Типа "заблуждения начинающих админов"... В общем, трансляция входящих соединений, не имеющих сопоставлений, - это особенность NAT, и, при неправильной(по многим FAQ) настройке natd на FreeBSD будет наблюдаться то же самое...
    ...а еще вот этот моментик был описан в каком-то обзоре ASUSa... Я почитал и не поверил

  15. #15
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,353
    В общем итог такой:
    дырка NAT (которая есть и в родной прошивке), закрывается двумя правилами:
    -A FORWARD -o $WAN_IF ! -i $LAN_IF -j DROP
    -A FORWARD -o $MAN_IF ! -i $LAN_IF -j DROP

    Фильтр WAN->LAN теперь ещё фильтрует и MAN, т.е. проверяется весь трафик идущий в br0. Т.е. просто не забывайте включать WAN to LAN filter и выбрать DROP.

    У кого какие мысли? ;-)

Page 1 of 4 123 ... LastLast

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •