Библиотека сайта rus-linux.net
Серверы Linux. Часть V. Межсетевой экран iptables
Оригинал: Iptables firewallАвтор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 13 июля 2015 г.
Глава 8. Межсетевой экран iptables
В данной главе описаны некоторые простые правила межсетевого экрана, а также методика их применения с помощью приложения iptables
.
Приложение iptables
предоставляет пользователю возможность осуществления настройки межсетевого экрана системы, который является частью ядра Linux
.
8.1. Таблицы межсетевого экрана iptables
По умолчанию на уровне ядра ОС используются три таблицы
для хранения наборов правил.
Таблица filter
используется для хранения правил фильтрации сетевых пакетов.
root@debian6~# iptables -t filter -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Таблица nat
используется для хранения правил преобразования сетевых адресов.
root@debian6~# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Таблица mangle
может использоваться для специфической обработки сетевых пакетов.
Наборы правил межсетевого экрана в каждой таблице называются цепочками правил
(chains
). Мы будем обсуждать цепочки правил межсетевого экрана и таблицу nat позднее в рамках данной главы.
8.2. Активация и деактивация межсетевого экрана iptables
В следующем примере показана методика деактивации и последующей активации межсетевого экрана iptables
в дистрибутиве Red Hat/Fedora/CentOS и совместимых дистрибутивах.
[root@centos6 ~]# service iptables stop [root@centos6 ~]# service iptables start iptables: Applying firewall rules [ ok ] [root@centos6 ~]#
В дистрибутиве Debian и различных вариантах дистрибутива Ubuntu не используется аналогичный сценарий системы инициализации, но возможно удаление соответствующего пакета программного обеспечения для деактивации межсетевого экрана.
root@debian6~# aptitude purge iptables
8.3. Таблица filter
8.3.1. О фильтрации сетевых пакетов
Процесс фильтрации сетевых пакетов
не намного сложнее процесса пересылки сетевых пакетов
. В процессе пересылки сетевых пакетов
для принятия решений используется лишь таблица маршрутизации, в то время, как в процессе фильтрации сетевых пакетов
используется еще и список правил межсетевого экрана. Ядро ОС исследует сетевые пакеты и принимает решение о возможности передачи каждого из этих пакетов на основе упомянутых правил.
8.3.2. Таблица filter
Таблица filter
межсетевого экрана iptables
содержит три цепочки правил (или набора правил). Цепочка INPUT используется для обработки любого сетевого пакета, попадающего в систему. Цепочка OUTPUT используется для обработки любого сетевого пакета, покидающего систему. Цепочка FORWARD используется для обработки сетевых пакетов, которые пересылаются (передаются) через систему.
В примере ниже показана методика вывода информации о таблице filter и всех ее правилах.
[root@RHEL5 ~]# iptables -t filter -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@RHEL5 ~]#
Как вы можете видеть, во всех трех цепочках правил межсетевого экрана из таблицы filter используется политика пропуска всех сетевых пакетов (ACCEPT). Политика пропуска всех сетевых пакетов является используемой по умолчанию политикой.
8.3.3. Стандартные правила межсетевого экрана
Стандартной политикой используемых по умолчанию правил межсетевого экрана является пропуск всех сетевых пакетов (ACCEPT). Эксплуатация настроенного подобным образом межсетевого экрана не является безопасной практикой.
При использовании более безопасного варианта настройки межсетевой экран должен отбрасывать все сетевые пакеты (DROP). Отброшенный сетевой пакет
не передается для последующей обработки с помощью какой-либо цепочки правил межсетевого экрана, при этом также не осуществляется вывод какого-либо сообщения об ошибке.
Ниже приведена последовательность команд для блокировки сетевого доступа к компьютеру. Не исполняйте эти команды при работе в рамках удаленной сессии ssh.
root@debianpaul~# iptables -P INPUT DROP root@debianpaul~# iptables -P OUTPUT DROP root@debianpaul~# iptables -P FORWARD DROP root@debianpaul~# iptables -L Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination
8.3.4. Правила для кольцевого сетевого интерфейса
Для начала давайте установим стандартные политики отбрасывания всех сетевых пакетов (DROP) для всех трех цепочек правил межсетевого экрана. Обратите внимание на то, что в случае работы через ssh ваше соединение с удаленной системой может закрыться в момент ввода данных команд ;-).
[root@RHEL5 ~]# iptables -P INPUT DROP [root@RHEL5 ~]# iptables -P FORWARD DROP [root@RHEL5 ~]# iptables -P OUTPUT DROP
После этого мы позволим серверу использовать кольцевой интерфейс (благодаря наличию которого сервер имеет возможность работать со своими службами). В первую очередь мы добавим правило в цепочку INPUT для пропуска (ALLOW) трафика от сетевого интерфейса lo (кольцевого интерфейса), после чего выполним аналогичное действие для того, чтобы сетевые пакеты могли покидать систему через кольцевой интерфейс.
[root@RHEL5 ~]# iptables -A INPUT -i lo -j ACCEPT [root@RHEL5 ~]# iptables -A OUTPUT -o lo -j ACCEPT
Теперь взглянем на таблицу filter снова (в данном случае мы не используем параметр -t, так как информация об интересующей нас таблице выводится по умолчанию).
[root@RHEL5 ~]# iptables -nL Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
8.3.5. Разрешение использования протокола ssh при работе с сетевым интерфейсом eth0
В данном примере показана методика добавления двух правил, позволяющих получить доступ к вашей системе извне по протоколу ssh.
[root@RHEL5 ~]# iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT [root@RHEL5 ~]# iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
Таблица filter будет выглядеть аналогично таблице, представленной в данном примере (обратите внимание на то, что параметр -v был использован для получения более подробного вывода).
[root@RHEL5 ~]# iptables -nvL Chain INPUT (policy DROP 7 packets, 609 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 3 packets, 228 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp spt:22 [root@RHEL5 ~]#
8.3.6. Разрешение доступа к системе из подсети
В данном примере показана методика разрешения доступа к системе с любого компьютера из сети 10.1.1.0/24, но только посредством сетевого интерфейса eth1. В данном случае не накладывается каких-либо ограничений на использование различных номеров портов (приложений).
[root@RHEL5 ~]# iptables -A INPUT -i eth1 -s 10.1.1.0/24 -p tcp -j ACCEPT [root@RHEL5 ~]# iptables -A OUTPUT -o eth1 -d 10.1.1.0/24 -p tcp -j ACCEPT
Как и в предыдущих примерах, ниже приведено описание результирующих правил.
[root@RHEL5 ~]# iptables -nvL Chain INPUT (policy DROP 7 packets, 609 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- eth1 * 10.1.1.0/24 0.0.0.0/0 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 3 packets, 228 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp spt:22 0 0 ACCEPT tcp -- * eth1 0.0.0.0/0 10.1.1.0/24
8.3.7. Команда iptables save
Используйте команду iptables save
для автоматического применения данных правил после перезапуска межсетевого экрана.
[root@RHEL5 ~]# /etc/init.d/iptables save Saving firewall rules to /etc/sysconfig/iptables: [ OK ] [root@RHEL5 ~]#
8.3.8. Пример сценария для применения правил межсетевого экрана
Вы можете разработать простой сценарий для применения описанных выше правил межсетевого экрана. Ниже приведен пример сценария, предназначенного для применения правил, которые вы уже видели ранее в данной главе.
#!/bin/bash # В первую очередь очистка всех таблиц iptables -t filter -F iptables -t filter -X iptables -t nat -F iptables -t nat -X # Стандартная политика отбрасывания всех сетевых пакетов iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # Разрешение использования кольцевого сетевого интерфейса iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Разрешение использования протокола ssh для доступа к системе извне посредством сетевого интерфейса eth0 iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT # Разрешение обмена любым трафиком с узлами из подсети 10.1.1.0/24 iptables -A INPUT -i eth1 -s 10.1.1.0/24 -p tcp -j ACCEPT iptables -A OUTPUT -o eth1 -d 10.1.1.0/24 -p tcp -j ACCEPT
8.3.9. Разрешение обмена ICMP-трафиком (генерируемым утилитой ping)
Сразу же после активации межсетевого экрана iptables вы можете получить сообщение "Operation not permitted"
при использовании утилиты ping для проверки доступности других узлов.
[root@RHEL5 ~# ping 192.168.187.130 PING 192.168.187.130 (192.168.187.130) 56(84) bytes of data. ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted
В примере ниже показана последовательность команд, позволяющая настроить межсетевой экран iptables для пропуска трафика, генерируемого утилитой ping на вашей машине или принимаемого вашей машиной.
[root@RHEL5 ~]# iptables -A INPUT -p icmp --icmp-type any -j ACCEPT [root@RHEL5 ~]# iptables -A OUTPUT -p icmp --icmp-type any -j ACCEPT
Две приведенные выше команды не позволяют другим компьютерам передавать сообщения утилиты ping через вашу систему, выполняющую роль маршрутизатора, ввиду того, что правила добавляются лишь в цепочки правил INPUT и OUTPUT межсетевого экрана. Для маршрутизации сообщений утилиты ping вам придется добавить соответствующее правило в цепочку FORWARD межсетевого экрана. Следующая команда разрешает передачу пакетов протокола ICMP между сетями.
[root@RHEL5 ~]# iptables -A FORWARD -p icmp --icmp-type any -j ACCEPT
Предыдущий раздел: | Оглавление | Следующий раздел: |
7.14. Практическое задание: механизм пересылки сетевых пакетов | 8.4. Практическое задание: фильтрация сетевых пакетов |