Посмотреть правила iptables: iptables посмотреть правила и политики по умолчанию
iptables посмотреть правила и политики по умолчанию
При работе с iptables посмотреть правила посмотреть правила можно несколькими способами. Во всех случаях понадобятся привилегии суперпользователя поскольку iptables — это модуль ядра и рядовые системные пользователи работать с ним не могут.
В документации по утилите можно найти основные ключи — это прежде всего -L (—list)
При его использовании в консоль выводятся все правила, если добавить -n — они будут пронумерованы.
iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:53
…
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all — 0.0.0.0/0 192. 168.122.0/24 ctstate RELATED,ESTABLISHED
…
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:68
На практике удобно пользоваться iptables-save, команда нужна для сохранения добавленных правил в файл (iptables-save > filename), но подходит и для просмотра цепочек. Она в отличие от предыдущей не выводит очень подробной информации которая обычно не нужна.
iptables-save
При работе с iptables посмотреть правила часто недостаточно для составления полной картины. Также значение имеют политики по-умолчанию для приходящих, пересылаемых и генерируемых на сервере пакетов.
Посмотреть цепочки можно так:
iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp —dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp —dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp —dport 67 -j ACCEPT
…
Политика -P INPUT ACCEPT особенно важна. Она определяет что будет происходить со всеми входящими пакетами не подошедшими под установленные правила. Если задано действие DROP и очищены правила iptables к серверу подключиться не получится. Лучше всегда оставлять ACCEPT и блокировки задавать правилами, а не политиками.
Через iptables настраиваются как базовые firewall-ы, так и сложные конфигурации — например, с перенаправлением трафика с хост машины в LXD контейнеры.
Просмотр правил IPTables, добавление или удаление
IPTables — утилита, с помощью которой происходит управление межсетевым экраном в Linux. Это мощный и удобный инструмент для защиты сети и нежелательных соединений. Весь процесс заключён в правилах iptables, которые можно редактировать и просматривать. Более подробная информация представлена в статье.
История создания
До IPTables в системе Linux использовался файрвол IPFW, позаимствованный из BSD. Затем, с версии ядра 2. 4 Linux, она стала поставляться с межсетевым экраном Netfilter и утилитой IPTables для управления им. В методике её работы были сохранены все аспекты и немного расширены функционально.
Строение и устройство IPTables
Поступая в межсетевой экран, пакет проходит несколько проверок. Это может быть контрольная сумма или любой другой анализ на уровне ядра. Затем наступает черёд пройти через цепочку PREROUTING. Далее проверяется таблица маршрутизации, в соответствии с которой происходит переадресация на следующую цепочку. Если адрес у пакета отсутствует, как, например, в TCP, то происходит направление в цепочку FORWARD. В тех случаях, когда имеется конкретный адрес, следует цепочка INPUT, а затем уже тем демонам или сервисам, для которых он предназначен. Ответ от них также должен пройти несколько цепочек, например OUTPUT. Последним звеном в этом процессе является цепочка POSTROUTING.
Теперь немного о цепочках. Каждая из них содержит в себе несколько таблиц. Их имена могут повторяться, но это никак не влияет на работу, так как они не взаимосвязаны между собой.
Таблицы в свою очередь содержат несколько правил. По сути, правило — это некое условие, которому должен соответствовать проверяемый пакет. В зависимости от исхода, над пакетом выполняется определённое действие.
Таким образом, проходя все этапы сети, пакет последовательно посещает все цепочки и в каждой проверяется на соответствие условию определённого правила. Если таблица не сформирована пользователем, то выполняется действие по умолчанию, в основном, это ACCEPT, позволяющий продолжить движение дальше или же DROP, останавливающий пакет.
Предустановленные цепочки бывают следующих категорий:
- PREROUTING. Первоначальная обработка всех приходящих пакетов.
- INPUT. Сюда попадают те пакеты, которые направлены непосредственно в локальный компьютер.
- FORWARD. Применяется для «транзитных пакетов», которые следуют таблице маршрутизации.
- OUTPUT. Используется для исходящих пакетов.
- POSTROUTING. Последний этап в прохождении исходящим пакетом всех цепочек.
Помимо встроенных цепочек, пользователи могут создавать или же удалять свои собственные.
Просмотр правил IPTables и управление ими
Как уже было сказано ранее, все цепочки содержат определённые условия для пакетов. Для просмотра правил IPTables и управления ими и используется утилита IPTables. Каждое отдельное правило представляет собой строку с набором условий для пакетов, а также действия над ними, в зависимости от исхода.
Формат команды выглядит таким образом: iptables [-t название обрабатываемой таблицы] вызываемая команда [критерии] [выполняемое действие].
Все, что заключено в квадратные скобки? может быть опущено. Если это параметр с указанием таблицы, то будет использоваться filter. Для применения какого-то определённого имени нужно добавить ключ -t. Вызываемая команда позволяет вызвать необходимое действие, например, добавить правило IPTables или удалить его. В «критериях» указываются параметры, по которым будет происходить отбор. И в «действии» применяется действие, которое нужно выполнить, если условие соблюдено.
Команды для создания и просмотра правил IPTables
Далее приведены несколько команд утилиты:
- Append (-A). При использовании команды указывается цепочка и таблица, в которые нужно добавить необходимое правило. Ценность команды в том, что делает она это в конце всего списка.
- Delete (-D). Как можно понять из названия, производит удаление правила. В качестве параметров можно указать как полное наименование, так и присвоенные им номера.
- Rename-chain (-E). Меняет название цепочки. В команде указывается старое, затем новое имя.
- Flush (-F). Очистка абсолютно всех правил определённой таблицы.
- Insert (-I). Данная команда вставляет в указанное номером место, нужное правило.
- List (- L). Просмотр правил Iptables. Если не указана таблица, то будет использована filter по умолчанию.
- Policy (-P). Используется политика по умолчанию для указанной цепочки.
- Replace (-R). Меняет правило под указанным номером, на необходимое.
- Delete-chain (-X). Эта команда производит удаление всех созданных цепочек. Останутся только предустановленные.
- Zero (-Z). Сбросит счётчики переданных данных в указанной цепочке.
Немного о параметрах отбора пакетов
Их можно условно разделить на три разновидности:
- Общие критерии. Их можно указывать для любых правил. Они не требуют подключения особых расширений и модулей, а также не зависят от того, какой протокол будет задействован.
- Не общие критерии. Они становятся доступны при использовании общих критериев.
- Явные. Для того, чтобы воспользоваться данным типом, нужно подключать специальные плагины для netfilter. К тому же в команде необходимо применить ключ -m.
Стоит немного рассказать о часто встречающихся параметрах, применяемых при анализе пакетов:
- Protocol (-p). Указывает на протокол.
- Source (-s). Данный параметр определяет IP адрес источника, с которого пришёл пакет. Его можно указать несколькими способами. Конкретный хост, адрес или же целую подсеть.
- Destination (-d). Адрес назначения пакета. Также, как и предыдущий, может быть описан несколькими способами.
- In-interface (-i). Указывает входящий интерфейс пакета. В основном используется для NAT или на системах с несколькими интерфейсами.
- Out-interface (-o). Исходящий интерфейс.
Несколько примеров
Для того, чтобы выполнить просмотр правил IPTables nat? нужно воспользоваться командой — «iptables -L -t nat». Узнать общий статус файрвола — «iptables -L -n -v». К тому же данная команда позволяет посмотреть правила IPTables, имеющиеся во всей системе. Вставить правило в определённое место таблицы, например, между первой и второй строкой — «iptables -I INPUT 2 -s 202.54.1.2 -j DROP». Затем просмотреть, добавилось ли оно — «iptables -L INPUT -n —line-numbers».
Чтобы заблокировать определённый адрес, например, 12.12.12.12 — «iptables -A INPUT -s 12.12.12.12 -j DROP».
Справка по iptables — «man iptables». Если нужна информация по конкретной команде — «iptables -j DROP -h».
В заключение
Использовать команды IPTables нужно с осторожностью, так как неправильная настройка (по незнанию) может привести к сбоям в сети или полном выходе её из строя. Поэтому стоит подробно изучить мануалы и инструкции перед конфигурацией. В умелых же руках IPTables можно превратить в надёжного защитника сетевых соединений. Системные администраторы активно используют утилиту для создания подключений, изолированных от несанкционированного доступа.
[iptables] Шпаргалка по iptables — SysOps
Файрвол в системе linux контролируется программой iptables
(для ipv4) и ip6tables
(для ipv6). В данной шпаргалке я указал самые распространённые варианты использования iptables. Знак #
означает, что команда выполняется от root’а. Получение прав root’а в системе Ubuntu делается командой sudo -s
, в других системах командой su
. Этот пост можно считать частичным дополнением моего поста про VPN-сервер и других, потому что пришлось изрядно поломать голову на тему доступа к серверу извне.
Узнать статус:#
Примерный вывод команды для неактивного файрвола:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
И для активного файрвола:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0. 0.0.0/0 0.0.0.0/0 state INVALID
394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0
1 142 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- br0 * 0. 0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)
pkts bytes target prot opt in out source destination
Chain wanin (1 references)
pkts bytes target prot opt in out source destination
Chain wanout (1 references)
pkts bytes target prot opt in out source destination
Параметры:
-L
: Показать список правил.-v
: Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.-n
: Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
Отобразить список правил с номерами строк.#
iptables -n -L -v --line-numbers
Примерный вывод:
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 0. 0.0.0/0 0.0.0.0/0 state INVALID
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID
3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
5 wanin all -- 0.0.0.0/0 0.0.0.0/0
6 wanout all -- 0.0.0.0/0 0.0.0.0/0
7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain wanin (1 references)
num target prot opt source destination
Chain wanout (1 references)
num target prot opt source destination
Вы можете использовать номера строк для того, чтобы добавлять новые правила.
Отобразить INPUT или OUTPUT цепочки правил.#
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers
Остановить, запустить, перезапустить файрвол. #
Силами самой системы:
service ufw stop
service ufw start
Можно также использовать команды iptables для того, чтобы остановить файрвол и удалить все правила:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Где:
-F
: Удалить (flush) все правила.-X
: Удалить цепочку.-t table_name
: Выбрать таблицу (nat или mangle) и удалить все правила.-P
: Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).
Удалить правила файрвола.#
Чтобы отобразить номер строки с существующими правилами:
iptables -L INPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers | less
iptables -L OUTPUT -n --line-numbers | grep 202. 54.1.1
Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
Или найдем IP адрес источника (202.54.1.1
) и удалим из правила:
iptables -D INPUT -s 202.54.1.1 -j DROP
Где:
-D
: Удалить одно или несколько правил из цепочки.
Добавить правило в файрвол.#
Чтобы добавить одно или несколько правил в цепочку, для начала отобразим список с использованием номеров строк:
iptables -L INPUT -n --line-numbers
Примерный вывод:
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202.54.1.1 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Чтобы вставить правило между 1 и 2 строкой:
iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Проверим, обновилось ли правило:
iptables -L INPUT -n --line-numbers
Вывод станет таким:
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- 202. 54.1.1 0.0.0.0/0
2 DROP all -- 202.54.1.2 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Сохраняем правила файрвола.#
Через iptables-save
:
iptables-save > /etc/iptables.rules
Восстанавливаем правила.#
Через iptables-restore
:
iptables-restore < /etc/iptables.rules
Устанавливаем политики по умолчанию.#
Чтобы сбрасывать весь трафик:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -L -v -n
После вышеперечисленных команд ни один пакет не покинет данный хост.
Блокировать только входящие соединения.#
Чтобы сбрасывать все не инициированные вами входящие пакеты, но разрешить исходящий трафик:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -L -v -n
Пакеты исходящие и те, которые были запомнены в рамках установленных сессий — разрешены.
Сбрасывать адреса изолированных сетей в публичной сети.#
iptables -A INPUT -i eth2 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth2 -s 10.0.0.0/8 -j DROP
Список IP адресов для изолированных сетей:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
Блокировка определенного IP адреса.#
Чтобы заблокировать адрес взломщика 1.2.3.4
:
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP
Заблокировать входящие запросы порта.#
Чтобы заблокировать все входящие запросы порта 80
:
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth2 -p tcp --dport 80 -j DROP
Чтобы заблокировать запрос порта 80
с адреса 1.2.3.4
:
iptables -A INPUT -p tcp -s 1. 2.3.4 --dport 80 -j DROP
iptables -A INPUT -i eth2 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Заблокировать запросы на исходящий IP адрес.#
Чтобы заблокировать определенный домен, узнаем его адрес:
Вывод:
facebook.com has address 69.171.228.40
Найдем CIDR
для 69.171.228.40
:
whois 69.171.228.40 | grep CIDR
Вывод:
Заблокируем доступ на 69.171.224.0/19
:
iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
Также можно использовать домен для блокировки:
iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP
Записать событие и сбросить.#
Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:
iptables -A INPUT -i eth2 -s 10. 0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth2 -s 10.0.0.0/8 -j DROP
Проверим журнал (по умолчанию /var/log/messages
):
tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages
Записать событие и сбросить (с ограничением на количество записей).#
Чтобы не переполнить раздел раздутым журналом, ограничим количество записей с помощью -m
. К примеру, чтобы записывать каждые 5 минут максимум 7 строк:
iptables -A INPUT -i eth2 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth2 -s 10.0.0.0/8 -j DROP
Сбрасывать или разрешить трафик с определенных MAC адресов.#
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
## разрешить только для TCP port 8080 с mac адреса 00:0F:EA:91:04:07
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
Разрешить или запретить ICMP Ping запросы. #
Чтобы запретить:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth2 -p icmp --icmp-type echo-request -j DROP
Разрешить для определенных сетей/хостов:
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Разрешить только часть ICMP
запросов:
## предполагается, что политики по умолчанию ###
## для входящих установлены в DROP ###
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## разрешим отвечать на запрос ##
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Открыть диапазон портов.#
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT
Открыть диапазон адресов. #
## разрешить подключение к порту 80 (Apache) ##
## если адрес в диапазоне от 192.168.1.100 до 192.168.1.200 ##
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
## пример для nat ##
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Закрыть или открыть стандартные порты.#
Заменить ACCEPT
на DROP
, чтобы заблокировать порт.
## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
## cups (printing service) udp/tcp port 631 для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
## time sync via NTP для локальной сети (udp port 123) ##
iptables -A INPUT -s 192. 168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
## tcp port 25 (smtp) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
## dns server ports ##
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
## http/https www server port ##
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
## tcp port 110 (pop3) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT
## tcp port 143 (imap) ##
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
## Samba file server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192. 168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
## proxy server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
## mysql server для локальной сети ##
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Ограничить количество параллельных соединений к серверу для одного адреса.#
Для ограничений используется connlimit модуль. Чтобы разрешить только 3 ssh соединения на одного клиента:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Установить количество запросов HTTP до 20:
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Где:
--connlimit-above 3
: Указывает, что правило действует только если количество соединений превышает 3.--connlimit-mask 24
: Указывает маску сети.
Помощь по iptables
. #
Для поиска помощи по iptables
, воспользуемся man
:
Чтобы посмотреть помощь по определенным командам и целям:
Проверка правила iptables
.#
Проверяем открытость/закрытость портов:
Проверяем открытость/закрытость определенного порта:
netstat -tulpn | grep :80
Проверим, что iptables разрешает соединение с 80
портом:
iptables -L INPUT -v -n | grep 80
В противном случае откроем его для всех:
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Проверяем с помощью telnet
Можно использовать nmap
для проверки:
На этом можно и притормозить, потому что описанных здесь методов достаточно, чтобы разобраться как с помощью iptables
управлять сетевой безопасностью сервера и маршрутизацией на нем.
Настройка Linux-файрвола iptables: Руководство для начинающих
Iptables — это межсетевой экран для операционных систем Linux. Успешно применять этот инструмент могут не только продвинутые пользователи Linux, но и новички. В этом руководстве представлено описание базовых настроек конфигурации этого мощного файрвола.
Что такое iptables
Как сказано выше, iptables является утилитой, выполняющей функции межсетевого экрана. Ее настройка производится в командной строке, с помощью правил iptables можно разрешать или блокировать прохождение трафика. Когда происходит попытка установления соединения с текущей машиной, iptables просматривает список правил в списке, чтобы понять, как нужно поступить в этом случае. Если правила нет, то выполняется действие по умолчанию.
Как правило, itpables предустанавливается на всех Linux-дистрибутивах. Чтобы обновить утилиту, или установить ее, если по каким-то причинам она отсутствует в базовой поставке, нужно воспользоваться следующей командой:
sudo apt-get install iptables
Существуют и графические инструменты-альтернативы iptables, например Firestarter, но и работа в командной строке не является очень уж сложной. Однако следует соблюдать особенную осторожность при настройке iptables через удаленное ssh-соединение, поскольку одна неверная команда может заблокировать возможность подключения к удаленному серверу — придется каким-то образом вносить изменения в настройки машины физически получив к ней доступ.
Типы правил
Существует три типа правил iptables — input, forward и output.
Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ.
Forward — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим сервером. К примеру, в случае маршрутизатора, к нему подключаются многие пользователи и приложения, но данные не посылаются на сам маршрутизатор, они лишь передаются ему, чтобы он мог перенаправить их адресату. Если вы не занимаетесь настройкой маршрутизации или NAT, то правила этого типа использовать в работе не будете.
Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение.
Важный момент
Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто.
Поведение по умолчанию
Прежде чем приступать к непосредственной настройке межсетевого экрана, следует определиться с тем, каким должно быть поведение цепочек правил по умолчанию. Другими словами, что iptables нужно делать в том случае, если соединение не подпадает ни под одно из сконфигурированных правил?
Увидеть текущие настройки iptables по умолчанию можно с помощью команды iptables –L:
В данном случае мы также использовали команду grep, чтобы получить более четкий вывод. Как показано на скриншоте, все три цепочки по умолчанию разрешают прием трафика. Чаще всего такое поведение более предпочтительно. Если вы ничего не меняли в правилах, то так оно и должно быть по умолчанию. Если же что-то менялось, а теперь нужно вернуть прежние настройки, то сделать это можно с помощью таких команд:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Предварительно разрешил весь трафик, затем уже можно запрещать соединения с определенных IP-адресов и на определенные порты.
Если же предпочтительнее пойти по другому пути и сначала запретить весь трафик, а затем выборочно разрешать его, то нужно воспользоваться командами из списка ниже:
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Действия с соединениями
После настройки поведения межсетевого экрана по умолчанию, можно переходить к созданию правил обработки трафика, чтобы iptables понимал, что делать с конкретным соединением. Ниже мы рассмотрим три основных вида действий с соединениями.
- Accept — разрешить соединение;
- Drop — игнорировать соединение, вести себя так, будто его никогда не было. Действие подходит для случаев, когда нужно сделать так, чтобы источник запроса не узнал о его блокировке.
- Reject — заблокировать соединение и отправить в ответ сообщение об ошибке. Действие подходит для тех случаев, когда владелец сервера хочет дать понять, что соединение заблокировано файрволом.
Вот так выглядит ответ на пинг в каждом из трех случаев
Соединение разрешено:
Соединение проигнорировано:
Соединение отклонено:
Разрешаем и блокируем конкретные соединения
Настроив политики цепочек, можно переходить к работе с конкретными соединениями. В нашем руководстве мы будет по умолчанию их отклонять, но можно и разрешать или игнорировать.
Мы будем использовать комманду iptables –A, чтобы добавлять правила к существующим цепочкам. Iptables будет начинать с начала списка и проходить по всем правилам, пока не найдет совпадение. Если нужно поместить какое-то правило перед уже имеющимся, то можно использовать команду iptables -I [цепочка] [номер], чтобы указать номер позиции в списке, которую должно занять новое правило.
Соединения с одного IP-адреса
Правило ниже позволяет заблокировать все соединения с IP-адреса 10.10.10.10:
iptables -A INPUT -s 10.10.10.10 -j DROP
Соединения с диапазона адресов
Правило ниже позволяет заблокировать соединения из диапазона IP-адресов 10.10.10.0/24. Для указания диапазона адресов можно использовать стандартную запись маски подсети через слэш или описывать ее в полном варианте:
iptables -A INPUT -s 10.10.10.0/24 -j DROP
или
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Соединения на конкретный порт
Ниже показано, как заблокировать SSH-соединения с хоста 10.10.10.10:
iptables -A INPUT -p tcp --dport ssh -s 10. 10.10.10 -j DROP
Вместо SSH можно указать любой протокол или номер порта. Часть кода –p tcp говорит iptables о типе соединения, которое использует протокол. Если вы блокировали протокол, который использует UDP вместо TCP, то тогда нужно было бы написать –p udp.
Вот так можно заблокировать SSH-соединения с любого IP-адреса.
iptables -A INPUT -p tcp --dport ssh -j DROP
Состояния соединений
Как сказано выше, многие протоколы требуют двусторонних коммуникаций. Например, если нужно разрешить соединения по SSH, то добавить правила надо будет и в цепочку input и в цепочку output. Но что, если нужно только разрешить доступ только входящим соединениям? Разрешит ли добавление правила в цепочку output и исходящие SSH-соединения?
Для таких случаев используются состояния соединений. Они позволяют описывать двусторонние коммуникации, в которых разрешается установка только соединений определенной направленности. В примере ниже разрешены SSH-соединения, поступающие от хоста 10.10.10.10, но SSH-соединения к этому хосту запрещены. Однако, системе разрешается отправка информации по SSH в случае уже установленной сессии, что делает возможной SSH-коммуникацию между хостами:
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Сохранение изменений
Внесенные в цепочки правил изменения пропадут при перезапуске iptables, так что их нужно сохранить с помощью специальной команды. В зависимости от используемого Linux-дистрибутива команда может выглядеть по-разному.
Ubuntu:
=sudo /sbin/iptables-save
Red Hat / CentOS:
=/sbin/service iptables save
Или
=/etc/init.d/iptables save
Другие команды
Вывод уже сконфигурированных правил iptables:
iptables –L
Добавление ключа –v позволит просматривать информацию по пакетам и байтам, добавление –n выведет информацию в цифровом формате — имена хостов, протоколы и сети будут описаны цифрами.
Для удаления всех сконфигурированных правил можно использовать такую команду:
iptables –F
P. S. Другие инструкции:
Настройка iptables от простого к сложному. Часть 2.
В первой части мы уже познакомились с самыми основами, давайте продолжим.
Настройка iptables для состояний сетевого соединения
При фильтрации сетевых соединений также можно использовать текущий статус сетевых соединений. Давайте немного вспомним, как устанавливается сетевое подключение по протоколу TCP. Сначала инициатор соединения посылает SYN-пакет, сервер принимает его и посылает SYN- и ACK-пакеты, клиент отвечает ACK-пакетом, который принимает сервер, и только после этого соединение считается установленным, и начинается передача данных. Этот обмен пакетами называется хэндшейком или рукопожатием. Мы можем использовать статус сетевого соединения для обеспечения доступа. Например, открывать доступ к определенному порту, если мы с сервера иницировали подключение. В противном случае мы не будем открывать доступ на определенный порт. У сетевых соединений есть несколько статусов состояния, вот некоторые из них:
NEW — установка нового соединения, первый пакет, который мы видим.
RELATED — соединение, связанное с другим, имеющим статус ESTABLISHED.
ESTABLISHED — установленное сетевое соединение.
INVALID — пакет не может быть идентифицирован как принадлежащий какому-то соединению.
UNTRACKED — пакеты, для которых ранее была применена цель NOTRACK. Мы пока применяли только цель ACCEPT, позже мы познакомимся и с другими. Для таких пакетов, например, не отслеживаются сопутствующие ICMP-пакеты.
Посылка пакета SYN на определенный порт говорит об установке соединения, если на определенный порт будет послан какой-то другой пакет, это не будет считаться новым соединением, посылка SYN на определенный порт соответствует состоянию NEW. После обмена SYN и ACK пакетами состояние соединения становится ESTABLISHED. Если установленное соединение приводит к открытию другого порта, то это обращение получает статус RELATED.
Очень простой пример — работа с FTP-сервером. Мы подключаемся к порту 21/tcp, в момент подключения соединение получается статус NEW, а затем ESTABLISHED. Управляющие команды идут через порт 21/tcp, но при работе для передачи файлов необходимо открыть еще и 20/tcp. И соединение на порт 20/tcp получает статус RELATED. Таким образом, доступ к порту 20/tcp можно закрывать до тех пор, пока соединение на него не придет со статусом RELATED, либо само соединение не получит статус ESTABLISHED. Получается, что для корректной фильтрации портов 21/tcp и 20/tcp мы можем сделать следующее:
iptables -t filter -A INPUT -p tcp -m tcp --dport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t filter -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
В этом случае без установки подключения на порт 21 мы не получим доступ к порту 20. Что необходимо знать для работы со статусами сетевых соединений? Надо представлять себе, как устанавливаются сетевые соединения и представлять, как работает с сетевыми соединениями сервис, для которого вы создаете правила фаервола.
Настройка нескольких цепочек правил
До сих пор мы рассматривали только стандартные цепочки правил. iptables позволяет составлять собственные цепочки. Эта возможность позволяет увеличить гибкость обработки пакетов. Например, если у нас для определенной подсети должны быть установлены собственные правила, отличные от других подсетей, то мы можем создать определенную цепочку, в которую будем перенаправлять пакеты для последующей обработки. И в эту цепочку мы можем включать соответствующие разрешения. Это избавляет нас от необходимости добавлять источник пакетов в каждое правило, достаточно создать одно правило для конкретного источника, а затем перенаправить из него пакеты в отдельную цепочку, при этом основная настройка iptables сводится к созданию правила перенаправления в цепочку и создания и последующей оптимизации самой цепочки. Пакеты из остальных источников будут проходить так же, как и обычно. Это выглядит так: Сначала создаем новую цепочку:
iptables -N FIREWALL_CHAIN_1
Затем перенаправляем пакеты в эту цепочку:
iptables -t filter -A INPUT -s 192.168.0.0/24 -p tcp -m tcp -j FIREWALL_CHAIN_1
В параметре -j мы указываем название нашей цепочки правил, через которую будут перенаправляться пакеты. Раньше мы указывали там название стандартной цели — ACCEPT.
iptables -t filter -A FIREWALL_CHAIN_1 -p tcp -m tcp --dport 80 -j ACCEPT
Таким образом можно создать несколько цепочек, каждая из которых будет фильтровать пакеты независимо от других. Кроме того, можно точно так же перенаправлять пакеты из одной собственной цепочки в другую, выстраивая несколько цепочек в одну большую, либо разделяя поток пакетов на несколько. Таким образом вы можете детально разделить входящий поток на несколько на основании какого-либо признака, и при необходимости объединить их в один. Это позволяет оптимизировать обработку потока пакетов, пропуская обработку тех пакетов, для которых это не нужно, снизив тем самым нагрузку, что особенно актуально при большом трафике.
Продолжение следует…
Если у вас есть вопросы по какой-то определенной конфигурации, пишите, и мы рассмотрим ее в одной из следующих статей.
[wysija_form id=»2″]
- Нажмите здесь, чтобы поделиться контентом на Facebook. (Открывается в новом окне)
- Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
- Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
- Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
- Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
- Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
- Нажмите, чтобы поделиться в Skype (Открывается в новом окне)
пишем в лог все заблокированные соединения/пакеты
- Содержание статьи
Во время настройки правил iptables очень часто возникает необходимость посмотреть, какие из соединений отбрасываются (дропаются, фильтруются). В этой статье мы рассмотрим настройки для iptables, чтобы отфильтрованные фаерволом пакеты, сохранялись в отдельный лог файл для дальнейшего анализа.
Информация в данной статье написана для случая, когда политика по-умолчанию для цепочек INPUT и OUTPUT установлена на DROP. Т.е. любые соединения, для которых не указаны разрешающие правила — будут блокироваться фаерволом. Команды, которые приведены ниже, просто позволяют прежде чем заблокировать такое соединение/пакет, сначала записать информацию о нем в лог-файл, а уже потом заблокировать. Если же у вас политика по-умолчанию установлена на ACCEPT, то описанные ниже команды вам не подойдут, т.к. введя их, вы просто заблокируете доступ себе и другим.
Описание
Чтобы это работало, мы должны создать конфигурационный файл для rsyslog (считаем, что он у вас уже установлен в системе).
touch /etc/rsyslog.d/10-iptables.conf
Открываем его любым текстовым редактором, например, nano и вносим туда следующие строчки:
:msg, contains, "IPTables-Dropped: " -/var/log/iptables.log
& ~
Сохраняем изменения в файле. Первая строчка говорит rsyslog, что нужно искать в логе фразу «IPTables-Dropped: «, и когда он её находит, то переносит в файл /var/log/iptables.log
Вторая строчка просто дает понять rsyslog, чтобы найденные строки, подходящие под условия, не дублировались в основной лог /var/log/messages.
Перезапускаем rsyslog:
service rsyslog restart
Все, подготовительный этап, позволяющий писать лог iptables в отдельный файл мы сделали. Можно его не делать и тогда все записи будут появляться в /var/log/messages, но ИМХО это не очень удобно.
Переходим ко второму этапу, непосредственной настройке iptables.
Если у вас уже есть написанные правила для iptables, то все настройки, приведенные ниже, необходимо дописывать в самый низ конфигурации.
Возможны три варианта настройки:
Вариант 1 — Записываем в лог (логируем) только входящие отброшенные соединения/пакеты:
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
Разберем что же означает каждая из команд в примере выше:
iptables -N LOGGING: Создаем новую цепочку LOGGING
iptables -A INPUT -j LOGGING: Все входящие пакеты (для которых не сработало ни одно из ваших собственных правил и которые из-за политики DROP все-равно должны заблокироваться) попадают в цепочку LOGGING
iptables -A LOGGING -m limit —limit 2/min -j LOG —log-prefix «IPTables-Dropped: » —log-level 4: Логируем все входящие пакеты в syslog (/var/log/messages).
iptables -A LOGGING -j DROP: Отбрасываем все пакеты, которые пришли в цепочку LOGGING.
Вариант 2 — Записываем в лог только исходящие отброшенные соединения/пакеты:
Все тоже самое, что и в примере выше, за исключением цепочки, теперь используем OUTPUT вместо INPUT.
iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
Вариант 3 — Записываем в лог все исходящие и входящие отброшенные соединения/пакеты:
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
IPTables Таблицы, цепочки, основы правил
Брандмауэр
iptables используется для управления фильтрацией пакетов и правилами NAT. IPTables поставляется со всеми дистрибутивами Linux. Понимание того, как установить и настроить iptables, поможет вам эффективно управлять брандмауэром Linux.
Инструмент
iptables используется для управления правилами брандмауэра Linux. На первый взгляд iptables может показаться сложным (или даже запутанным). Но как только вы поймете основы работы iptables и его структуры, чтение и запись правил брандмауэра iptables станет легким.
Эта статья является частью серии руководств по iptables. Это первая статья из этой серии.
В этой статье объясняется, как устроена iptables, и объясняются основы работы с таблицами, цепочками и правилами iptables.
На высоком уровне iptables может содержать несколько таблиц. Таблицы могут содержать несколько цепочек. Цепочки могут быть встроенными или определяемыми пользователем. Цепочки могут содержать несколько правил. Для пакетов определены правила.
Итак, структура такая: iptables -> Tables -> Chains -> Rules.Это определено на следующей диаграмме.
Рис. : Таблица, цепочка и структура правил IPTables
Повторим, что таблицы — это набор цепочек, а цепочки — это набор правил межсетевого экрана.
I. IPTABLES ТАБЛИЦЫ И ЦЕПИ
IPTables имеет следующие 4 встроенных таблицы.
1. Таблица фильтров
Фильтр — это таблица по умолчанию для iptables. Итак, если вы не определяете собственную таблицу, вы будете использовать таблицу фильтров.Таблица фильтров Iptables имеет следующие встроенные цепочки.
- INPUT цепочка — входящая в брандмауэр. Для пакетов, приходящих на локальный сервер.
- Цепочка OUTPUT — исходящая от межсетевого экрана. Для пакетов, генерируемых локально и исходящих с локального сервера.
- FORWARD chain — Пакет для другой сетевой карты на локальном сервере. Для пакетов, маршрутизируемых через локальный сервер.
2. Таблица NAT
Таблица NAT
Iptable имеет следующие встроенные цепочки.
- Цепочка PREROUTING — изменяет пакеты перед маршрутизацией.Т.е. трансляция пакетов происходит сразу после того, как пакет поступает в систему (и перед маршрутизацией). Это помогает преобразовать IP-адрес назначения пакетов во что-то, что соответствует маршрутизации на локальном сервере. Это используется для DNAT (NAT назначения).
- Цепочка POSTROUTING — изменяет пакеты после маршрутизации. т.е. трансляция пакетов происходит, когда пакеты покидают систему. Это помогает преобразовать IP-адрес источника пакетов во что-то, что может соответствовать маршрутизации на сервере назначения.Это используется для SNAT (исходный NAT).
- OUTPUT chain — NAT для локально сгенерированных пакетов на межсетевом экране.
3. Стол-калорифера
Таблица Mangle
Iptables предназначена для специализированного изменения пакетов. Это изменяет биты QOS в заголовке TCP. Таблица Mangle имеет следующие встроенные цепочки.
- Цепь PREROUTING
- ВЫХОДНАЯ ЦЕПЬ
- Цепь FORWARD
- ВХОДНАЯ ЦЕПЬ
- Цепь POSTROUTING
4. Необработанный стол
Таблица Raw
Iptable предназначена для исключений конфигурации.Необработанная таблица имеет следующие встроенные цепочки.
- Цепь PREROUTING
- ВЫХОДНАЯ ЦЕПЬ
На следующей диаграмме показаны три важные таблицы в iptables.
Рис : Встроенные таблицы IPTables
II. ПРАВИЛА IPTABLES
Ниже приведены ключевые моменты, о которых следует помнить при использовании правил iptables.
- Правила содержат критерий и цель.
- Если критерии совпадают, он переходит к правилам, указанным в цели (или), выполняет специальные значения, указанные в цели.
- Если критерии не совпадают, выполняется переход к следующему правилу.
Целевые значения
Ниже приведены возможные специальные значения, которые можно указать в цели.
- ПРИНЯТЬ — Межсетевой экран примет пакет.
- DROP — брандмауэр отбросит пакет.
- ОЧЕРЕДЬ — Межсетевой экран передает пакет в пользовательское пространство.
- RETURN — брандмауэр прекратит выполнение следующего набора правил в текущей цепочке для этого пакета.Управление будет возвращено вызывающей цепочке.
Если вы выполните команду iptables –list (или) service iptables status, вы увидите все доступные правила брандмауэра в вашей системе. Следующий пример iptable показывает, что в этой системе не определены правила брандмауэра. Как видите, он отображает таблицу ввода по умолчанию с цепочкой ввода по умолчанию, цепочкой пересылки и цепочкой вывода.
# iptables -t фильтр --list Цепочка INPUT (политика ACCEPT) target prot opt источник назначения Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения Цепочка ВЫВОДА (политика ПРИНЯТЬ) target prot opt источник назначение
Для просмотра таблицы переключения выполните следующие действия.
# iptables -t mangle --list
Для просмотра таблицы nat выполните следующие действия.
# iptables -t nat --list
Для просмотра исходной таблицы выполните следующие действия.
# iptables -t raw --list
Примечание. Если вы не укажете параметр -t, отобразится таблица фильтров по умолчанию. Итак, обе следующие команды одинаковы.
# iptables -t фильтр --list (или) # iptables --list
В следующем примере iptable показано, что есть некоторые правила, определенные во входной, прямой и выходной цепочке таблицы фильтров.
# iptables --list Цепочка INPUT (политика ACCEPT) num target prot opt источник назначения 1 RH-Firewall-1-INPUT все - 0.0.0.0/0 0.0.0.0/0 Цепочка ВПЕРЕД (политика ПРИНЯТЬ) num target prot opt источник назначения 1 RH-Firewall-1-INPUT все - 0.0.0.0/0 0.0.0.0/0 Цепочка ВЫВОДА (политика ПРИНЯТЬ) num target prot opt источник назначения Цепочка RH-Firewall-1-INPUT (2 ссылки) num target prot opt источник назначения 1 ПРИНЯТЬ все - 0.0,0.0 / 0 0,0.0.0/0 2 ПРИНЯТЬ icmp - 0.0.0.0/0 0.0.0.0/0 icmp тип 255 3 ПРИНЯТЬ esp - 0.0.0.0/0 0.0.0.0/0 4 ПРИНЯТЬ ah - 0.0.0.0/0 0.0.0.0/0 5 ПРИНЯТЬ udp - 0.0.0.0/0 224.0.0.251 UDP dpt: 5353 6 ПРИНЯТЬ udp - 0.0.0.0/0 0.0.0.0/0 UDP dpt: 631 7 ПРИНЯТЬ tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 631 8 ПРИНЯТЬ все - 0.0.0.0 / 0 0.0.0.0/0 состояние СВЯЗАННО, УСТАНОВЛЕНО 9 ПРИНЯТЬ tcp - 0.0.0.0/0 0.0.0.0/0 состояние NEW tcp dpt: 22 10 REJECT all - 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host -hibited
Правила в выходных данных команды iptables –list содержат следующие поля:
- num — Номер правила в конкретной цепочке
- target — Специальная целевая переменная, о которой мы говорили выше
- prot — Протоколы.tcp, udp, icmp и т. д.,
- opt — специальные параметры для этого конкретного правила.
- source — IP-адрес источника пакета
- destination — IP-адрес назначения для пакета
Если вам понравилась эта статья, возможно, вам также понравится ..
16 советов и приемов iptables для системных администраторов
Современные ядра Linux поставляются с инфраструктурой фильтрации пакетов под названием Netfilter. Netfilter позволяет разрешать, отбрасывать и изменять входящий и исходящий трафик из системы.Инструмент командной строки пользовательского пространства iptables основывается на этой функциональности и обеспечивает мощный межсетевой экран, который можно настроить, добавив правила для формирования политики межсетевого экрана. iptables может быть очень сложным из-за своего богатого набора возможностей и необычного синтаксиса команд. Давайте рассмотрим некоторые из них и разработаем набор советов и приемов iptables для многих ситуаций, с которыми может столкнуться системный администратор.
Избегайте блокировки
Сценарий: вы собираетесь внести изменения в правила политики iptables на основном сервере вашей компании.Вы хотите избежать блокировки себя и, возможно, всех остальных. (Это требует времени и денег и заставляет ваш телефон звенеть от стены.)
Совет №1: сделайте резервную копию конфигурации iptables, прежде чем начинать с ней работать.
Создайте резервную копию своей конфигурации с помощью команды:
/ sbin / iptables-save> / root / iptables-works
Совет № 2: Еще лучше, включите метку времени в имя файла.
Добавьте отметку времени с помощью команды:
/ sbin / iptables-save> / root / iptables-works-`date +% F`
Вы получаете файл с именем вроде:
/ корень / iptables-works-2018-09-11
Если вы сделаете что-то, что мешает вашей системе работать, вы можете быстро восстановить ее:
/ sbin / iptables-restore root / iptables-works-2018-09-11
Совет № 3: Каждый раз, когда вы создаете резервную копию политики iptables, создавайте ссылку на файл, содержащую слово «последний» в имени.
ln –s / root / iptables-works-`date +% F` / root / iptables-works-latest
Совет № 4: Поместите определенные правила вверху политики и общие правила внизу.
Избегайте общих правил, подобных этому в верхней части правил политики:
iptables -A INPUT -p tcp --dport 22 -j DROP
Чем больше критериев вы укажете в правиле, тем меньше у вас будет шансов заблокировать себя. Вместо общего правила, приведенного выше, используйте что-то вроде этого:
iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0 / 8 –d 192.168.100.101 -j DROP
Это правило добавляет ( -A ) к цепочке INPUT , которое будет отбрасывать DROP любых пакетов, исходящих из блока CIDR 10.0.0.0/8 на TCP ( -p tcp ) порт 22 ( --dport 22 ), предназначенный для IP-адреса 192.168.100.101 ( -d 192.168.100.101 ).
Есть много способов уточнить детали. Например, использование -i eth0 ограничит обработку одной сетевой картой на вашем сервере.Таким образом, действия фильтрации не будут применять правило к eth2 .
Совет № 5: Добавьте свой IP-адрес в белый список в верхней части правил политики.
Это очень эффективный метод, чтобы не блокировать себя. Все остальные, не так много.
iptables -I INPUT -s <ваш IP> -j ПРИНЯТЬ
Вам нужно указать это как правило first , чтобы оно работало правильно. Помните, что -I вставляет его как первое правило; -A добавляет его в конец списка.
Совет № 6: Знайте и поймите все правила своей текущей политики.
Во-первых, не совершить ошибку - это половина дела. Если вы понимаете, как работает ваша политика iptables, это упростит вам жизнь. Если необходимо, нарисуйте блок-схему. Также помните: то, что делает политика и что она должна делать, может быть двумя разными вещами.
Настройка политики брандмауэра рабочей станции
Сценарий: вы хотите настроить рабочую станцию с ограничительной политикой межсетевого экрана.
Совет №1: Установите политику по умолчанию как DROP.
# Установить политику по умолчанию DROP
* filter
: INPUT DROP [0: 0]
: FORWARD DROP [0: 0]
: OUTPUT DROP [0: 0]
Совет № 2: Разрешите пользователям минимальный объем услуг, необходимых для выполнения их работы.
Правила iptables должны разрешать рабочей станции получать IP-адрес, сетевую маску и другую важную информацию через DHCP ( -p udp --dport 67:68 --sport 67:68 ). Для удаленного управления правила должны разрешать входящий SSH ( --dport 22 ), исходящую почту ( --dport 25 ), DNS ( --dport 53 ), исходящий ping ( -p icmp ) , Протокол сетевого времени ( --dport 123 --sport 123 ) и исходящий HTTP ( --dport 80 ) и HTTPS ( --dport 443 ).
# Установить политику по умолчанию DROP
* фильтр
: INPUT DROP [0: 0]
: FORWARD DROP [0: 0]
: OUTPUT DROP [0: 0]# Принять любые связанные или установленные соединения
-I INPUT 1 -m state --state RELATED, ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED, ESTABLISHED -j ACCEPT# Разрешить весь трафик на интерфейсе обратной связи
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT# Разрешить исходящий DHCP-запрос
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT# Разрешить входящий SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT# Разрешить исходящий email
-A ВЫХОД -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT# Исходящие запросы DNS
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT# Исходящие запросы PING
-A OUTPUT –o eth0 -p icmp -j ACCEPT# Исходящие запросы сетевого времени (NTP)
-A OUTPUT –o eth0 -p udp --dport 123 - sport 123 -j ACCEPT# Исходящий HTTP 900 15 -A ВЫХОД -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state НОВИНКА -j ACCEPTCOMMIT
Ограничить диапазон IP-адресов
Сценарий: генеральный директор вашей компании считает, что сотрудники проводят слишком много времени в Facebook и не выполняют никакой работы.Генеральный директор говорит ИТ-директору, чтобы сотрудники не тратили время на Facebook. Директор по информационным технологиям просит директора по информационной безопасности предпринять какие-либо меры, чтобы сотрудники теряли время на Facebook. В конце концов, вам говорят, что сотрудники тратят слишком много времени на Facebook, и вы должны что-то с этим делать. Вы решили заблокировать любой доступ к Facebook. Сначала узнайте IP-адрес Facebook с помощью команд host и whois .
host -t a www.facebook.com
www.facebook.com - это псевдоним для star.c10r.facebook.com.
star.c10r.facebook.com имеет адрес 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum: 31.13.64.0 - 31.13.127.255
Затем преобразуйте этот диапазон в нотацию CIDR с помощью страницы преобразования CIDR в IPv4. Получаем 31.13.64.0/18 . Чтобы предотвратить исходящий доступ к www.facebook.com, введите:
iptables -A ВЫХОД -p tcp -i eth0 –o eth2 –d 31.13.64.0/18 -j DROP
Регулировка по времени
Сценарий: реакция сотрудников компании на отказ в доступе к Facebook заставляет генерального директора немного смягчаться (это и его помощник по административным вопросам, напоминающий ему, что она постоянно обновляет ЕГО страницу в Facebook).Генеральный директор решает разрешить доступ к Facebook.com только в обеденное время (с 12:00 до 13:00). Предполагая, что политика по умолчанию - DROP, используйте временные функции iptables, чтобы открыть доступ.
iptables –A ВЫХОД -p tcp -m multiport --dport http, https -i eth0 -o eth2 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d
31.13.64.0 / 18 -j ПРИНЯТЬ
Эта команда устанавливает политику, разрешающую ( -j ACCEPT ) http и https ( -m multiport --dport http, https ) с полудня ( --timestart 12:00 ) до 13 часов вечера ( --timestop 13:00 ) в Facebook.com ( –d 31.13.64.0/18 ).
Регулировать по времени - Возьмите 2
Сценарий
: во время планового простоя для обслуживания системы вам необходимо запретить весь трафик TCP и UDP между 2 и 3 часами ночи, чтобы задачи обслуживания не были прерваны входящим трафиком. Это займет два правила iptables:
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j КАПЛЯ
Согласно этим правилам, трафик TCP и UDP ( -p tcp и -p udp ) запрещен ( -j DROP ) между 2 часами ночи ( --timestart 02:00 ) и 3 часами ночи ( - timestop 03:00 ) на входе ( -A INPUT ).
Ограничение соединений с iptables
Сценарий: ваши подключенные к Интернету веб-серверы подвергаются атакам злоумышленников со всего мира, пытающихся их DoS (отказ в обслуживании). Чтобы смягчить эти атаки, вы ограничиваете количество подключений, которые один IP-адрес может иметь к вашему веб-серверу:
iptables –A INPUT –p tcp –syn -m multiport -–dport http, https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
Давайте посмотрим, что делает это правило.Если хост устанавливает более 20 ( -–connlimit-выше 20 ) новых подключений ( –p tcp –syn ) в минуту к веб-серверам ( -–dport http, https ), отклоните новое подключение. ( –j REJECT ) и сообщите подключающемуся хосту, что вы отклоняете соединение ( -–reject-with-tcp-reset ).
Монитор правил iptables
Сценарий
: Поскольку iptables работает по принципу «первое совпадение побеждает», когда пакеты пересекают правила в цепочке, часто совпадающие правила должны быть в верхней части политики, а менее часто совпадающие правила должны быть ближе к нижней.Как узнать, какие правила выполняются больше всего или меньше всего, чтобы их можно было расположить ближе к вершине или внизу?
Совет №1: Посмотрите, сколько раз каждое правило было выполнено.
Используйте эту команду:
iptables -L -v -n –line-numbers
Команда выведет список всех правил в цепочке ( -L ). Поскольку цепочка не указана, все цепочки будут перечислены с подробным выводом ( -v ), показывающим счетчики пакетов и байтов в числовом формате ( -n ) с номерами строк в начале каждого правила, соответствующими положению этого правила в цепь.
Используя счетчики пакетов и байтов, вы можете упорядочить правила, которые чаще всего проходят, вверху, а правила, которые менее часто проходят, - вниз.
Совет № 2: Удалите ненужные правила.
Какие правила вообще не соответствуют ни одному? Это были бы хорошие кандидаты для исключения из политики. Вы можете узнать это с помощью этой команды:
iptables -nvL | grep -v "0 0"
Примечание: это не табуляция между нулями; между нулями пять пробелов.
Совет № 3: Следите за тем, что происходит.
Вы хотите отслеживать, что происходит с iptables в реальном времени, например, с top . Используйте эту команду для динамического мониторинга активности iptables и отображения только тех правил, которые активно просматриваются:
часы --interval = 5 'iptables -nvL | grep -v "0 0" '
смотреть работает 'iptables -nvL | grep -v "0 0" ' каждые пять секунд и отображает первый экран вывода.Это позволяет вам наблюдать за изменением количества пакетов и байтов с течением времени.
Отчет по iptables
Сценарий: Ваш менеджер считает, что этот брандмауэр iptables просто великолепен, но ежедневный отчет о действиях был бы еще лучше. Иногда важнее написать отчет, чем выполнить работу.
Используйте фильтр пакетов / брандмауэр / анализатор журнала IDS FWLogwatch для создания отчетов на основе журналов брандмауэра iptables. FWLogwatch поддерживает множество форматов журналов и предлагает множество вариантов анализа.Он генерирует ежедневные и ежемесячные сводки файлов журнала, позволяя администратору безопасности высвободить значительное время, лучше контролировать безопасность сети и уменьшить количество незамеченных атак.
Вот пример вывода FWLogwatch:
Больше, чем просто ПРИНЯТЬ и ОТКАЗАТЬ
Мы рассмотрели множество аспектов iptables, от проверки того, что вы не блокируете себя при работе с iptables, до мониторинга iptables и визуализации активности межсетевого экрана iptables.Это поможет вам понять еще больше советов и приемов iptables.
Время работы межсетевого экрана и безопасность с iptables
Установите и обслуживайте брандмауэр Linux с этим эффективным
приложение
Альфредо Деза
Опубликовано 13 декабря 2011 г. / Обновлено: 4 января 2012 г.
Iptables - это приложение, позволяющее управлять таблицами в
Брандмауэр ядра Linux.Вам не нужны предварительные знания о ядре, или
фактические таблицы в нем, для модификаций межсетевого экрана и общей системы
административные задачи.
В некоторых дистрибутивах Linux iptables включен по умолчанию. это
неопытным пользователям часто рекомендуется полностью отключить iptables
чтобы избежать проблем с сетью. Эта статья поможет вам быстро начать работу
и манипулируйте iptables в соответствии с вашими потребностями.
Иногда iptables используется для обозначения уровня ядра Linux.
составная часть.В этой статье все, что связано с iptables , будет
конкретно относится к приложению, которое контролирует протоколы в
Дистрибутив Linux, такой как ipv4, ipv6 и таблицы ARP.
Подобно другим приложениям Linux, вы можете настроить iptables в
интерфейс командной строки или в текстовом файле, что позволяет редактировать с любым
Текстовый редактор. Хотя его легко изменить, он может показаться неудобным из-за
средний брандмауэр, где большая часть взаимодействия с настройками и
Конфигурация осуществляется в графическом интерфейсе.Есть приложения
использование iptables для управления брандмауэром через графические интерфейсы, но это
В статье будет рассказано о взаимодействии с iptables в его родной среде:
терминал Linux.
Наличие уровня комфорта при использовании терминала Linux (также называемого
консоли или эмулятора терминала) поможет разработчикам воспользоваться преимуществами
следующие примеры и конфигурации. Интерфейс командной строки - это
основной способ взаимодействия с iptables, а терминал Linux - это
приложение, разрешающее доступ к этому интерфейсу.
Применяемые правила в основном очень удобочитаемы и легко переносятся на
другие серверы. Эта функция значительно экономит время при работе с
неотвечающее оборудование.
Требования к приложениям
Хотя iptables является основной темой этой статьи, и это
возможно, уже установлен в вашей среде, мы также будем использовать
nmap , еще одно мощное приложение.
Перед продолжением убедитесь, что nmap установлен.Вы можете установить
этот эффективный сетевой сканер в дистрибутиве Debian / Ubuntu Linux.
Листинг 1. Установка Nmap на
Debian / Ubuntu
sudo apt-get install nmap
Получить
запущен
Почти все дистрибутивы Linux поставляются с установленными и готовыми iptables
использовать. Убедитесь, что у вас iptables
доступна в предпочитаемой вами оболочке. В этой статье используется
Соглашения Debian / Ubuntu по настройке iptables.
Поскольку мы собираемся вносить изменения на уровне ядра, убедитесь, что
у вас есть привилегии root.
В листинге 2 показаны правила, применяемые в настоящее время.
к серверу. Листинг 2 будет повторяться во время статьи для проверки.
какие правила используются в настоящее время, и для проверки успешных изменений.
Листинг 2. Применяется в настоящее время.
правила
root @ desktop: ~ # iptables -L Цепочка INPUT (политика ACCEPT) target prot opt источник назначения Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения Цепочка ВЫВОДА (политика ПРИНЯТЬ) target prot opt source destination
В листинге 2 мы инструктируем iptables перечислить все
правила, применяемые в настоящее время к брандмауэру.Это достигается
-L флаг.
В выходных данных также упоминается Цепочка
. Подумайте об iptable
цепочки как разделы в брандмауэре, разрешающие определенный тип трафика. За
например, чтобы заблокировать весь трафик из частной сети в Интернет,
это правило будет установлено в разделе ВЫХОД. Точно так же любое правило
влияющие на входящий трафик, будут перечислены в цепочке INPUT.
Каждая из трех цепочек применяется к одному типу активности брандмауэра.На данный момент еще ничего не установлено. Это означает, что нет
ограничения, и весь сетевой трафик может приходить и уходить.
-
Цепочка INPUT
-
Chain FORWARD
и -
Chain OUTPUT
Прежде чем продолжить, необходимо проверить, какие порты открыты на
сервер для сравнения после того, как он заблокирован. Как упоминалось ранее,
nmap - мощный инструмент командной строки,
информация о безопасности.В листинге 3 показан результат
из nmap на удаленном сервере в сети.
Листинг 3. Сетевое сканирование.
с nmap
~ $ nmap 10.0.0.120 Запуск Nmap 5.35DC1 (http://nmap.org) в 21.11.2010 20:44 EST Отчет сканирования Nmap для 10.0.0.120 Хост работает (задержка 0,012 с). Не показано: 991 закрытый порт ПОРТОВАЯ ГОСУДАРСТВЕННАЯ СЛУЖБА 22 / TCP открыть SSH 25 / tcp открыть smtp 53 / tcp открытый домен 80 / tcp открыть http 631 / tcp открыть ипп 3306 / tcp открыть mysql 4001 / tcp открыто неизвестно 5900 / tcp открытый vnc 8080 / tcp открыть http-прокси Выполнено Nmap: 1 IP-адрес (1 хост включен) просканирован за 6.57 секунд
Это много открытых портов! Всего за несколько шагов вы узнаете, как
вышеизложенные изменения после настройки iptables.
Virtual не всегда лучше
По мере изучения iptables, возможно, будет лучше следовать примерам
в этой статье на компьютере с установленным Linux, а не на
Виртуальная машина (ВМ). Сетевые политики между хостом виртуальной машины и виртуальной машиной
гость может затруднить отладку, и некоторые примеры будут
не работает.Начните с физической среды, а затем продолжайте работать
вплоть до более сложных виртуальных сред.
Правила брандмауэра можно применять и добавлять или редактировать вручную в
простой текстовый файл и исходный код. Я предпочитаю использовать текстовый файл для применения изменений.
В большинстве случаев синтаксические ошибки легче обнаружить, если они написаны в тексте.
файл. Еще одна проблема возникает при редактировании правил путем добавления правил
напрямую, то есть эти правила не будут сохранены при перезагрузке сервера.Перед редактированием файла скажем iptables экспортировать текущие правила.
так что этот файл становится нашим исходным шаблоном. См. Список
4.
Листинг 4. Сохранение правил в файл
root @ desktop: ~ # iptables-save> /etc/iptables.rules корень @ рабочий стол: ~ # cat /etc/iptables.rules # Создано с помощью iptables-save v1.4.4, вс 21 ноября, 14:48:48 2010 *фильтр : ВВОД ПРИНЯТЬ [732: 83443] : FORWARD ACCEPT [0: 0] : OUTPUT ACCEPT [656: 51642] COMMIT # Завершено 21 ноября, 14:48:48 2010
Я использовал команду iptables-save
и перенаправил
вывод в текстовый файл в каталоге «/ etc».Я объединил
файл, чтобы вы могли видеть, как файл выглядит на моем компьютере.
Одним из первых требований является разрешение установленных подключений к
получать трафик. Вам это нужно, когда вы хотите, чтобы что-нибудь было за брандмауэром
(в частной сети), чтобы иметь возможность отправлять и получать сетевые данные без
ограничения. В листинге 5 мы выпустим прямой
правило в iptables, а затем проверьте состояние межсетевого экрана.
Листинг 5. Правило установленных сеансов
root @ desktop: ~ # iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT корень @ рабочий стол: ~ # iptables -L Цепочка INPUT (политика ACCEPT) target prot opt источник назначения ПРИНЯТЬ все - где угодно и где угодно ctstate СВЯЗАН, УСТАНОВЛЕН Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения Цепочка ВЫВОДА (политика ПРИНЯТЬ) target prot opt source destination
Чтобы лучше понять, что было выдано, давайте разберем команду
и объясните каждый из них:
-A INPUT
: Добавьте это правило к
INPUT
цепь.
-m conntrack
: Подберите следующее соединение
отслеживание текущего пакета / соединения.
-ctstate ESTABLISHED, RELATED
: Состояния подключения
к которому должно применяться правило. В этом случае
УСТАНОВЛЕННОЕ соединение
означает соединение, которое
видел пакеты в обоих направлениях и
СВЯЗАННЫЙ Тип
означает, что пакет начинается
новое соединение, но оно связано с существующим соединением.
-j ACCEPT
: сообщает брандмауэру принять
соединения, описанные ранее. Еще одна допустимая настройка для
-j
флаг будет
DROP
Я также подключаюсь к этому серверу через протокол SSH, поэтому перед
блокируя брандмауэр, правило в листинге 6
собираюсь разрешить весь входящий трафик SSH. Указываю тип сети
протокол (tcp) и порт, который удобно связан с SSH
оказание услуг.При необходимости вы можете указать номер порта напрямую.
Листинг 6. Принятие входящих
Подключения SSH
root @ desktop: ~ # iptables -A INPUT -p tcp --dport ssh -j ACCEPT корень @ рабочий стол: ~ # iptables -L Цепочка INPUT (политика ACCEPT) target prot opt источник назначения ПРИНЯТЬ все - где угодно и где угодно ctstate СВЯЗАН, УСТАНОВЛЕН ПРИНЯТЬ tcp - в любом месте tcp dpt: ssh Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения Цепочка ВЫВОДА (политика ПРИНЯТЬ) target prot opt source destination
Наконец, давайте настроим брандмауэр на блокировку всего остального.Возьмите специальные
Будьте внимательны при вводе следующей команды. Если он размещен перед всеми
другие правила, он будет блокировать любой трафик на сервер. Iptables
читает правила процедурно (сверху вниз) и после правила
совпадает, больше ничего не оценивается.
Листинг 7. Блокировка всех
входящий трафик
root @ desktop: ~ # iptables -A INPUT -j DROP корень @ рабочий стол: ~ # iptables -L Цепочка INPUT (политика ACCEPT) target prot opt источник назначения ПРИНЯТЬ все - где угодно и где угодно ctstate СВЯЗАН, УСТАНОВЛЕН ПРИНЯТЬ tcp - в любом месте tcp dpt: ssh УДАЛИТЬ все - где угодно и где угодно Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения Цепочка ВЫВОДА (политика ПРИНЯТЬ) target prot opt source destination
В листинге 7 показано, что правила установлены правильно
порядок, но чтобы иметь возможность вносить конкретные изменения, давайте сохраним правила в
file и объедините его, чтобы проверить содержимое, как в листинге 8.
Листинг 8. Проверка конфигурации межсетевого экрана
root @ desktop: ~ # iptables-save> /etc/iptables.rules корень @ рабочий стол: ~ # cat /etc/iptables.rules # Создано с помощью iptables-save v1.4.4, вс 21 ноября, 15:10:42 2010 *фильтр : ВВОД ПРИНЯТЬ [1234: 120406] : FORWARD ACCEPT [0: 0] : OUTPUT ACCEPT [1522: 124750] -A INPUT -m conntrack --ctstate СВЯЗАН, УСТАНОВЛЕН -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 22 -j ПРИНЯТЬ -A INPUT -j DROP COMMIT # Завершено 21 ноября, 15:10:42 2010
Команда iptables- = save
подтолкнула наши изменения
в обычный текстовый файл.Это немного отличается от простого перечисления
rules в командной строке, но это то же самое. Как только
раньше у нас было три раздела: INPUT, FORWARD и OUTPUT. Правила, которые
изначально мы указали, что относятся к выходным соединениям, так что это раздел
где размещаются добавленные нами правила.
На этом этапе сервер заблокирован, и конфигурация сохранена.
в файл. Но что будет, когда мы выполним сканирование сети? Давайте работать
nmap еще раз для этого сервера и проверьте результаты, как показано
в листинге 9.
Листинг 9. Сканирование сети с помощью
заблокированный сервер
~ $ nmap 10.0.0.120 Запуск Nmap 5.35DC1 (http://nmap.org) в 21.11.2010 20:56 EST Примечание. Хост не работает. Если он действительно работает, но блокирует наши зонды ping, попробуйте -Pn Выполнено Nmap: 1 IP-адрес (0 подключенных хостов) просканирован за 3,04 секунды ~ $ nmap -Pn 10.0.0.120 Запуск Nmap 5.35DC1 (http://nmap.org) в 21.11.2010 20:56 EST Отчет сканирования Nmap для 10.0.0.120 Хост работает (задержка 0,017 с). Не показано: 999 фильтрованных портов ПОРТОВАЯ ГОСУДАРСТВЕННАЯ СЛУЖБА 22 / TCP открыть SSH Выполнено Nmap: 1 IP-адрес (1 хост включен) просканирован за 12.19 секунд
Обратите внимание, что была предпринята попытка сканирования IP-адреса, на котором расположен сервер,
но nmap не смог перечислить открытые порты. Это происходит потому, что
брандмауэр настроен таким образом, что он блокирует все, кроме
порт SSH, который у нас открыт. Поскольку Nmap использует определенную сеть
протокол, чтобы проверить, включен ли хост, он вернулся с пустыми руками. Второй
попытка была успешной и сообщает нам, что открыт только SSH и ничего
еще.С помощью всего трех правил нам удалось эффективно заблокировать
наш сервер.
Сохранение и восстановление правил
В предыдущем разделе мы сохранили правила в текстовый файл. Однако это
эффективно не сообщает серверу, что ему нужно загрузить правила. Также,
когда сервер перезагружается, он теряет все сделанные настройки.
Если вы добавляете правила в командной строке, вы уже должны быть знакомы
с сохранением этих изменений в текстовый файл.См. Список
10 для сохранения правил межсетевого экрана.
Листинг 10. Сохранение межсетевого экрана.
rules
iptables-save> /etc/iptables.rules
В зависимости от используемой операционной системы есть несколько способов получить
эти правила загружать при запуске. Легкий подход - перейти к одному
общедоступный интерфейс и скажите ему загрузить эти правила перед
перевод интерфейса в оперативный режим. См. Листинг 11.
Листинг 11. Интерфейс публичной сети.
правила загрузки
Здесь у нас есть интерфейс eth0 и мы объявляем правило для загрузки
правила перед запуском интерфейса. Как вы уже догадались, вы
эти команды можно использовать для обновления правил брандмауэра вручную с и на
файл.Аварийное восстановление
Не так давно я был в ситуации, когда я отвечал за межсетевой экран
прибор. Хотя я делал периодические резервные копии правил и
конфигурации были сделаны, я не мог понять, что эти резервные копии были в
проприетарный формат и читается только той моделью устройства, которая у меня была. Что
конечно, не проблема, если у вас есть два одинаковых прибора.
марка, модель и версия прошивки, но, как это принято на малых предприятиях,
бюджет не позволял ничего другого.Однажды это устройство решило больше не работать, и мне пришлось реализовать
что-то быстрое, что могло бы быть столь же надежным (или лучше). Я усвоил
способ, позволяющий иметь удобочитаемые конфигурации и возможность вернуться
быстро становятся очень важными активами.Если повезет, я нашел старый сервер в хорошем состоянии с парой
сетевых интерфейсов и смогла заменить мертвое устройство.До сих пор мы рассмотрели сценарии получения копии правил
это можно легко применить к любому серверу в случае сбоя.А теперь давай
сделать брандмауэр основным шлюзом для небольшого дома или бизнеса
сеть.Iptables в качестве основного
шлюзПока все, что мы рассмотрели, отлично, если вы запускаете iptables на
персональный компьютер, но это не имеет особого смысла, если весь офис нуждается в
поделиться подключением к Интернету. С помощью нескольких параметров конфигурации мы можем
настроить это правильно.Серверу шлюза необходимо как минимум два сетевых интерфейса.
может служить подходящим шлюзом.Один интерфейс будет «разговаривать» с
общедоступное подключение, а второй - к внутреннему, защищенному
один.Предположим, что сервер имеет два физических сетевых интерфейса:
eth0 (общедоступный) и eth2 (частный). Мне нужно их NAT
вместе, поэтому сетевой трафик беспрепятственно перетекает от одного интерфейса к
Другие. Подсеть частной сети - 192.168.0.0/255.255.0.0, так что посмотрим
как правило NAT с пересылкой будет выглядеть в листинге
12.Листинг 12. NAT и пересылка.
правилаiptables -A FORWARD -s 192.168.0.0/255.255.0.0 -i eth0 -o eth2 -m \ conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate СВЯЗАННЫЕ, УСТАНОВЛЕННЫЕ -j ПРИНЯТЬ iptables -A POSTROUTING -t nat -j MASQUERADEВ листинге 13 показано, как изменить некоторые настройки в
proc
для включения пересылки на сервере.Листинг 13. Включение
пересылка на сервереsh -c "echo 1> / proc / sys / net / ipv4 / ip_forward"Обратите внимание, что изменения
proc
являются непостоянными, поэтому любые
сделанные там изменения теряются после перезагрузки. Есть несколько способов сделать
уверен, что модификации сохранятся после перезагрузки. В Debian / Ubuntu
дистрибутивов добавьте строки для выполнения в /etc/rc.local .Наконец, как показано в листинге 14, есть еще один
изменение настройки, изменяющее параметры ядра во время выполнения (sysctl).Эти
конфигурации обычно уже находятся в sysctl.conf , но
закомментирован. Раскомментируйте их (или добавьте, если они не включены в
ваш раздача).Листинг 14. Перенаправление Sysctl / ядра.
net.ipv4.conf.default.forwarding = 1 net.ipv4.conf.all.forwarding = 1Порог кэша ARP
Запуск сервера Linux в качестве шлюза вызовет определенные проблемы с DNS. В
ядро предназначено для отображения IP-адресов, но оно имеет
максимальный уровень записей, не подходящих для интенсивного движения.когда
при достижении этого уровня запросы DNS не возвращаются к запрашивающему хосту. Пока
такой порог редко достигается с несколькими клиентами, более тридцати
клиенты, проходящие через этот брандмауэр, вызовут проблему.Среда может нуждаться в некоторой настройке, но значения, показанные в листинге 15, должны предоставить место перед просмотром
такие вопросы.Листинг 15. Увеличение ARP.
размер кешаecho 1024> / proc / sys / net / ipv4 / neigh / default / gc_thresh2 эхо 2048> / proc / sys / net / ipv4 / neigh / default / gc_thresh3 echo 4096> / proc / sys / net / ipv4 / neigh / default / gc_thresh4Следите за сообщениями, аналогичными приведенным в листинге 16, которые выдадут предупреждение, если необходимо
увеличьте только что указанные числа.Листинг 16. Системный журнал ARP.
предупреждения о переполнении кеша22 ноября, 11:36:16 ядро межсетевого экрана: [92374.325689] Переполнение таблицы соседей. 22 ноября, 11:36:20 ядро брандмауэра: [92379.089870] printk: 37 сообщений подавлено. 22 ноября, 11:36:20 Ядро межсетевого экрана: [92379.089876] Переполнение таблицы соседей. 22 ноября, 11:36:26 ядро межсетевого экрана: [92384.333161] printk: 51 сообщение подавлено. 22 ноября, 11:36:26 Ядро межсетевого экрана: [92384.333166] Переполнение таблицы соседей. 22 ноября, 11:36:30 ядро межсетевого экрана: [92389.084373] printk: 200 сообщений подавлены.Заключение
Мы выполнили несколько простых шагов, чтобы iptables работал правильно и
чтобы безопасно заблокировать сервер Linux. Применяемые правила должны обеспечивать
хорошее понимание того, что происходит на сервере, использующем iptables в качестве межсетевого экрана. я
рекомендую вам попробовать iptables, особенно если вы зависите от
устройства и хотите большего контроля и легко воспроизводимого, удобочитаемого
конфигурации.Хотя правила, которые мы использовали здесь, просты, полная гибкость и
сложность iptables выходит за рамки этой статьи. Здесь очень много
сложные правила, которые можно комбинировать, чтобы создать безопасный и управляемый
среда межсетевого экрана.Пример интересной расширенной функции в iptables - загрузка
балансировка. В большинстве случаев при изучении сети высокой доступности
services, вы ищете решения для балансировки нагрузки.С iptables это
может быть установлен и настроен с помощью random или nth
флаги.Вы также можете создавать правила, основанные на времени. В небольшом офисе это может
полезно ограничить определенные услуги с понедельника по пятницу, но пусть
брандмауэр ведет себя по-разному в субботу и воскресенье. Флаги, которые
могут работать в таком случае: --timestart , --timestop
и дня .