LASG - Firewalling
Firewalling
Обзор
Пакеты Firewall для Linux
Firewall piercing
Создание правил и скрипты
Firewalling представляет собой фильтрацию сетевого трафика между Вашей
сетью и другими сетями (Internet, какая-то другая LAN), который может быть
запрещен (в случае Internet) или разрешен (другой этаж Вашего здания).
Подобно межэтажным перегородкам в больших домах, сетевой firewall может
защитить от атаки при нарушении безопасности в одном сегменте сети.
Хорошей FAQ по Internet firewall есть на
http://www.interhack.net/pubs/fwfaq.
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 надежный фильтр пакетов для 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 содержит несколько новых свойств по сравнению с 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 следующее поколение firewallа пакетов для Linux. Поддерживает
много полезных функций, понимает IPSec, позволяет гибко управлять пакетами.
HOWTO доступно на
http://netfilter.kernelnotes.org.
IPF альтернативный пакет firewall, доступный для Linux (и ряда других ОС).
Получить его можно с
http://coombs.anu.edu.au/~avalon.
SINUS Firewall еще один firewall для Linux (ядра 2.0.x и 2.2.x). Скачать
его можно с
http://www.sinusfirewall.org.
Я только изучаю этот пакет, но уже считаю его очень хорошим. Он
польностью заменяет ipchains и добавляет много умного и полезного в
процесс firewall. Это коммерческий продукт (около $3000 US), и это первый
firewall, который ICSA сертифицировала для Linux. Доступен на
http://www.progressive-systems.com/products/phoenix.
Для маленьких Linux типа firewall/gateway. Скачать можно с
http://edge.fireplug.net.
Иногда защита может наделать много проблем, особенно при неправильной
настройке. Например, не пустить Вас к Вашим же данным. Есть 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.
Многие скрипты для Red Hat Linux в rpm-формате:
http://www.webideal.de/rh-isdn/downloads.
Простой скрипт для конвертации правил ipfwadm в правила ipchains,
доступен на
http://users.dhp.com/~whisper/ipfwadm2ipchains
Mason автоматизированный генератор правил firewall для ipfwadm и ipchains.
Вы загружаете его, и он контролирует пакеты, идущие через машину, затем
основываясь на этом создает набор правил, чтобы позволить такие действия.
Хороший инструмент в течение первого раза firewall, доступен на
http://users.dhp.com/~whisper/mason.
Mklinuxfw утилита, написанная на Perl, имеет набор интерфейсов
(CGI, KDE, command line) для создания правил firewall. Сейчас поддерживает
интерфейс CGI, GTK находится в стадии разработки. Скачать можно с
http://www.madhouse.org.uk/~red/framepage.phtml?/mklinuxfw/index.html.
fwconfig основанная на www утилита настройки для ipfwadm и ipchains.
Доступна на
http://www.mindstorm.com/~sparlin/fwconfig.shtml.
Приложение xipfwadm написано на Tcl/Tk для X и предназначено для работы с
правилами ipfwadm. Скачать можно с
http://www.x25.org/xipfwadm.html.
Интересный сайт с online cgi для создания правил и скриптов firewall. Увы,
работает медленно, но посмотреть можно на
http://www.linux-firewall-tools.com/.
Графическая программа на Tcl/Tk. Скачать можно с
http://www.linux-kheops.com/pub/easyfw/easyfwGB.html.
DNi представляет собой online cgi для создания наборов правил для ipfwadm.
Попробовать можно на
http://members.tripod.com/~robel/dni.
Back
|