Перегляд усіх правил iptables


144

Чи є спосіб переглянути 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)

Відповіді:


116

При використанні -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).

Таким чином, для повного представлення правил netfilter вам потрібно

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-правила [ланцюг] Друкуйте всі правила у вибраному ланцюжку. Якщо ланцюг не вибраний, всі ланцюги друкуються як iptables-save. Як і будь-яка інша команда iptables, вона застосовується до вказаної таблиці (за замовчуванням використовується фільтр).


Це дійсно чудова відповідь, я також помітив, що / sbin / service iptables статус дає подібний вихід
TheLovelySausage

6
+1. Нічого "не здається" про це - зі сторінки man: "-S, Друк усіх правил у вибраному ланцюжку. Якщо не вибрано ланцюг, всі ланцюги друкуються як iptables-save". Це той, який мені зазвичай потрібен.
Майк S

3
я не знайшов це так. iptables -Sне показує всіх моїх правил nat, які я бачу, коли я бігаюiptables -L -t nat
mulllhausen

1
@MikeS На сторінці man команди BOTH працюють лише у вказаній таблиці, фільтруючи за замовчуванням. "Як і будь-яка інша команда 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.

Це особиста практика, я не кажу, що це найкращий спосіб, але для мене це чудово.

Спробуйте


Це єдина реальна відповідь, яку я знайшов поки що, що насправді скидає всі таблиці.
Кріс Харрінгтон

4

iptablesКоманда також вимагає вказати таблицю в іншому випадку за замовчуванням використовується для фільтрації таблиці. Тому спробуйте:

iptables -t nat -L

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командами.


0
iptables -vnxL
iptables -vnxL -tnat

можливо, додатково, хоча ці дуже рідко використовуються:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.