1

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

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

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

Содержание:

Ниже приведены параметры, которые могут использованы при создании правил и примеры с ними.

Основные параметры правил

-p, --protocol

— правило сработает для протокола; имя протокола должно быть указано явно, в видеTCP, UDP или ICMP, и должно присутствовать в файле

/etc/protocols

Примеры:

iptables -A INPUT -p tcp
-s, --src, --source

— фильтр по исходному (source — источник) адресу; можно указать как один адрес — так и подсеть; при установленном флаге ! перед указанием фильтра — значение будет инвертировано (обратное значение: —source адрес является >  —source ! адрес не является);

Примеры:

iptables -A INPUT -s 192.168.1.1
iptables -A INPUT -s ! 192.168.1.1
-d, --dst, --destination  - фильтр по адресу назначения (destination - назначение); остальные правила аналогичны --source

Пример:

iptables -A INPUT -d 192.168.1.1
-i, --in-interface

— правило для входящего трафика на указанном интерфейсе; используется только в цепочках INPUT, FORWAR и PREROUTING; допустимо использовать маски, например + — для всех интерфейсов, или eth+ — для всех интерфейсов eth0, eth1  и т.д.; допустимо использование инвертации;

Примеры:

iptables -A INPUT -i eth0
iptables -A INPUT -i eth+
iptables -A INPUT -i ! eth0
-o, --out-interface

— правило для исходящего трафика на указанном интерфейсе; остальные правила аналогичны

--in-interface

Параметры правил TCP

--sport, --source-port

— правило для порта-источника; если не указан порт — сработает для всех портов; можно указывать имя сервиса, либо порт в виде цифр; при указании имени сервиса — оно должно присутствовать в файле

/etc/services

использование портов вместо имён сервисов уменьшит нагрузку и ускорит обработку; допустимо указать диапазон портов, например 80:1024 — для всех портов от 80 до 1024 включительно, либо :80 — для всех портов от 0 до 80 включительно; допустимо инвертирование значения (!);

Примеры:

iptables -A INPUT -p tcp --sport 22
iptables -A INPUT -p tcp --sport ssh
iptables -A INPUT -p tcp --sport 80:1024
iptables -A INPUT -p tcp --sport :80
iptables -A INPUT -p tcp --sport ! 80
--dport, --destination-port

— правило для порта назначения; остальные правила аналогичны

--source-port

Примеры:

iptables -A INPUT -p tcp --dport 22
--tcp-flags

— правило сработает при наличии TCP-флагов;

Пример:

iptables -p tcp --tcp-flags SYN,FIN,ACK SYN

Параметры правил UDP

--sport, --source-port

— аналогично

--source-port

TCP

--dport, --destination-port

  — аналогично

--destination-port

TCP

Параметры правил ICMP

iptables -A INPUT -p icmp --icmp-type 8
--icmp-type

— проверяет соответствие типа ICMP — пакета;,

Дополнительные модули и параметры

Перечислю только наиболее интересные и используемые.

Модули подключаются с помощью опции

-m

.

Addrtype — фильтрация на основе типа адреса.

--src-type

— фильтр на основе типа адреса источника; можно указать один или несколько типов, разделив их запятой; допустимо инвертирование значения (!);

Примеры:

iptables -A INPUT -m addrtype --src-type UNICAST
iptables -A INPUT -m addrtype --src-type ! UNICAST
iptables -A INPUT -m addrtype --src-type MULTICAST, BROADCAST

—dst-type — то же самое, но для адреса получателя пакета;

Модуль Comment — добавление своего комментария к фильтру.

--comment

— добавление своего комментария к фильтру; максимальное значение — 256 символов;

Пример:

iptables -A INPUT -m comment --comment "This is comment"

Модуль Connmark — действие на основе метки, установленной действием

CONNMARK

или

MARK --set-mark

(действия смотрите в следующей части).

--mark

— фильтр на основе наличия указанной метки;

Примеры

iptables -A INPUT -m connmark --mark 12 -j ACCEPT

Модуль IP range — расширенный аналог

--source

и

--destination

. Позволяет указывать даиапазонIP.

--src-range

— диапазон IP источников; в отличии от

--source

и

--destination

позволяет указать диапазон между двумя конкретными адресами, а не подсетью; допустимо инвертирование (!);

Пример:

iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.13-192.168.2.19
--dst-range

— аналогично

--src-range

, но для адресов назначения;

Модуль Length — фильтрация по длине пакета.

--length

— допустимо указание диапазона размеров, например 1400:1500; допустимо инвертирование значения;

Примеры:

iptables -A INPUT -p tcp -m length --length 1400
iptables -A INPUT -p tcp -m length --length 1400:1500

Модуль Limit — ограничение количества пакетов в единицу времени. Хорошо описан тут>>>.

--limit

— средняя скорость заполнения «счётчика»; это же значение учитывается для уменьшения счётчика в

--limit-burst

указывается в виде число пакетов/время, где время указывается в виде /second /minute /hour /day; по-умолчанию 3 пакета в час, или 3/hour; использование инвертирования невозможно;

Пример:

iptables -A INPUT -m limit --limit 3/hour
--limit-burst

— максимальное значение счётчика для срабатывания правила;  каждый раз, когда значение 

--limit

превышается — счётчик увеличивается на единицу, пока не достигнет

--limit-burst

, после чего срабатывает правило, в котором используется

--limit-burst

Пример:

iptables -A INPUT -m limit --limit-burst 5

Модуль Mac — фильтрация по MAC (Ethernet Media Access Control).

--mac-source

MAC-адрес источника; допустимо использование инвертирования (!); используется только в цеочках P

REROUTING, FORWARD

и

INPUT

Примеры

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01

Модуль Mark — фильтр на основе метки (действия 

CONNMARK

 и

MARK

см. в следующем посте).

--mark 

— метка, установленная

MARK

Пример:

iptables -t mangle -A INPUT -m mark --mark 1

Модуль Multiport — фильтр по нескольким портам. В отличии от

--sport

  допускает использование нескольких независимых портов, а не диапазона.

--source-port

— список портов источника; максимум 15 значений, разделённых запятыми; должен использоваться только с

-p tcp

или

-p udp

Пример:

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
--destination-port

— аналогично

--source-port

, но для портов назначения;

Пример:

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
--port

— аналогично для обоих значений

--source-port

  и

--destination-port

, для обоих направлений; сработает только в случае, если порт источника и порт назначения идентичны;

Пример:

iptables -A INPUT -p tcp -m multiport --port 22,53,80,110

Модуль Owner — фильтры на основе владельца пакета.

--cmd-owner

— фильтр по имени сервиса, который сгенерировал пакет; допустимо использование инвертации с помощью(!);

Пример:

iptables -A OUTPUT -m owner --cmd-owner httpd
--uid-owner

 — фильтр по UID (User ID) пользователя, который сгенерировал пакет;

Пример:

iptables -A OUTPUT -m owner --uid-owner 500
--gid-owner

— аналогично, но для GID (Group ID);

Пример:

iptables -A OUTPUT -m owner --gid-owner 0
 --pid-owner

— аналогично, но для PID (Process ID);

Пример:

iptables -A OUTPUT -m owner --pid-owner 78
--sid-owner

— аналогично, но для SID (Service ID);

Пример:

iptables -A OUTPUT -m owner --sid-owner 100

Модуль Packet type — фильтры на основе типа адресации пакета.

--pkt-type

— допустимо использование  unicast , broadcast или multicast типов; допустим использование инвертации;

Пример:

iptables -A OUTPUT -m pkttype --pkt-type unicast

Модуль State — фильтры на основе состояния соединения.

--state

— указывает состояние пакета в соединении; могут быть использованы четыре тип состояния —INVALID, ESTABLISHED, NEW и RELATED. INVALID означает, что пакет ассоциируется с неизвестным стримом или соединением и может содержать некорретные данные или заголовки. ESTABLISHED — пакет принадлежит к уже установленному в обоих направлениях соединению и полностью валиден. NEW — пакет устанавливает или будет устанавливать новое соединение, или пакет соединения,у которого ещё не было передачи данных в обоих направлениях; RELATED — пакет, который устанавливает новое соединение, которое ассциировано с уже установленным соединением (пример — пассивный режим FTP, или ошибкаICMP, связанная с каким-то TCP или UDP соединением );

Пример:

iptables -A INPUT -m state --state RELATED,ESTABLISHED

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

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

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

Управление IPTABLES

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

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

1 # iptables -t filter --list

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

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

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

1 # iptables -t filter -L

Колонки тут:

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

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

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

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

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

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

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

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

1 # iptables -L -n

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

1 # iptables -L --line-numbers

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

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

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

1 # iptables -S

Пример:

01 # iptables -S
02 -P INPUT ACCEPT
03 -P FORWARD ACCEPT
04 -P OUTPUT ACCEPT
05 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
06 -A INPUT -p icmp -j ACCEPT
07 -A INPUT -i lo -j ACCEPT
08 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
09 -A INPUT -j REJECT --reject-with icmp-host-prohibited
10 -A FORWARD -j REJECT --reject-with icmp-host-prohibited

Управление chains

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

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

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

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

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

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

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

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

1 <em># iptables -A chain</em>

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

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

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

1 # iptables -I <em>chain</em> <em>rulenum</em>

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

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

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

1 # iptables -R chain rulenum

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

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

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

1 # iptables -D <em>chain</em> <em>rulenum</em>

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

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

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

1 # iptables -D <em>chain</em> <em>rule</em>

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

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

Другие опции

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

1 # iptables -P chain target

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

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

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

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

1 # iptables -F

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

1 # iptables -F INPUT

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

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

1 # iptables -Z

Пример:

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

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

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

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

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

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

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

1 # iptables-save > /root/iptables_bkp

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

1 # iptables-restore < /root/iptables_bkp

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

Тут приводятся примеры настройки для различных ситуаций. Про структуруIPTABLES, управление, архитектуру и прочее — смотрите в цикле Linux: IPTABLES — руководство: часть 1 — основы IPTABLES.

Настройка осуществляется на:

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 6.0.7 (squeeze)
Release:        6.0.7
Codename:       squeeze

Создаём файл настроек для IPTABLES:

# touch /etc/network/if-up.d/iptables.conf

Разрешаем его запуск:

# chmod +x /etc/network/if-up.d/iptables.conf

ВАЖНО: некоторые опции указываются с двумя тире — хотя в примерах они отображаются как одно! Учтите это, если копируете правила прямо из блога:

— — state
— — dport
— — tcp-flags
— — reject-with

В него добавляем:

#!/bin/bash

# Задаём путь к исполняемому файлу IPTABLES
IPTABLES=’/sbin/iptables’

# Сбрасываем существующие правила для всех таблиц и цепочек
$IPTABLES -F
$IPTABLES -X

# Задаём правила по-умолчанию (если не сработало не одно правило из цепочки — сработает правило отсюда)
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

# Разрешаем весь трафик по loopback интерфейсу lo0

 $IPTABLES -A INPUT -i lo -j ACCEPT

# Разрешаем трафик уже установленным и создающим новые подключения соединениям:
$IPTABLES -A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT

# Разрешаем входящий SSH через интерфейс eth0
$IPTABLES -A INPUT -p tcp -i eth0 —dport 22 -j ACCEPT

Теперь разберём созданные правила подробнее.

В IPTABLES используется три вида таблиц:

  1. Mangle — обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
  2. Nat — эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
  3. Filter — здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.

Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:

  1. INPUT — для входящих пакетов.
  2. FORWARD — для проходящих через данную машину к другой.
  3. OUTPUT — для исходящих.

Пакет, проходящий через эти цепочки, исходя из правила может быть пропущен (ACCEPT) или отброшен (DROP):

  • ACCEPT — пропустить пакет; просмотр таблицы завершается
  • DROP — выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
  • REJECT — выбросить, известив отправителя (—reject-with тип-извещения)

Первое созданное нами правило для цепочки INPUT задаёт поведение по-умолчанию для пакетов, проходящих через этот фильтр. В случае, если ни одно из правил, заданных ниже не будет применено к пакету — он будет отброшен (DROP) без уведомления отправителя:

$IPTABLES  -P INPUT DROP

Пакеты, проходящие фильтр OUTPUT соответственно будут пропущены:

То же самое касается «транзитных» пакетов:

$IPTABLES  -P OUTPUT ACCEPT

Следующее правило:

$IPTABLES  -A INPUT -i lo -j ACCEPT

Задаёт пользовательское правило (-A) в фильтр INPUT для пакетов, проходящих через интерфейс (-i) loopback (lo) и выполняет цель (-j) «принять» (ACCEPT).

В следующем правиле используется модуль (-m) state, который проверяет состояние устанавливаемого соединения — RELATED или ESTABLISHED и если соединение подходит под это правило — разрешает его:

$IPTABLES -A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT

Возможные состояния: INVALID — пакет не связан с каким-либо известным соединением, ESTABLISHED— пакет связан с соединением, по которому уже проходили пакеты в обоих направлениях, NEW — пакет инициирует новое соединение, либо связан с соединением, по которому ещё не проходили пакеты в обоих направлениях , RELATED — пакет инициирует новое соединение, но также связан с уже существующим соединением, например при передаче данных по FTP или сообщении об ошибке ICMP, SNAT — виртуальное состояние, положительный результат выдаётся если исходный адрес источника отличен от адреса, который должен получить ответ, DNAT — виртуальное состояние, положительный результат выдаётся если исходный адрес получателя отличен от адреса отправителя ответа.

В следующем правиле для фильтра входящих соединений INPUT мы указываем:

$IPTABLES -A INPUT -p tcp -i eth0 —dport 22 -j ACCEPT

Протокол (-p) TCP, интерфейс (-i) eth0, и порт назначения, т.е. порт на нашем сервере, к которому устанавливается соединение (—dport) 22.

Добавим ещё несколько правил:

#Делаем защиту от DOS атак:
$IPTABLES -A INPUT -p tcp -m tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j ACCEPT

# Разрешаем FTP
$IPTABLES -A INPUT -i eth0 -p tcp —dport 21 -j ACCEPT

# Разрешаем HTTP
$IPTABLES -A INPUT -i eth0 -p tcp —dport 80 -j ACCEPT

# Разрешаем HTTPS
$IPTABLES -A INPUT -i eth0 -p tcp —dport 443 -j ACCEPT

# Разрешаем SMTP только из сети 77.120.***.1/24
$IPTABLES -A INPUT -s 77.120.***.1/24 -i eth0 -p tcp —dport 25 -j ACCEPT

# Разрешаем SMTP всем, но запрещаем отправку для адреса 77.120.***.46
$IPTABLES -A INPUT -s ! 77.120.***.46 -i eth0 -p tcp —dport 25 -j ACCEPT

# РазрешаемPOP3 только с IP 77.120.***.46
$IPTABLES -A INPUT -s 77.120.***.46 -i eth0 -p tcp —dport 110 -j ACCEPT

# Разрешаем DNS
$IPTABLES -A INPUT -i eth0 -p udp —sport 53 -j ACCEPT

# Доступ к портам 8081 и 8082 разрешаем только из сетей 91.***.**.0/24, 195.***.***.0/23 и IP 37.***.**.174
for net in 91.***.**.0/24 195.***.***.0/23 37.***.**.174; do
$IPTABLES -A INPUT -p tcp -m tcp -s $net -m multiport —dports 8081,8082 -j ACCEPT
done
$IPTABLES -A INPUT -p tcp -m tcp -m multiport —dports 8081,8082 -j DROP

# Разрешаем ping
$IPTABLES -A INPUT -p icmp -j ACCEPT

Перезапустим скрипт, что бы правила вступили в силу, заодно проверим ошибки:

# /etc/network/if-up.d/iptables.conf reload

В случае ошибок — будет указано в какой строке какая ошибка. Например:

iptables v1.4.8: unknown protocol `tcp—dport’ specified

Пропущен пробел после tcp.

Посмотреть текущие правила можно с помощью опции —list:

# iptables —list
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  —  anywhere             anywhere
ACCEPT     all  —  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  —  anywhere             anywhere            tcp dpt:ssh
ACCEPT     tcp  —  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
ACCEPT     tcp  —  anywhere             anywhere            tcp dpt:ftp
ACCEPT     tcp  —  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  —  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  —  0.***.***.77.colo.static.dc.volia.com/24  anywhere            tcp dpt:smtp
ACCEPT     tcp  — !0.***.***.77.colo.static.dc.volia.com/24  anywhere            tcp dpt:smtp
ACCEPT     tcp  —  46.***.***.77.colo.static.dc.volia.com  anywhere            tcp dpt:pop3
ACCEPT     udp  —  anywhere             anywhere            udp spt:domain
ACCEPT     tcp  —  91.***.**.0/24  anywhere            tcp multiport dports tproxy,8082
ACCEPT     tcp  —  195.***.***.0/23     anywhere            tcp multiport dports tproxy,8082
ACCEPT     tcp  —  37.***.***.174       anywhere            tcp multiport dports tproxy,8082
DROP       tcp  —  anywhere             anywhere            tcp multiport dports tproxy,8082
ACCEPT     icmp —  anywhere             anywhere            icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Ещё несколько примеров использования.

Проверить статус IPTABLES:

# iptables -L -n -v
Chain INPUT (policy DROP 176 packets, 36734 bytes)
pkts bytes target     prot opt in     out     source               destination
0     0 ACCEPT     all  —  lo     *       0.0.0.0/0            0.0.0.0/0
179K   40M ACCEPT     all  —  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
1   100 ACCEPT     tcp  —  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
0     0 ACCEPT     tcp  —  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21
3   180 ACCEPT     tcp  —  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
1    28 ACCEPT     icmp —  *      *       0.0.0.0/0            0.0.0.0/0
1    60 ACCEPT     tcp  —  *      *       195.191.226.102      0.0.0.0/0           tcp dpt:514
0     0 ACCEPT     tcp  —  *      *       91.218.228.236       0.0.0.0/0           tcp dpt:514

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 180K packets, 12M bytes)
pkts bytes target     prot opt in     out     source               destination

Ключи:

-L: показать список правил;
-v: выводить дополнительную информацию;
-n: отображать ip адрес и порт числами, а не перобразовывать в FQDN-имя.

Вывести текущие правила, только INPUT:

# iptables -L INPUT -n -v

Или только OUTPUT:

# iptables -L OUTPUT -n -v

Добавление и удаление правил.

Вывести текущие правила INPUT с указанием строк (номеров правил):

# iptables -L INPUT -n —line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
4    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
5    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    ACCEPT     icmp —  0.0.0.0/0            0.0.0.0/0
7    ACCEPT     tcp  —  195.191.226.102      0.0.0.0/0           tcp dpt:514
8    ACCEPT     tcp  —  91.218.228.236       0.0.0.0/0           tcp dpt:514

Что бы добавить правило перед 5:

# iptables -I INPUT 5 -i eth0 -p tcp —dport 8080 -j ACCEPT

Проверяем:

# iptables -L INPUT -n —line-numbers | grep 80
5    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
6    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

Старое правло «подвинулось» на 6 строку, новое — стало 5.

Заблокировать входящие соединения для IP 8.8.8.8:

# iptables -I INPUT 7 -s 8.8.8.8 -j DROP

Проверяем:

# iptables -L INPUT -n —line-numbers | grep 8.8.8.8
7    DROP       all  —  8.8.8.8              0.0.0.0/0

Заблокировать исходящий ICMP на facebook.com:

# iptables -A OUTPUT -p icmp -d www.facebook.com -j DROP

Пробуем:

# ping 173.252.101.26
PING 173.252.101.26 (173.252.101.26) 56 (84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

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

# iptables -L OUTPUT -n —line-numbers
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       tcp  —  0.0.0.0/0            173.252.101.26

Использование MAC-адреса в правилах — разрешаем SSH только с MAC 00:60:ef:0b:f6:1a:

# iptables -A INPUT -p tcp —destination-port 22 -m mac —mac-source 00:60:ef:0b:f6:1a -j ACCEPT

Разрешить SSH с адресов начиная от 10.0.0.5 и до 10.0.0.10 включительно:

# iptables -A INPUT -p tcp —destination-port 22 -m iprange —src-range 10.0.0.5-10.0.0.10 -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: указывает маску сети.

Ссылки по теме:

http://konungr.ru

http://www.doless.ru

http://nikmy.ru

http://www.iptables.ru

http://www.opennet.ru

http://www.opennet.ru

http://rus-linux.net

http://cartmanees.blogspot.com

http://rusua.org.ua

http://www.fullautomatic.ru

Частая ситуация, когда какой-то скрипт (например, php) работает с важными данными на сервере, которые не должны быть доступны «внешнему» пользователю. Предметно говоря, требуется запрет доступа на папку с подобными файлами, однако скрипт должен иметь возможность с ними работать. Решение простое, кладём в текущую директорию .htaccess файл с содержимым типа:

Order deny,allow
Deny from all
Allow from 127.0.0.1

Apache Tomcat — популярный сервер для java-приложений. Сам также написан на Java, а потому требуется, чтобы она была уже установлена в системе (см. установка Java в Debian). Начиная с 2011-го года версия Tomcat 6 перешла в разряд устаревших, а потому на момент написания статьи наиболее актуален Tomcat 7, хотя с 2013-го года присутствует и даже работает Tomcat 8. Потому рассмотрим установку седьмой и восьмой версий:
Continue Reading

Вариант 1. Используем lynx. Выводит на экран исходный код страницы (соответственно он отсылается на почту):

/usr/local/bin/lynx --source http://adminunix/index.html

Вариант 2. Используем curl. Также выводит исходный код:

/usr/local/bin/curl --url http://adminunix/index.html

Вариант 3. Используем wget. С выводом на экран:

 wget -O — -q -t 1 http://www.adminunix.ru/cron.php

где основная «хитрость» в том, что ключик "-O — " задаёт вывод в консоль (вместо сохранения в файл), "-q" делает это «тихо» (без вывода на экран), а "-t 1" указывает делать лишь одну попытку соединения. Проще говоря, вместо скачивания получаем именно однократный «вызов скрипта» по заданному адресу.