Чтение онлайн

ЖАНРЫ

Linux-сервер своими руками

Колисниченко Денис Николаевич

Шрифт:

Прежде, чем настраивать пакетный фильтр, убедимся, что мы запретили 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 (все отклоненные пакеты мы будем регистрировать в журнале). С этой целью определим следующие правила:

ipchains –A net1-net2 –p tcp –d 192.84.219.128 smtp –j ACCEPT

ipchains –A net1-net2 –p tcp –d 192.84.219.128 pop-3 –j ACCEPT

ipchains –A net1-net2 –p udp –d 192.84.219.129 domain –j ACCEPT

ipchains –A net1-net2 –p tcp –d 192.84.219.129 domain –j ACCEPT

ipchains –A net1-net2 –p tcp –d 192.84.218.130 www –j-j ACCEPT

ipchains –A net1-net2 –p tcp –d 192.84.218.130 rsync –j ACCEPT

ipchains –A net1-net2 –p icmp –j icmp ipchains –A net1-net2 –j DENY –l

Эти

правила также разрешают вызов rsync к серверу Web. Теперь определим правила для цепочки inet-net2. Так как в сети 192.168.2.0 находятся серверы SMTP, DNS и Web, то определим ограничения для них. Почтовый сервер должен отправлять почту во внешнюю сеть (Интернет), а также принимать почту из внешней сети. На прием почты по протоколу POP3 имеют право только пользователи внутренней сети. Сервер имен (DNS-сервер) должен посылать запросы во внешнюю сеть, а также принимать запросы из внешней сети через шлюз. Сервер Web должен принимать запросы от пользователей всех сетей. Доступ rsync разрешен только для пользователей внутренних сетей. Все это реализуется следующими правилами:

ipchains –A inet-net2 –p tcp –d 192.168.2.98 smtp –j ACCEPT

ipchains –A inet-net2 –p udp –d 192.168.2.99 domain –j ACCEPT

ipchains –A inet-net2 –p tcp –d 192.168.2.99 domain –j ACCEPT

ipchains –A inet-net2 –p tcp –d 192.168.2.97 www –j ACCEPT

ipchains –A inet-net2 –p icmp –j icmp ipchains –A inet-net2 –j DENY

Далее задаем правила цепочки net1-inet. Пользователи внутренней сети могут получать доступ к сервисам WWW, FTP внешней сети, использовать traceroute во внешнюю сеть. Нужно разрешить доступ к почтовому серверу, серверу имен, Web-серверу. Модуль masq обеспечит пассивный доступ к серверу FTP. Возможные нарушения будут регистрироваться. Пользователи внутренней сети также смогут использовать программу ssh для доступа к внешним узлам, и программу ping.

ipchains –A net1-inet –p tcp www –j MASQ

ipchains –A net1-inet –p tcp ssh –j MASQ

ipchains –A net1-inet –p udp –dport 33434:33500 –j MASQ

ipchains –A net1-inet –p tcp –dport ftp –j MASQ

ipchains -A net1-inet -p icmp -icmp-type ping -j MASQ

ipchains -A net1-inet -j REJECT -l

Сейчас займемся определением правил для цепочки net2-net1. Пользователи могут получать доступ к серверам Web, SMTP, DNS, POPS. Как и для предыдущего случая, мы будем использовать модуль masq для пассивного режима работы FTP-сервера и будем регистрировать нарушения. Правила для этой цепочки будут таковыми:

ipchains -A net2-net1 -р tcp i -y -s 192.84.219.128 smtp -j ACCEPT

ipchains -A net2-net1 -р udp -s 192.84.219.129 domain -j ACCEPT

ipchains -A net2-net1 -р tcp i -y -s 192.84.219.129 domain -j ACCEPT

ipchains -A net2-net1 -р tcp i -y -s 192.84.218.130 www -j ACCEPT

ipchains -A net2-net1 -р tcp i -y -s 192.84.218.130 rsync -j ACCEPT

ipchains -A net2-net1 -р icmp -j icmp

ipchains -A net2-inet -j DENY -l

Поделиться с друзьями: