Next Previous Contents

7. Серьезный пример.

Это пример от Michael Neuling и моего LinuxWorld Tutorial за Март 1999; это не единственый способ решить данную проблему, но вероятно самый простой. Я надеюсь, что вы найдете его информативным.

7.1 Соглашения

  • Внутренняя сеть за маскарадом (различные операционные системы), которую мы называем "GOOD" ("ХОРОШАЯ").
  • Выставленные серверы в отдельной сети (называемой "DMZ" -- Demilitarized Zone -- нейтральная зона).
  • PPP соединение с Internet (называемым "BAD" -- "ПЛОХИМ").
          Внешняя сеть (BAD)
                  |
                  |
              ppp0|
           ---------------
           | 192.84.219.1|             Сервера сети (DMZ)
           |             |eth0
           |             |----------------------------------------------
           |             |192.84.219.250 |             |              |
           |             |               |             |              |
           |192.168.1.250|               |             |              |
           ---------------          --------       -------        -------
                  | eth1            | SMTP |       | DNS |        | WWW |
                  |                 --------       -------        -------
                  |              192.84.219.128  192.84.219.129  192.84.218.130
                  |
          Внутренняя сеть (GOOD)

7.2 Цели

  • Машина пакетной фильтрации:

    PING любой сети

    Полезно для определения, действует ли машина.

    TRACEROUTE любой сети

    Аналогично, полезно для диагностики.

    DNS доступ

    Чтобы ping и DNS были полезнее.

  • Внутри DMZ:
    • Почтовый сервер
      • SMTP ко внешним соединениям
      • Прием SMTP от внутренних и внешних соединений
      • Прием Pop-3 от внутренних соединений
    • Сервер имен
      • Отправка DNS во внешнюю сеть
      • Прием DNS от внутренней и внешней сети и машины пакетной фильтрации
    • Web сервер
      • Прием HTTP от внутренней и внешней сетей
      • Rsync доступ из внутренней сети
  • Внутренняя сеть:

    Разрешенные WWW, ftp, traceroute, ssh доступы во внешнюю сеть.

    Это достаточно стандартные вещи, чтобы разрешить их использование: здесь мы ограничиваемся только этими сервисами, а не всеми доступными сервисами Интернет.

    Разрешить SMTP на почтовом сервере

    То есть позволить отправку почты наружу.

    Разрешить POP-3 на почтовом сервере

    То есть позволить пользователям читать их почту

    Разрешить DNS на серевере имен

    Это нужно для работы с внешними именами WWW, ftp, traceroute и ssh.

    Разрешить rsync на веб сервер

    Для синхронизации внешнего веб сервера со внутренним.

    Разрешить WWW на веб сервере

    Очевидно, что пользователи должны иметь доступ к своему внешнему веб серверу.

    Разрешить ping на машине пакетной фильтрации

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

7.3 Перед фильтрацией пакетов

  • Антиспуфинг Так как у нас не асимметричная маршрутизация, мы можем просто включить антиспуфинг для всех интерфейсов.
          # for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
          #
    
  • Установка правил фильтрации на отбрасывание (DENY) всего:

    Запрещаем все, кроме loopback трафика.

              # ipchains -A input -i ! lo -j DENY
              # ipchains -A output -i ! lo -j DENY
              # ipchains -A forward -j DENY
              #
    
  • Установка интерфейсов

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

  • Вставка модулей маскарадинга по-протоколам.

    Мы должны вставить модуль маскарадинга для FTP, так, чтобы активный и пассивный FTP "работал только' из внутренней сети.

              # insmod ip_masq_ftp
              #
    

7.4 Фильтрация проходящих пакетов

При маскарадинге самое лучшее -- фильтр в цепочке forward.

Разбейте цепочку forward на несколько пользовательских цепочек в зависимости от интерфейсов источника/приемника; проблема разделяется на более простые в управлении части.

       ipchains -N good-dmz 
       ipchains -N bad-dmz 
       ipchains -N good-bad 
       ipchains -N dmz-good 
       ipchains -N dmz-bad 
       ipchains -N bad-good
ACCEPT'ие стандартных ICMP сообщений об ошибках -- достаточно общая вещь, поэтому создадим для нее цепочку.
       ipchains -N icmp-acc

Установка переходов из цепочки forward

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

Обратите внимание, что в журнал регистрации пойдет все, что не подпадает ни под одно из этих правил (очевидно, что такого никогда не случится).

     ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz 
     ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad 
     ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad 
     ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good 
     ipchains -A forward -i eth0 -j bad-dmz 
     ipchains -A forward -i eth1 -j bad-good 
     ipchains -A forward -j DENY -l

Определим icmp-acc цепочку

Пакеты, которые являются одним из ICMP сообщений об ошибке ACCEPT'ся, иначе управление перейдет обратно к вызывающей цепочке.

     ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT 
     ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT 
     ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT 
     ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT

От Good (внутренняя сеть) к DMZ (сервера)

Внутренние ограничения:

  • Позволить WWW, ftp, traceroute, ssh к внешней сети
  • Позволить SMTP к почтовому серверу
  • Позволить POP-3 к почтовому серверу
  • Позволить DNS к сереверу имен
  • Позволить rsync к веб серверу
  • Позволить WWW к веб серверу
  • Позволить ping к машине пакетной фильтрации
Можно было бы сделать маскарадинг от внутренней сети к DMZ, но здесь мы это не делаем. Так как кто-то из внутренней сети может попробовать напакостить, мы регистрируем в журнале все отклоненные пакеты.
        ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT 
        ipchains -A good-dmz -p tcp -d 192.84.219.128 pop-3 -j ACCEPT 
        ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT 
        ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT 
        ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT 
        ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT 
        ipchains -A good-dmz -p icmp -j icmp-acc 
        ipchains -A good-dmz -j DENY -l

От BAD (внешняя сеть) к DMZ (сервера).

  • DMZ ограничения:
    • Почтовый сервер
      • SMTP во внешнюю сеть
      • Прием SMTP от внутренней и внешней сетей
      • Прием POP-3 от внутренней сети
    • Сервер имен
      • Посылка DNS во внешнюю сеть
      • Прием DNS от внутренней и внешней сетей и машины пакетной фильтрации
    • Web сервер
      • Прием HTTP от внутренней и внешней сети
      • Rsync доступ из внутренней сети
  • Вещи, которые мы разрешаем от внешней сети к DMZ.
    • Не регистрировать нарушения, поскольку они могут случаться.
  
        ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT 
        ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT 
        ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT 
        ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT 
        ipchains -A bad-dmz -p icmp -j icmp-acc 
        ipchains -A bad-dmz -j DENY

От Good (внутренняя сеть) к Bad (внешняя сеть).

Внутренние ограничения:

  • Позволить WWW, ftp, traceroute, ssh ко внешней сети
  • Позволить SMTP к почтовому серверу
  • Позволить POP-3 к почтовому серверу
  • Позволить DNS к серверу имен
  • Позволить rsync к веб серверу
  • Позволить WWW к веб серверу
  • Позволить ping к машине пакетной фильтрации
  • Многие люди позволяют все из внутренней сети ко внешней сети, и затем добавляют ограничения. Мы -- тираны.
  • Регистрационные нарушения.
  • Пассивный FTP, обработанный модулем masq.
       ipchains -A good-bad -p tcp --dport www -j MASQ
       ipchains -A good-bad -p tcp --dport ssh -j MASQ
       ipchains -A good-bad -p udp --dport 33434:33500 -j MASQ
       ipchains -A good-bad -p tcp --dport ftp --j MASQ
       ipchains -A good-bad -p icmp --icmp-type ping -j MASQ
       ipchains -A good-bad -j REJECT -l

От DMZ к Good (внутренняя сеть).

Внутренние ограничения:

  • Позволить WWW, ftp, traceroute, ssh к внешней сети
  • Позволить SMTP к почтовому серверу
  • Позволить POP-3 к почтовому серверу
  • Позволить DNS к серверу имен
  • Позволить rsync к веб серверу
  • Позволить WWW к веб серверу
  • Позволить ping к машине пакетной фильтрации
  • Многие люди позволяют доступ ко всем сервисам из внутренней сети ко внешней сети, и затем добавляют ограничения. Мы -- бессовестные тираны.
  • Регистрационные нарушения.
  • Пассивный FTP, обработанный модулем masq.
  • Если бы мы были замаскарадены от внутренней сети к DMZ, то просто отказывались бы от всех пакетов, приходящих другим путем. Сейчас позволяем только пакеты, которые могли бы быть часть установленного соединения.
       ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT
       ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
       ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT
       ipchains -A dmz-good -p icmp -j icmp-acc
       ipchains -A dmz-bad -j DENY -l

