Организация роутера на базе FreeBSD + IPF (IPFILTER)

В данной статье я приведу последовательность шагов для настройки роутера на базе ОС FreeBSD + IPFILTER.

[5000700 AT mail DOT ru, ICQ#223664205]

В этой статье мы:
  1. Отредактируем конфигурацию ядра и соберем его.
  2. Отредактируем файл конфигурации системы /etc/rc.conf.
  3. Создадим правила фильтрации трафика и правил для NAT.

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

В данном статье я приведу последовательность шагов для настройки роутера посредством ОС FreeBSD + IPFILTER. Хочу сразу заметить, что выбор именно этого фаервола (межсетевой экран) был сделан в силу его простоты и не чуть не меньшей эффективность по отношению с другими фаерволами.

Самые настойчивые могут (я настоятельно рекомендую) ознакомиться с еще более мощным продуктом из линейки фаерволов для *NIX`сов (Pocket Filter), но это уже тема другой статьи.

Жестокий минимум который должен быть:

  • ОС FreeBSD установлена;
  • руки растут от плеч;
  • глаза широко открыты и читают внимательно;

Итак, начнем:

  1. Редактируем ядро и потом собираем.
    # cd /usr/src/sys/i386/conf			
    # cp GENERIC MYKERNEL			
    # ee /usr/src/sys/i386/conf/MYKERNEL	
    
    скажем, в самом - самом конце файла добавим:
    # -- IPF
    options IPFILTER		# Сам IPFILTER .
    options IPFILTER_LOG		# Включение протоколирования.
    options IPFILTER_DEFAULT_BLOCK	# Блокировать всё на всех сетевых
    				# интерфейсах.
    
    Жмем Ctrl + c и пишем exit
    1. Собираем и устанавливаем ядро:
      # cd /usr/src/						
      # make buildkernel KERNCONF=MYKERNEL	
      # make installkernel KERNCONF=MYKERNEL	
      # shutdown -r now					
      
      или процесс сборки, установки и перезагрузки можно объединить в одну команду
      # cd /usr/src/	
      # make buildkernel KERNCONF=MYKERNEL && make installkernel \
      KERNCONF=MYKERNEL && shutdown -r now	
      
      && - этот оператор будет ждать успешного выполнения команды перед ним и пока она не будет выполнена успешно следующая за ним не будет выполнена.

      Думаю все понятно, но если все же возникнут трудности загляните сюда.

  2. Редактируем файл конфигурации системы /etc/rc.conf.
    # ee /etc/rc.conf	
    
    Теперь надо добавить следующее строки:
    # -- IPF
    ipfilter_enable="YES"            # Start ipf firewall
    ipfilter_rules="/etc/ipf.rules"  # loads rules definition text file
    ipmon_enable="YES"               # Start IP monitor log
    ipmon_flags="-Ds"                # D = start as daemon
                                     # s = log to syslog
                                     # v = log tcp window, ack, seq
                                     # n = map IP & port to names
    
    gateway_enable="YES"             # Enable as LAN gateway
    ipnat_enable="YES"               # Start ipnat function
    ipnat_rules="/etc/ipnat.rules"   # rules definition file for ipnat
    
    Жмем Ctrl + c и пишем exit

    Думаю все понятно, но если все же возникнут трудности загляните сюда.

  3. Создание правил фильтрации трафика и правил для NAT.
    1. Правила для IPFILTER.
      # touch /etc/ipf.rules
      # ee /etc/ipf.rules
      
      --- ipf.rules begin
      
      # --  No restrictions on Loopback Interface [1]
      pass in quick on lo0 all
      pass out quick on lo0 all
      
      
      # --  No restrictions on Local Interface [2]
      pass in quick on fxp0 all
      pass out quick on fxp0 all
      
      
      # -- Let clients behind the firewall send out to the internet,
      # -- and replies to come back in by keeping state [3]
      pass out quick on rl0 proto tcp all keep state
      pass out quick on rl0 proto udp all keep state
      pass out quick on rl0 proto icmp all keep state
      
      # -- Let's people access the services running on 
      # -- this system [4]
      pass in quick on rl0 proto tcp from any to any\
       port 30000 >< 50000 flags S keep state #PASV FTP
      # FTP
      pass in quick on rl0 proto tcp from any to any port = 21
      # SSH 
      pass in quick on rl0 proto tcp from any to any port = 22
      pass in log quick on rl0 proto icmp from any \
      # Ping
      to 62.16.105.195/8 icmp-type 8 keep state
      # DNS
      pass in quick on rl0 proto tcp/udp from any to any port = 53
      # WWW
      pass in quick on rl0 proto tcp from any to any port = 80
      # RAdmin
      pass in quick on rl0 proto tcp from any to any port = 4899
      
      --- ipf.rules end
      
      Жмем Ctrl + c и пишем exit

      где,
      • lo0 - устройство loopback.
      • fxp0 - сетевая карта смотрящая во внутреннею сеть.
      • rl0 - сетевая карта смотрящая в Internet.
      [1] - устройство loopback должно быть обязательно разрешено все для правильной работы;
      [2] - ни каких запретов внутренней LAN;
      [3] - разрешить исходящие TCP, UDP & ICMP сессии с сохранением соединения;
      [4] - открыть порты на сетевые службы;

      перезагрузим правила.
      # ipf -Fa -f /etc/ipf.rules
      
      Так можно делать перезагрузку любых изменений правил для IPF без перезапуска всей системы.
    2. Правила для NAT.
      # touch /etc/ipnat.rules
      # ee /etc/ipnat.rules
      
      --- ipnat.rules begin
      
      rdr rl0 62.16.105.195/32 port 80 -> 192.168.0.5 port 80 tcp [1]
      rdr rl0 62.16.105.195/32 port 4899 -> 192.168.0.5 port 4899 tcp
      map rl0 192.168.0.0/8 -> 0/32 proxy port ftp ftp/tcp	[2]
      map rl0 192.168.0.0/8 -> 0/32 portmap tcp/udp 1025:65000 [3]
      map rl0 192.168.0.0/8 -> 0/32 [4]
      
      --- ipnat.rules end
      
      [1] - переброска входящих соединений на внутренний WEB сервер. Тоже самое с портом 4899 для RAdmin;
      [2] - проксирование FTP входящих/исходящих запросов;
      [3] - распределяет все исходящие сессия на порты от 1025 до 65000;
      [4] - тоже что и [3], но перекидывает все исходящие без рамок на используемые поты для сессий (можно не указывать, работать все равно будет).

      Жмем Ctrl + c и пишем exit.

      перезагрузим правила.
      # ipnat -CF -f /etc/ipnat.rules
      
      Так можно делать перезагрузку любых изменений правил для NAT без перезапуска всей системы.
Вот, собственно все, что я хотел донести до Ваших умов.

[ опубликовано 28/12/2006 ]

5000700 AT mail DOT ru, ICQ#223664205 - Организация роутера на базе FreeBSD + IPF (IPFILTER)   Версия для печати