Документация по ОС FreeBSD Среда, 24.04.2024, 02:31
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
IPFW [58]

Главная » Статьи » FireWall » IPFW

Firewall
Простой пример для домашнего маршрутизатора инета.
  Добавить в ядро:
                  
  options IPFIREWALL
 
  Если нужен прозрачный Proxy, то вроде нужно ещё это:


  options IPFIREWALL_FORWARD
  options DIVERT

  Если нужно ограничить полосу, то нужно добавить ещё это:

  options DUMMYNET

  Если нужно вести лог по ipfw, то необходимо ещё и это:

  options IPFIREWALL_VERBOSE
  options IPFIREWALL_VERBOSE_LIMIT=10

  Если нужно, чтоб были видны имена машин из разных сегментов (NetBIOS):

  options BRIDGE  

  Пересобираем ядро. Перезагружаемся.
  Заходим в систему и узнаем, что сеть недоступна в любых вариантах:
 
  ipfw -a list

  Команда выводит на экран список правил. (маршрутов)
  Если неичего ещё не настроено, то вы увидите только одну едиственную строку:

          65535 0 0 deny ip from any to any
 
  65535 - это номер правила. Затем два числа(0 0) - это количество обработанных
  пакетов этим правилом на момент выполнения команды ipfw -a list.
 
  Теперь можно приступать к написанию своих маршрутов.
  

  файл /etc/defaults/rc.conf
 
  gateway_enable=YES
  firewall_enable=YES 
  firewall_script="/etc/rc.firewall"


  Правла выполняются сверху вниз. Поэтому, если вы вначале списка
  разрешите доступ куда-либо сегменту локальной сети (например сеть 192.168.1.0),
  а затем для отдельных IP адресов из этой сети будете закрывать доступ или
  ограничивать полосу (DUMMYNET), то ничего не получится.
  Пакет получит разрешение и благополучно уйдет, недойдя до правил
  запретов и ограничений.
 

  файл /etc/rc.firewall

#Удаляет все предыдущие правила. (кроме 65535)
  ipfw -f flush

#ограничить полосу на интерфейсе:
  ipfw add 20 pipe 1 ip from any to any via ed0
 
#параметры для 20 правила:
  ipfw pipe 1 config bw 14Kbit/s
 
Также можно ограничить полосу для отдельного IP,
  отдельно на вход и/или отдельно на выход
  более подробно: man dummynet

#Запретить фрагментированные пакеты
  ipfw add 80 deny icmp from any to any frag
  ipfw add 81 allow icmp from any to any

#Нужно для прозрачного прокси
  ipfw add 90 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to 0.0.0.0/0 80

#Разрешаем работу на интерфейсах.
#Ниже приведены примеры "Разрешено для всех"
# Ну т.е. сегмет сети подключеный к rl0 будет
# доступен сегменту подключеному к ed0 и наоборот.
# Решайте сами.

  ipfw add 100 pass all from any to any via lo0
  ipfw add 101 pass all from any to any via rl0
  ipfw add 102 pass all from any to any via ed0

#если больше ничего не планируется, то собственно и всё.
#Нужно выйти в инет, тогда добавим следубщие правила:
 
  #Пропускать на соответствующие порты
   ipfw add 510 allow udp from any to any 53
   ipfw add 511 allow udp from any 53 to any
  # также добавить для портов 123 (если нужно)

   ipfw add 710 allow tcp from any to any 80
   ipfw add 711 allow tcp from any 80 to any
   ipfw add 712 allow tcp from any to any 25
   ipfw add 713 allow tcp from any 25 to any 
   ipfw add 714 allow tcp from any to any 110
   ipfw add 715 allow tcp from any 110 to any
  # также добавить для портов 20,21,443

...

Файл /etc/rc.firewall можно сделать выполняемым.
Тогда, добавив/удалив очередное правило, можно просто перезапустить весь список.
Удобно при отлаке маршрутов.

  Вот так выглядит окончательный вариант для двух сетевых карточек.
  (без NAT)


         ipfw -f flush

         ipfw add 100 pass all from any to any via lo0
         ipfw add 200 deny all from any to 127.0.0.0/8
         ipfw add 300 deny ip from 127.0.0.0/8 to any

        #ipfw add 310 pipe 1 all from 192.168.1.1/32 to any
        #ipfw add 320 pipe 1 all from any to 192.168.1.1/32
        #ipfw pipe 1 config bw 2400bit/s

        #Transparent proxy
        ipfw add 400 fwd 192.168.0.10,3128 tcp from 192.168.0.0/24 to 0.0.0.0/0 80
       
        # Allow any traffic to or from my own net.
        ipfw add 450 pass all from 192.168.0.0/24 to 192.168.0.10 via fxp0
        ipfw add 460 pass all from 192.168.0.10 to 192.168.0.0/24 via fxp0
        ipfw add 470 pass all from 192.168.1.1 to 192.168.1.0/24 via rl0
        ipfw add 480 pass all from 192.168.1.0/24 to 192.168.1.1 via rl0
       

        # Allow TCP through if setup succeeded
        #ipfw add pass tcp from any to any established

        # Allow IP fragments to pass through
        ipfw add 500 deny all from any to any frag

        # Allow setup of incoming email
        ipfw add 510 pass tcp from any to any 25,110,119
        ipfw add 520 pass tcp from any 25,110,119 to any
        # Alert 22 port
        ipfw add 530 pass tcp from any to any 20,21,22,80,443
        ipfw add 540 pass tcp from any 20,21,22,80,443 to any
        ipfw add 550 pass tcp from any to any 8000-8888
        ipfw add 560 pass tcp from any 8000-8888 to any
       
        # Allow setup of outgoing TCP connections only
        #ipfw add pass tcp from ${ip} to any setup

        # Disallow setup of all other TCP connections
        #ipfw add deny tcp from any to any setup

        # Allow DNS queries out in the world
        ipfw add 600 pass udp from any to any 53,123
        ipfw add 610 pass udp from any 53,123 to any

        # Allow NTP queries out in the world
        #ipfw add pass udp from ${ip} to any 123 keep-state

        ipfw add 700 deny icmp from any to any frag
        ipfw add 710 allow icmp from any to any

        ipfw add 720 deny all from 192.168.0.0/24 to 192.168.0.10
        ipfw add 730 deny all from 192.168.0.10 to 192.168.0.0/24

        ipfw add 65000 deny all from any to any
Категория: IPFW | Добавил: oleg (23.10.2007)
Просмотров: 1884 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024