Linux: IPTABLES – руководство: часть 2 – управление IPTABLES

Автор: | 19/10/2014
 

netfilter_logo

IPTABLES – руководство: часть 1 – основы IPTABLES

IPTABLES – руководство: часть 3 – параметры правил

IPTABLES – руководство: часть 4 – цели для правил

Управление IPTABLES

Просмотр правил

Просмотр текущих правил в таблице filter:

# iptables -t filter --list

Тоже самое – для остальных:

# iptables -t raw --list
# iptables -t nat --list
# iptables -t mangle --list

Или с опцией -L:

# iptables -t filter -L

Колонки тут:

  • num – номер правила текущей цепочке (см. дальше);
  • target – действие;
  • prot – протокол –  TCP, UDP, ICMP и т.д.;
  • opt – специальные опции для этого правила;
  • source – исходный IP-адрес пакетов;
  • destination –  IP-адрес назначения пакетов.

Далее я буду придерживаться коротких опций, вида -L, вместо длинных вида --list.

Просмотр списка правил и счётчиков:

# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
3313  199K DROP       all  --  any    any     37.9.53.253          anywhere

Кроме того, -v (verbose) выводит:

– имена интерфейсов для правил;
– заголовки TOS;
– дополнительные опции правила.

verbose так же можно использовать при создании-удалении правил и т.д.

Не переводить IP в имена хостов (FQDN):

# iptables -L -n

Выводить номер правила:

# iptables -L --line-numbers

Вывести правила только для INPUT, с отображением счётчиков, IP вместо имён хостов, и номерами правил:

# iptables -L INPUT -v -n --line-numbers

Просмотреть только список правил:

# iptables -S

Пример:

# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

Управление chains

Создать цепочку:

# iptables -N new_chain
# iptables -L new_chain
Chain new_chain (0 references)
target     prot opt source               destination

Переименовать цепочку:

# iptables -E new_chain old_chain
# iptables -L old_chain
Chain old_chain (0 references)
target     prot opt source               destination

Удалить цепочку:

# iptables -X old_chain
# iptables -L old_chain
iptables: No chain/target/match by that name.

Управление правилами

Добавить правило:

# iptables -A chain

Выполнит append к указанной chain, добавляя правило в конец списка. Пример:

# iptables -A INPUT -s 192.168.1.102 -j ACCEPT
# iptables -L INPUT
...
ACCEPT     all  --  192.168.1.102        anywhere

Вставить правило:

# iptables -I chain rulenum

Добавит правило в цепочку chain под номером rulenum (если такой номер уже есть – то на его место, а существующее – сдвинется “вниз”). Пример:

# iptables -I INPUT 1 -s 192.168.1.102 -j ACCEPT
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  192.168.1.102        anywhere

Заменить правило:

# iptables -R chain rulenum

Добавит правило в цепочку chain под номером rulenum (если такой номер уже есть – то на его место, а существующее -будет удалено). Пример:

# iptables -R INPUT 1 -s 192.168.1.102 -j DROP
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.102        anywhere

Удалить правило – вариант 1:

# iptables -D chain rulenum

Удалит правило в цепочке chain с номером rulenum. Пример:

# iptables -D INPUT 1
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Удалить правило – вариант 2:

# iptables -D chain rule

Удалит правило, которое соответствует rule. Пример:

# iptables -I INPUT 1 -s 192.168.1.102 -j DROP
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  192.168.1.102        anywhere
# iptables -D INPUT -s 192.168.1.102 -j DROP
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

Другие опции

Изменить правило по-умолчанию:

# iptables -P chain target

Например, для INPUT изменить ACCEPT на DROP:

# iptables -L
Chain INPUT (policy ACCEPT)
# iptables -P INPUT DROP
# iptables -L
Chain INPUT (policy DROP)

(будьте осторожны с этой опцией – можете лишиться доступа к серверу)

Сбросить (удалить) все правила во всех цепочка:

# iptables -F

Удалить правила только для цепочки INPUT:

# iptables -F INPUT

(будьте осторожны с этой опцией – можете лишиться доступа к серверу)

Обнулить все счётчики во всех правилах:

# iptables -Z

Пример:

# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
25  2352 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
# iptables -Z
# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
5   356 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED

Сохранение и восстановление правил

В CentOS правила хранятся в файле /etc/sysconfig/iptables:

# head /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Thu Oct 16 18:56:56 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [66:27636]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Для сохранения правил – выполните:

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Что бы сохранить правила в отдельный файл – используйте:

# iptables-save > /root/iptables_bkp

Что бы восстановить из него:

# iptables-restore < /root/iptables_bkp

С помощью опции -c команды iptables-save можно так же сохранить значения счётчиков, а с помощью -t tablename – сохранить определённую таблицу. Подробнее – смотрите тут>>>.