Linux firewall своими руками
by gapsf
last edited 2012-05-16 20:49:17 by gapsf
Вступление
Цель данного текста - показать принципы построения firewall для интернет-шлюза (малого офиса) на базе Linux.
Акцент в изложениие сделан на принципы организации правил (т.е. логику правил iptables), позволяющие относительно легко:
- разработать набор правил,
осуществлять визуальный анализ их логики (по выводу iptables -L -v)
- вносить изменения в конфигурацию вашего firewall.
Предполагется, что вы хотите собственноручно разработать и написать реальный firewall "с нуля", а не брать готовое решение.
Если вам надо готовое решение подобное описываемому - посмотрите Shorewall http://www.shorewall.net/ (есть в большинстве дистрибутивов).
Так же этот текст не является документацией по iptables - подразумевается, что вы представляете (как продвинутый пользователь/администратор), что такое iptables, знаете синтаксис iptables, в общих чертах возможности NETFILTER (подсистема ядра для перехвата пакетов и выполнения манипуляций над ними), сетевого стека Linux в целом, знаете о IP, UDP/TCP и т.д. и т.п.
Т.е. у вас есть знания о составных частях, но вы плохо представляете себе, как из этого всего собрать, нечто, решающее некие сетевые задачи.
Если вы недостаточно понимаете iptables - есть отличное руководство по его возможностям синтаксису, правда на английском http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html.
Однако, даже если вы не знаете английский, то можно воспользоваться переводчиком Google - будет криво, но что-то понять можно (например http://translate.google.com/translate?js=y&prev=_t&hl=en&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fwww.frozentux.net%2Fiptables-tutorial%2Fchunkyhtml%2F&sl=en&tl=ru)
Решаемые задачи и требования
Условимся подконтрольные вам сети называть "внутренними сетями", а сети, которые не находятся под вашим управлением - "внешними сетями". В простейшем случае: все что в офисе - "внутренняя сеть", Интернет - "большая внешняя сеть".
Итак, у вас есть глобальная задача - организовать одновременный доступ нескольких узлов (хостов, компьютеров, устройств) из внутренних сетей к сети Интернет (а так же, возможно, другим внешним сетям) через один публичный IP-адрес. Так же, организовать инфраструктуру под собственные web/ftp/smtp/pop-сервера с возможностью доступа к ним из внешних сетей.
Уточним требования к firewall'у и задачи которые мы хотим решить:
- задачи:
организовать доступ из внутренних сетей к сети Интернет через один публичный адрес (а-ля "чтобы все в офисе могли лазить по Интернету")
в случае двух внешних сетей, имеющих выход в Интернет, маршрутизировать (направлять) исходящий траффик (согласно каким-то критериям) по разным путям (через разных провайдеров) (а-ля "чтобы Вася лазил в Интернет через провайдера X, а Петя, в тоже время, через провайдера Y")
контролировать доступ из внутренних сетей к узлам внешних сетей на уровне пользователей, адресов узлов, протоколов, tcp/udp-портов (а-ля "Петя может лазить везде,Васе только ICQ, а Маше вообще в Инете делать нечего")
ограничивать скорость передачи из внешних сетей во внутренние на уровне пользователей, адресов узлов, протоколов, tcp/udp-портов (а-ля "Петя может качать со скоростью 100 кбайт/с, а Вася 200 кбайт/с")
организовать доступ из внешних сетей к внутренним сетям с контролем доступа на уровне пользователей, адресов узлов, протоколов, tcp/udp-портов (а-ля "чтобы сотрудник мог подключиься к нашей сети из дома/командировки" и "чтобы люди могли заходить на наш сайт, почта была у нас и ходил от нас и к нам")
- требования:
- относительно простой визуальный анализ логики правил
- относительно простое (не требуещее длительного анализа последствий, предсказуемое) внесение изменений в конфигурацию firewall'а
- возможность перезапуска "по частям", т.е. чтобы при изменнеии конфигурации обновлялись не все правила, а только часть правил, соответствующих изменениям в конфигурации
![[LDP]](/moin_static184/ldp/tldp.png)
