Рейтинг@Mail.ru

Наши друзья и партнеры

купить дешевый 
компьютер родом из Dhgate.com






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 7 Сетевой брандмауэр (Часть 1)

Linux IPCHAINS

Краткое описание

Кто-нибудь может мне сказать, почему я должен использовать коммерческий брандмауэр, а не простой в использовании Ipchains? Что я теряю, используя Ipchains? Ipchains хорош и становится все лучше и лучше, чем коммерческие продукты с точки зрения поддержки и функциональных возможностей. Вы, скорее всего, будете лучше понимать процессы, происходящие в Вашей сети, если будете использовать Ipchains, а не его коммерческий аналоги.

Что такое политика безопасности сетевого брандмауэра

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

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

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

Что такое пакетный фильтр?

Пакетный фильтр представляет собой особый тип брандмауэра, созданного на основе ядра Linux. Он работает на сетевом уровне. Данным позволяется остаться в системе, если это разрешено правилами. Проходящие пакеты фильтруются по типу, адресу источника, адресу получателя и по порту. В большинстве случаев фильтрация пакетов осуществляется на маршрутизаторе, который перенаправляет пакеты согласны правилам фильтрации. Когда пакет приходит на фильтрующий маршрутизатор, тот извлекает информацию из заголовка пакета и принимает решение согласно правилам фильтрации о пересылке или уничтожении пакета. Из заголовка пакета может извлекаться следующая информация:

  1. IP-адрес источника
  2. IP-адрес получателя
  3. TCP/UDP-порт источника
  4. TCP/UDP-порт получателя
  5. Тип ICMP-сообщения
  6. Информация об инкапсулированном протоколе (TCP, UDP, ICMP или IP tunnel).

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

Топология

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

В нашей конфигурации мы дадим три различных примера, которые помогут настроить правила брандмауэра в зависимости от типа сервера и его размещения в сети. Первый пример будет для веб-сервера, второй для почтового сервера и третий для шлюза, который действует как сервер-посредник (proxy server) для внутренних Win-машин, рабочих станций и дополнительных серверов.

www.openna.com
Кэширующий DNS
208.164.186.3
deep.openna.com
Главный DNS-сервер
208.164.186.1
mail.openna.com
Вторичный DNS-сервер
208.164.186.2
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP-трафик
  3. Разрешен DNS-сервер и клиент на порту 53
  4. Разрешен SSH-сервер на порту 22
  5. Разрешен HTTP-сервер на 80 порту
  6. Разрешен HTTPS-сервер на порту 443
  7. Разрешен SMTP-клиент на порту 25
  8. Разрешен FTP-сервер на 20 и 21 портах
  9. Разрешены исходящие traceroute-запросы
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP-трафик
  3. Разрешен DNS-сервер и клиент на порт 53
  4. Разрешен SSH-сервер и клиент на порт 22
  5. Разрешен HTTP-сервер и клиент на порт 80
  6. Разрешен HTTPS-сервер и клиент на порт 443
  7. Разрешен WWW-CACHE-клиент на порт 8080
  8. Разрешен внешний POP-клиент на порт 110
  9. Разрешен внешний NNTP NEWS-клиент на порт 119
  10. Разрешен SMTP-сервер и клиент на порт 25
  11. Разрешен IMAP-сервер на порт 143
  12. Разрешен IRC-клиент на порт 6667
  13. Разрешен ICQ-клиент на порт 4000
  14. Разрешен FTP-клиент на порты 20 и 21
  15. Разрешен RealAudio/QuickTime-клиент
  16. Разрешены исходящие traceroute-запросы
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP-трафик
  3. Разрешен DNS-сервер и клиент на порт 53
  4. Разрешен SSH-сервер на порт 22
  5. Разрешен SMTP-сервер и клиент на порт 25
  6. Разрешен IMAP-сервер на порт 143
  7. Разрешены исходящие traceroute-запросы

