Отмечено: iptables Показать/спрятать ветки комментариев | Горячие клавиши

  • exebit 3:21 pm on 05.08.2010 Постоянная ссылка | Ответить
    Метки: , iptables,   

    Команды IPTABLES INSERT, FLUSH 

    Команды INSERT, FLUSH и т.д.
    Пример работы INSERT я разобрал выше. Если всё с ним понятно, продолжаем дальше, если нет — пишите, объясню.

    FLUSH — очищает все правила в указанной цепочки.
    Например, имеем в цепочке FORWARD следующее:
    # iptables -nvL FORWARD
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 mailru_up all -- * * 217.29.125.1 194.67.57.26
    0 0 mailru_down all -- * * 194.67.57.26 217.29.125.1

    После выполнения:
    iptables -F FORWARD
    будем иметь:
    # iptables -nvL FORWARD
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

    Тоесть все правила удалились.

    DELETE-CHAIN удаляет пустую пользовательку (тоесть нельзя удалять стандартные INPUT, FORWARD, OUTPUT и т.д., а только те, которые мы сами создали с помощью -N) цепочку.

    Например у нас есть цепочка mailru_up:
    # iptables -nvL mailru_up
    Chain mailru_up (0 references)
    pkts bytes target prot opt in out source destination
    0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Мы видим, что в ней есть правило RETURN. Т.е. сразу удалить её не получиться:
    # iptables -X mailru_up
    iptables: Chain is not empty
    Поэтому, сначала её очищаем, а потом удаляем:
    # iptables -F mailru_up;iptables -X mailru_up

    1. iptables -nvL mailru_up

    iptables: Table does not exist (do you need to insmod?)
    Итак, её больше нет.


    1. iptables таблицы и цепочки
    2. Связка iptables+mark+iproute2
    3. Действия ACCEPT, RETURN
    4. эта статья

     
  • exebit 3:19 pm on 05.08.2010 Постоянная ссылка | Ответить
    Метки: iptables,   

    Действия ACCEPT и RETURN 

    Действия ACCEPT и RETURN

    Как я говорил раньше, ACCEPT — означает принятие трафика. Тоесть разрешение пройти этому виду трафика. Например:

    iptables -A FORWARD -s 192.168.0.0/24 -p tcp —dport 80 -j ACCEPT # Разрешаем запросы на веб-сервера
    iptables -A FORWARD -s 192.168.0.0/24 -p udp —dport 53 -j ACCEPT # Разрешаем обращаться к DNS
    iptables -A FORWARD -s 192.168.0.0/24 -j DROP # запрещаем всё остальное.

    Данный пример открывает сети 192.168.0.0/24 доступ только к вебу и днсу. Тоесть эта сеть сможет лишь заходить на веб-сайты, но не сможет пользоваться ни почтой через Outlook или The BAT! по 25 и 110-м портам, ни ирком ни аськой.

    Причём следует обратить внимание на параметр -A. Это означает, что правило добавляется в конец цепочки. Эти команды идентичны следующим:

    iptables -I FORWARD -s 192.168.0.0/24 -j DROP # закрываем всё
    iptables -I FORWARD -s 192.168.0.0/24 -p udp —dport 53 -j ACCEPT # разрешаем обращаться к DNS
    iptables -I FORWARD -s 192.168.0.0/24 -p tcp —dport 80 -j ACCEPT # разрешаем веб

    В итоге, и после первых трёх комманд и после трёх вторых комманд получим одинаковые цепочки, т.к. во втором случае используется -I — insert:
    # iptables -nvL FORWARD
    Chain FORWARD (policy ACCEPT 0 packets, 0M bytes)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.0.0/24 tcp dpt:80
    0 0 ACCEPT udp -- * * 0.0.0.0/0 192.168.0.0/24 tcp dpt:53
    0 0 DROP all -- * * 0.0.0.0/0 192.168.0/0

    Если всё понятно, то переходим к RETURN и new-chain.

    RETURN обычно используется для того, чтобы считать трафик в пользовательских цепочках. Например нам нужно считать трафик только на сайт mail.ru:

    iptables -N mailru_down # создаём цепочку, где будет считаться трафик, скачанный с сайта mail.ru
    iptables -N mailru_up # создаём цепочку, где будет считаться трафик, отправленный на сайт mail.ru
    iptables -A mailru_down -j RETURN # в этих цепочках ничего не делаем, просто возвращаемся обратно (в данном случае в FORWARD, чтобы пройти через остальные правила). А если был бы ACCEPT — тогда пакет уже не проходил бы через остальные цепочки FORWARD, а сразу же перенаправился бы на mail.ru
    iptables -A mailru_up -j RETURN # Тоже самое
    iptables -A FORWARD -s 217.29.125.1 -d 194.67.57.26 -j mailru_up # трафик от клиента на mail.ru отправляем в цепочку mailru_up — считать исходящий трафик
    iptables -A FORWARD -d 217.29.125.1 -s 194.67.57.26 -j mailru_down # тоже самое, только входящий трафик

    После этого, получаем:

    # iptables -nvL
    Chain INPUT (policy ACCEPT 4 packets, 787 bytes)
    pkts bytes target prot opt in out source destination

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    0 0 mailru_up all -- * * 217.29.125.1 194.67.57.26
    0 0 mailru_down all -- * * 194.67.57.26 217.29.125.1

    Chain OUTPUT (policy ACCEPT 5 packets, 281 bytes)
    pkts bytes target prot opt in out source destination

    Chain mailru_down (1 references)
    pkts bytes target prot opt in out source destination
    0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Chain mailru_up (1 references)
    pkts bytes target prot opt in out source destination
    0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Итак, теперь весь трафик от клиента 217.29.125.1 на mail.ru и обратно будет считаться в цепочках mailru_up и mailru_down. Осталось лишь написать скрипт, который будет запускаться кроном и записывать данные в лог или в СУБД, выцепляя трафик с помощью команд:

    iptables -nvL mailru_down | tail -n1 | gawk ‘{printf $2″\n»}’
    iptables -nvL mailru_up | tail -n1 | gawk ‘{printf $2″\n»}’

    Первая команда выцепляют цифру из второго столбца последней строки:
    Chain mailru_down (1 references)
    pkts bytes target prot opt in out source destination
    1324 163420 RETURN all — * * 0.0.0.0/0 0.0.0.0/0

    Тоесть цифру 163420. Вторая команда, соотв. выцпляет цифру второго столбца последней строки, но уже цепочки mailru_up.

    С помощью этого, можно создавать свои скрипты обсчёта трафика по firewall.

    После того, как скрипт считал цифры, их можно обнулить с помощью -Z или —zero:

    1. iptables -Z mailru_down
    2. iptables -Z mailru_up

    Итак, мы рассмотрели действие RETURN, в том виде, в котором оно обычно используется в IPTables FireWall.


    1. iptables таблицы и цепочки
    2. Связка iptables+mark+iproute2
    3. эта статья
    4. Команды INSERT, FLUSH, DELETE-CHAIN, ZERO, NEW-CHAIN

     
  • exebit 3:15 pm on 05.08.2010 Постоянная ссылка | Ответить
    Метки: iptables,   

    Iptables+mark+iproute2 

    1. Связка iptables+mark+iproute2

    С помощью iproute2 можно очень гибко управлять маршрутизацией, совмещая её с firewall и шейпером (к примеру с htb или с cbq). И это всё достаточно просто, если знать синтаксис. К примеру:

    У нас два провайдера: УзПАК и Интал. УзПАКовский гетвей — 217.29.124.54, инталовский: 195.69.188.233

    в итоге имеем два правила маршрутизации: основной (в таблице main) и через интал (в таблице tIntal).

    Для этого, нам нужно прежде всего отредактировать файл /etc/iproute2/rt_tables, добавив туда:
    Table 100 -- 0x64 (in hex) is channel via Intal Telecom
    100 tIntal

    Просмотреть маршруты в стандартной таблице (main) можно с помощью команды ip r (или route -n), а в таблице tIntal, с помощью команды ip r l t tIntal.

    У нас они идентичные, за исключением шлюза по умолчанию (default gateway). В случае с УзПАКом дефолт идёт через vlan2015, gw 217.29.124.54 от 217.29.124.53. В случае с Инталом дефолт идёт через vlan3052, gw 195.69.188.233, от 195.69.188.234.

    Просматриваем:

    УзПАК:

    1. ip r | grep default

    default via 217.29.124.54 dev vlan2015 src 217.29.124.53
    Интал:

    1. ip r l t tIntal | grep default

    default via 195.69.188.233 dev vlan3052 src 195.69.188.234

    просмотр таблиц показывает:

    ip ru
    0: from all lookup local
    32765: from all fwmark 64 lookup tIntal
    32766: from all lookup main
    32767: from all lookup default

    Добавление в fwmark (FireWall MARK) номера марки в iptables можно сделать с помощью команды:
    ip ru a fwmark 0x64 t tIntal

    Итак, запоминаем 0x64 (или десятеричное 100 — соответствие таблице tIntal).

    Теперь нам нужно сделать, чтобы весь трафик с сетей 217.29.126.0/24 и 217.29.127.0/24 шел через Интал. Как это сделать в iptables?.. (в iproute2 уже всё, что надо — сделано).

    Это очень просто:
    iptables -t mangle -A PREROUTING -s 217.29.126.0/24 -j MARK —set-mark 0x64
    iptables -t mangle -A PREROUTING -s 217.29.127.0/24 -j MARK —set-mark 0x64

    И всё. Теперь весь исходящий трафик будет отправляться по тому правилу, которое прописано под маркером 0x64. Смотрим в ip rule — и видем, что это таблица tIntal:

    1. ip ru | grep 64

    32765: from all fwmark 64 lookup tIntal

    а в таблице tIntal маршут по умолчанию идёт через Инталовский шлюз:
    ip r l t tIntal | grep default
    default via 195.69.188.233 dev vlan3052 src 195.69.188.234

    Вот и всё


    Список статей серии
    1. iptables таблицы и цепочки
    2.эта статья
    3. Действия ACCEPT, RETURN
    4. Команды INSERT, FLUSH, DELETE-CHAIN, ZERO, NEW-CHAIN

     
  • exebit 3:57 pm on 24.12.2008 Постоянная ссылка | Ответить
    Метки: , iptables,   

    iptables таблицы и цепочки 

    Немного теории.

    Что такое firewall знают многие, однако мало кто знает очень хорошо, как он работает. И вообще, как проходят пакеты через сам сервер, через маршрутизацию и через цепочки firewall’а.

    Объясняю популярно. Есть сервер — роутер, есть клиент и есть сайт mail.ru.
    Когда клиент набирает в браузере адрес сайта http://www.mail.ru, его компьютер в первую очередь отправляет запрос к его DNS серверу (к DNS серверу провайдера, а тот в свою очередь уже ищет IP-адрес у мирового DNS, затем у DNS самого mail.ru). Этот процесс нас особо не интересует. Идём дальше.

    Получив IP-адрес сайта mail.ru, компьютер клиента отправляет на него запрос (т.е. tcp пакет, т.к. http протокол работает по 80-му и протоколу tcp) по HTTP протоколу (попросту GET http://www.mail.ru/ — просит выдать ему страничку).

    У всех пакетов есть заголовок и данные. В заголовке храниться информация о IP-клиента (source ip address — исходный ip), IP-адрес сайта mail.ru (destination ip адрес — IP адрес получателя пакета/запроса), протокол (tcp), порт клиента, т.е. порт, откуда отправили запрос (он всегда меняется, может быть примено где то 30000 +- 10000). И порт получателя, т.е. mail.ru — тут он будет 80-й. Т.к. пакет у нас — запрос к веб серверу по протоколу http (tcp/80). Далее ещё идёт в заголовке всякая служебная информация, например контрольная сумма пакета и т.д. С данными всё понятно — там идёт просто текст в формате http протокола: GET http://www.mail.ru/ плюс информация о клиентском браузере и версии ОС.

    После того, как mail.ru получил этот пакет, он проверяет, на какой сайт отправили запрос (на mail.ru, на list.ru или на что там). И отдаёт клиенту уже html-код страницы mail.ru. Опять таки отсылается пакет, но тут уже исходный адрес (source) — IP-адрес mail.ru, адрес получателя (destination) — IP-клиента, исходный порт (source port) уже 80! А порт назначения — порт клиента, откуда был отправлен пакет, т.к. 30000 +- 10000 или даже больше.

    Именно так видит пакеты сервера, которые стоят между клиентом и самим mail.ru.

    Когда пакет от клиента проходит через сервер, на котором мы настраиваем файрволл, мы должны понимать, какие source/destination IP-адреса и порты указаны в каких пакетах. Например чтобы закрыть доступ к веб серверу сайта mail.ru (т.е. просто закрыть этот сайт), достаточно команд:

    блокируем запросы от клиента на mail.ru
    iptables -A FORWARD -s 217.29.125.1 -d 194.67.57.26 -p tcp —dport 80 -j DROP

    блокируем ответы от mail.ru клиенту
    iptables -A FORWARD -s 194.67.57.26 -d 217.29.125.1 -p tcp —sport 80 -j DROP

    Здесь: 217.29.125.1 — IP-адрес клиента, 194.67.57.26 — IP адрес сервера mail.ru, а 80 — порт веб сервера http. Как видите, я не указываю порта клиента, т.к. невозможно заранее предугадать, какой он будет (т.к. он постоянно меняется). Зато есть порт самого веб сервера, который мы и используем.

    Теперь введение в синтаксис IPTables.

    Во первых, у iptables есть три таблицы: mangle, nat и filter.

    Таблица mangle нужна, чтобы менять что-то в заголовках пакетов. TOS и TTL нас пока не интересует. А вот с помощью MARK — можно выбрать правило таблицы маршрутизации, через который пакет будет переслан на сам сайт mail.ru. Это нужно когда у нас два провайдера, и мы тут можем выбирать, через какого из них пойдёт запрос к mail.ru. Пример:

    iptables -t mangle -A PREROUTING -s 217.29.125.1 -d 194.67.57.26 -p tcp —dport 80 -j MARK —set-mark 0x64

    А в правилах маршрутизации, таблица 0x64 — у нас провайдер УзПАК (например). Маршрутизацию пока трогать не будем. Просто я показал, что можно делать с помощью mangle.

    Далее, таблица nat используется, чтобы менять source/destination IP-адреса в заголовках пакетов. Т.е. можно вместо mail.ru (194.67.57.26) отправить запрос на наш веб-сервер 217.29.124.3 (www.tps.uz). И тогда вместо mail.ru, будет открываться сайт нашего провайдера. Очень классно, когда нужно накрутить рейтинг в веб-счётчиках wink.gif

    Синтаксис:
    iptables -t nat -A PREROUTING -s 217.29.125.1 -d 194.67.57.26 -j DNAT —to-destination 217.29.124.3

    Клиенту тогда откроется вместо сайта mail.ru, сайт http://www.tps.uz wink.gif

    В практике это можно применить, для того, чтобы закрыть доступ в интернет для локальной сети, открывая вместо реальных сайтов — страничку, где будет написано, что у Вас только локалка и доступ в интернет Вам закрыт. Либо когда падает интернет канал, то провайдер таким образом сможет оповещать своих клиентов в режиме он-лайн о текущих проблемах сети. Это более приятный способ взаимоотношений с клиентами, чем если бы они видели просто «Сервер не найден».

    Теперь попробуем замену исходных IP-адресов — Source Network Address Translation — SNAT. Она нужна, когда у Вас в локалке используются нереальные (невалидные) IP-адреса, которые не смогут работать в интернете. В этом случае Вы просто заменяете их на реальный IP-адрес сервера и во всём мире клиентов будет видно под айпишников вашего сервера. Это довольно часто применяемая технология. Теперь пример:

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j SNAT —to-source 217.29.124.1

    Итак, 192.168.0.0/24 — это IP-сеть нашей локалки. Почему я указал в параметре IP-адресов получаетелей ! 192.168.0.0/24?.. Это просто означает, что все IP-адреса, кроме сети 192.168.0.0/24. Т.е. в этом случае, нам нет необходимости преобразовывать локальные IP-адреса в реальный, если они попытаются посылать пакеты через сервер так же на локальные IP-адреса своей же сети. Ну и 217.29.124.1 — это тот IP-адрес, под которым Ваши локальные компьютеры будут видны в интернете. Т.е. это реальный IP-адрес сервера.

    Вы наверное заметили, что в случае с DNAT использовался PREROUTING, а с SNAT — POSTROUTING?.. Чем же это объяснить?..

    Всё дело в том, что PREROUTING работает как только пакет пришел на сервер, до того, как он пройдёт через машрутизацию, а POSTROUTING — уже после маршрутизации. Дело в том, что для iptables требуется сначала заменить IP-адрес получателя (destination) , а потом уже осуществлять маршрутизацию. К примеру тот же случай, когда сайт mail.ru надо пускать через другого провайдера. Как он пойдёт через другого провайдера, если он уже пошел через первого?..

    К примеру, нам нужно, чтобы кому-то из клиентов вместо mail.yandex.ru открывался mail.ru. Причём mail.yandex.ru идёт через первого провайдера, а mail.ru полюбому для всех идёт через второго провайдера. С помощью DNAT, мы перенаправляем пакеты, идущие на mail.yandex.ru на mail.ru:

    iptables -t nat -A PREROUTING -s 217.29.125.1 -d 213.180.194.65 -p tcp —dport 80 -j DNAT —to-destination 194.67.57.26

    А затем, с помощью mangle, мы отправляем все пакеты идущие на mail.ru через второго провайдера:
    iptables -t mangle -A PREROUTING -s 217.29.125.1 -d 194.67.57.26 -j MARK —set-mark 0x64

    Если бы DNAT был в POSTROUTING, тоесть после маршрутизации, то мы уже не смогли бы пустить запрос на mail.yandex.ru, перенаправленный на mail.ru через другой провайдер, т.к. POSTROUTING запускается полюбому после PREROUTING.

    Как видите — всё достаточно сложно и знать один только синтаксис — бесполезно. Нужно ещё чётко представлять, как пакеты проходят через таблицы и цепочки.

    А в случае с SNAT — всё просто, сначала выполняются все передряги с пусканием через разных провайдеров в mangle PREROUTING, а потом уже мы просто меняем исходный локальный айпишник на реальный и отправляем пакет в мир (нужно не забывать, кто тут source а кто destination — в данном случае, source — это локальный IP-адрес клиента, а destination — реальный адрес веб-сервера. Это в случае с SNAT, а в случае с DNAT — source — уже реальный IP-адрес клиента и это другой случай, когда у клиента реальные IP-адреса уже. А если Вам нужно работать одновременно и с DNAT и с SNAT — это гораздо сложнее и это мы пока рассматривать не будем, т.к. тут и любой профессиональный админ может запутаться).

    Тут я вкраце объяснил, зачем нужны mangle и nat. Перейдём к filter. Для тех, кто не понял на счёт mangle/nat — не расстраивайтесь, главное понять как работает filter. И только после этого уже можно считать свой уровень профессионализма достаточным для nat, а с mangle — нужно ещё подучиться.

    Итак, таблица filter имеет три цепочки:
    INPUT — входящий трафик на сам сервер
    FORWARD — трафик, проходящий через сервер
    OUTPUT — исходящий трафик с сервера самого.

    INPUT, OUTPUT — это правила для самого сервера. Тоесть мы тут блокируем только пакеты идущие на/с сервер/а. А FORWARD — это трафик проходящий через сервер и на нём можно блокировать уже тех, кто подключён к этому серверу и выходит через него в мир.

    Рассмотрим синтаксис:
    iptables -A INPUT -s 217.29.125.1 -j DROP

    Вы уже заметили, что в случае с таблицей filter, указывать явно iptables -t filter — не обязательно, а вот с таблицами nat и mangle — надо обяхательно: iptables -t nat, iptables -t mangle.

    Далее идёт действие с цепочкой:
    -A — append — добавить это действие в конец цепочки
    -I — insert — вставить это действие в начало цепочки
    -D — delete — удалить это действие
    -F — flush— очистить всю цепочку
    -X — delete-chain — удалить цепочку
    -L — list — просмотреть правила цепочки

    И т.д. Полное описание в таблице 6.2 Команды в iptables tutorial.

    Далее идёт название цепочки — INPUT

    Следущий параметр уже может варьироваться, это может быть source/destination ip, source/destination port, protocol или вообще может не присутствовать:

    -s — source IP — исходный IP-адрес
    -d — destination IP — IP-адрес получателя

    После параметра -s или -d может использоваться символ !, он означает логическое условие НЕ. Тоесть ! 192.168.0.0/24 — означает все IP-сети, кроме 192.168.0.0/24.

    -j — означает действие этого правила цепочки:
    DROP — отбрасывать пакеты, т.е. просто игнорировать их или удалять
    ACCEPT — принимать пакеты, но дальше по цепочке они уже не пойдут!
    RETURN — выйти из текущей цепочки и продолжить выполнение дальше

    И т.д.

    Можно ещё указывать -p tcp, -p udp, -p icmp — протоколы, —sport 80 — исходный (source) порт 80-й, —dport 80 — порт получателя (destination), -i eth0 — входной сетевой интерфейс eth0, -o eth0 — исходный сетевой интерфейс eth0 и многое другое.

    Замечание: —sport и —dport могут использоваться, только если указан простокол -p tcp или -p udp. Причём не следует путать разные протоколы и порты. Например -p udp —dport 80 — ошибка, т.к. HTTP не работает по udp! А работает только по tcp.
    Список соответствий между портами и протоколами можно посмотреть в файле /etc/services. Например:
    ftp-data         20/tcp    #File Transfer [Default Data]
    ftp-data         20/udp    #File Transfer [Default Data]
    ftp              21/tcp    #File Transfer [Control]
    ftp              21/udp    #File Transfer [Control]
    ssh              22/tcp    #Secure Shell Login
    ssh              22/udp    #Secure Shell Login
    telnet           23/tcp
    telnet           23/udp
    smtp             25/tcp    mail         #Simple Mail Transfer
    smtp             25/udp    mail         #Simple Mail Transfer
    domain           53/tcp    #Domain Name Server
    domain           53/udp    #Domain Name Server
    http             80/tcp    www www-http         #World Wide Web HTTP
    http             80/udp    www www-http         #World Wide Web HTTP
    pop3            110/tcp    #Post Office Protocol - Version 3
    pop3            110/udp    #Post Office Protocol - Version 3
    https           443/tcp
    https           443/udp
    ircd            6667/tcp   #Internet Relay Chat (unoffical)

    Однако, следует помнить, хоть порт 80-й по протоколу udp зарезервирован для HTTP -- но он его реально не использует. Зато DNS активно использует порт 53 по протоколу udp. И пинги (плюс служебные команды traceroute'а) используют протокол icmp. К тому же сам traceroute использует порты выше 30000 по протоколу udp.

    Теперь осталось самое простое.

    Закрываем некоторые важные порты с мира, оставляя их доступными только с определённых IP-адресов.

    iptables -A INPUT -s ! 192.168.0.1 -p tcp --dport 22 -j DROP # закрываем SSH со всех айпишников, кроме 192.168.0.1
    iptables -A OUTPUT -d ! 192.168.0.1 -p tcp --sport 22 -j DROP # закрываем ответы с сервера по SSH для всех айпишников, кроме 192.168.0.1

    iptables -A INPUT -p tcp --dport 23 -j DROP # закрываем Telnet вообще для всех айпишников
    iptables -A OUTPUT -p tcp --sport 23 -j DROP # и закрываем ответы сервера по телнет для всех айпишников.

    И т.д.

    Теперь рассмотрим, как закрыть доступ к некоторым портам/айпишникам с самого сервера.

    iptables -A INPUT -s 192.168.0.1 -p tcp --sport 22 -j DROP # закрываем ответы с сервера 192.168.0.1 пришедшие по ssh
    iptables -A OUTPUT -d 192.168.0.1 -p tcp --dport 22 -j DROP # закрываем возможность заходить с этого сервера, на сервер 192.168.0.1 по SSH

    Можно вообще заблокировать всё с конкретного IP-адреса:

    iptables -A INPUT -s 192.168.0.1 -j DROP # вообще закрываем все пакеты, пришедшие на этот сервер, с сервера 192.168.0.1
    iptables -A OUTPUT -d 192.168.0.1 -j DROP # закрываем все пакеты от нашего сервера на 192.168.0.1

    Следует учесть, что после выполнения последих двух команд, с сервера 192.168.0.1 ваш сервер даже пинговаться не будет. Однако, он сможет преспокойно пропускать весь трафик с сервера 192.168.0.1 в мир, если правильно настроена маршрутизация.

    Поэтому нужно использовать и таблицу FORWARD чтобы вообще заблокировать всё для 192.168.0.1:
    iptables -A FORWARD -s 192.168.0.1 -j DROP # блокируем все пакеты с 192.168.0.1 в мир
    iptables -A FORWARD -d 192.168.0.1 -j DROP # блокируем все пакеты на 192.168.0.1 с мира

    Теперь вернёмся к нашему первому примеру с mail.ru. На сервере видно, что пакеты от клиента 217.29.125.1 (source IP) к сайту mail.ru (destination IP) идут от какого-то порта (source port), на 80-й порт (destination port) по протоколу tcp. А ответы от mail.ru (source IP) идут уже от 80-го порта (source port) на какой то порт клиента (destination port) клиента 217.29.125.1 (destination ip).

    Именно поэтому, выглядеть блокировка mail.ru для клиента будет так:
    iptables -A FORWARD -s 217.29.125.1 -d 194.67.57.26 -p tcp --dport 80 -j DROP # блокировка трафика от клиента на mail.ru
    iptables -A FORWARD -s 194.67.57.26 -d 217.29.125.1 -p tcp --sport 80 -j DROP # блокировка трафика от mail.ru клиенту.

    Теперь понятно, какими должны быть source IP, destination IP, source port и destination port и в каких случаях?..

    На основе всего вышесказанного, можно уже строить собственные правила firewall'а. Однако следует помнить, что любая неверно написанная команда может привести к тому, что Вы потеряете удалённый доступ к серверу!

    P.S. Остались нерассмотренными:
    1. Связка iptables+mark+iproute2
    2. Действия ACCEPT, RETURN
    3. Команды INSERT, FLUSH, DELETE-CHAIN, ZERO, NEW-CHAIN

     
c
cоздать новую запись
j
следующая запись/комментарий
k
предыдущая запись/комментарий
r
Ответить
e
Изменить
o
показать/скрыть комментарии
t
перейти наверх
l
Go to login
h
Показать/Скрыть помощь
shift + esc
Отмена