The OpenNET Project / Index page

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

IPFW - пример правил фильтрации для ADSL (ipfw adsl firewall freebsd)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: ipfw, adsl, firewall, freebsd,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-12 16:01:57 Subject: IPFW - пример правил фильтрации для ADSL
В связи с лавинообразным ростом числа пользователей ADSL-соединений и большим процентом наличия среди них начинающих пользователей FreeBSD, считаю разумным привести коротенький пример настроек правил фильтрции пакетного фильтра IPFW, штатного средства защиты этой ОС.

Разберем шаги, необходимые для задействования фильтрации пакетов:
  • Установка исходных текстов ядра
  • Внесение необходимых изменений и компиляция ядра
  • Устнановка опций rc.conf и написание правил
Внимание! Эта статья актуальна для FreeBSD 5.x, на более ранних версиях возможно пидется внести некоторые изменения.

Установка исходных текстов ядра

Если вы не установили исходные тексты ядра при инсталляции системы то вы можете воспользоваться утилитой /stand/sysinstall или сделать это вручную:
    
    bash-2.05b# mount -t cd9660 /dev/acd0 /cdrom/
    bash-2.05b# cd /cdrom/src/
    bash-2.05b# ./install.sh sys
    
    
После чего исходные тексты ядра будут распакованы в /usr/src/sys.

Внесение необходимых изменений и компиляция ядра

Для работы пакетного фильтра необходимо добавить в ядро несколько опций. общий порядок действий будет следующим:
    
    bash-2.05b# cd /usr/src/sys/i386/conf/
    bash-2.05b# cp GENERIC Irish
    bash-2.05b# vi Irish
    
    
Добавляем опции в ядро:
    
    options         IPFIREWALL
    options         DIVERT
    options         DUMMYNET
    options         IPFIREWALL_VERBOSE
    options         IPFIREWALL_VERBOSE_LIMIT=100
    
    
Где опции: IPFIREWALL - задействует фильтрацию пакетов
DIVERT - позволит нам в дальнейшем использовать NAT
DUMMYNET - предоставляет возможности ограничения полосы пропускания
IPFIREWALL_VERBOSE - включает режим регистрации
IPFIREWALL_VERBOSE_LIMIT=100 - ограничивает размер журнального файла

Опции DIVERT и DUMMYNET здесь описаны не будут, но их включение в состав ядра позволит избежать перекомпиляции ядра при возникновении желания раздавать Интернет локальной сети. После чего компилируем и устанавливаем ядро:
    
    bash-2.05b# config Irish
    bash-2.05b# cd ../compile/Irish
    bash-2.05b# make depend
    bash-2.05b# make
    bash-2.05b# make install
    bash-2.05b# shutdown -r now
    
    

Установка опций rc.conf и написание правил

Добавляем в /etc/rc.conf следующие строки:
    
    firewall_enable="YES"
    firewall_script="/etc/firewall"
    ppp_enable="YES" 
    ppp_mode="ddial" 
    ppp_profile="test" 
    
    
У нас имеется сетевая карта Realtek 8139 (rl0), которая подсоединена к ADSL модему Zyxel Omni ADSL LAN EE. Для организации связи мы используем PPPoE, поэтому в правилах у нас будет использоваться именно rl0, а не tun0. Опции ppp_enable, ppp_mode и ppp_profile обеспечивают нам доступ в Интернет при загрузке машины, хотя скрипт ppp можно запускать и вручную. Пишем /etc/ppp/ppp.conf:
    
       default:
    
       test:
         set device PPPoE:xl0
         set MTU 1492
         set MRU 1492
    
         set dial
         set crtscts off
         set speed sync
         accept lqr
    
         disable deflate
         disable pred1
         disable vjcomp
         disable acfcomp
         disable protocomp
    
         set log Phase LCP IPCP CCP Warning Error Alert
         set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0
         add default HISADDR
         set login
         set authname ppp0012345@mtu
         set authkey your_password
    
         set server /var/run/ppp/ppp.pid "" 0117
    
    
Как уже неоднократно говорилось и писалось, что именно будет пропускаться во внешний мир и к чему будет доступ извне - решать только вам, руководствуясь советами и здравым смыслом. Например, /etc/firewall может выглядеть так:
    
    #!/bin/sh
    
    oif="rl0"
    oip="192.168.255.2"
    odns="172.16.2.20"
    cmd="ipfw add "
    
    $cmd 00500 check-state
    #----------------Blocking------------------------
    # Block SAMBA
    $cmd 00110 deny { tcp or udp } from any to any 135,137,138,139,369,445,520,5000
        
    # i'am dont want this
    $cmd 00120 unreach port { tcp or udp } from any to me 113
    
    # Stop allow IP Packets without (or empty) mss options
    $cmd 00130 deny log tcp from any to any tcpoptions !mss setup
    $cmd 00140 add deny log tcp from any to any in tcpflags syn,fin
    #----------------Darwin------------------------
    $cmd 00600 allow tcp from any to me 8000 via $oif
    $cmd 00610 allow tcp from any to me 554  via $oif
    #----------------DNS------------------------
    $cmd 00700 allow tcp from any to $odns 53 out via $oif setup keep-state
    $cmd 00710 allow udp from any to $odns 53 out via $oif keep-state
    #----------------SSH------------------------
    $cmd 00800 allow tcp from 172.16.2.20 to me 22 via $oif
    N-----------------Common-----------------------
    $cmd 00820 allow ip from me to any
    $cmd 00830 allow ip from 127.0.0.1 to 127.0.0.1 via lo0
    $cmd 00830 allow ip from $oip to $oip via lo0
    $cmd 00830 deny ip from 127.0.0.1 to any
    $cmd 00830 deny ip from any to 127.0.0.1
    #---------------PING------------------------
    $cmd 00900 allow icmp from any to any icmptypes 0,3,8,11,12,13,14
    #----------------Deny all--------------------
    $cmd 06000 deny log ip from any to any
    
    
    
