Это пример от Michael Neuling и моего LinuxWorld Tutorial за Март 1999; это
не единственый способ решить данную проблему, но вероятно самый простой. Я
надеюсь, что вы найдете его информативным.
- Внутренняя сеть за маскарадом (различные операционные системы), которую мы
называем "GOOD" ("ХОРОШАЯ").
- Выставленные серверы в отдельной сети (называемой "DMZ" -- Demilitarized
Zone -- нейтральная зона).
- PPP соединение с Internet (называемым "BAD" -- "ПЛОХИМ").
Внешняя сеть (BAD)
|
|
ppp0|
---------------
| 192.84.219.1| Сервера сети (DMZ)
| |eth0
| |----------------------------------------------
| |192.84.219.250 | | |
| | | | |
|192.168.1.250| | | |
--------------- -------- ------- -------
| eth1 | SMTP | | DNS | | WWW |
| -------- ------- -------
| 192.84.219.128 192.84.219.129 192.84.218.130
|
Внутренняя сеть (GOOD)
- Машина пакетной фильтрации:
- PING любой сети
Полезно для определения, действует ли машина.
- TRACEROUTE любой сети
Аналогично, полезно для диагностики.
- DNS доступ
Чтобы ping и DNS были полезнее.
- Внутри DMZ:
- Почтовый сервер
- SMTP ко внешним соединениям
- Прием SMTP от внутренних и внешних соединений
- Прием Pop-3 от внутренних соединений
- Сервер имен
- Отправка DNS во внешнюю сеть
- Прием DNS от внутренней и внешней сети и машины пакетной фильтрации
- Web сервер
- Прием HTTP от внутренней и внешней сетей
- Rsync доступ из внутренней сети
- Внутренняя сеть:
- Разрешенные WWW, ftp, traceroute, ssh доступы во внешнюю сеть.
Это достаточно
стандартные вещи, чтобы разрешить их использование: здесь мы ограничиваемся
только этими сервисами, а не всеми доступными сервисами Интернет.
- Разрешить SMTP на почтовом сервере
То есть позволить отправку почты наружу.
- Разрешить POP-3 на почтовом сервере
То есть позволить пользователям читать их почту
- Разрешить DNS на серевере имен
Это нужно для работы с внешними именами WWW, ftp, traceroute и ssh.
- Разрешить rsync на веб сервер
Для синхронизации внешнего веб сервера со внутренним.
- Разрешить WWW на веб сервере
Очевидно, что пользователи должны иметь доступ к своему внешнему
веб серверу.
- Разрешить ping на машине пакетной фильтрации
Это вежливость по отношению к пользователям. Они могут проверить,
работает ли машина пакетной фильтрации (чтобы не наезжали на нас, если
на самом деле не работает внешний сайт).
- Антиспуфинг
Так как у нас не асимметричная маршрутизация, мы можем просто включить
антиспуфинг для всех интерфейсов.
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
#
- Установка правил фильтрации на отбрасывание (DENY) всего:
Запрещаем все, кроме loopback трафика.
# ipchains -A input -i ! lo -j DENY
# ipchains -A output -i ! lo -j DENY
# ipchains -A forward -j DENY
#
- Установка интерфейсов
Это обычно делается в сценариях начальной загрузки. Удостоверьтесь, что
вышеупомянутые шаги выполнены прежде, чем интерфейсы настроены, чтобы не
пропустить пакеты до того, как будут настроены правила.
- Вставка модулей маскарадинга по-протоколам.
Мы должны вставить модуль маскарадинга для FTP, так, чтобы активный и
пассивный FTP "работал только' из внутренней сети.
# insmod ip_masq_ftp
#
При маскарадинге самое лучшее -- фильтр в цепочке forward.
Разбейте цепочку forward на несколько пользовательских цепочек в зависимости
от интерфейсов источника/приемника; проблема разделяется на более простые в
управлении части.
ipchains -N good-dmz
ipchains -N bad-dmz
ipchains -N good-bad
ipchains -N dmz-good
ipchains -N dmz-bad
ipchains -N bad-good
ACCEPT'ие стандартных ICMP сообщений об ошибках -- достаточно общая вещь,
поэтому создадим для нее цепочку.
ipchains -N icmp-acc
Установка переходов из цепочки forward
К сожалению, мы знаем (в цепочке forward) только исходящий интерфейс. Таким
образом, чтобы выяснить с какого интерфейса пришел пакет, мы используем
адрес источника (подделку этого адреса предотвращает антиспуфинг).
Обратите внимание, что в журнал регистрации пойдет все, что не подпадает ни
под одно из этих правил (очевидно, что такого никогда не случится).
ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz
ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad
ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad
ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good
ipchains -A forward -i eth0 -j bad-dmz
ipchains -A forward -i eth1 -j bad-good
ipchains -A forward -j DENY -l
Определим icmp-acc цепочку
Пакеты, которые являются одним из ICMP сообщений об ошибке ACCEPT'ся, иначе
управление перейдет обратно к вызывающей цепочке.
ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT
От Good (внутренняя сеть) к DMZ (сервера)
Внутренние ограничения:
- Позволить WWW, ftp, traceroute, ssh к внешней сети
- Позволить SMTP к почтовому серверу
- Позволить POP-3 к почтовому серверу
- Позволить DNS к сереверу имен
- Позволить rsync к веб серверу
- Позволить WWW к веб серверу
- Позволить ping к машине пакетной фильтрации
Можно было бы сделать маскарадинг от внутренней сети к DMZ, но здесь мы это не
делаем. Так как кто-то из внутренней сети может попробовать напакостить, мы
регистрируем в журнале все отклоненные пакеты.
ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.219.128 pop-3 -j ACCEPT
ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT
ipchains -A good-dmz -p icmp -j icmp-acc
ipchains -A good-dmz -j DENY -l
От BAD (внешняя сеть) к DMZ (сервера).
- DMZ ограничения:
- Почтовый сервер
- SMTP во внешнюю сеть
- Прием SMTP от внутренней и внешней сетей
- Прием POP-3 от внутренней сети
- Сервер имен
- Посылка DNS во внешнюю сеть
- Прием DNS от внутренней и внешней сетей и машины пакетной фильтрации
- Web сервер
- Прием HTTP от внутренней и внешней сети
- Rsync доступ из внутренней сети
- Вещи, которые мы разрешаем от внешней сети к DMZ.
- Не регистрировать нарушения, поскольку они могут случаться.
ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A bad-dmz -p icmp -j icmp-acc
ipchains -A bad-dmz -j DENY
От Good (внутренняя сеть) к Bad (внешняя сеть).
Внутренние ограничения:
- Позволить WWW, ftp, traceroute, ssh ко внешней сети
- Позволить SMTP к почтовому серверу
- Позволить POP-3 к почтовому серверу
- Позволить DNS к серверу имен
- Позволить rsync к веб серверу
- Позволить WWW к веб серверу
- Позволить ping к машине пакетной фильтрации
- Многие люди позволяют все из внутренней сети ко внешней сети, и затем
добавляют ограничения. Мы -- тираны.
- Регистрационные нарушения.
- Пассивный FTP, обработанный модулем masq.
ipchains -A good-bad -p tcp --dport www -j MASQ
ipchains -A good-bad -p tcp --dport ssh -j MASQ
ipchains -A good-bad -p udp --dport 33434:33500 -j MASQ
ipchains -A good-bad -p tcp --dport ftp --j MASQ
ipchains -A good-bad -p icmp --icmp-type ping -j MASQ
ipchains -A good-bad -j REJECT -l
От DMZ к Good (внутренняя сеть).
Внутренние ограничения:
- Позволить WWW, ftp, traceroute, ssh к внешней сети
- Позволить SMTP к почтовому серверу
- Позволить POP-3 к почтовому серверу
- Позволить DNS к серверу имен
- Позволить rsync к веб серверу
- Позволить WWW к веб серверу
- Позволить ping к машине пакетной фильтрации
- Многие люди позволяют доступ ко всем сервисам из внутренней сети ко
внешней сети, и затем добавляют ограничения. Мы -- бессовестные тираны.
- Регистрационные нарушения.
- Пассивный FTP, обработанный модулем masq.
- Если бы мы были замаскарадены от внутренней сети к DMZ, то просто
отказывались бы от всех пакетов, приходящих другим путем. Сейчас позволяем
только пакеты, которые могли бы быть часть установленного соединения.
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT
ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT
ipchains -A dmz-good -p icmp -j icmp-acc
ipchains -A dmz-bad -j DENY -l
От DMZ к bad (внешняя сеть).
DMZ ограничения:
- Почтовый сервер
- SMTP во внешнюю сеть
- Прием SMTP от внутренней и внешней сетей
- Прием POP-3 от внутренней сети
- Сервер имен
- Посылка DNS во внешнюю сеть
- Прием DNS от внутренней и внешней сетей и машины пакетной фильтрации
- Web сервер
- Прием HTTP от внутренней и внешней сети
- Rsync доступ из внутренней сети
ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT
ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT
ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A dmz-bad -p icmp -j icmp-acc
ipchains -A dmz-bad -j DENY -l
От Bad (внешняя сеть) к Good (внутренняя сеть).
Мы не позволяем ничего (не-маскарадное) от внешней сети к внутренней сети
ipchains -A bad-good -j REJECT
Фильтрация пакетов непосредственно для Linux машины
Если мы хотим использовать фильтрацию пакета на пакетах, приходящих
непосредственно к linux машине, то мы должны настроить фильтрацию в цепочке
input. Мы создаем одну цепочку для каждого интерфейса адресата:
ipchains -N bad-if
ipchains -N dmz-if
ipchains -N good-if
Создаем переходы на них:
ipchains -A input -d 192.84.219.1 -j bad-if
ipchains -A input -d 192.84.219.250 -j dmz-if
ipchains -A input -d 192.168.1.250 -j good-if
Интерфейс Bad (внешняя сеть).
Машина пакетной фильтрации:
- PING любой сети
- TRACEROUTE любой сети
- Доступ к DNS
- Внешний интерфейс также получает ответы на маскараденные пакеты и ICMP
сообщения об ошибках на них и ping ответы.
ipchains -A bad-if -i ! ppp0 -j DENY -l
ipchains -A bad-if -p TCP --dport 61000:65096 -j ACCEPT
ipchains -A bad-if -p UDP --dport 61000:65096 -j ACCEPT
ipchains -A bad-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A bad-if -j icmp-acc
ipchains -A bad-if -j DENY
Интерфейс DMZ.
Ограничения машины пакетной фильтрации:
- PING любой сети
- TRACEROUTE любой сети
- Доступ к DNS
- DMZ интерфейс получает ответы DNS, ответы ping и ICMP сообщения об ошибках.
ipchains -A dmz-if -i ! eth0 -j DENY
ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT
ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT
ipchains -A dmz-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A dmz-if -j icmp-acc
ipchains -A dmz-if -j DENY -l
Интерфейс Good (внутренний).
- Ограничения машины пакетной фильтрации:
- PING любой сети
- TRACEROUTE любой сети
- Доступ к DNS
- DMZ интерфейс получает ответы DNS, ответы ping и ICMP сообщения об ошибках.
- Ограничения внутренней сети:
- Разрешить WWW, ftp, traceroute, ssh ко внешней сети
- Позволить SMTP к почтовому серверу
- Позволить POP-3 к почтовому серверу
- Позволить DNS к серверу имен
- Позволить rsync к веб серверу
- Позволить WWW к веб серверу
- Позволить ping к машине пакетной фильтрации
- Внутренний интерфейс получает ответы DNS, ответы ping и ICMP сообщения об
ошибках.
ipchains -A good-if -i ! eth1 -j DENY
ipchains -A good-if -p ICMP --icmp-type ping -j ACCEPT
ipchains -A good-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A good-if -j icmp-acc
ipchains -A good-if -j DENY -l
Удаление правил блокировки:
ipchains -D input 1
ipchains -D forward 1
ipchains -D output 1
Вперед
Назад
Содержание