Закрыть доступ к шлюзу с внехи



  • Добрый день!
    В продолжении этой темы https://forum.pfsense.org/index.php?topic=77367.0

    На pfSense статично смаршрутизированы белые адреса. На первом скриншоте правила на стороне абонента. На втором скриншоте правила на WAN интерфейсе для этого абонента. С обеих сторон правила настроены таким образом, что пользователь не может обратится к какому-либо адресу, принадлежащему роутеру, кроме как пингануть их. Для интерфейса абонента правила выглядят хорошо, а вот для WAN нет. Т.к. вместо одного правила приходится делать целых три. На маршрутизаторе около 40 VLAN /30 с белыми адресами и получается, что для каждого интерфейса надо делать три правила.

    Кто-нибудь знает более изящные варианты написания правил/запрета доступа к адресам роутера?





  • Разрешите только то, что Вам нужно. По умолчанию все запрещено и так.



  • @Rearden:

    Кто-нибудь знает более изящные варианты написания правил/запрета доступа к адресам роутера?

    В pfSense 2.2 обещают возможность использования ключевого слова "self" в правилах. "self" - это и есть все адреса роутера.
    В 2.1 можно просто сделать Alias "SELF" со всеми этими адресами и создать Floating Rule:
    Action: Block
    Quick: да
    Interface: не выбирать ни один (т. е. для всех)
    Direction: in
    Protocol: any
    Destination: Type: Single host or alias, Address: SELF

    Себе самому только доступ оставить не забудьте, и тоже обязательно через Floating Rule (они работают до правил интерфейсов). Выше приведенного должно быть правило доступа для админа, либо в приведенном сделайте Source:  Type: Single host or alias, Address: !ADMIN

    Если интерфейсы постоянно заводятся/удаляются, то в принципе наполнение алиаса "SELF" можно автоматизировать, т. к. алиас в терминах pfSense - это table в терминах pf. Как наполнить/обнулить table - все в man pfctl(8). Т. е. в скрипте выдергиваете адреса роутера, типа netstat -rnf inet | grep lo0 | awk '{print($1)}' и суете их через pfctl в таблицу SELF прямо на ходу.



  • Спасибо, rubic.
    Создал алиас в вэб-интерфейсе, назвал self. В этот алиасе ничего не прописывал.
    По планировщику выполняю следующий скрипт:

    
    #!/bin/sh
    GETADDR=`/usr/bin/netstat -rn inet | grep lo0 | grep -v 127.0.0.1 | awk '{print($1)}'`
    
    /sbin/pfctl -q -t self -T flush
    
    for i in $GETADDR; do
        /sbin/pfctl -q -t self -T add $i
    done
    
    

    Все успешно отрабатывает, в разделе Diagnostic–>tables отображается табличка с адресами маршрутника.
    Но фишка в том, что когда редактируем какой либо алиас в вэб-интерфейсе, то табличка selft флушится.



  • Решил следующим способом:

    Скрипт приобрел следующий вид

    /usr/bin/netstat -rn inet | grep lo0 | grep -vE '127.0.0.1|fe80::' | awk '{print($1)}' > /usr/local/www/my_address.txt
    

    и далее через Alias/URLs.



  • Ну или так. Проблема по сути в том, что alias хранится в config.xml и пишется в table после редактирования. Т. е. пустой alias в конфиге флэшит table при сохранении((
    Бегло посмотрел тут: https://www.mail-archive.com/list@lists.pfsense.org/msg03702.html и там: https://doc.pfsense.org/index.php/Using_the_PHP_pfSense_Shell
    но красивое решение как-то не придумалось


Log in to reply