Как закрыть порт iptables

Настройка 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 ИМЯ_ЦЕПОЧКИ

Настройка блокировки доступа к сайту по странам

Дальше можно пойти двумя путями:

  1. Блокировать доступ определенным странам.
  2. Разрешить доступ списку стран, а от остальных закрыться.

Сначала я пошел по первому пути и стал вычислять страны, с которых приходит больше всего ботов и блокировать их. Потом я понял, что это не очень эффективно с точки зрения затраты времени. Список подходящих мне стран гораздо меньше, чем список нежелательных. Так что я пошел по другому пути и запретил доступ всем, кроме некоторых стран. Я расскажу дальше для примера оба способа. Технически они ничем не отличаются, просто разный подход.

Итак, у нас есть список 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. Может быть определен несколькими путями.
  • Одиночный хост: host.domain.tld, или IP адрес: 10.10.10.3
  • Пул-адресов (подсеть): 10.10.10.3/24 или 10.10.10.3/255.255.255.0
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
Все пакеты устанавливающие новое соединениеESTABLISHED
Все пакеты принадлежащие установленному соединениюRELATED
Пакеты, не принадлежащие установленному соединению, но связанные с ним.Например — FTP в активном режиме использует разные соединения для передачи данных. Эти соединения связанны. INVALID
Пакеты, которые не могут быть по тем или иным причинам идентифицированны. Например ICMP ошибки не принадлежащие существующим соединениям
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
—sport

is an alias for this option.

—destination-port ]

Destination port or port range specification. The flag
—dport

is 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 SYN

will 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-port

option of the TCP extension for details.

—destination-port ]

Destination port or port range specification.
See the description of the
—destination-port

option 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
INPUT

chains 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
INVALID

meaning that the packet is associated with no known connection,
ESTABLISHED

meaning that the packet is associated with a connection which has seen
packets in both directions,
NEW

meaning that the packet has started a new connection, or otherwise
associated with a connection which has not seen packets in both
directions, and
RELATED

meaning 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.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: