Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

ipchains: фильтрация пакетов в Linux: принципы работы, установка и настройка

div.main {margin-left: 20pt; margin-right: 20pt}Bog BOS: ipchains: фильтрация пакетов в Linux: принципы работы, установка и настройка

ipchains предоставляет встроенные в ядро Linux 2.2 средства фильтрации пакетов и программы (ipchains, ipchains-save, ipchains-restore) управления ими. Может быть использован для организации брандмауэра (firewall) класса фильтрации пакетов или усиления защиты сервера.

Предварительные действия

Необходимо иметь ядро 2.1.102 или более новое, при генерации которого включены FIREWALL и IP_FIREWALL (появляются /proc/net/ip_fwchains и /proc/net/ip_fwnames). Настойчиво рекомендуется дефрагментировать все пакеты (/proc/sys/net/ipv4/ip_always_defrag или IP_ALWAYS_DEFRAG, в зависимости от версии ядра).

Понятие цепочки

Каждый проверяемый IP-пакет проходит по цепочке ("сквозь строй") правил, определяющих, что с ним делать. Правило состоит из шаблона и действия. Каждая цепочка имеет действие по умолчанию. Задействованы цепочки с именами: input - обрабатываются пакеты, приходящие снаружи или с loopback; forward - обрабатываются пакеты, чьи исходные и конечные адреса лежат снаружи; output - обрабатываются пакеты, уходящие наружу или loopback; определенные пользователем - используются в качестве подпрограмм, есть отлов циклов.

Действия (действие в недопустимом месте эквивалентно DENY): ACCEPT - пропустить пакет; REJECT - отвергнуть, послав ICMP Host Unreachable (если пакет не ICMP); DENY - выбросить молча; MASQ - только для цепочки forward - подменить адрес отправителя на свой, номер порта на свежесгенеренный и запомнить в таблицах ядро, чтобы обратный пакет преобразовывался автоматически; REDIRECT - только для цепочки input, TCP или UDP - несмотря на то, что пакет чужой, послать его локальному процессу на указанный порт; имя пользовательской цепочки - переход на подпрограмму; RETURN - конец цепочки (как бы возврат из пользовательской цепочки-подпрограммы); пусто - только увеличить счетчики байтов и пакетов и перейти к следующему правилу в цепочке, счетчики - 64-битные.

Управление цепочками

Управление цепочками производится с помощью программ ipchains, ipchains-save (сохранение текущей конфигурации на stdout), ipchains-restore (чтение сохраненной ранее конфигурации с stdin). После загрузки определены цепочки input (ACCEPT), output (ACCEPT), forward (ACCEPT). Основные опции ipchains: -N имя-цепочки (создать цепочку) -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок) -L [ -v ] [имя-цепочки] (показать список правил и счетчики) -A имя-цепочки правило (добавить правило к цепочке) -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1) -D имя-цепочки правило (удалить правило по текстуальному совпадению) -F имя-цепочки (удалить все правила из цепочки) -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1) -R имя-цепочки номер правило (заменить) -M -L (показать текущие маскарадные соединения) -M -S tcp tcpfin udp (установить соответствующие timeout в секундах) -h icmp (выдать список ICMP имен) -Z имя-цепочки (обнулить счетчики) -C имя-цепочки пакет (тестировать прохождение пакета) -P имя-цепочки действие (изменить действие по умолчанию)

Шаблон правила может включать (если в качестве адреса хоста указывается имя, соответствующее нескольким адресам, то при добавляется соответствующее количество правил; восклицательный знак инвертирует шаблон): --proto | -p [!] протокол (tcp/udp/icmp/all) --bidirectional | -b (добавляется два правила: прямое и обратное) --source | -s | --src [!] address[/mask] [!] [port[:port]] (маска может быть записана как в виде 4-х десятичных чисел через точку, так и в виде одного числа) --source-port [!] [port[:port]] --destination | -d | --dst [!] address[/mask] [!] [port[:port]] --destination-port [!] [port[:port]] --icmp-type [!] имя --interface  | -i [!] имя[+] (ppp0, lo, eth0; + - соответствует любой подстроке) --jump | -j действие [port](номер порта для REDIRECT) --mark | -m [+-]число (пометить пакет для QoS) --log | -l (запись о пакете в журнал) --numeric | -n (выводить адреса и порты в числовом виде) --output | -o [maxsize] (вывести пакет на устройство netlink) -v (повысить болтливость) [!] --fragment | -f (только для последующих кусков фрагментированных пкетов) [!] --syn | -y (имеет смысл только для TCP: только пакеты с установленным флагом SYN, отрицание означает установленный флаг ACK) --TOS | -t andmask xormask (управление битами TOS - type of service) Тщательно составленные и отлаженные цепочки сохранять по ipchains-save (ipchains.transparent_proxy_and_firewall) и восстанавливать при загрузке по ipchans-restore (/etc/rc.d).

Сервис в Red Hat

В RH 6.2 появился сервис ipchains (управляемый обычным chkconfig) в /etc/rc.d/init.d с функциями: start (настройки берутся из /etc/sysconfig/ipchains - делаются либо с помощью функции save, либо ipchains-save) stop restart status save (сохранить текущие настройки в /etc/sysconfig/ipchains) panic (полная блокировка в случае атаки)

Пример использования для усиления защиты сервера

Пример с использованием /etc/sysconfig/ipchains (в RH6.2 позволяет комментарии): :input ACCEPT :forward ACCEPT :output ACCEPT # доступ к HTTP-серверу (если есть) -A input -s 0.0.0.0/0.0.0.0 -d 127.0.0.1/255.255.255.255 80:80 -i lo -p 6 -j ACCEPT -l -A input -s 0.0.0.0/0.0.0.0 -d 127.0.0.1/255.255.255.255 80:80 -p 6 -j DENY -l -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 80:80 -p 6 -j ACCEPT # поддержка transparent proxy -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j REDIRECT 3128 -A input -s сосед/255.255.255.255 -d наш-адрес/255.255.255.255 3130:3130 -p 17 -j ACCEPT -A input -s клиенты-proxy -d наш-адрес/255.255.255.255 3128:3128 -p 6 -j ACCEPT # NTP from LAN and dialup -A input -s сервера-NTP 123:123 -d наш-адрес/255.255.255.255 123:123 -p 17 -j ACCEPT # syslog from LAN -A input -s откуда-беррем-syslog -d наш-адрес/255.255.255.255 514:514 -p 17 -j ACCEPT # FTP from anywhere -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 21:21 -p 6 -j ACCEPT -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 20:20 -p 6 -j ACCEPT # пропуск FTP passive mode (д.б. согласован с passive ports в ftpaccess) -A input --syn -s 0.0.0.0/0.0.0.0 -d 195.161.72.12/255.255.255.255 начало:конец -p 6 -j ACCEPT # DNS # -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 53:53 -p 6 -j ACCEPT # -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 53:53 -p 17 -j ACCEPT # на адресах выше 32k только клиенты (кроме ftpd в пассивном режиме, ниже вообще ничего), заодно борьба с gnome -A input --syn -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 6 -j DENY -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 17 -j ACCEPT -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 6 -j ACCEPT # ICMP -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 -p 1 -j ACCEPT # все остальное - запретить (DENY or REJECT ?) -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 -j DENY -l -A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -l

Ссылки

IPCHAINS-HOWTO ipchains.8, ipfw.4, ipchains-save.8, ipchains-restore.8 сайт разработчика Роберт Л. Зиглер. Брандмауэры в Linux. Издательский дом "Вильямс", 2000 Sergey E. Bogomolov

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте