Итак, приступим к рассмотрению практического примера. Предположим, у нас имеется соединение с Интернет и две подсети. Интерфейсу ррр0 назначен реальный IP-адрес — 111.1.1.1, интерфейсу eth0 назначен IP-адрес внутренней сети — 192.168.2.1, а интерфейсу eth1 – 192.168.1.1. (см. рис. 14.1).
Рис. 14.1. Структура сети
Нам нужно обеспечить маршрутизацию между тремя сетями: Интернет, 192.168.2.0 и 192.168.1.0. Другими словами, требуется таким образом настроить пакетную фильтрацию, чтобы можно было пропинговать любую сеть или выполнить трассировку пакетов через любую сеть. Пинговать сеть будем, естественно, с помощью программы ping, а выполнять трассировку будем программой traceroute. В ОС Windows NT те же операции можно выполнить с помощью программ ping и tracert соответственно.
Нам также нужно, чтобы сервер WWW обрабатывал как запросы из внутренних сетей, так и запросы пользователей Internet. Сервер SMTP должен принимать внутренние и внешние соединения, а также отправлять почту в Internet. Получать почту по протоколу POP3 могут только пользователи внутренних сетей. Сервер DNS также должен обрабатывать запросы от всех сетей.
Еще раз определим, к чему будут иметь доступ пользователи Интернет:
1. Наш внутренний сервер WWW.
2. Наш сервер FTP.
3. Наш сервер DNS.
4. Сервер SMTP.
Пользователи локальных сетей будут иметь доступ к:
1. Серверу WWW нашей сети.
2. Серверу FTP нашей сети.
3. Серверу SMTP для отправки почты, как пользователям локальной сети, так и пользователям Интернет.
4. Серверу DNS нашей сети, а также к серверам DNS сети Интернет.
5. Серверу POP3 для получения почты.
6. Серверам WWW сети Интернет.
7. Серверам FTP сети Интернет.
Наши пользователи также должны иметь возможность использовать программы ping, traceroute, ssh. Чуть не забыл! Нам же нужно также обеспечить нормальную работу клиента ICQ. Эта программа стала уже стандартом, как Netscape или Internet Explorer.
Прежде, чем настраивать пакетный фильтр, убедимся, что мы запретили IP-спуфинг и правильно настроили все сетевые интерфейсы. В этой главе уже приводился более подробный пример запрещения IP-спуфинга (листинг 14.2). Эту задачу можно попробовать решить одной командой (при этом вы должны использовать интерпретатор bash):
for f in /proc/sys/net/ipv4/conf/*/rp_fliter; do echo 1 > $f; done
Теперь установим правила, которые запрещают любые пакеты, кроме пакетов обратной петли (loopback):
# ipchains –A input –i ! lo –j DENY
# ipchains –A output –i ! lo –j DENY
# ipchains –A forward –j DENY
Обратите внимание, что запрет IP-спуфинга и любого трафика, кроме локального, должен быть выполнен до инициализации интерфейсов. В противном случае существует вероятность того, что сквозь наш «бастион» проникнут пакеты.
Очень желательно вставить модуль ip_masq_ftp для маскарадинга сервера FTP. Благодаря этому наш внутренний FTP-сервер сможет работать в активном и пассивном режимах.
Теперь создадим несколько цепочек. Все они будут отфильтровывать проходящие пакеты, то есть будут аналогичны цепочке forward. Название каждой из них определяется направлением передачи пакетов, например, netl-net2 — по этой цепочке пакеты будут передаваться от сети 192.168.1.0 к сети 192.168.2.0.
ipchains –N netl-net2
ipchains –N net1-inet
ipchains –N net2-net1
ipchains –N net2-inet
ipchains –N inet-net2
ipchains –N inet-net1
Также создадим цепочку для приема ICMP-сообщений:
ipchains –N icmp
В цепочке forward мы знаем только исходящий интерфейс, а для выяснения входящего интерфейса, то есть того, из которого пришел пакет, мы используем адрес источника. Подделать этот адрес невозможно, так как мы запретили IP-спуфинг. Выполним следующие команды:
ipchains –A forward –s 192.168.1.0/24 –i eth0 –j net1-net2
ipchains –A forward –s 192.168.1.0/24 –i ppp0 –j net1-inet
ipchains –A forward –s 192.168.2.0/24 –i ppp0 –j net2-inet
ipchains –A forward –s 192.168.2.0/24 –i eth1 –j net2-net1
ipchains –A forward –i eth0 –j inet-net2
ipchains –A forward –i eth1 –j int-net1
ipchains –A forward –j DENY –1
Теперь определим правила для цепочки приема ICMP-сообщений:
ipchains –A icmp –p icmp —icmp-type destination-unreachable –j ACCEPT
ipchains –A icmp –p icmp —icmp-type source-quench –j ACCEPT
ipchains –A icmp –p. icmp —icmp-type time-exceeded –j ACCEPT
ipchains –A icmp –p icmp —icmp-type parameter-problem –j ACCEPT
Мы будем принимать только ICMP-сообщения об ошибках, все остальные приниматься не будут. Далее определим правила для цепочки netl-net2. Как уже было сказано выше, от нас требуется обеспечить доступ к сервисам WWW, FTP, ssh. Также нужно разрешить доступ к серверам SMTP, POPS, DNS, использование программ traceroute и ping (все отклоненные пакеты мы будем регистрировать в журнале). С этой целью определим следующие правила:
Читать дальше
Конец ознакомительного отрывка
Купить книгу