URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 2188
[ Назад ]

Исходное сообщение
"Фильтрация траффика по диапазонам (freebsd, ipfw)"

Отправлено kirill , 18-Июл-05 17:19 
Здравствуйте! Я довольно давно пользуюсь linux, но вот, по ряду причин решил перейти на freebsd. Все меня устраивает во фре, но вот добрался до фаервола и возникли вопросы.

Можно ли осуществлять фильтрацию траффика с помощью ipfw по диапазона адресов (адреса берутся каждые пол часа из таблиц "российских" провайдера)?
В linux я осуществлял это так (кусочек шелл скрипта):

$IPT -F rus
$IPT -X rus
$IPT -N rus
$IPT -P rus REJECT
$IPT -A rus -s 195.7.160.0/19 -j ACCEPT
$IPT -A rus -s 62.118.0.0/16 -j ACCEPT
$IPT -A rus -s 213.219.240.0/20 -j ACCEPT
# и т.д. Все что выше, генерится с помощью перл скрипта, запускаемым кроном

$IPT -A allow_runet -p TCP --syn -j rus
$IPT -A allow_runet -p TCP -m state --state ESTABLISHED,RELATED -j rus

$IPT -A tcp_packets -p TCP --dport 20:21 -j allow_runet
$IPT -A tcp_packets -p TCP --dport 80 -j allow_runet

Далее, не вижу смысла приводить...
Приведите, пожалуйста пример подобного фильтра.
Спасибо


Содержание

Сообщения в этом обсуждении
"Фильтрация траффика по диапазонам (freebsd, ipfw)"
Отправлено imax , 19-Июл-05 06:41 
У меня это организовано так, есть файл /etc/rusnet.ip
-------------
80.72.208.0/20
80.89.133.16/28
80.89.133.32/27
80.89.135.0/24
80.89.143.0/24
80.89.147.0/24
...
------------

в скрипте rc.firewall

сделал такую функцию
------------
pass_only_rus() {                                                
    FILE=/etc/rusnet.ip                                              
    i=1                                                                
    j=7000                                                            
    pass_rule=9000                                                    
    size=`more $FILE | wc -l`                                          
    while (test $i -le $size)                                          
    do                                                                
        i=$(($i+1))                                                    
        j=$(($j+1))                                                    
        str=`more $FILE | tail -n $i | head -n 1`                      
        ${fwcmd} add $j skipto ${pass_rule} all from ${inet} to ${str}
        j=$(($j+1))                                                    
        ${fwcmd} add $j skipto ${pass_rule} all from ${str} to  ${inet}
    done;                                                              
...
   pass_only_rus
...
   ${fwcmd} add 8999 deny log logamount 40000  all from any to any
...
---------------

Логика такова - если трафик по определенным диапазонам, перкидываю на обработку дальше, а все что не подходит- будет блокироваться. Т.е. начиная с 9000-го правила идет обработка трафика, какие порты разрешить и т.д.

PS Если кто может прокоментировать скрипт - мне будет интересно