Читаем Linux-сервер своими руками полностью

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 разрешен только для пользователей внутренних сетей. Все это реализуется следующими правилами:

Перейти на страницу:

Все книги серии Секреты мастерства

Похожие книги