От DMZ к bad (внешняя сеть).

DMZ ограничения:

  • Почтовый сервер
    • SMTP во внешнюю сеть
    • Прием SMTP от внутренней и внешней сетей
    • Прием POP-3 от внутренней сети
  • Сервер имен
    • Посылка DNS во внешнюю сеть
    • Прием DNS от внутренней и внешней сетей и машины пакетной фильтрации
  • Web сервер
    • Прием HTTP от внутренней и внешней сети
    • Rsync доступ из внутренней сети
       ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT
       ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT
       ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
       ipchains -A dmz-bad -p icmp -j icmp-acc
       ipchains -A dmz-bad -j DENY -l

От Bad (внешняя сеть) к Good (внутренняя сеть).

Мы не позволяем ничего (не-маскарадное) от внешней сети к внутренней сети

       ipchains -A bad-good -j REJECT

Фильтрация пакетов непосредственно для Linux машины

Если мы хотим использовать фильтрацию пакета на пакетах, приходящих непосредственно к linux машине, то мы должны настроить фильтрацию в цепочке input. Мы создаем одну цепочку для каждого интерфейса адресата:

       ipchains -N bad-if 
       ipchains -N dmz-if 
       ipchains -N good-if
Создаем переходы на них:
       ipchains -A input -d 192.84.219.1 -j bad-if 
       ipchains -A input -d 192.84.219.250 -j dmz-if 
       ipchains -A input -d 192.168.1.250 -j good-if

Интерфейс Bad (внешняя сеть).

Машина пакетной фильтрации:

  • PING любой сети
  • TRACEROUTE любой сети
  • Доступ к DNS
  • Внешний интерфейс также получает ответы на маскараденные пакеты и ICMP сообщения об ошибках на них и ping ответы.
        ipchains -A bad-if -i ! ppp0 -j DENY -l 
        ipchains -A bad-if -p TCP --dport 61000:65096 -j ACCEPT 
        ipchains -A bad-if -p UDP --dport 61000:65096 -j ACCEPT 
        ipchains -A bad-if -p ICMP --icmp-type pong -j ACCEPT 
        ipchains -A bad-if -j icmp-acc 
        ipchains -A bad-if -j DENY

Интерфейс DMZ.

Ограничения машины пакетной фильтрации:

  • PING любой сети
  • TRACEROUTE любой сети
  • Доступ к DNS
  • DMZ интерфейс получает ответы DNS, ответы ping и ICMP сообщения об ошибках.
       ipchains -A dmz-if -i ! eth0 -j DENY 
       ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT 
       ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT 
       ipchains -A dmz-if -p ICMP --icmp-type pong -j ACCEPT 
       ipchains -A dmz-if -j icmp-acc 
       ipchains -A dmz-if -j DENY -l

Интерфейс Good (внутренний).

  • Ограничения машины пакетной фильтрации:
    • PING любой сети
    • TRACEROUTE любой сети
    • Доступ к DNS
    • DMZ интерфейс получает ответы DNS, ответы ping и ICMP сообщения об ошибках.
  • Ограничения внутренней сети:
    • Разрешить WWW, ftp, traceroute, ssh ко внешней сети
    • Позволить SMTP к почтовому серверу
    • Позволить POP-3 к почтовому серверу
    • Позволить DNS к серверу имен
    • Позволить rsync к веб серверу
    • Позволить WWW к веб серверу
    • Позволить ping к машине пакетной фильтрации
    • Внутренний интерфейс получает ответы DNS, ответы ping и ICMP сообщения об ошибках.
         ipchains -A good-if -i ! eth1 -j DENY 
         ipchains -A good-if -p ICMP --icmp-type ping -j ACCEPT 
         ipchains -A good-if -p ICMP --icmp-type pong -j ACCEPT 
         ipchains -A good-if -j icmp-acc 
         ipchains -A good-if -j DENY -l

7.5 В заключение

Удаление правил блокировки:

        ipchains -D input 1 
        ipchains -D forward 1 
        ipchains -D output 1

Next Previous Contents

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости