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
Правила для цепочки net2-inet выглядят так:
ipchains -A net2-inet -p tcp -s 192.84.219.128 smtp -j ACCEPT
ipchains -A net2-inet -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A net2-inet -p tcp -s 192.84.219.129 domain -j ACCEPT
ipchains -A net2-inet -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains –A net2-inet –p icmp
ipchains –A net2-inet –j DENY
Эти правила разрешают отправлять почту во внешнюю сеть, принимать почту из внешней и внутренней сети, получать почту только пользователям внутренней сети. Сервер DNS имеет право посылать запросы во внешнюю сеть, принимать запросы от внутренней и внешней сетей, а также от шлюза. Сервер WWW принимает запросы от пользователей внутренней и внешней сетей. Доступ rsync разрешен пользователям внутренней сети.
Следующая цепочка — это inet-net1. В этом случае мы не разрешаем никакого доступа из внешней сети к машинам внутренней сети.
ipchains –A inet-net1 –j REJECT
Основные правила уже определены, осталось установить правила для цепочки input шлюза. Создадим три цепочки input для каждого возможного адресата:
ipchains –N inet-if
ipchains –N net2-if
ipchains –N net1-if
По первой цепочке будут приходить пакеты от внешней сети, а по второй и третьей — от внутренних сетей. Правила для этих цепочек выглядят так:
ipchains –A input –d 192.84.219.1 –j inet-if
ipchains –A input –d 192.84.219.250 –j net2-if
ipchains –A input –d 192.168.1.250 –j net1-if
Непосредственно для цепочки inet-if определим такие правила:
ipchains –A inet-if –i ! ppp0 –j DENY –1
ipchains –A inet-if –p TCP –dport 61000:65096 –j ACCEPT
ipchains –A inet-if –p UDP –dport 61000:65096 –j accept
ipchains –A inet-if –p ICMP —icmp-type pong –j ACCEPT
ipchains –A inet-if –j icmp
ipchains –A inet-if –j DENY
Данные правила разрешают пропинговать любую сеть, использовать программу traceroute для любой сети, доступ к серверу имен, а также получать ICMP-сообщения об ошибках.
Цепочку net2-if определим следующим образом:
ipchains –A net2-if –i ! eth0 –j DENY
ipchains –A net2-if –p TCP ! –y –s 192.168.2.99 53 –j ACCEPT
ipchains –A net2-if –p UDP –s 192.168.2.99 53 –j ACCEPT
ipchains –A net2-if –p ICMP –icmp-type pong –j ACCEPT
ipchains –A net2-if - j icmp
ipchains –A net2-if –j DENY –l
Правила этой цепочки разрешают те же операции, что и для цепочки inet-if, только в этом случае вместо интерфейса ррр0 используется eth0.
Входящая цепочка net1-if определяется так:
ipchains –A net1-if –i ! eth1 –j DENY
ipchains –A net1-if –p ICMP –icmp-type ping –j ACCEPT
ipchains –A net1-if –p ICMP –icmp-type pong –j ACCEPT
ipchains –A net1-if –j icmp ipchains –A net1-if –j DENY –l
Разрешается доступ к серверам WWW, SMTP, POP3. Можно использовать программы ping, traceroute, ssh.
Теперь осталось удалить правила блокировки:
ipchains –D input l
ipchains –D forward l
ipchains –D output l
В начале этого пункта я обещал объяснить настройку ICQ. Предположим, что сервер SQUID у вас установлен на шлюзе, то есть на той машине, которая обеспечивает пакетную фильтрацию (о прокси-сервере SQUID читайте в следующей главе). В файле конфигурации SQUID разрешите порт 5190. Именно этот порт используется новыми клиентами ICQ.
acl SSL_ports port 443 563 5190
Затем установите сервер socks. Можно, конечно, настроить ICQ, используя маскарадинг, но данный метод, как мне кажется, лучше. В качестве сервера socks я рекомендую использовать сервер dame-socks. В файле конфигурации /etc/socks.conf установите внутренний и внешний адреса шлюза:
internal: 192.168.1.1 port = 1080
external: 111.1.1.1
Затем определите узлы, которые могут использовать socks:
client pass {
from: 192.168.0.0/16 to: 0.0.0.0/0
}
Осталось определить, кто может отвечать клиентам:
pass {
from: 0.0.0.0/0 to: 192.168.0.0/16
command: bindreply udpreply
log: connect error
}
Пакетный фильтр IPChains использовался в ядрах Linux до версии 2.4. В новых версиях ядра (начиная с 2.4) вместо IPChains используется пакетный фильтр IPTables. Практически все основные опции остаются прежними. Только, естественно, в командной строке вместо ipchains следует писать iptables.
В этом пункте будут рассмотрены некоторые новые опции ядра, связанные непосредственно с IPTables. Эти опции для большей наглядности я представил в табл. 14.3. Если вы еще не знакомы с компилированием ядра, то эта информация вам пригодится после прочтения гл. 18.
Опции ядра Таблица 14.3
Опция Описание CONFIG_PACKET Позволяет использовать программы, которые работают непосредственно с сетевым устройством. Примером такой программы может послужить tcpdump CONFIG_NETFILTER Включите данную опцию, если вы собираетесь использовать ваш компьютер в качестве шлюза CONFIG_IP_NF_CONNTRACK Позволяет отслеживать соединения. Данная опция необходима для работы функций NAT или IP-маскарадинга. В случае со шлюзом включите данную опцию CONFIG_IP_NF_FTP Прослеживает FTP-соединения. Включите эту опцию, если на вашем компьютере установлен FTP-сервер. Из-за большого количества FTP-запросов модуль IP_NF_CONNTRACK не в состоянии проследить все FTP-соединения, поэтому в помощь ему добавлена опция CONFIG_IP_NF_FTP CONFIG_IP_NF_IPTABLES Необходимая для работы IPTables опция. Без ее включения вы не сможете использовать IPTables CONFIG_IP_NF_MATCH_LIMIT Необязательная опция. Позволяет ограничить количество пакетов передаваемых/принимаемых за промежуток времени CONFIG_IP_NF_MATCH_MAC Позволяет блокировать пакеты, используя МАС-адрес (а не IP-адрес)
Все остальные опции, связанные с IPTables, содержат в своем названии слово MATCH, например, CONFIG_IP_NF_MATCH_MARK. Эти опции разрешают выполнять определенные действия над пакетами. Действия над пакетами, как вы уже знаете, задаются с помощью опции -j. Использование этой опции аналогично как для IPChains, так и для IPTables. Назначение всех возможных действий вы можете узнать из документации по IPTables. Ранее, на примере IPChains, мы рассмотрели два основных действия — ACCEPT и DENY. В IPTables вместо действия DENY нужно использовать аналогичное ему действие DROP. А вместо MASQ (см. п. 14.4) — MASQUERADE.
Я не буду рассматривать различия таблиц (tables) и цепочек (chains), не усложняя тем самым вам жизнь избытком лишней информации, остановлюсь лишь на рассмотрении некоторых полезных примеров.
Представим, что вам нужно что-либо сделать с пакетами, приходящими от узла с МАС-адресом 11:12:13:14:15:16. Выделить данный пакет можно с помощью правила iptables –A INPUT —mac-source 11:12:13:14:15:16.
Дальнейшие операции над пакетом вы уже определите сами, с помощью опции –j. Если же вам нужно выделить все пакеты, кроме тех, которые присылает вам узел с МАС-адресом 11:12:13:14:15:16, то нужно использовать отрицание — !
Допустим, что теперь вам нужно ограничить число пакетов, присылаемым узлом с МАС-адресом 11:12:13:14:15:16, например, не более 10 пакетов в минуту. Делается это следующим образом: iptables –A INPUT –ra limit —limit 10/minute. Промежуток времени можно указать в секундах (second), минутах (minute) и часах (hour).