В данном примере в мир вещает в мир Darwin Streaming Server, разрешен вход по ssh c работы, причем эта же машина играет роль DNS сервера. Данный набор не является идеальным, но перед ним такая цель и не ставилась. Хороший набор правил для начинающего пользователя находится в /etc/rc.firewall, загружать эти вы можете с помощью опции firewall_type, которая может принимать значения:

open - открыто все
client - основные функции защиты локальной машины
simple - основные функции защиты локальной сети
closed - блокировка всего, за искоючением lo0
UNKNOWN - правила фильтрации не загружаются
filename - загружать правила из файла(необходимо указание полного пути)

Вот еще один пример правил фильтрации, наиболее полно подходящий, для использования с ADSL:
    
    #!/bin/sh
    # the file /etc/firewall - configuration script for ipfw
    
    # already established connections continue going through
    ipfw add 01000 allow tcp from any to any established
    
    # local adaptors (not tun0 that is).  'rl0' is connected to the DSL modem
    # for PPPoE.  You should
    # change these to match your own system.  If you are not using 'PPPoE' then
    # you should exclude the entry for the adaptor that is connected to the internet.
    ipfw add 01100 allow all from any to any via rl0
    # don't forget the loopback interface or some things might break
    ipfw add 01101 allow all from any to any via lo0
    
    
    # udp access control (all adaptors)
    ipfw add 02000 allow udp from any to any 1024-65535,domain,daytime,time,echo,discard,chargen
    
    # allow udp access to any port when the packet is outgoing or 'fragment'
    ipfw add 02001 allow udp from any to any out
    ipfw add 02500 allow udp from any to any frag
    
    
    # tcp access control - note that 'ftp-data' must be specified by port number '20'
    ipfw add 03000 allow tcp from any to any http,https,ftp,20
    ipfw add 03000 allow tcp from any to any 1024-65535,ssh,domain,telnet
    ipfw add 03000 allow tcp from any to any daytime,time,echo,discard
    
    # if you want services such as 'auth' 'pop3' or 'smtp' to be accessed by the outside
    # world, consider uncommenting the following line
    # ipfw add 03000 allow tcp from any to any auth,pop3,smtp
    
    # outgoing TCP packets - no filtering at all
    ipfw add 03001 allow tcp from any to any out
    
    
    # icmp packets (ping).  'icmptypes' are listed based on recommendations from
    # the FreeBSD handbook on ipfw.
    ipfw add 04000 allow icmp from any to any icmptypes 0,3,8,11,12,13,14
    
    
    # These next 4 entries are needed for VPN.  They can be removed if you won't be using it
    ipfw add 04500 allow esp from any to any
    ipfw add 04501 allow gre from any to any
    ipfw add 04502 allow udp from any to any 500
    ipfw add 04503 allow tcp from any to any 1023,1723
    # note that '1723' was still mentioned here. That is in case you filter it elsewhere
    
    
    # logging and denying
    ipfw add 05999 deny log ip from any to any frag
    
    # this next one is by default the last one.  You can choose a LARGE number if you
    # like.  I chose '6000', you can pick anything up to 65535.  In FreeBSD the rule
    # for '65535' is initially defined as 'deny all from any to any' when you load ipfw.
    
    ipfw add 06000 deny all from any to any
    
    
В статье использовались материал Дмитрия Пупкова http://www.opennet.ru/tips/info/753.shtml

Сгибнев Михаил mixa@dreamcatcher.ru

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, admax (?), 22:06, 21/08/2007 [ответить]    [к модератору]
  • +/
    для FreeBSD 6.x вместо DIVERT нужно указывать IPDIVERT
     
  • 2, eto (?), 12:43, 06/09/2007 [ответить]    [к модератору]
  • +/
    /etc > grep fir rc.conf
    firewall_enable="YES"
    firewall_type="/usr/local/etc/firewall/rc.firewall"

    /etc > head /usr/local/etc/firewall/rc.firewall
    # already established connections continue going through
    add 01000 allow tcp from any to any established
    add 01100 allow all from any to any via rl0
    ...

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor