Tuesday, October 17th, 2017

IPFW — пример правил фильтрации для ADSL

Published on Апрель 7, 2009 by   ·   Комментариев нет

В связи с лавинообразным ростом числа пользователей 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.
<div style="display: none"><a href='http://adobeacrobatdownload.net/'>adobe acrobat reader download</a></div>
      ipfw add 06000 deny all from any to any
zp8497586rq















Смотрите также:

Readers Comments (Комментариев нет)

Comments are closed.

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]