Просмотр всех правил iptables

145

Есть ли способ просмотреть iptablesправила более подробно?

Я недавно добавил маскарад к ряду IP-адресов:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

Который сделал то, что я хочу, но когда я использую:

iptables -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

Как я могу увидеть правила, включая те, которые я добавляю? (система CentOS 6)

TheLovelySausage
источник

Ответы:

117

При использовании -L, --listвозможности просмотра текущих правил брандмауэра, необходимо также указать соответствующую Netfilter таблицы (один из filter, nat, mangle, rawили security). Так что , если вы добавили правила для natтаблицы, вы должны явно указать эту таблицу , используя -t, --tableвариант:

iptables --table nat --list

Или используя варианты краткой формы:

iptables -t nat -L

Если вы не укажете конкретную таблицу, эта filterтаблица будет использоваться по умолчанию.


Для более быстрых результатов, это может быть полезно также включать в себя -n, --numericвозможность печатать цифровой IP - адрес вместо имен хостов, что позволяет избежать необходимости ждать обратного DNS - запросы.

Вы можете получить еще больше информации, в том числе -v, --verboseвариант.

Энтони Геогеган
источник
113

iptablesконтролирует пять различных таблиц: filter, nat, mangle, rawи security. При заданном вызове iptablesотображает или изменяет только одну из этих таблиц, указанную аргументом опции -t(по умолчанию filter). Чтобы увидеть полное состояние брандмауэра, вам нужно iptablesпоследовательно вызывать каждую из таблиц.

Кроме того, чтобы получить точное представление о правилах, вам нужно передать опцию -v. В противном случае в выводе пропускаются некоторые важные критерии, такие как интерфейс в правилах фильтрации (например, правило, которое говорит «принять все», и правило, которое говорит «принять все в интерфейсе обратной связи», можно различить только с помощью -v).

Таким образом, чтобы получить полное представление о правилах сетевого фильтра, вам нужно

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

Кроме того, вы можете вызвать iptables-saveпрограмму, которая отображает все правила во всех таблицах в формате, который может быть проанализирован iptables-restore. Этот формат также достаточно читабелен для людей (это в значительной степени похоже на серию вызовов iptablesкоманды для создания таблицы).

жилль
источник
56

iptables -Sделает трюк для меня. Кажется, список всех активных правил, даже когда служба выключена.

Со страницы руководства:

-S, --list-rules [цепочка] Распечатать все правила в выбранной цепочке. Если цепочка не выбрана, все цепочки печатаются как iptables-save. Как и любая другая команда iptables, она применяется к указанной таблице (по умолчанию используется фильтр).

Cameron
источник
Это действительно kwl-ответ, я также заметил, что состояние iptables / sbin / service дает аналогичный результат
TheLovelySausage
6
+1. На странице руководства это «не похоже»: «-S, ​​Распечатать все правила в выбранной цепочке. Если цепочка не выбрана, все цепочки будут напечатаны как iptables-save». Это тот, который мне обычно нужен.
Mike S
3
я не нашел, что это так. iptables -Sне показывает все мои правила nat, которые я вижу, когда я бегуiptables -L -t nat
mulllhausen
1
@MikeS На странице руководства ОБА команды работают только с указанной таблицей, фильтр по умолчанию. «Как и любая другая команда iptables, она применяется к указанной таблице (по умолчанию используется фильтр)». Формулировка в документации копируется почти одинаково для -S и -L, они отличаются только форматированием вывода, а не напечатанными правилами. Это верно, по крайней мере, в Ubuntu 16.04, которая в моей системе iptables v1.6.0.
Скотт
Согласитесь с @mulllhausen здесь. Мне нужно было "sudo iptables --table nat --list", чтобы показать мои правила таблицы nat. флаг "-S" сам по себе не показывал их.
Роберт Ошлер
15

Что я делаю, чтобы выполнить iptables-save > iptables_bckp, это будет резервное копирование всех слоев, затем отредактировать файл и восстановить Iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

Вы можете сделать двойное резервное копирование, чтобы изменить один из них, не теряя прошлые iptables.

Это личная практика, я не говорю, что это лучший способ, но для меня это прекрасно работает.

Попробуй

tachomi
источник
Это единственный реалистичный ответ, который я нашел к настоящему моменту, который на самом деле также сбрасывает все таблицы.
Крис Харрингтон
4

Команда iptablesтакже требует, чтобы вы указали таблицу, иначе она по умолчанию будет фильтровать таблицу. Так что попробуйте:

iptables -t nat -L
user425
источник
1

Вы можете использовать:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

Чтобы найти все таблицы и показать конкретное правило в таблице.

Тур Ле
источник
1

Если это действительно поможет, вы можете написать скрипт bash и поместить его в папку, на которую ссылается ваш путь, или ссылаться на нее через псевдоним в файле ~ / .bashrc.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

Не забудьте дать вашему новому скрипту bash права на выполнение с chmod

Если разрешение является проблемой, вам, возможно, придется добавить sudo перед всеми iptablesкомандами.

ob1
источник
0
iptables -vnxL
iptables -vnxL -tnat

возможно дополнительно, хотя они очень и очень редко используются:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
sjas
источник