The OpenNET Project / Index page

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

Настройка сетевого экрана (firewall) в FreeBSD (ipfw freebsd firewall)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: ipfw, freebsd, firewall,  (найти похожие документы)
From: Alexandr Kovalenko <never АТ nevermind.kiev.ua> Date: Mon, 16 Jan 2004 14:31:37 +0000 (UTC) Subject: Настройка сетевого экрана (firewall) в FreeBSD Оригинал: http://uafug.org.ua/projects/faq/firewall.setup/ Настройка сетевого экрана (firewall) в FreeBSD FreeBSD 4.x и 5.x позволяет настроить сетевой экран (firewall) очень просто. С помощью сетевого экрана Вы можете защитить как один сервер, так и всю сеть. Также Вы можете легко включить поддержу трансляции сетевых адресов (NAT) для того, чтобы компьютеры из Вашей внутренней сети могли получить доступ к внешней сети используя всего один внешний IP адрес. Для этого необходимы три простых шага 1. Во-первых, Вам будет необходимо внести несколько изменений в Ваше ядро. На самом деле это не так сложно, как звучит на первый взгяд. Используйте команду su для того, чтобы получить права суперпользователя, при помощи команды cd перейдите в каталог /usr/src/sys/i386/conf, скопируйте файл GENERIC в новый файл. Назовём его, к примеру, ROUTER. Этот файл будет Вашим новым конфигурационным файлом Вашего ядра. Ниже приведены изменения, которые Вам необходимо будет внести: --- GENERIC Sun Jul 6 17:09:42 2003 +++ ROUTER Sun Jul 6 17:11:06 2003 @@ -22,7 +22,7 @@ cpu I486_CPU cpu I586_CPU cpu I686_CPU -ident GENERIC +ident ROUTER maxusers 0 #makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols @@ -259,3 +259,9 @@ device aue # ADMtek USB ethernet device cue # CATC USB ethernet device kue # Kawasaki LSI USB ethernet + +# Enable ipfw and natd. +options IPFIREWALL +options IPFIREWALL_VERBOSE +options IPDIVERT +options DUMMYNET 2. Другими словами, Вам необходимо будет изменить идентификатор (ident) ядра и добавить опции для включения сетевого экрана в ядре. После настройки конфигурационного файла скомпилируйте и установите новое ядро: # cd /usr/src # make buildkernel KERNCONF=ROUTER # make installkernel KERNCONF=ROUTER # Enable firewall firewall_enable="YES" firewall_type="type" firewall_quiet="NO" Переменная firewall_type должна быть установлена в значение "client" для того, чтобы защитить отдельностоящую машину или в "simple" для шлюза, защищающего внутреннюю сеть. Если Вам необходимо также поддержка трансляции сетевых адресов (NAT), добавьте нижеследующие установки: # Enable natd. natd_enable="YES" natd_interface="fxp0" # your public network interface natd_flags="-m" # preserve port numbers if possible 3. В-третьих, Вам будет необходимо сделать несколько правок в файле rc.firewall. Комментарии в нём помогут Вам понять, что необходимо, это действительно очень просто. Найдите раздел с правилами для Вашего типа сетевого экрана (firewall), как то: "client" или "simple". В начале раздела Вы найдете несколько переменных, указывающих Ваши IP адреса, сетевые интерфейсы и т.д.; заполните их. Вот и все, по крайней мере для начальной настройки. Перезагрузите машину и Вы получите настроеный и работающий сетевой экран (firewall). Важное замечание о исправлении неполадок (troubleshooting) Сетевой экран (firewall) в FreeBSD спроектирован так, что он безопасен по умолчанию. Если Вы включите его и не добавите никаких правил, он не будет пропускать никаких пакетов. Это означает, что, если Вы что-то сделаете неправильно в Вашем файле конфигурации сетевого экрана (firewall), Вы можете оказаться в ситуации, в которой не сможете получить доступ к Вашей машине через сеть для того, чтобы исправить это. Вам понадобится зайти на машину через системную консоль (клавиатуру, подсоединённую к машине). Это случилось со мной один раз во время тестирования. Это не большая проблема, если Вы понимаете, что происходит. Очень просто исправить ситуацию, если Вы имеете доступ к консоли; просто отредактируйте файл /etc/rc.conf, установив firewall_type в значение "open" или просто закомментируйте строки, относящиеся к firewall и перезагрузитесь. Но будьте бдительны, если Вы настраиваете Ваш сетевой экран через сеть. Замечание о FTP Настройки сетевого экрана, подобные этим, не дают возможности работать FTP. На самом деле, это вина FTP. FTP - это старомодный и черезчур усложнённый протокол, который требует от сервера инициировать обратное соединение к клиенту. Так как сетевые экраны запрещают открытие нового соединения извне (кроме некоторых протоколов типа SMTP или ssh), FTP не работает. Есть обходное решение - использовать "пассивный" режим работы FTP, который заставляет проводить работу в обычном режиме клиент-сервер. Каждый раз, когда Вы будете использовать клиента FTP просто отдайте команду, которая включает пассивный режим. В новых версиях FTP клиента Вы можете сделать этот режим режимом по умолчанию при помощи переменной окружения FTP_PASSIVE_MODE, установленное в значение "yes". Современные веб-браузеры используют этот режим по умолчанию и/или позволяют включить его использование по умолчанию в настройках. Другое обходное решение - избегать использования FTP и использовать HTTP или scp. Более сложные темы Как только Вы настроите сетевой экран, Вы можете найти, что Вас не устраивают те наборы правил, которые включены в файл rc.firewall. Если это так, то Вы можете очень просто написать свои собственные. Первое, что Вы можете сделать, это разрешить соединения ssh. (ssh - это безопасная замена для telnet/rlogin; Вы можете его найти в базовой системе или в коллекции портов). В том месте набора правил, где разрешается соединение для входящей почты, добавьте подобное правило для ssh путём копирования и последующего изменения номера порта с 25 на 22. Или Вы можете взять контроль в свои руки и написать совершенно новый набор правил. Для этой статьи у меня получилось два таких набора: router-solo и router-net, которые являются улучшеными версиями стандартных наборов "client" и "simple". Вот что у меня получилось (комментарии на английском дабы избежать возможных проблем, связанных с пониманием /bin/sh кириллических символов): [Rr][Oo][Uu][Tt][Ee][Rr]-[Ss][Oo][Ll][Oo]) ############ # ROUTER single-machine custom firewall setup. Protects somewhat # against the outside world. ############ # Set this to your ip address. ip="192.168.0.1" # Allow communications through loopback interface and deny 127.0.0.1/8 # from any other interfaces setup_loopback # Allow anything outbound from this address. ${fwcmd} add allow all from ${ip} to any out # Deny anything outbound from other addresses. ${fwcmd} add deny log all from any to any out # Allow TCP through if setup succeeded. ${fwcmd} add allow tcp from any to any established # Allow IP fragments to pass through. ${fwcmd} add allow all from any to any frag # Allow inbound ftp, ssh, email, tcp-dns, http, https, pop3, pop3s. ${fwcmd} add allow tcp from any to ${ip} 21 setup ${fwcmd} add allow tcp from any to ${ip} 22 setup ${fwcmd} add allow tcp from any to ${ip} 25 setup ${fwcmd} add allow tcp from any to ${ip} 53 setup ${fwcmd} add allow tcp from any to ${ip} 80 setup ${fwcmd} add allow tcp from any to ${ip} 443 setup ${fwcmd} add allow tcp from any to ${ip} 110 setup ${fwcmd} add allow tcp from any to ${ip} 995 setup # Deny inbound auth, netbios, ldap, and Microsoft's DB protocol # without logging. ${fwcmd} add deny tcp from any to ${ip} 113 setup ${fwcmd} add deny tcp from any to ${ip} 139 setup ${fwcmd} add deny tcp from any to ${ip} 389 setup ${fwcmd} add deny tcp from any to ${ip} 445 setup # Deny some chatty UDP broadcast protocols without logging. ${fwcmd} add deny udp from any 137 to any ${fwcmd} add deny udp from any to any 137 ${fwcmd} add deny udp from any 138 to any ${fwcmd} add deny udp from any 513 to any ${fwcmd} add deny udp from any 525 to any # Allow inbound DNS and NTP replies. This is somewhat of a hole, # since we're looking at the incoming port number, which can be # faked, but that's just the way DNS and NTP work. ${fwcmd} add allow udp from any 53 to ${ip} ${fwcmd} add allow udp from any 123 to ${ip} # Allow inbound DNS queries. ${fwcmd} add allow udp from any to ${ip} 53 # Deny inbound NTP queries without logging. ${fwcmd} add deny udp from any to ${ip} 123 # Allow traceroute to function, but not to get in. ${fwcmd} add unreach port udp from any to ${ip} 33435-33524 # Allow some inbound icmps - echo reply, dest unreach, source quench, # echo, ttl exceeded. ${fwcmd} add allow icmp from any to any icmptypes 0,3,4,8,11 # Everything else is denied and logged. ${fwcmd} add deny log all from any to any ;; [Rr][Oo][Uu][Tt][Ee][Rr]-[Nn][Ee][Tt]) ############ # ROUTER network custom firewall setup. The assumption here is that # the internal hosts are trusted, and can do anything they want. # The only thing we have to be careful about is what comes in over # the outside interface. So, you'll see a lot of "in via ${oif}" # clauses here. ############ # Set these to your outside interface network and netmask and ip. oif="fxp0" onet="217.20.160.0" omask="255.255.255.0" oip="217.20.160.1" # Set these to your inside interface network and netmask and ip. iif="fxp1" inet="192.168.0.0" imask="255.255.255.0" iip="192.168.0.1" # Allow communications through loopback interface and deny 127.0.0.1/8 # from any other interfaces setup_loopback # Stop spoofing ${fwcmd} add deny log all from ${inet}:${imask} to any in via ${oif} ${fwcmd} add deny log all from ${onet}:${omask} to any in via ${iif} # Stop RFC1918 nets on the outside interface ${fwcmd} add deny log all from any to 10.0.0.0/8 via ${oif} ${fwcmd} add deny log all from any to 172.16.0.0/12 via ${oif} ${fwcmd} add deny log all from any to 192.168.0.0/16 via ${oif} # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1 , # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E), # RFC 3330 nets on the outside interface ${fwcmd} add deny log all from any to 0.0.0.0/8 via ${oif} ${fwcmd} add deny log all from any to 169.254.0.0/16 via ${oif} ${fwcmd} add deny log all from any to 192.0.2.0/24 via ${oif} ${fwcmd} add deny log all from any to 198.18.0.0/15 via ${oif} ${fwcmd} add deny log all from any to 224.0.0.0/4 via ${oif} ${fwcmd} add deny log all from any to 240.0.0.0/4 via ${oif} # Network Address Translation. This rule is placed here deliberately # so that it does not interfere with the surrounding address-checking # rules. If for example one of your internal LAN machines had its IP # address set to 192.168.0.2 then an incoming packet for it after being # translated by natd(8) would match the `deny' rule above. Similarly # an outgoing packet originated from it before being translated would # match the `deny' rule below. case ${natd_enable} in [Yy][Ee][Ss]) if [ -n "${natd_interface}" ]; then ${fwcmd} add divert natd all from any to any via ${natd_interface} fi ;; esac # Stop RFC1918 nets on the outside interface ${fwcmd} add deny log all from 10.0.0.0/8 to any via ${oif} ${fwcmd} add deny log all from 172.16.0.0/12 to any via ${oif} ${fwcmd} add deny log all from 192.168.0.0/16 to any via ${oif} # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1, # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E), # RFC 3330 nets on the outside interface ${fwcmd} add deny log all from 0.0.0.0/8 to any via ${oif} ${fwcmd} add deny log all from 169.254.0.0/16 to any via ${oif} ${fwcmd} add deny log all from 192.0.2.0/24 to any via ${oif} ${fwcmd} add deny log all from 198.18.0.0/15 to any via ${oif} ${fwcmd} add deny log all from 224.0.0.0/4 to any via ${oif} ${fwcmd} add deny log all from 240.0.0.0/4 to any via ${oif} # Allow anything on the internal net ${fwcmd} add allow all from any to any via ${iif} # Allow anything outbound from this net. ${fwcmd} add allow all from ${onet}:${omask} to any out via ${oif} # Deny anything outbound from other nets. ${fwcmd} add deny log all from any to any out via ${oif} # Allow TCP through if setup succeeded. ${fwcmd} add allow tcp from any to any established # Allow IP fragments to pass through. ${fwcmd} add allow all from any to any frag # Allow inbound ftp, ssh, email, tcp-dns, http, https, pop3, pop3s. ${fwcmd} add allow tcp from any to ${oip} 21 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 22 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 25 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 53 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 80 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 443 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 110 setup in via ${oif} ${fwcmd} add allow tcp from any to ${oip} 995 setup in via ${oif} # Deny inbound auth, netbios, ldap, and Microsoft's DB protocol # without logging. ${fwcmd} add deny tcp from any to ${oip} 113 setup in via ${oif} ${fwcmd} add deny tcp from any to ${oip} 139 setup in via ${oif} ${fwcmd} add deny tcp from any to ${oip} 389 setup in via ${oif} ${fwcmd} add deny tcp from any to ${oip} 445 setup in via ${oif} # Deny some chatty UDP broadcast protocols without logging. ${fwcmd} add deny udp from any 137 to any in via ${oif} ${fwcmd} add deny udp from any to any 137 in via ${oif} ${fwcmd} add deny udp from any 138 to any in via ${oif} ${fwcmd} add deny udp from any 513 to any in via ${oif} ${fwcmd} add deny udp from any 525 to any in via ${oif} # Allow inbound DNS and NTP replies. This is somewhat of a hole, # since we're looking at the incoming port number, which can be # faked, but that's just the way DNS and NTP work. ${fwcmd} add allow udp from any 53 to ${oip} in via ${oif} ${fwcmd} add allow udp from any 123 to ${oip} in via ${oif} # Allow inbound DNS queries. ${fwcmd} add allow udp from any to ${oip} 53 in via ${oif} # Deny inbound NTP queries without logging. ${fwcmd} add deny udp from any to ${oip} 123 in via ${oif} # Allow traceroute to function, but not to get in. ${fwcmd} add unreach port udp from any to ${oip} 33435-33524 in via ${oif} # Allow some inbound icmps - echo reply, dest unreach, source quench, # echo, ttl exceeded. ${fwcmd} add allow icmp from any to any in via ${oif} icmptypes 0,3,4,8,11 # Broadcasts are denied and not logged. ${fwcmd} add deny all from any to 255.255.255.255 # Everything else is denied and logged. ${fwcmd} add deny log all from any to any (c) 2003, Alexandr Kovalenko <never АТ nevermind.kiev.ua> $Id: index.html,v 1.12 2003/07/07 09:13:28 never Exp $ Original revision: 1.9

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, Igor (??), 13:07, 12/04/2004 [ответить]  
  • +/
    а почему вот эта бадяга аж два раза???

    # Stop RFC1918 nets on the outside interface
    ...
    # Stop draft-manning-dsua-03.txt
    ...

     
  • 1.2, vagu (?), 20:55, 29/05/2006 [ответить]  
  • +/
    # Enable firewall
    firewall_enable="YES"
    firewall_type="type"
    firewall_quiet="NO"

       Переменная firewall_type должна быть установлена в значение "client"
       для того, чтобы защитить отдельностоящую машину или в "simple" для
       шлюза, защищающего внутреннюю сеть. Если Вам необходимо также
       поддержка трансляции сетевых адресов (NAT), добавьте нижеследующие
       установки:

    Вот эту часть я прописал в rc.conf файл в
    FreBSD 5.4 , я правильно понял?

    # Enable natd.
    natd_enable="YES"
    natd_interface="fxp0"   # your public network interface
    natd_flags="-m"         # preserve port numbers if possible

     
     
  • 2.3, maximuss (?), 15:41, 19/06/2006 [^] [^^] [^^^] [ответить]  
  • +/
    В поле type указать тип согласно rc.firewall ([Rr][Oo][Uu][Tt][Ee][Rr]-[Ss][Oo][Ll][Oo])
    firewall_type="type" - дан как пример.
     

    игнорирование участников | лог модерирования

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




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру