Настройка netfilter/iptables для подключения нескольких клиентов к одному соединению.
Давайте теперь рассмотрим наш Linux в качестве шлюза для локальной сети во внешнюю сеть Internet. Предположим, что интерфейс eth0 подключен к интернету и имеет IP 198.166.0.200, а интерфейс eth1 подключен к локальной сети и имеет IP 10.0.0.1. По умолчанию, в ядре Linux пересылка пакетов через цепочку FORWARD (пакетов, не предназначенных локальной системе) отключена. Чтобы включить данную функцию, необходимо задать значение 1 в файле /proc/sys/net/ipv4/ip_forward:
netfilter:~# echo 1 > /proc/sys/net/ipv4/ip_forward
Чтобы форвардинг пакетов сохранился после перезагрузки, необходимо в файле /etc/sysctl.conf раскомментировать (или просто добавить) строку net.ipv4.ip_forward=1.
Итак, у нас есть внешний адрес (198.166.0.200), в локальной сети имеется некоторое количество гипотетических клиентов, которые имеют адреса из диапазона локальной сети и посылают запросы во внешнюю сеть. Если эти клиенты будут отправлять во внешнюю сеть запросы через шлюз «как есть», без преобразования, то удаленный сервер не сможет на них ответить, т.к. обратным адресом будет получатель из «локальной сети». Для того, чтобы эта схема корректно работала, необходимо подменять адрес отправителя, на внешний адрес шлюза Linux. Это достигается за счет (маскарадинг) в , в .
netfilter:~# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT netfilter:~# iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 10.0.0.1/24 -j ACCEPT netfilter:~# iptables -P FORWARD DROP netfilter:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Итак, по порядку сверху-вниз мы разрешаем уже установленные соединения в цепочке FORWARD, таблице filter, далее мы разрешаем устанавливать новые соединения в цепочке FORWARD, таблице filter, которые пришли с интерфейса eth1 и из сети 10.0.0.1/24. Все остальные пакеты, которые проходят через цепочку FORWARD — отбрасывать. Далее, выполняем маскирование (подмену адреса отправителя пакета в заголовках) всех пакетов, исходящих с интерфейса eth0.
Примечание. Есть некая общая рекомендация: использовать правило -j MASQUERADE для интерфейсов с динамически получаемым IP (например, по DHCP от провайдера). При статическом IP, -j MASQUERADE можно заменить на аналогичное -j SNAT —to-source IP_интерфейса_eth0. Кроме того, SNAT умеет «помнить» об установленных соединениях при кратковременной недоступности интерфейса. Сравнение MASQUERADE и SNAT в таблице:
Кроме указанных правил так же можно нужно добавить правила для фильтрации пакетов, предназначенных локальному хосту — как описано в . То есть добавить запрещающие и разрешающие правила для входящих и исходящих соединений:
netfilter:~# iptables -P INPUT DROP netfilter:~# iptables -P OUTPUT DROP netfilter:~# iptables -A INPUT -i lo -j ACCEPT netfilter:~# iptables -A OUTPUT -o lo -j ACCEPT netfilter:~# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT netfilter:~# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT netfilter:~# iptables -A OUTPUT -p icmp -j ACCEPT netfilter:~# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 netfilter:~# iptables -A OUTPUT -p TCP --sport 32768:61000 -j ACCEPT netfilter:~# iptables -A OUTPUT -p UDP --sport 32768:61000 -j ACCEPT netfilter:~# iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT netfilter:~# iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
В результате, если один из хостов локальной сети, например 10.0.0.2, попытается связаться с одним из интернет-хостов, например, 93.158.134.3 (ya.ru), при , их исходный адрес будет подменяться на внешний адрес шлюза в цепочке POSTROUTING таблице nat, то есть исходящий IP 10.0.0.2 будет заменен на 198.166.0.200. С точки зрения удаленного хоста (ya.ru), это будет выглядеть, как будто с ним связывается непосредственно сам шлюз. Когда же удаленный хост начнет ответную передачу данных, он будет адресовать их именно шлюзу, то есть 198.166.0.200. Однако, на шлюзе адрес назначения этих пакетов будет подменяться на 10.0.0.2, после чего пакеты будут передаваться настоящему получателю в локальной сети. Для такого обратного преобразования никаких дополнительных правил указывать не нужно — это будет делать все та же операция MASQUERADE, которая помнит какой хост из локальной сети отправил запрос и какому хосту необходимо вернуть пришедший ответ.
Примечание: желательно негласно принято, перед всеми командами iptables очищать цепочки, в которые будут добавляться правила:
netfilter:~# iptables -F ИМЯ_ЦЕПОЧКИ
Настройка блокировки доступа к сайту по странам
Дальше можно пойти двумя путями:
- Блокировать доступ определенным странам.
- Разрешить доступ списку стран, а от остальных закрыться.
Сначала я пошел по первому пути и стал вычислять страны, с которых приходит больше всего ботов и блокировать их. Потом я понял, что это не очень эффективно с точки зрения затраты времени. Список подходящих мне стран гораздо меньше, чем список нежелательных. Так что я пошел по другому пути и запретил доступ всем, кроме некоторых стран. Я расскажу дальше для примера оба способа. Технически они ничем не отличаются, просто разный подход.
Итак, у нас есть список ip адресов и подсетей, разделенных по странам. Списки очень большие, руками их обрабатывать не получится. Мы это дело автоматизируем, а пока пройдемся по теории. Разберемся с управлением списками в ipset. Для начала создадим список и назовем его — blacklist.
# ipset -N blacklist nethash
Этой командой я создал список blacklist типа nethash. Строго говоря, я создаю не список, а набор данных типа nethash. В данном случае это набор данных адресов подсетей. Именно в виде набора подсетей выглядят списки доступа стран по ip. Если у вас есть список ip адресов, то тип данных будет iphash. Более подробно о типах данных можно посмотреть в документации.
Добавим в наш список несколько подсетей.
# ipset -A blacklist 5.43.240.0/21 # ipset -A blacklist 5.100.64.0/18 # ipset -A blacklist 5.159.112.0/21
Посмотрим содержимое списка blacklist.
# ipset -L blacklist Name: blacklist Type: hash:net Revision: 3 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 16880 References: 0 Members: 5.100.64.0/18 5.43.240.0/21 5.159.112.0/21
Обращаю внимание на выделенные строки. Когда я создавал список стран для блокировки, он получился очень большой и не помещался весь в объект с дефолтными настройками
Их можно изменить таким образом:
# ipset create blacklist nethash hashsize 16348 maxelem 131072
Проверяем:
# ipset -L blacklist Header: family inet hashsize 16384 maxelem 131072 Size in memory: 262544
Обратите внимание на занимаемую память. На маленьком VPS это может стать проблемой
В том числе из этих соображений я решил перейти к белому списку. Он существенно меньше, соответственно, меньше ресурсов тратится на его обработку.
Список мы создали, теперь его надо подключить в iptables. Для этого добавляем правило блокировки.
# iptables -A INPUT -m set --match-set blacklist src -j DROP
Смотрим, что получилось в правилах:
# iptables -L INPUT -v -n
Все в порядке, правило добавили. Следите, чтобы запрещающее правило было первым и лишние подключения отваливались сразу. Давайте теперь на примере посмотрим, как организовать белый список. Создаем сам список.
# ipset -N whitelist nethash
Добавляем в него подсети.
# ipset -A whitelist 6.43.240.0/21 # ipset -A whitelist 7.100.64.0/18 # ipset -A whitelist 8.159.112.0/21
Создаем правило в iptables, по которому к нашему серверу будут иметь доступ только адреса из списка. Сначала у меня стояли вот эти два правила, которые разрешают доступ к веб серверу всем.
iptables -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT iptables -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT
Я их изменил на следующие.
iptables -A INPUT -i $WAN -m set --match-set whitenet src -p tcp --dport 80 -j ACCEPT iptables -A INPUT -i $WAN -m set --match-set whitenet src -p tcp --dport 443 -j ACCEPT
Не забывайте важный момент — чтобы у вас белый список работал, у вас должен весь трафик, который не разрешен явно, блокироваться. Подробнее о настройке iptables читайте мою статью, о которой я говорил ранее.
Принцип работы ipset рассмотрели. Теперь автоматизируем все и создадим полный список ip адресов по странам, которым будет разрешен доступ к сайту. Я для этого написал простенький скрипт. Привожу его с комментариями.
#!/bin/bash # Удаляем список, если он уже есть ipset -X whitelist # Создаем новый список ipset -N whitelist nethash # Скачиваем файлы тех стран, что нас интересуют и сразу объединяем в единый список wget -O netwhite http://www.ipdeny.com/ipblocks/data/countries/{ru,ua,kz,by,uz,md,kg,de,am,az,ge,ee,tj,lv}.zone echo -n "Загружаем белый список в IPSET..." # Читаем список сетей и построчно добавляем в ipset list=$(cat netwhite) for ipnet in $list do ipset -A whitelist $ipnet done echo "Завершено" # Выгружаем созданный список в файл для проверки состава ipset -L whitelist > w-export
Запускаете скрипт, он скачивает и объединяет списки нужных вам стран, затем добавляет их в ipnet и в конце делает экспорт в файл. Посмотрите на этот файл. Список в нем должен совпадать с исходным списком, плюс несколько информационных строк в самом начале. На этом все. Если вы добавили правила в iptables, ограничение доступа по ip уже начало работать.
Блокировка трафика из страны
Если все прошло, как и следовало ожидать, мы должны в состоянии использовать на нашем брандмауэре утилиты программы IPTables, чтобы использовать модуль GeoIP.
Использование Iptables
Вот основной синтаксис для использования IPTables с модулем GeoIP для того, чтобы блокировать трафик, исходящий из или предназначенных для страны. Здесь мы должны использовать двух-буквенный код ISO3166 вместо страны, например, RU для России, IE для Ирландии, IN для Индии, CN для Китая и так далее.
# iptables -m geoip --src-cc country --dst-cc country
Теперь, если мы хотим блокировать входящий трафик из Индии (IN) и Соединенных Штатов Америки (US), мы напишем следующую команду для Iptables.
# iptables -I INPUT -m geoip --src-cc IN,US -j DROP
Если мы хотим блокировать весь входящий трафик за пределами России на нашем сервере, мы должны выполнить следующие действия.
# iptables -I INPUT -m geoip ! --src-cc RU -j DROP
root@destroyer:~# ping 213.159.209.228 PING 213.159.209.228 (213.159.209.228) 56(84) bytes of data.
Когда мы пытались пинговать сервер из сети за пределами России, мы не получили ответов. Так как были применена конфигурация Iptables на время выполнения и не были сохранены, после того мы перезагрузили сервер, мы получили ответы пинга с сервера.
Если мы хотим блокировать исходящий трафик, предназначенный для Индии (IN), необходимо выполнить следующую команду.
# iptables -A OUTPUT -m geoip --dst-cc IN -j DROP
Использование firewalld
Если мы зайдем в систему, основанную на Systemd и firewalld в качестве контроллера для внешнего интерфейса IPTables, мы можем также использовать firewalld для вышеуказанной задачи.
# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc IN,UN -j DROP # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc RU -j DROP # firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc IN -j DROP
Iptables с модулем GeoIP является очень важным для предотвращения DOS, DDOS атаки, исходящие из некоторых стран. Это также очень эффективно, если вы хотите ограничить доступ к вашему веб-сайту/серверу из определенной страны. Таким образом, имея модуль GeoIP установленный с Iptables-addons является обязательным иметь установку для разрешения или запрета определенных стран. Итак, если у вас есть какие-либо вопросы, предложения, обратная связь, пожалуйста, напишите их в поле для комментариев ниже. Спасибо ! Удачи вам
Tips
If you manually edit iptables on a regular basis
The above steps go over how to setup your firewall rules and presume they will be relatively static (and for most people they should be). But if you do a lot of development work, you may want to have your iptables saved everytime you reboot. You could add a line like this one in /etc/network/interfaces:
pre-up iptables-restore < /etc/iptables.rules post-down iptables-save > /etc/iptables.rules
The line «post-down iptables-save > /etc/iptables.rules» will save the rules to be used on the next boot.
Using iptables-save/restore to test rules
If you edit your iptables beyond this tutorial, you may want to use the iptables-save and iptables-restore feature to edit and test your rules. To do this open the rules file in your favorite text editor (in this example gedit).
sudo sh -c "iptables-save > /etc/iptables.rules" gksudo gedit /etc/iptables.rules
You will have a file that appears similiar to (following the example above):
# Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006 *filter :INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j DROP COMMIT # Completed on Sun Apr 23 06:19:53 2006
Notice that these are iptables commands minus the iptable command. Feel free to edit this to file and save when complete. Then to test simply:
sudo iptables-restore < /etc/iptables.rules
NOTE: With iptables 1.4.1.1-1 and above, a script allow you to test your new rules without risking to brick your remote server. If you are applying the rules on a remote server, you should consider testing it with:
sudo iptables-apply /etc/iptables.rules
After testing, if you have not added the iptables-save command above to your /etc/network/interfaces remember not to lose your changes:
sudo sh -c "iptables-save > /etc/iptables.rules"
More detailed Logging
For further detail in your syslog you may want create an additional Chain. This will be a very brief example of my /etc/iptables.rules showing how I setup my iptables to log to syslog:
# Generated by iptables-save v1.3.1 on Sun Apr 23 05:32:09 2006 *filter :INPUT ACCEPT :FORWARD ACCEPT :LOGNDROP - :OUTPUT ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j LOGNDROP -A LOGNDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7 -A LOGNDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7 -A LOGNDROP -p icmp -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7 -A LOGNDROP -j DROP COMMIT # Completed on Sun Apr 23 05:32:09 2006
Note a new CHAIN called LOGNDROP at the top of the file. Also, the standard DROP at the bottom of the INPUT chain is replaced with LOGNDROP and add protocol descriptions so it makes sense looking at the log. Lastly we drop the traffic at the end of the LOGNDROP chain. The following gives some idea of what is happening:
-
--limit sets the number of times to log the same rule to syslog
-
--log-prefix "Denied..." adds a prefix to make finding in the syslog easier
-
--log-level 7 sets the syslog level to informational (see man syslog for more detail, but you can probably leave this)
Disabling the firewall
If you need to disable the firewall temporarily, you can flush all the rules using
sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -F
or create a script using text editor such as nano
sudo nano -w /root/fw.stop
echo "Stopping firewall and allowing everyone..." 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 FORWARD ACCEPT iptables -P OUTPUT ACCEPT
Make sure you can execute the script
sudo chmod +x /root/fw.stop
You can run the script
sudo /root/fw.stop
Опции отбора пакетов
опция | описание | пример |
---|---|---|
—protocol (сокращено -p) | Определяет протокол. Опции tcp, udp, icmp, или любой другой протокол определенный в /etc/protocols | iptables -A INPUT —protocol tcp |
—source | IP адрес источника пакетаs. Может быть определен несколькими путями.
|
iptables -A INPUT —source 10.10.10.3 |
—destination | IP адрес назначения пакета. Может быть определен несколькими путями — смотри —source | iptables -A INPUT —destination 192.168.1.0/24 |
—source-port | Порт источник, возможно только для протоколов —protocol tcp, или —protocol udp | iptables -A INPUT —protocol tcp —source-port 25 |
—destination-port | Порт назначения, возможно только для протоколов —protocol tcp, или —protocol udp | iptables -A INPUT —protocol udp —destination-port 67 |
—state | Состояние соединения. Доступно, если модуль ‘state’ загружен с помощью ‘-m state’. Доступные опции:NEW
|
iptables -A INPUT -m state —state NEW,ESTABLISHED |
—in-interface (сокращенно -i) | Определяет интерфейс, на который прибыл пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами | iptables -t nat -A PREROUTING —in-interface eth0 |
—out-interface (сокращенно -o) | Определяет интерфейс, с которого уйдет пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами | iptables -t nat -A POSTROUTING —in-interface eth1 |
—tcp-flags | Определяет TCP флаги пакета. Содержит 2 параметра: Список флагов которые следует проверить и список флагов которые должны быть установлены | |
—syn | Сокращение для ‘—tcp-flags SYN,RST,ACK SYN’. Поскольку проверяет TCP флаги, используется с —protocol tcp.В примере показан фильтр для пакетов с флагом NEW, но без флага SYN. Обычно такие пакеты должны быть выброшены (DROP). | iptables -A INPUT —protocol tcp ! —syn -m state —state NEW |
Пример настройки iptables
Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.
Шаг 1 – Установка брандмауэра Iptables в Linux
1. Установка Iptables
Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:
или в Centos/RedHat
2. Проверка текущего состояния Iptables
Эта команда позволит вам проверить состояние текущей конфигурации Iptables. Опция -L используется для выведения всех правил, а опция -v — для более подробной информации:
В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.
Шаг 2 – Определение правил
Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.
Опция -A означает “append”, добавление правила в конец цепочки. Очень важным моментом является то, что правила в цепочке применяются последовательно, и если пакет удовлетворяет условиям одного из них, последующие применяться не будут. Это всегда нужно помнить при создании наборов правил. Таблица означает таблицу, в которой редактируются цепочки. По умолчанию это filter. Цепочка — имя цепочки, к которой мы добавляем правило. Интерфейс — сетевой интерфейс, для которого выполняется фильтрация трафика. Протокол указывает сетевой протокол, пакеты которого вы хотите фильтровать, источник — IP-адрес отправителя пакета, номер порта — порт на вашем сервере, для которого применяется правило. Эти и некоторые другие опции будут рассмотрены ниже при демонстрации соответствующих действий. Для более подробной информации о команде Iptables и ее опциях обратитесь к соответствующей man-странице.
1. Разрешение трафика на локальном узле
Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.
Опция -A используется для добавления в цепочку INPUT правила, разрешающего все соединения для интерфейса lo. Это обозначение для интерфейса loopback, он используется для всей связи на локальном узле, например, связи между базой данных и веб-приложением на одной машине.
2. Разрешение подключений к портам HTTP, SSH и SSL
Нам требуется, чтобы в обычном режиме работали порты HTTP (порт 80), https (порт 443), ssh (порт 22). Для этого нужно выполнить следующие команды. В них мы при помощи опции -p указали протокол, а при помощи опции —dport (destination port, порт на принимающей стороне, в данном случае это ваш сервер) соответствующий каждому протоколу порт:
Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже
3. Фильтрация пакетов по источнику
Если вам нужно принимать или отклонять пакеты по IP-адресу или диапазону IP-адресов источника, можно указать их при помощи опции -s. Например, чтобы принимать пакеты с адреса 192.168.1.3:
вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило
Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:
Если нужно отклонять или принимать пакеты с диапазона IP-адресов, вам потребуется воспользоваться модулем Iprange с опцией -m и при помощи параметра —src указать диапазон:
4. Запрет всего остального трафика
Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:
Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.
MATCH EXTENSIONS
-p—protocol-m—match-h—help
The following are included in the base package, and most of these can
be preceded by a
!
to invert the sense of the match.
tcp
- —source-port ]
-
Source port or port range specification. This can either be a service
name or a port number. An inclusive range can also be specified,
using the format
port:port.If the first port is omitted, «0» is assumed; if the last is omitted,
«65535» is assumed.
If the second port greater then the first they will be swapped.
The flag
—sportis an alias for this option.
- —destination-port ]
-
Destination port or port range specification. The flag
—dportis an alias for this option.
- —tcp-flags mask comp
-
Match when the TCP flags are as specified. The first argument is the
flags which we should examine, written as a comma-separated list, and
the second argument is a comma-separated list of flags which must be
set. Flags are:
SYN ACK FIN RST URG PSH ALL NONE.Hence the command
iptables -A FORWARD -p tcp —tcp-flags SYN,ACK,FIN,RST SYNwill only match packets with the SYN flag set, and the ACK, FIN and
RST flags unset. - —syn
-
Only match TCP packets with the SYN bit set and the ACK and FIN bits
cleared. Such packets are used to request TCP connection initiation;
for example, blocking such packets coming in an interface will prevent
incoming TCP connections, but outgoing TCP connections will be
unaffected.
It is equivalent to —tcp-flags SYN,RST,ACK SYN.
If the «!» flag precedes the «—syn», the sense of the
option is inverted. - —tcp-option number
- Match if TCP option set.
udp
- —source-port ]
-
Source port or port range specification.
See the description of the
—source-portoption of the TCP extension for details.
- —destination-port ]
-
Destination port or port range specification.
See the description of the
—destination-portoption of the TCP extension for details.
icmp
- —icmp-type typename
-
This allows specification of the ICMP type, which can be a numeric
ICMP type, or one of the ICMP type names shown by the command
iptables -p icmp -h
mac
- —mac-source address
-
Match source MAC address. It must be of the form XX:XX:XX:XX:XX:XX.
Note that this only makes sense for packets entering the
PREROUTING,FORWARD
or
INPUTchains for packets coming from an ethernet device.
limit
LOG
- —limit rate
-
Maximum average matching rate: specified as a number, with an optional
`/second’, `/minute’, `/hour’, or `/day’ suffix; the default is
3/hour. - —limit-burst number
-
The maximum initial number of packets to match: this number gets
recharged by one every time the limit specified above is not reached,
up to this number; the default is 5.
multiport
-p tcp-p udp
- —source-port ]
- Match if the source port is one of the given ports.
- —destination-port ]
- Match if the destination port is one of the given ports.
- —port ]
-
Match if the both the source and destination ports are equal to each
other and to one of the given ports.
mark
MARK
- —mark value
-
Matches packets with the given unsigned mark value (if a mask is
specified, this is logically ANDed with the mask before the
comparison).
owner
OUTPUT
- —uid-owner userid
-
Matches if the packet was created by a process with the given
effective user id. - —gid-owner groupid
-
Matches if the packet was created by a process with the given
effective group id. - —pid-owner processid
-
Matches if the packet was created by a process with the given
process id. - —sid-owner sessionid
-
Matches if the packet was created by a process in the given session
group.
state
- —state state
-
Where state is a comma separated list of the connection states to
match. Possible states are
INVALIDmeaning that the packet is associated with no known connection,
ESTABLISHEDmeaning that the packet is associated with a connection which has seen
packets in both directions,
NEWmeaning that the packet has started a new connection, or otherwise
associated with a connection which has not seen packets in both
directions, and
RELATEDmeaning that the packet is starting a new connection, but is
associated with an existing connection, such as an FTP data transfer,
or an ICMP error.