Эта таблица показывает, какие порты я должен открыть на различных серверах. В зависимости от того, какой сервис должен быть доступен на сервере, Вы должны настроить скрипт брандмауэра на разрешение трафика к определенному порту. www.openna.com, наш веб-сервер, mail.openna.com, почтовый сервер для всех внутренних сетей и deep.openna.com, это шлюз во всех примерах, объясненных в этой главе.

Создание ядра с поддержкой брандмауэра Ipchains

Первое, о чем Вы должны подумать, это чтобы ядро было создано с поддержкой сетевого Firewall и Firewalling. Помните, что все сервера должны быть настроены на блокирование неиспользуемых портов, даже если они не выступают в роли брандмауэра. В ядре 2.2.14 нужно ответить Yes на следующие вопросы:

Networking options:
Network firewalls (CONFIG_FIREFALL) [N] Y
IP:Firewalling (CONFIG_IP_FIREWALL) [N] Y
IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y

ЗАМЕЧАНИЕ. Если при создание ядра использовали материалы из главы 3 книги, то все необходимые опции (Network firewalls, IP:Firewalling, и IP:TCP syncookie support) уже были отмечены.

Некоторые пояснения к правилам, используемым в скриптахнастройки брандмауэра

Ниже приводятся пояснения к некоторым правилам, которые мы используем в примере firewall. Они приводятся только как рекомендации, потому что скрипты хорошо откомментированы и легко модифицируются.

Константы, используемые в примере скрипта firewall.

EXTERNAL_INTERFACE
Это имя внешнего сетевого интерфейса, обращенного в Интернет. В нашем примере это eth0.
LOCAL_INTERFACE_1
Это имя интерфейса подключенного к внутренней сети LAN. В нашем примере это eth1.
LOOPBACK_INTERFACE
Это имя loopback-интерфейса. В нашем примере это lo.
IPADDR
Это IP-адрес внешнего интерфейса. Это статический адрес, зарегистрированный в InterNIC, или динамический адрес, присвоенный Вашим ISP (обычно через DHCP).
LOCALNET_1
Это адрес локальной сети (LAN), если любой, полный диапазон IP-адресов, используемых машинами в Вашей сети. Они могут быть статически присвоенными или могут назначаться локальным DHCP-сервером. В нашем примере диапазон адресов представляет собой часть сети класса C: 192.168.1.0/24.
ANYWHERE
Это обозначение адреса, который ipchains воспринимает как "любая машина" (не широковещательный адрес). Обе программы предоставляют метку any/0 для подобного адреса, который равен 0.0.0.0/0.
NAMESERVER_1
Это IP-адрес Primary DNS-сервера из Вашей сети или ISP.
NAMESERVER_2
Это IP-адрес Secondary DNS-сервера из Вашей сети или ISP.
MY_ISP
Это диапазон адресов Вашего ISP & NOC. Это значение используется firewall для разрешения запросов ICMP ping и traceroute. Если Вы не определите этот диапазон, то будет запрещено посылать ping в Интернет из локальной сети.
LOOPBACK
Диапазон адресов loopback равен 127.0.0.0/8. Интерфейс непосредственно адресован как 127.0.0.1 (в файле /etc/hosts).
PRIVPORTS
Привилегированные порты, обычно с 0 по 1023.
UNPRIVPORTS
Непривилегированные порты, обычно с 1024 по 65535. Они определяются динамически на стороне клиента соединения.
Default Policy
Брандмауэр имеет предопределенную линию поведения и собирает действия, которые нужно предпринять в ответ на определенные типы сообщений. Это означает, что если пакет не попал ни под одно из правил, то к нему применяется правило по умолчанию.

ЗАМЕЧАНИЕ. Люди, которые динамически получают адреса от ISP, могут включить следующие две строки в описания firewall. Эти строки определяют IP-адрес интерфейса ppp0 и адрес сети удаленного ppp-сервера.

IPADDR=`/sbin/ifconfig | grep -A 4 ppp0 | awk '/inet/ { print $2 } ' | \
       sed -e s/addr://`
MY_ISP=`/sbin/ifconfig | grep -A 4 ppp0 | awk '/P-t-P/ { print $3 } ' | \
       sed -e s/P-t-P:// | cut -d '.' -f 1-3`.0/24

Разрешение локального трафика.

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

# Неограниченный трафик через loopback-интерфейс.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT

Фильтрация адреса источника

Все IP-пакеты содержат в своих заголовках IP-адреса источника и получателя и тип IP-протокола, помещенного в пакет (TCP, UDP или ICMP). Единственным средством идентификации, согласно протоколу IP, является адрес источника сообщений. Это приводит к возможности подмены адреса (spoofing), когда злоумышленник заменяет адрес источника на несуществующий адрес или на адрес другого сервера.

# Отбрасывание spoof-пакетов, с адресом источника, совпадающим с
# Вашим внешним адресом.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -l -j DENY

Существует по крайней мере семь адресов на внешнем интерфейсе от которых необходимо отказаться. К ним относятся:

  • Ваш внешний IP-адрес
  • Приватных IP-адреса класса A
  • Приватных IP-адреса класса B
  • Приватных IP-адреса класса C
  • Широковещательные адреса класса D
  • Зарезервированные адреса класса E
  • Адрес loopback-интерфейса

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

Замечание. Не забудьте исключить собственный IP-адрес из списка исходящих блокируемых пакетов. По умолчанию, я исключаю приватные адреса класса C, так как они наиболее часто используются большинством людей сегодня. Если Вы использовали другой класс вместо C, то Вы должны раскомментировать соответствующие строки в секции SPOOFING & BAD ADDRESSES файла конфигурации файрвола.

Остальная часть правил

Другие правила, используемые в скрипте брандмауэра описывают:

  • Доступ к сервисам из внешнего мира
  • Доступ к сервисам во внешнем мире
  • Маскарадинг внутренних машин

Скрипт для настройки брандмауэра

Утилита ipchains позволяет установить брандмауэр, IP-маскарадинг и т. д. Ipchains общается с ядром и говорит, какие пакеты необходимо отфильтровать. Теоретически, все установки брандмауэра запоминаются в ядре и теряются при перезагрузке сервера. Для борьбы с этим, чтобы сделать правила постоянными, мы рекомендуем использовать инициализационные скрипты System V. Для этого создайте файл, содержащий скрипт файрвола, подобный описанному ниже, в каталоге /etc/rc.d/init.d на каждом сервере. Конечно, каждый сервер имеет различные сервисы и будет иметь разные скрипты. По этим причинам, мы предоставляем три различных набора правил, с которыми Вы можете поиграть и подогнать под Ваши нужды. Также, я подразумеваю, что Вы имеете хотя бы минимальные знания о том, как фильтрует firewall, и как работают его правила.

Конфигурация скрипта /etc/rc.d/init.d/firewall для веб-сервера

Здесь представлен конфигурационный скрипт для Вашего веб-сервера. Эта конфигурация позволяет неограниченный трафик на loopback-интерфейсе, ICMP, DNS-кэш и клиент-сервер (53), SSH-сервер (22), HTTP-сервер (80), HTTPS-сервер (443), SMTP-клиент (25), FTP-сервер (20 и 21) и исходящие TRACEROUTE-запросы.

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

#!/bin/sh
# ----------------------------------------------------------------------------
# Last modified by Gerhard Mourani: 04-25-2000
# ----------------------------------------------------------------------------
# Copyright (C) 1997, 1998, 1999 Robert L. Ziegler
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for educational, research, private and non-profit purposes,
# without fee, and without a written agreement is hereby granted.
# This software is provided as an example and basis for individual firewall
# development. This software is provided without warranty.
#
# Any material furnished by Robert L. Ziegler is furnished on an
# "as is" basis. He makes no warranties of any kind, either expressed
# or implied as to any matter including, but not limited to, warranty
# of fitness for a particular purpose, exclusivity or results obtained
# from use of the material.
# ----------------------------------------------------------------------------
#
# Invoked from /etc/rc.d/init.d/firewall.
# chkconfig: - 60 95
# description: Starts and stops the IPCHAINS Firewall \
# used to provide Firewall network services.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
 exit 0
fi
if [ ! -x /sbin/ipchains ]; then
 exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting Firewalling Services: "
# Некоторые определения для облегчения управления.
# ----------------------------------------------------------------------------
# Редактируйте это, для соответствия настроек Вашей системы ISP.
EXTERNAL_INTERFACE="eth0" # Интерфейс, подключенный к Интернет
LOOPBACK_INTERFACE="lo" # loopback-интерфейс
IPADDR="my.ip.address" # Ваш IP-адрес
ANYWHERE="any/0" # "Любой" IP-адрес
NAMESERVER_1="my.name.server.1" # 1-й DNS-сервер
NAMESERVER_2="my.name.server.2" # 2-й DNS-сервер
MY_ISP="my.isp.address.range/24" # диапазон адресов ISP & NOC
SMTP_SERVER="my.smtp.server" # Ваш почтовый концентратор
SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний syslog-сервер
SYSLOG_CLIENT="sys.int.client.range/24" # Диапазон клиентов Вашего syslog
LOOPBACK="127.0.0.0/8" # Диапазон зарезервированных loopback-адресов
CLASS_A="10.0.0.0/8" # Приватная сеть класса A
CLASS_B="172.16.0.0/12" # Приватная сеть класса B
CLASS_C="192.168.0.0/16" # Приватная сеть класса C
CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D
CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E
BROADCAST_SRC="0.0.0.0" # Широковещательный адрес
BROADCAST_DEST="255.255.255.255" # Широковещательный адрес назначения
PRIVPORTS="0:1023" # Диапазон привилегированных портов
UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов
# ---------------------------------------------------------------------
# SSH стартует с 1023 и работает вниз до 513 для
# каждого дополнительного одновременного входящего соединения.
SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH
# traceroute обычно использует -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
# ---------------------------------------------------------------------
# Политика по умолчанию DENY
# Явно принимать только желательные входящие и исходящие соединения
# Удалить все существующие правила, принадлежащие этому фильтру
ipchains -F
# Очистка всех правил и пользовательских цепочек
ipchains -X
# Установка политики по умолчанию deny.
# Don't even bother sending an error message back.
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# ---------------------------------------------------------------------
# LOOPBACK
# Неограниченный трафик на loopback-интерфейсе.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# ---------------------------------------------------------------------
# Сетевые вампиры
# Запрещение доступа jerks
# /etc/rc.d/rc.firewall.blocked содержит список
# ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY
# правил для блокирования любого доступа.
# Запрещение любых соединений из проблемных сайтов
#if [ -f /etc/rc.d/rc.firewall.blocked ]; then
# . /etc/rc.d/rc.firewall.blocked
#fi
# ---------------------------------------------------------------------
# SPOOFING & BAD ADDRESSES
# Отбрасывание spoofed-пакетов.
# Блокирование пакетов от явно неправильных адресов.
# Защита самого себя от посылки плохих адресов.
# Блокирование обманных пакетов, посланных как бы от Вашего внешнего адреса.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
# Блокирование пакетов как бы от или к приватной сети класса A
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса B
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса C
# ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l
# ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l
# ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l
# ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l
# Блокирование пакетов как бы от loopback-интерфейса
ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l
# Блокирование пакетов от широковещательных адресов
ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l
# Блокирование широковещательных адресов класса D (NET-3-HOWTO)
# Широковещательный (Multicast) адрес это неправильный адрес источника.
# Multicast использует UDP.
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
# Блокирование зарезервированных IP-адресов класса E
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
# блокирование всех адресов, определенных IANA как резервных
# 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
# 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
# 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l
#65: 01000001 - /3 includes 64 - need 65-79 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY √l
ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l
#80: 01010000 - /4 masks 80-95
ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l
# 96: 01100000 - /4 masks 96-111
ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l
#126: 01111110 - /3 includes 127 - need 112-126 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l
#217: 11011001 - /5 includes 216 - need 217-219 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l
#223: 11011111 - /6 masks 220-223
ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l
# ---------------------------------------------------------------------
# ICMP
# Предотвращение атак denial of service, базирующихся на ICMP-бомбах,
# фильтрация входящего Redirect (5) и исходящего Destination
# Unreachable (3). Обычно блокировка Destination Unreachable (3)
# нежелательна, так как этот тип пакета используется при обсуждении
# размера фрагмента пакета.
# Для реверсивного (bi-directional) ping.
# Типы сообщений: Echo_Reply (0), Echo_Request (8)
# Для предотвращения атак, ограничьте адрес источника диапазоном
# адресов Вашего ISP.
# Для исходящих traceroute.
# Тип сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
# default UDP base: 33434 to base+nhops-1
#
# Для входящих traceroute.
# Тип сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
# Для блокирования этого, запрещение OUTGOING 3 и 11
# 0: echo-reply (pong)
# 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
# 4: source-quench
# 5: redirect
# 8: echo-request (ping)
# 11: time-exceeded
# 12: parameter-problem
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 0 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 3 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 4 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 11 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 12 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $MY_ISP 8 -d $IPADDR -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 4 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 8 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 12 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 11 -d $MY_ISP -j ACCEPT
# ---------------------------------------------------------------------
# UDP INCOMING TRACEROUTE
# traceroute обычно использует -S 32769:65535 -D 33434:33523
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
         -s $MY_ISP $TRACEROUTE_SRC_PORTS \
         -d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
         -s $ANYWHERE $TRACEROUTE_SRC_PORTS \
         -d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l
# ---------------------------------------------------------------------
# DNS forwarding, caching only nameserver (53)
# --------------------------------------------
# от сервера к серверу только запросы и ответы
# Кэширующий сервер имен требует только UDP, не TCP
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER_1 53 \
         -d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 53 \
         -d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER_2 53 \
         -d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 53 \
         -d $NAMESERVER_2 53 -j ACCEPT
# DNS-клиент (53)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER_1 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER_2 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_2 53 -j ACCEPT
# Запросы от клиента к серверу по протоколу TCP разрешены, если
# не прошли UDP-запросы. Это встречается редко. Обычно клиенты
# используют TCP для передачи зон вторичному серверу от
# первичного, и если они хакеры.
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $NAMESERVER_1 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $NAMESERVER_2 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_2 53 -j ACCEPT
# ------------------------------------------------------------------
# Принимать TCP только для определенных портов
# ------------------------------------------------------------------
# SSH-сервер (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 22 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $SSH_PORTS \
         -d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 22 \
         -d $ANYWHERE $SSH_PORTS -j ACCEPT
# ------------------------------------------------------------------
# HTTP-сервер (80)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 80 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 80 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# HTTPS-сервер (443)
# ------------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 443 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 443 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# SYSLOG-сервер (514)
# -----------------
# Предоставляет полную удаленную регистрацию. Используйте эту
# возможность, если хотите контролировать все syslog-сообщения
# на одном компьютере.
# ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT \
#          -d $IPADDR 514 -j ACCEPT
# SYSLOG-клиент (514)
# -----------------
# ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 514 \
# -d $SYSLOG_SERVER 514 -j ACCEPT
# ------------------------------------------------------------------
# AUTH-сервер (113)
# -----------------
# Reject предпочтительней, чем deny для входящих сообщений на auth-порт.
# (NET-3-HOWTO)
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE \
         -d $IPADDR 113 -j REJECT
# ------------------------------------------------------------------
# SMTP-клиент (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $SMTP_SERVER 25 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS \
         -d $SMTP_SERVER 25 -j ACCEPT
# ------------------------------------------------------------------
# FTP-сервер (20, 21)
# -------------------
# входящие запросы
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 21 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 21 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# PORT MODE ответ по каналу данных
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
         -s $ANYWHERE $UNPRIVPORTS -d $IPADDR 20 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR 20 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# PASSIVE MODE ответ по каналу данных
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
         -s $IPADDR $UNPRIVPORTS -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# Исходящие TRACEROUTE
# --------------------
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR \
         $TRACEROUTE_SRC_PORTS -d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT
# ------------------------------------------------------------------
# Включение регистрации для избранных заблокированных пакетов
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -d $IPADDR $PRIVPORTS \
         -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -d $IPADDR $UNPRIVPORTS \
         -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp -s $ANYWHERE 5 -d $IPADDR \
         -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp -s $ANYWHERE 13:255 \
         -d $IPADDR -j DENY -l
# ------------------------------------------------------------------
;;
stop)
echo -n "Shutting Firewalling Services: "
# Remove all existing rules belonging to this filter
ipchains -F
# Delete all user-defined chain to this filter
ipchains -X
# Reset the default policy of the filter to accept.
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
status)
status firewall
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: firewall {start|stop|status|restart|reload}"
exit 1
esac
exit 0

Сделайте этот скрипт исполняемым и измените права доступа

[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall

Создайте символическую ссылку в rc.d для Вашего Firewall следующей командой:

[root@deep /]# chkconfig --add firewall
[root@deep /]# chkconfig --level 345 firewall on

Сейчас Ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.

Ручная остановка firewall:

[root@deep /]# /etc/rc.d/init.d/firewall stop
Shutting Firewalling Services:  [ OK ]

Запуск firewall вручную:

[root@deep /]# /etc/rc.d/init.d/firewall start
Starting Firewalling Services:  [ OK ]

Конфигурация скрипта /etc/rc.d/init.d/firewall для почтового сервера

Это конфигурация скрипта для почтового сервера. Он разрешает неограниченный трафик на Loopback-интерфейсе, ICMP, DNS-сервер и клиент (53), SSH-сервер (22), SMTP-сервер и клиент (25), IMAP-сервер (143) и исходящие TRACEROUTE-запросы.

Если Вы не хотите использовать какие-нибудь сервисы открытые в этом файле по умолчанию, закомментируйте их, добавив в начало строки символ ⌠#■. Если же вы хотите использовать сервисы, которые я запретил, удалите символ комментария #.

Создайте скрипт файл firewall (touch /etc/rc.d/init.d/firewall) на Вашем почтовом сервере:

#!/bin/sh
# ----------------------------------------------------------------------
# Last modified by Gerhard Mourani: 04-25-2000
# ----------------------------------------------------------------------
# Copyright (C) 1997, 1998, 1999 Robert L. Ziegler
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for educational, research, private and non-profit purposes,
# without fee, and without a written agreement is hereby granted.
# This software is provided as an example and basis for individual firewall
# development. This software is provided without warranty.
#
# Any material furnished by Robert L. Ziegler is furnished on an
# "as is" basis. He makes no warranties of any kind, either expressed
# or implied as to any matter including, but not limited to, warranty
# of fitness for a particular purpose, exclusivity or results obtained
# from use of the material.
# ----------------------------------------------------------------------
#
# Invoked from /etc/rc.d/init.d/firewall.
# chkconfig: - 60 95
# description: Starts and stops the IPCHAINS Firewall \
# used to provide Firewall network services.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
if [ ! -x /sbin/ipchains ]; then
exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting Firewalling Services:"
# Некоторые определения для облегчения управления.
# ----------------------------------------------------------------------
# EDIT THESE TO SUIT YOUR SYSTEM AND ISP.
EXTERNAL_INTERFACE="eth0" # Интерфейс, подключенный к Интернет
LOOPBACK_INTERFACE="lo" # loopback-интерфейс
IPADDR="my.ip.address" # Ваш IP-адрес
ANYWHERE="any/0" # "Любой" IP-адрес
NAMESERVER_1="my.name.server.1" # 1-й DNS-сервер
NAMESERVER_2="my.name.server.2" # 2-й DNS-сервер
MY_ISP="my.isp.address.range/24" # Диапазон адресов ISP & NOC
SMTP_SERVER="my.smtp.server" # Ваш концентратор почты
SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний syslog-сервер
SYSLOG_CLIENT="sys.int.client.range/24" # Диапазон клиентов Вашего syslog
LOOPBACK="127.0.0.0/8" # Диапазон зарезервированных loopback-адресов
CLASS_A="10.0.0.0/8" # Приватная сеть класса A
CLASS_B="172.16.0.0/12" # Приватная сеть класса B
CLASS_C="192.168.0.0/16" # Приватная сеть класса C
CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D
CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E
BROADCAST_SRC="0.0.0.0" # Широковещательный адрес
BROADCAST_DEST="255.255.255.255" # Широковещательный адрес назначения
PRIVPORTS="0:1023" # Диапазон привилегированных портов
UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов
# ----------------------------------------------------------------------
# SSH стартует с 1023 и работает вниз до 513 для
# каждого дополнительного одновременного входящего соединения.
SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH
# traceroute обычно использует -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
# ----------------------------------------------------------------------
# Политика по умолчанию DENY
# Явно принимать желательные входящие и исходящие соединения
# Удалить все существующие правила принадлежащие этому фильтру
ipchains -F
# Очистка всех правил и пользовательских цепочек
ipchains -X
# Установка политики по умолчанию deny.
# Don't even bother sending an error message back.
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# ----------------------------------------------------------------------
# LOOPBACK
# Неограниченный трафик на loopback-интерфейсе.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# ----------------------------------------------------------------------
# Сетевые вампиры.
# Запрещение доступа jerks.
# /etc/rc.d/rc.firewall.blocked содержит список
# ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY
# правил для блокирования любого доступа.
# Запрещение любых соединений с проблемных сайтов
#if [ -f /etc/rc.d/rc.firewall.blocked ]; then
# . /etc/rc.d/rc.firewall.blocked
#fi
# ----------------------------------------------------------------------
# SPOOFING & BAD ADDRESSES
# Отбрасывание spoofed-пакетов.
# Блокирование пакетов от явно неправильных адресов.
# Защита себя от посылки пакетов с плохих адресов.
# Блокирование обманных пакетов, посланных как бы от Вашего внешнего адреса.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
# Блокирование пакетов как бы от или к приватной сети класса A
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса B
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса C
# ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l
# ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l
# ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l
# ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l
# Блокирование пакетов как бы от loopback интерфейса
ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l
# Блокирование пакетов от широковещательных адресов
ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l
# Блокирование широковещательных адресов класса D (NET-3-HOWTO)
# Широковещательный (Multicast) адрес это неправильный адрес источника.
# Multicast использует UDP.
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
# Блокирование резервированных IP адресов класса E
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
# блокирование адресов определенных IANA как резервных
# 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
# 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
# 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l
#65: 01000001 - /3 includes 64 - need 65-79 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY √l
ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l
#80: 01010000 - /4 masks 80-95
ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l
# 96: 01100000 - /4 makses 96-111
ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l
#126: 01111110 - /3 includes 127 - need 112-126 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l
#217: 11011001 - /5 includes 216 - need 217-219 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l
#223: 11011111 - /6 masks 220-223
ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l
# ----------------------------------------------------------------------
# ICMP
# Предотвращение атак denial of service, базирующихся на ICMP-бомбах,
# фильтрация входящего Redirect (5) и исходящего Destination Unreachable (3).
# Обычно блокировка Destination Unreachable (3) нежелательна, так как этот
# тип пакета используется при обсуждении размера фрагмента пакета.
# Для реверсивного (bi-directional) ping.
# Типы сообщений: Echo_Reply (0), Echo_Request (8)
# Для предотвращения атак, ограничьте адрес источника
# диапазоном адресов вашего ISP.
# Для исходящих traceroute.
# Тип сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
# default UDP base: 33434 to base+nhops-1
#
# Для входящих traceroute.
# Тип сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
# Для блокирования этого, запрещение OUTGOING 3 и 11
# 0: echo-reply (pong)
# 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
# 4: source-quench
# 5: redirect
# 8: echo-request (ping)
# 11: time-exceeded
# 12: parameter-problem
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 0 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 3 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 4 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 11 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 12 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $MY_ISP 8 -d $IPADDR -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp -s $IPADDR 4 \
         -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 8 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 12 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
         -s $IPADDR 11 -d $MY_ISP -j ACCEPT
# ----------------------------------------------------------------------
# UDP INCOMING TRACEROUTE
# traceroute обычно использует -S 32769:65535 -D 33434:33523
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $MY_ISP \
         $TRACEROUTE_SRC_PORTS -d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $ANYWHERE \
         $TRACEROUTE_SRC_PORTS -d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l
# ----------------------------------------------------------------------
# DNS-сервер
# ----------
# DNS: полный сервер
# сервер/клиент к серверу запросы или ответы
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 53 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# DNS-клиент и пересылка зон (порт 53)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER_1 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $NAMESERVER_1 53 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS \
         -d $NAMESERVER_1 53 -j ACCEPT
# ----------------------------------------------------------------------
# TCP принимается только для выбранных портов
# ------------------------------------------------------------------
# SSH-сервер (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 22 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $SSH_PORTS \
         -d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 22 \
         -d $ANYWHERE $SSH_PORTS -j ACCEPT
# ------------------------------------------------------------------
# AUTH-сервер (113)
# -----------------
# Reject предпочтительней, чем deny для входящих сообщений на auth-порт.
# (NET-3-HOWTO)
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE \
         -d $IPADDR 113 -j REJECT
# ------------------------------------------------------------------
# SYSLOG-сервер (514)
# -----------------
# Предоставляет полную удаленную регистрацию. Используйте эту возможность
# если хотите контролировать все syslog-сообщения на одном компьютере.
# ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT \
#          -d $IPADDR 514 -j ACCEPT
# SYSLOG-клиент (514)
# -----------------
# ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 514 \
#          -d $SYSLOG_SERVER 514 -j ACCEPT
# ------------------------------------------------------------------
# SMTP-сервер (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 25 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 25 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT

# SMTP-клиент (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 25 \
         -d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS \
         -d $ANYWHERE 25 -j ACCEPT
# ------------------------------------------------------------------
# IMAP-сервер (143)
# -----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
         -d $IPADDR 143 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 143 \
         -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# POP-сервер (110)
# -----------------
# ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $ANYWHERE $UNPRIVPORTS \
#          -d $IPADDR 110 -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y -s $IPADDR 110 \
#          -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# Исходящие TRACEROUTE
# -------------------
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
         -s $IPADDR $TRACEROUTE_SRC_PORTS \
         -d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT
# ----------------------------------------------------------------------
# Включение регистрации для избранных заблокированных пакетов
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -d $IPADDR $PRIVPORTS \
         -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
         -d $IPADDR $UNPRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp -s $ANYWHERE 5 \
         -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
         -s $ANYWHERE 13:255 -d $IPADDR -j DENY -l
# ----------------------------------------------------------------------
;;
stop)
echo -n "Shutting Firewalling Services: "
# Remove all existing rules belonging to this filter
ipchains -F
# Delete all user-defined chain to this filter
ipchains -X
# Reset the default policy of the filter to accept.
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
status)
status firewall
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: firewall {start|stop|status|restart|reload}"
exit 1
esac
exit 0

Сделайте этот скрипт исполняемым и измените права доступа

[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall

Создайте символическую ссылку в rc.d для Вашего Firewall следующей командой:

[root@deep /]# chkconfig --add firewall
[root@deep /]# chkconfig --level 345 firewall on

Сейчас Ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.

Ручная остановка firewall:

[root@deep /]# /etc/rc.d/init.d/firewall stop
Shutting Firewalling Services:  [ OK ]

Запуск firewall вручную:

[root@deep /]# /etc/rc.d/init.d/firewall start
Starting Firewalling Services:  [ OK ]

Если вам понравилась статья, поделитесь ею с друзьями: