Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

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

UnixForum


Lines Club

Ищем достойных соперников.




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

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

Firewalling

Обзор

Пакеты Firewall для Linux

Firewall piercing

Создание правил и скрипты

Обзор

Firewalling представляет собой фильтрацию сетевого трафика между Вашей сетью и другими сетями (Internet, какая-то другая LAN), который может быть запрещен (в случае Internet) или разрешен (другой этаж Вашего здания). Подобно межэтажным перегородкам в больших домах, сетевой firewall может защитить от атаки при нарушении безопасности в одном сегменте сети. Хорошей FAQ по Internet firewall есть на http://www.interhack.net/pubs/fwfaq.

Пакеты Firewall для Linux

Linux имеет свой firewall в виде ipfwadm, который представляет собой простой фильтр пакетного уровня. С ядра 2.1 он заменен на ipchains, который имеет больше функций. В ядре 2.4 ожидается еще более функциональный фильтр. Однако, это все еще базисные фильтры пакетов, и они не учитывают продвинутые свойства типа stateful проверки или некоторых типов proxying подключений. Linux поддерживает IPMASQ, расширенную форму NAT (Network Address Translation). IPMASQ позволяет машинам Вашей сети работать в Internet, но кэширует их соединения на уровне IP. Таким образом, весь внешний трафик идет через одну машину (сервер Linux IPMASQ), что защищает структуру внутренней сети от изучения. В качестве дополнительного бонуса упомянем, что клиенты во внутренней сети не требуют настройки прокси; если сервер Linux IPMASQ сконфигурирован правильно, и клиенты используют его как шлюз по умолчанию, то все должно работать нормально.

ipchains и ipfwadm имеют следующие базовые возможности:

блокировка/разрешение передачи данных на основе IP/порта/интерфейса/источника/получателя
маскировка соединений на основе IP/порта/интерфейса/источника/получателя

Кроме того, ipchains дополнительно поддерживает:

переадресацию портов
создание цепочек, для более запутанных правил и условий
quality of service (QOS) маршрутизация, полезная на низкоскоростных подключениях
указание IP/порта/интерфейса как обратной спецификации (используя !)

Firewall-HOWTO и "man <command>" (ipchains или ipfwadm) хорошо описывают механизмы построения и работы правил, но там нет стратегии безопасности с использованием firewal. Ваш первый выбор: политика когда по умолчанию всем все запрещено, а разрешено только то, что нужно и только тем, кому можно, или прямо противоположный подход, когда всем открыт доступ ко всем Вашим сервисам.

Если выбрана схема запрещения всего, то при каком-то сбое, последствия будут минимальны. Я обычно использую стратегию заданного по умолчанию запрета всего.

Рассмотрим пример. У Вас есть защищенный firewallом сервер с запущенным Apache, Вы поставили WU-FTPD, чтобы пользователи могли выкладывать свои странички по FTP, и забыли сменить правила для firewall. Если используется политика полного разрешения, кто угодно из Internet сможет обратиться к Вашему ftp-серверу, и если у Вас старая версия, Вы быстро испытаете острые ощущения! А вот при политике запрета всего по умолчанию, до сервера не сможет добраться никто, в том числе и Ваши пользователи. Не беда, они Вам быстро напомнят про настройку.

Я решил не описывать здесь всех правил firewall для каждого сервиса, а давать их в разделах по конкретным сервисам.

IPFWADM

Ipfwadm надежный фильтр пакетов для Linux, хотя ему и не хватает ряда свойств, доступных в Ipchains. Ipfwadm поддерживает только 3 действия для пакета: accept, deny или reject, в то время как правила ipchains могут применяться к 6 встроенным реакциям или определяемым пользователем. Ipfwadm пригоден только для простого IP-уровня firewall, ipmasquerading и если Вы планируете использовать FreeS/WAN. Осноыные опции: задать направление (in, out или вместе, что полезно с флажком интерфейса), входные и выходные правила, правила передачи (скажем, у Вас есть несколько интерфейсов, также охватывают правила маскировки) правила маскировки для времени ожидания и т.п. Вы можете вставлять, конкатенировать и удалять правила, устанавливать заданную по умолчанию политику, и вносить в список все правила. Это очень похоже на ipchains с некоторыми малыми изменениями. Дальше приводится скрипт для сервера, соединяющего две сети (10.0.0.x на eth0, 10.0.0.1 и 192.168.0.x на eth1, 192.168.0.1) с запущенным сервером почты.

#!/bin/bash
#
# Flush all the rule sets first
#
ipfwadm -f -I
ipfwadm -f -O
ipfwadm -f -F
#
# Allow forwarding between the two networks and otherwise deny it
# for security
#
ipfwadm -F -a accept -P all -S 10.0.0.0/24 -i eth0 -D 192.168.0.0/24
ipfwadm -F -a accept -P all -S 192.168.0.0/24 -i eth1 -D 10.0.0.0/24
ipfwadm -F -p deny
#
# And of course we have to allow those packets in
#
ipfwadm -I -a accept -P tcp -S 10.0.0.0/24 -i eth0 -D 192.168.0.0/24
ipfwadm -I -a accept -P tcp -S 192.168.0.0/24 -i eth1 -D 10.0.0.0/24
#
# Let them access the mail server port on the server but nothing else
#
ipfwadm -I -a accept -P tcp -S 10.0.0.0/24 -i eth0 -D 10.0.0.1 25
ipfwadm -I -a accept -P tcp -S 192.168.0.0/24 -i eth0 -D 192.168.0.1 25
ipfwadm -I -p deny

FreeS/WAN сейчас поддерживает серию ядер 2.2.x, you should never choose ipfwadm over ipchains. ipchains offers a much finer degree of control and is much more flexible then ipfwadm.

IPCHAINS

ipchains содержит несколько новых свойств по сравнению с ipfwadm; Вы можете создавать цепочки правил (с именами) и связывать их вместе, при администрировании firewall гораздо проще. Ipchains поддерживает большее количество реакций, чем ipfwadm. Вы можете указывать правило в: ACCEPT, DENY, REJECT, MASQ, REDIRECT, RETURN или задать свою реакцию. Это очень мощное средство, например я мог бы переназначать все пакеты, направляющиеся в порт 80 (трафик www) моей машины шлюза на локальный порт 3128 сервера Squid. Вы можете также использовать, это вместе с quality of service routing, пример, данный в документации ipfwadm показывает расстановку по приоритетам трафика через PPP, Вы можете давать telnet намного более высокий приоритет, затем поставить ftp, уменьшая проблемы с загруженной линией. Обычно я создаю /etc/rc.d/init.d/ipchains-sh и вызываю его до запуска сети, чтобы сервер был ВСЕГДА защищен.

Ниже приведен скрипт для шлюза с двумя интерфейсами, причина использования DENY вместо REJECT в том, что так пакет будет отброшен немедленно, что ускоряет работу в сети. Я также не советую вести протокол для всех пакетов, это требует очень много места на диске и позволяет свалить Ваш сервер при ьыстром соединении, исчерпав все место на диске. Домашняя страница ipchains расположена на http://netfilter.kernelnotes.org.

#!/bin/bash
#
# This script sets up firewall rules appropriate for a server with
# 2 interfaces
# running as a gateway
# This script needs to be edited if you plan to use it.
# We assume the internal machines call all talk to the gateway, so no
# rules block
# internal traffic
#
# A couple of variables
#
# ETH0 is the IP address on ETH0 (the external interface)
# ETH0NET is the network 
# ETH0NETMASK is the network mask
# TRUSTEDHOST1 is a trusted host (for webmin/ssh)
# TRUSTEDHOST2 is a trusted host (for webmin/ssh)
# ETH1IP is the IP address on ETH1 (internal interface)
# ETH1NET is the network
# ETH1NETMASK is the network mask
#
ETH0IP=1.1.1.1
ETH0NET=1.1.1.0
ETH0NETMASK=24
TRUSTEDHOST1=1.5.1.1
TRUSTEDHOST2=1.5.1.2
ETH1IP=10.0.0.1
ETH1NET=10.0.0.0
ETH1NETMASK=24
#
PATH=/sbin
# FLUSH ALL RULES
ipchains -F input
ipchains -F output
ipchains -F forward
# ANTI-SPOOFING
ipchains -A input -p all -j DENY -s 10.0.0.0/8 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 127.0.0.0/8 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 192.168.0.0/16 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 172.16.0.0/16 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s $ETH0IP -i eth0 -d 0.0.0.0/0
# ICMP FIRST
ipchains -A input -p icmp -j ACCEPT -s $ETH0NET/$ETH0NETMASK -i eth0 -d 0.0.0.0/0
ipchains -A input -p icmp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0
# SSH
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST1 -i eth0 -d 0.0.0.0/0 22
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST2 -i eth0 -d 0.0.0.0/0 22
# BLOCKING 1:1023
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
# BLOCKING OTHER THINGS
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1109
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1524
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1600
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2003
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2049
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2105
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3001
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3001
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3128:3130
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3128:3130
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3306
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3306
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 4444
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6000:6100
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6000:6100
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6667
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 7000
# WEBMIN
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST1 -i eth0 -d 0.0.0.0/0 10000
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST2 -i eth0 -d 0.0.0.0/0 10000
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 10000
# FORWARD RULES
ipchains -P forward DENY
ipchains -A forward -p all -j MASQ -s $ETH1NET/$ETH1NETMASK -d 0.0.0.0/0
NETFILTER

NETFILTER следующее поколение firewallа пакетов для Linux. Поддерживает много полезных функций, понимает IPSec, позволяет гибко управлять пакетами. HOWTO доступно на http://netfilter.kernelnotes.org.

IPF

IPF альтернативный пакет firewall, доступный для Linux (и ряда других ОС). Получить его можно с http://coombs.anu.edu.au/~avalon.

SINUS Firewall

SINUS Firewall еще один firewall для Linux (ядра 2.0.x и 2.2.x). Скачать его можно с http://www.sinusfirewall.org.

Phoenix Adaptive Firewall

Я только изучаю этот пакет, но уже считаю его очень хорошим. Он польностью заменяет ipchains и добавляет много умного и полезного в процесс firewall. Это коммерческий продукт (около $3000 US), и это первый firewall, который ICSA сертифицировала для Linux. Доступен на http://www.progressive-systems.com/products/phoenix.

FirePlug Edge

Для маленьких Linux типа firewall/gateway. Скачать можно с http://edge.fireplug.net.

 

Проникновение за Firewall

Иногда защита может наделать много проблем, особенно при неправильной настройке. Например, не пустить Вас к Вашим же данным. Есть mini-HOWTO по этим вопросам: http://www.linuxdoc.org/HOWTO/mini/Firewall-Piercing.html. Кроме того, есть дополнения по IP Masquerading и VPN, доступные на ftp://ftp.rubyriver.com/pub/jhardin/masquerade/ip_masq_vpn.html.

 

Создание правил и скрипты

Скрипты Firewall

Многие скрипты для Red Hat Linux в rpm-формате: http://www.webideal.de/rh-isdn/downloads.

ipfwadm2ipchains

Простой скрипт для конвертации правил ipfwadm в правила ipchains, доступен на http://users.dhp.com/~whisper/ipfwadm2ipchains

mason

Mason автоматизированный генератор правил firewall для ipfwadm и ipchains. Вы загружаете его, и он контролирует пакеты, идущие через машину, затем основываясь на этом создает набор правил, чтобы позволить такие действия. Хороший инструмент в течение первого раза firewall, доступен на http://users.dhp.com/~whisper/mason.

Mklinuxfw

Mklinuxfw утилита, написанная на Perl, имеет набор интерфейсов (CGI, KDE, command line) для создания правил firewall. Сейчас поддерживает интерфейс CGI, GTK находится в стадии разработки. Скачать можно с http://www.madhouse.org.uk/~red/framepage.phtml?/mklinuxfw/index.html.

fwconfig

fwconfig основанная на www утилита настройки для ipfwadm и ipchains. Доступна на http://www.mindstorm.com/~sparlin/fwconfig.shtml.

xipfwadm

Приложение xipfwadm написано на Tcl/Tk для X и предназначено для работы с правилами ipfwadm. Скачать можно с http://www.x25.org/xipfwadm.html.

Linux Firewall Tools

Интересный сайт с online cgi для создания правил и скриптов firewall. Увы, работает медленно, но посмотреть можно на http://www.linux-firewall-tools.com/.

Easy Firewall

Графическая программа на Tcl/Tk. Скачать можно с http://www.linux-kheops.com/pub/easyfw/easyfwGB.html.

DNi

DNi представляет собой online cgi для создания наборов правил для ipfwadm. Попробовать можно на http://members.tripod.com/~robel/dni.

Back

Written by Kurt Seifried


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют