Опубликован: 21.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Пример пакетных фильтров в ОС FreeBSD 6.0

Stateful-фильтрация

Stateful фильтрация обрабатывает трафик как двунаправленный обмен пакетами, при котором выполняется установление сессии. Во время активизации keep state динамически создаются внутренние правила для каждого ожидаемого пакета, которыми обмениваются исходные отправитель и получатель. Любые пакеты, которые не соответствуют образцу установления сессии, автоматически отвергаются как ложные.

Поддержка состояния допускает наличие ICMP-пакетов, относящихся к ТСР- или UDP-сессии. Также пакет, который IPF может рассматривать как часть активной сессии, даже если это другой протокол, будет пропущен.

Рассмотрим, что происходит при установлении сессии.

Исходящий пакет на интерфейсе, во-первых, проверяется в динамической таблице состояний. Если пакет соответствует очередному ожидаемому пакету при установлении сессии, то он пропускается пакетным фильтром и состояние установления сессии в динамической таблице состояния изменяется. Следующие пакеты будут проверяться новым множеством исходящих правил.

Пакеты, пришедшие на тот же самый интерфейс, во-первых, проверяются в динамической таблице состояния. Если пакет соответствует очередному ожидаемому пакету при установлении сессии, то он пропускается пакетным фильтром и состояние установления сессии изменяется в динамической таблице состояния. Следующие пакеты будут проверяться новым множеством входящих правил.

Когда установление сессии выполнено, информация удаляется из динамической таблицы состояния.

Фильтрация с учетом состояния дает возможность сфокусироваться на блокировании или разрешении новых сессий. Если новая сессия разрешена, всем последующим пакетам будет автоматически разрешено прохождение, и любой ложный пакет будет автоматически отвергаться. Если новая сессия блокирована, ни один из ее следующих пакетов не будет разрешен. Фильтрация с учетом состояния обеспечивает возможность защиты от различных атак наводнения (flooding).

Пример включающего набора правил

Следующий набор правил является примером того, как задать включающий тип пакетного фильтра. Включающий пакетный фильтр разрешает только те сервисы, которые соответствуют правилам pass, и по умолчанию блокирует все остальные. Предполагается, что пакетный фильтр имеет как минимум два интерфейса, на которых должны быть заданы правила, определяющие его функционирование.

Все UNIX системы, включая FreeBSD, разработаны с возможностью использования интерфейса lo0 и IP-адреса 127.0.0.1 для внутреннего взаимодействия с ОС. Пакетный фильтр должен содержать правила, допускающие свободное беспрепятственное перемещение этих внутренних пакетов.

Предположим, что один интерфейс соединен с Интернетом. Это может быть PPP tun0 интерфейс или сетевая карта, которая соединена с сетью, имеющей доступ в Интернет. Для этого интерфейса должны быть определены правила управления доступом для исходящего трафика в Интернет и правила запросов доступа, полученных из Интернета.

Предположим также, что одна или более сетевых карт соединены с локальной сетью позади пакетного фильтра. Эти интерфейсы должны иметь правило, которое допускает перемещение пакетов, полученных с этих интерфейсов, в Интернет.

Во-первых, правила должны быть разбиты на три основных раздела:

  • Все интерфейсы, для которых не определено управление доступом.
  • Интерфейс для исходящего трафика, для которого определено управление доступом.
  • Интерфейс для входящего трафика, для которого определено управление доступом.

Правила, для которых более часто выполняется соответствие, должны быть написаны выше правил, для которых соответствие выполняется реже. Последнее правило в разделе должно блокировать и заносить в лог все пакеты для данного интерфейса и направления.

Раздел для исходящего трафика в приведенном ниже наборе правил содержит только pass правила, имеющие значения выбора и определяющие сервисы, которым разрешен доступ в Интернет. Все правила имеют опции quick, on, proto, port, keep state. Правила proto tcp имеют опцию flag, установленную для определения стартового пакета запроса сессии для активизации возможности поддержки состояния (stateful).

Раздел для входящего трафика блокирует все нежелательные пакеты. Последнее правило в разделе, которое блокирует и заносит в логи все прошедшие остальные правила пакеты, является также способом создания доказательства наличия атаки, которое может рассматриваться и как юридическое доказательство. Это дает возможность преследования атакующих в законодательном порядке.

Следует иметь в виду, что отправителю не возвращается ответ, пакеты просто отбрасываются. Данный способ означает, что атакующий не знает, достигли ли его пакеты целевой системы.

Если в правиле указано log first, то сообщение в лог записывается только один раз, независимо от того, сколько раз выполнялось соответствие. Чтобы определить, сколько раз для данного правила выполнялось соответствие, надо выполнить команду ipfstat –hio.

Следует закрыть все номера портов Троянских программ, список которых можно найти по адресу http://www.simovits.com/trojans/trojans.html.

Следующий набор правил определяет включающий тип пакетного фильтра. В реальной системе достаточно раскомментировать правила pass для сервисов, которые необходимо аутентифицировать.

После этого следует просмотреть сообщения в логах и добавить правило block в раздел для входящего трафика.

Необходимо также изменить название интерфейса dc0 в каждом правиле на название интерфейса в вашей системе, который соединяется с Интернетом. Для использования РРР следует указать tun0.

Пример списка правил в /etc/ipf.rules.

#################################################################
    # No restrictions on Inside LAN Interface for private network
    # Not needed unless you have LAN
    #################################################################
    #pass out quick on xl0 all
    #pass in quick on xl0 all

    #################################################################
    # No restrictions on Loopback Interface
    #################################################################
    pass in quick on lo0 all
    pass out quick on lo0 all

    #################################################################
    # Interface facing Public Internet (Outbound Section)
    # Interrogate session start requests originating from behind the
    # firewall on the private network
    # or from this gateway server destine for the public Internet.
    #################################################################

    # Allow out access to my ISP's Domain name server.
    # xxx must be the IP address of your ISP's DNS.
    # Dup these lines if your ISP has more than one DNS server
    # Get the IP addresses from /etc/resolv.conf file
    pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state
    pass out quick on dc0 proto udp from any to xxx port = 53 keep state

    # Allow out non-secure standard www function
    pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state

    # Allow out secure www function https over TLS/SSL
    pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state

    # Allow out send & get email function
    pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
    pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state

    # Allow out Time
    pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state
    # Allow out gateway & LAN users non-secure FTP ( both passive & 
    # active modes)
    # This function uses the IPNAT built in FTP proxy function coded in
    # the nat rules file to make this single rule function correctly.
    # If you want to use the pkg_add command to install application 
    # packages
    # on your gateway system you need this rule.
    pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state

    # Allow out secure FTP, Telnet, and SCP
    # This function is using SSH (secure shell)
    pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state

    # Allow out non-secure Telnet
    pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state

    # Allow out ping to public Internet
    pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state

    # Block and log only the first occurrence of everything
    # else that's trying to get out.
    # This rule enforces the block all by default logic.
    block out log first quick on dc0 all

    #################################################################
    # Interface facing Public Internet (Inbound Section)
    # Interrogate packets originating from the public Internet
    # destine for this gateway server or the private network.
    #################################################################

    # Block all inbound traffic from non-routable or reserved address
    # spaces
    block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 
     #private IP
    block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 
     #private IP
    block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 
     #private IP
    block in quick on dc0 from 127.0.0.0/8 to any #loopback
    block in quick on dc0 from 0.0.0.0/8 to any #loopback
    block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-
     #config
    block in quick on dc0 from 192.0.2.0/24 to any #reserved 
     #for docs

    ############ Block a bunch of different nasty things. ###########
    # That I do not want to see in the log

    # Block frags
    block in quick on dc0 all with frags

    # Block short tcp packets
    block in quick on dc0 proto tcp all with short

    # block source routed packets
    block in quick on dc0 all with opt lsrr
    block in quick on dc0 all with opt ssrr

    # Block nmap OS fingerprint attempts
    # Log first occurrence of these so I can get their IP address
    block in log first quick on dc0 proto tcp from any to any flags FUP

    # Block anything with special options
    block in quick on dc0 all with ipopts

    # Block public pings
    block in quick on dc0 proto icmp all icmp-type 8

    # Block ident
    block in quick on dc0 proto tcp from any to any port = 113

    # Block all Netbios service. 137=name, 138=datagram, 139=session
    # Netbios is MS/Windows sharing services.
    # Block MS/Windows hosts2 name server requests 81
    block in log first quick on dc0 proto tcp/udp from any to any port = 137
    block in log first quick on dc0 proto tcp/udp from any to any port = 138
    block in log first quick on dc0 proto tcp/udp from any to any port = 139
    block in log first quick on dc0 proto tcp/udp from any to any port = 81

    # Allow in standard www function because I have apache server
    pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state

    # Allow in non-secure Telnet session from public Internet
    #labeled non-secure because ID/PW passed over public Internet as #clear text.
    # Delete this sample group if you do not have telnet server #enabled.
    pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state

    # Allow in secure FTP, Telnet, and SCP from public Internet
    # This function is using SSH (secure shell)
    pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state

    # Block and log only first occurrence of all remaining traffic
    # coming into the firewall. The logging of only the first
    # occurrence stops a .denial of service. attack targeted
    # at filling up your log file space.
    # This rule enforces the block all by default logic.
    block in log first quick on dc0 all
    ################### End of rules file #######################
3.1.

NAT

С помощью NAT осуществляется трансляция сетевых адресов. Это аналогично Linux, понятию IP Masquerading; NAT и IP Masquerading являются синонимами. Одной из многих функций, которую обеспечивает NAT, является возможность иметь частные адреса в локальной сети, расположенной за пакетным фильтром.

NAT автоматически преобразует частный IP-адрес в локальной сети в один и тот же IP-адрес, который существует у пакетного фильтра, соединенного с Интернетом. Он также осуществляет обратную трансляцию возвращаемых пакетов.

Существует специальный диапазон адресов, зарезервированный для NAT-адресов. В соответствии с RFC 1918, для частных сетей можно использовать следующие диапазоны IP-адресов, для которых никогда не будет выполняться роутинг в Интернете:

10.0.0.0 – 10.255.255.255
    172.16.0.0 – 172.31.255.255
    192.168.0.0 – 192.168.255.255
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Игорь Касаткин
Игорь Касаткин
Россия, Москва
Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008