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

Security Portal

Written by Kurt Seifried