Руководства, Инструкции, Бланки

Iptables руководство на русском языке

Категория: Руководства

Описание

Памятка iptables

Памятка iptables

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

Для начала схема:

Правила по умолчанию, ключ -P. возможные варианты — ACCEPT/DROP. применяется только к цепочкам:

Лично я не люблю использовать дефолтные правила, поэтому всегда пропускаю.

Очистка таблиц, ключ -F. применяется как и к цепочкам, так и к таблицам.:

Этот набор правил я использую часто. Ключ -t выбирает таблицу(в данном случае raw, если таблица не указана, то по умолчанию используется таблица filter ), ключ -i указывает интерфейс на который пришел пакет. Ключ -m comment —comment. позволяет оставить комментарий к цепочке( удобно опознавать правила). Самый главный ключ -j. определяет действие к правилу, возможны варианты: ACCEPT (разрешено), DROP (удалить). REJECT (отклонить), NOTRACK ( не отслеживать соединения) и LOG (логировать).

Например, первое правило читается так — «соединения цепочки PREROUTING в таблице raw. пришедшие на петлевой интерфейс не отслеживать ну и оставить комментарий». Остальные, думаю, понятны из комментариев.

Вот так я принимаю соединения:

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

Правила для IPSEC соединений:

Параметр -m multiport —dports позволяет указывать несколько портов. Ключ -p указывает протокол.

Обычно в конце, я использую следующие правило(закрывающее):

Для диагностики же, перед «закрывающим» я использую еще одно правило:

Это все пока. Будет, что то нужное — дополню.

Так же рекомендую посмотреть следующие статьи:

Iptables руководство на русском языке:

  • скачать
  • скачать
  • Другие статьи

    Iptables руководство на русском языке

    Iptables. Настройка для начинающих

    Feb 27 th. 2015 3:20 pm

    Небольшой первоначальный скрипт (правила, iptables faq) для десктопа или простого сервера. В данном случае примеры по работе с портами того или иного ПО, запущенного на вашем компьютере. На любом компьютере необходимо соблюдать меры безопасности. Миф о том, что Linux более защищен - не верен, все зависит от корявости рук администратора. Есть и хорошо защищенные Windows -системы, как и открытые практически любому Linux -системы. Поэтому стоит все-таки немного подумать и о сетевой защите компьютера. Ниже добавлены некоторые правила для iptables. которые могут вначале пригодиться.

    Специально заменил $IPT на /sbin/iptables, если кому-то понадобится только одно правило, чтобы не менять что-либо - просто скопировал и выполнил. Естественно, здесь пока мало правил, нет различных VPN и т.д. если есть желание - добавьте.

    Эти строки можно скопировать целиком в какой-либо скрипт и просто его выполнить. Для обычных случаев этого вполне хватит. Если какое-либо приложение не может выйти в сеть, специально добавлено логирование. Просто открывайте tail -f /var/log/syslog (или ваше, если отличное от Ubuntu ) и смотрите! Если есть вопросы - добавьте их в обсуждение, будем вместе решать.

    PS Кроме этих правил, подумайте о том, что стоит взять из статьи Оптимизация TCP .

    Скрипт и правила IPTABLES

    21 пример использования iptables для администраторов

    21 пример использования iptables для администраторов.

    Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.

    Знак # означает, что команда выполняется от root. Откройте заранее консоль с рутовыми правами - sudo -i в Debian-based системах или su в остальных.

    1. Показать статус.

    Примерный вывод команды для неактивного файрвола:

    Для активного файрвола:

    Где:
    -L. Показать список правил.
    -v. Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы 'K', 'M' or 'G'.
    -n. Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).

    2. Отобразить список правил с номерами строк.

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

    Вы можете использовать номера строк для того, чтобы добавлять новые правила.

    3. Отобразить INPUT или OUTPUT цепочки правил.

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

    4. Остановить, запустить, перезапустить файрвол.

    Силами самой системы:
    # service ufw stop
    # service ufw start

    Можно также использовать команды iptables для того, чтобы остановить файрвол и удалить все правила:
    # 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 OUTPUT ACCEPT
    # iptables -P FORWARD ACCEPT

    Где:
    -F. Удалить (flush) все правила.
    -X. Удалить цепочку.
    -t table_name. Выбрать таблицу (nat или mangle) и удалить все правила.
    -P. Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).

    5. Удалить правила файрвола.

    Чтобы отобразить номер строки с существующими правилами:
    # iptables -L INPUT -n --line-numbers
    # iptables -L OUTPUT -n --line-numbers
    # iptables -L OUTPUT -n --line-numbers | less
    # iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1

    Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
    # iptables -D INPUT 3

    Или найдем IP адрес источника (202.54.1.1) и удалим из правила:
    # iptables -D INPUT -s 202.54.1.1 -j DROP

    Где:
    -D. Удалить одно или несколько правил из цепочки.

    6. Добавить правило в файрвол.

    Чтобы добавить одно или несколько правил в цепочку, для начала отобразим список с использованием номеров строк:
    # iptables -L INPUT -n --line-numbers

    Чтобы вставить правило между 1 и 2 строкой:
    # iptables -I INPUT 2 -s 202.54.1.2 -j DROP

    Проверим, обновилось ли правило:
    # iptables -L INPUT -n --line-numbers

    Вывод станет таким:

    7. Сохраняем правила файрвола.

    Через iptables-save:
    # iptables-save > /etc/iptables.rules

    8. Восстанавливаем правила.

    Через iptables-restore
    # iptables-restore

    9. Устанавливаем политики по умолчанию.

    Чтобы сбрасывать весь трафик:
    # iptables -P INPUT DROP
    # iptables -P OUTPUT DROP
    # iptables -P FORWARD DROP
    # iptables -L -v -n

    После вышеперечисленных команд ни один пакет не покинет данный хост.
    # ping google.com

    10. Блокировать только входящие соединения.

    Чтобы сбрасывать все не инициированные вами входящие пакеты, но разрешить исходящий трафик:
    # iptables -P INPUT DROP
    # iptables -P FORWARD DROP
    # iptables -P OUTPUT ACCEPT
    # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
    # iptables -L -v -n

    Пакеты исходящие и те, которые были запомнены в рамках установленных сессий - разрешены.
    # ping google.com

    11. Сбрасывать адреса изолированных сетей в публичной сети.

    # iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    Список IP адресов для изолированных сетей:
    10.0.0.0/8 -j (A)
    172.16.0.0/12 (B)
    192.168.0.0/16 (C)
    224.0.0.0/4 (MULTICAST D)
    240.0.0.0/5 (E)
    127.0.0.0/8 (LOOPBACK)

    12. Блокировка определенного IP адреса.

    Чтобы заблокировать адрес взломщика 1.2.3.4:
    # iptables -A INPUT -s 1.2.3.4 -j DROP
    # iptables -A INPUT -s 192.168.0.0/24 -j DROP

    13. Заблокировать входящие запросы порта.

    Чтобы заблокировать все входящие запросы порта 80:
    # iptables -A INPUT -p tcp --dport 80 -j DROP
    # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

    Чтобы заблокировать запрос порта 80 с адреса 1.2.3.4:
    # iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
    # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP

    14. Заблокировать запросы на исходящий IP адрес.

    Чтобы заблокировать определенный домен, узнаем его адрес:
    # host -t a facebook.com

    Вывод: facebook.com has address 69.171.228.40

    Найдем CIDR для 69.171.228.40:
    # whois 69.171.228.40 | grep CIDR

    Вывод:
    CIDR: 69.171.224.0/19

    Заблокируем доступ на 69.171.224.0/19:
    # iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

    Также можно использовать домен для блокировки:
    # iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
    # iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP

    15. Записать событие и сбросить.

    Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:

    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    Проверим журнал (по умолчанию /var/log/messages):
    # tail -f /var/log/messages
    # grep -i --color 'IP SPOOF' /var/log/messages

    16. Записать событие и сбросить (с ограничением на количество записей).

    Чтобы не переполнить раздел раздутым журналом, ограничим количество записей с помощью -m. К примеру, чтобы записывать каждые 5 минут максимум 7 строк:
    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
    # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

    16. Сбрасывать или разрешить трафик с определенных MAC адресов.

    # iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
    ## *разрешить только для TCP port # 8080 с mac адреса 00:0F:EA:91:04:07 * ##
    # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

    17. Разрешить или запретить ICMP Ping запросы.

    Чтобы запретить ping:
    # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

    Разрешить для определенных сетей / хостов:
    # iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

    Разрешить только часть ICMP запросов:
    ### ** предполагается, что политики по умолчанию для входящих установлены в DROP ** ###
    # iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
    # iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
    # iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
    ## ** разрешим отвечать на запрос ** ##
    # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    18. Открыть диапазон портов.

    # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

    19. Открыть диапазон адресов.

    ## разрешить подключение к порту 80 (Apache) если адрес в диапазоне от 192.168.1.100 до 192.168.1.200 ##
    # iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

    ## пример для nat ##
    # iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

    20. Закрыть или открыть стандартные порты.

    Заменить ACCEPT на DROP, чтобы заблокировать порт.

    ## ssh tcp port 22 ##
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

    ## cups (printing service) udp/tcp port 631 для локальной сети ##
    iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

    ## time sync via NTP для локальной сети (udp port 123) ##
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

    ## tcp port 25 (smtp) ##
    iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

    # dns server ports ##
    iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
    iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

    ## http/https www server port ##
    iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

    ## tcp port 110 (pop3) ##
    iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

    ## tcp port 143 (imap) ##
    iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

    ## Samba file server для локальной сети ##
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

    ## proxy server для локальной сети ##
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT

    ## mysql server для локальной сети ##
    iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

    21. Ограничить количество параллельных соединений к серверу для одного адреса.

    Для ограничений используется 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. Указывает маску сети.

    Помощь по iptables.

    Для поиска помощи по iptables, воспользуемся man:
    $ man iptables

    Чтобы посмотреть помощь по определенным командам и целям:
    # iptables -j DROP -h

    Проверка правила iptables.

    Проверяем открытость / закрытость портов:
    # netstat -tulpn

    Проверяем открытость / закрытость определенного порта:
    # netstat -tulpn | grep :80

    Проверим, что iptables разрешает соединение с 80 портом:
    # iptables -L INPUT -v -n | grep 80

    В противном случае откроем его для всех:
    # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

    Проверяем с помощью telnet
    $ telnet ya.ru 80

    Можно использовать nmap для проверки:
    $ nmap -sS -p 80 ya.ru

    Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.

    Iptables отличный инструмент в руках администратора. Если нужно легко и просто защититься в десктопной Ubuntu, то стоит знать, что есть удобная консольная надстройка над iptables под названием UFW, а к ней есть графическая программа GUFW. Сделать свою Ubuntu ещё более защищённой поможет видеоматериал.

    Iptables: сетевая безопасность и фильтрация пакетов

    iptables: сетевая безопасность и фильтрация пакетов

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

    В Linux файрвол является модулем ядра, называемым netfilter и представляет собой набор хуков (hooks) для работы с сетевым стеком. Интерфейсом для модификации правил, по которым файрвол обрабатывает пакеты, служит утилита iptables для IPv4 и утилита ip6tables для IPv6.

    Всю работу по фильтрации трафика выполняет ядро системы. Iptables не является демоном и не создает новых процессов в системе. Включение или выключение iptables это всего лишь отправка сигнала в ядро. Большая скорость фильтрации достигается за счёт анализа только заголовков пакетов.

    К основным возможностям iptables относиться:

    • фильтрация трафика на основе адресов отправителя и получателя пакетов, номеров портов;
    • перенаправление пакетов по определенным параметрам;
    • организация доступа в сеть (SNAT);
    • проброс портов из глобальной сети в локальную (DNAT);
    • ограничение числа подключений;
    • установление квот трафика;
    • выполнение правил по расписанию;

    Процесс работы iptables

    Рассмотрим основной процесс работы iptables (источник картинки rigacci.org ).

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

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

    1. mangle – используется для внесения изменений в заголовок пакета;
    2. nat – используется для трансляции сетевых адресов;
    3. filter – для фильтрации трафика;

    Основное назначение таблицы mangle - внесение изменений в заголовок пакета. В этой таблице могут производиться следующие действия:

    • установка бита Type Of Service;
    • установка поля Time To Live;
    • установка метки на пакет, которая может быть проверена в других правилах;

    Цепочки в таблице mangle :

    • PREROUTING — используется для внесения изменений в пакеты на входе в iptables, перед принятием решения о маршрутизации;
    • POSTROUTING — используется для внесения изменений в пакеты на выходе из iptables, после принятия решения о маршрутизации;
    • INPUT — используется для внесения изменений в пакеты, перед тем как они будут переданы локальному приложению;
    • OUTPUT — используется для внесения изменений в пакеты, поступающие от приложения внутри iptables;
    • FORWARD — используется для внесения изменений в транзитные пакеты;

    Таблица используется для преобразования сетевых адресов (Network Address Translation) и когда встречается пакет, устанавливающий новое соединение. В этой таблице могут производиться следующие действия:

    • DNAT (Destination Network Address Translation) – преобразование адреса назначения в заголовке пакета;
    • SNAT (Source Network Address Translation) – изменение исходного адреса пакета;
    • MASQUERADE – используется в тех же целях, что и SNAT. но позволяет работать с динамическими IP-адресами;

    Цепочки в этой таблице:

    • PREROUTING – используется для внесения изменений в пакеты на входе в iptables;
    • OUTPUT – используется для преобразования адресов в пакетах, перед дальнейшей маршрутизацией;
    • POSTROUTING – используется для преобразования пакетов, перед отправкой их в сеть;

    Таблица используется для фильтрации пакетов. В этой таблице есть три цепочки:

    1. INPUT – цепочка для входящих пакетов;
    2. FORWARD – цепочка для пересылаемых (транзитных) пакетов;
    3. OUTPUT – цепочка для исходящих пакетов;

    Пакет, проходящий через эти цепочки, может подвергаться действиям: ACCEPT. DROP. REJECT. LOG .

    Подытожим, прибывший пакет проходит по цепочке правил. Каждое правило содержит условие и цель (действие). Если пакет удовлетворяет условию то он передается на цель, в противном случае к пакету применяется следующее правило в цепочке. Если пакет не удовлетворил ни одному из условий в цепочке, то к нему применяется действие по умолчанию.

    Восстановление правил из файла

    Каждое правило в iptables — это отдельная строка, сформированная по определенным правилам и содержащая критерии и действия. В общем виде правило имеет такой формат:

    • t table — задает имя таблицы, для которой будет создано правило;
    • command — команда, которая определяет действие iptables — добавить правило, удалить правило и т. д.;
    • match — задает критерии проверки, по которым определяется, попадает ли пакет под действие правила или нет;
    • target/jump — какое действие должно быть выполнено при выполнении критерия;
    • -A - добавление правила в цепочку, правило будет добавлено в конец цепочки;
    • -D - удаление правила из цепочки;
    • -R - заменить одно правило другим;
    • -I - вставить новое правило в цепочку;
    • -L - вывод списка правил в заданной цепочке;
    • -F - сброс всех правил в заданной цепочке;
    • -Z - обнуление всех счетчиков в заданной цепочке;
    • -N - создание новой цепочки с заданным именем;
    • -X - удаление цепочки;
    • -P - задает политику по умолчанию для цепочки;
    • -E - переименование пользовательской цепочки;

    Примеры команд iptables

    Пакеты можно фильтровать по таким параметрам:

    Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.1.95:

    Можно использовать доменное имя для указания адреса хоста:

    Также можно указать целую под сеть:

    Также вы можете использовать отрицание (знак !). Например, все пакеты с хостов отличных от 192.168.1.96 будут уничтожаться:

    Разрешаем хождение трафика по localhost:

    Логируем попытки спуфинга с префиксом "IP_SPOOF A: " и дропаем соединение

    Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.1.95:

    Запретить доступ к ресурсу

    Как и в случае с источником пакета можно использовать адреса под сети и доменные имена. Отрицание также работает.

    Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из /etc/protocols ).

    Разрешаем входящие эхо-запросы

    Разрешаем все исходящие пакеты с порта 80:

    Заблокировать все входящие запросы порта 80:

    Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

    Открыть диапазон портов

    Разрешить подключения по HTTP

    Разрешить подключения по SSH

    Разрешаем получать данные от DHCP-сервера

    Разрешаем rsync с определенной сети

    Разрешаем IMAP/IMAP2 трафик

    Разрешить исходящие HTTP, FTP, DNS, SSH, SMTP

    Разрешаем mysql для локальных пользователей

    Разрешить CUPS (сервер печати, порт 631) для пользователей внутри локальной сети

    Разрешить синхронизацию времени NTP для пользователей внутри локальной сети

    Разрешить исходящий Google Talk

    Для примера направим трафик с порта 442 на 22, это значит что входящие ssh-соединения могут быть принятыми с порта 422 и 22.

    Также надо разрешить входящие соединения с порта 422

    Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

    Действия над пакетами

    Для указания действия (цели) с пакетом служит опция -j. Основные действия:

    • ACCEPT - разрешить пакет;
    • DROP - уничтожить пакет;
    • REJECT - будет отправлено ICMP сообщение, что порт недоступен;
    • LOG - информация об этом пакете будет добавлена в системный журнал. Не прерывает цепочку.
    • RETURN - возвращает пакет в ту цепочку, из которой он прибыл;
    • SNAT - применить source NAT ко всем удовлетворяющим условию пакетам. Может использоваться только в цепочках POSTROUTING и OUTPUT таблицы NAT ;
    • DNAT - применить destination NAT ко всем удовлетворяющим условию пакетам. Может использоваться только в цепочке POSTROUTING таблицы NAT*.
    • MASQUERADE - может применяться только в цепочке POSTROUTING таблицы NAT. Используется при наличии соединения с динамическим IP. Похож на SNAT. однако имеет свойство забывать про все активные соединения при потере интерфейса. Это полезно при наличии соединения, на котором время от времени меняется IP-адрес, но при наличии постоянного IP это только доставит неудобства. В том числе поэтому рекомендуется для статических IP использовать SNAT .

    DROP – просто закрывает соединение и не отправляет ничего в ответ отправителю. Как итог имеем "мертвое"" соединение, которое потом убивается по таймауту. Но зато при сканировании закрытых портов, они будут помечаться как filtered, что потенциально говорит, что что-то всё-таки слушает порт.

    REJECT – сбрасывает соединение и отправляет в ответ сообщение, указанное в опции –reject-with. По умолчанию отправляется host is unreachable. Зато при сканировании (если установлено –reject-with icmp-port-unreachable) порт светится не будет.

    И так, что же всё-таки использовать? На мой взгляд, лучше DROP, так как при больших атаках, вы просто перекроете себе кислород, отвечая всем «host is unreachable«. Этот ответ будет потреблять больше ресурсов, нежели мёртвое соединение (при желаении время таймаута можно сократить).

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

    Пример базового набора правил

    В большинстве случаев конечному пользователю (рабочая станция) достаточно выполнить такую последовательность команд:

    В iptables есть возможность подключать модули, для этого используется опция -m .

    Модуль limit предназначен для ограничения нагрузки, например:

    Разрешаем поддерживать открытыми уже установленные соединения

    Список текущих правил

    • L - показать список правил;
    • v - отображать дополнительную информацию; * n - отображать ip адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение);
    • -line-numbers - вывод номеров строк;

    Очистка всех правил

    Очистка правил в цепочке

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

    Удалить правило, в котором адрес источника (192.168.1.15)

    Защита от DDoS с помощью iptables

    DoS-атаки (атаки отказ в обслуживании) - это вид злонамеренной деятельности, основная задача которой вывести компьютерную систему из рабочего состояния и правильного выполнения возложенных на нее функций. Т.е. довести до состояния "зациклевания", что грозит простоями, потерей посетителей/клиентов и убытками. DoS-атаки подразделяются на два вида итсочник :

    • Удаленная эксплуатация ошибок в ПО с целью привести его в нерабочее состояние;
    • Flood - посылка на адрес жертвы огромного количества бессмысленных пакетов. Целью флуда может быть канал связи или ресурсы машины. В первом случае поток пакетов занимает весь пропускной канал и не дает атакуемой машине возможность обрабатывать легальные запросы. Во втором - ресурсы машины захватываются с помощью многократного и очень частого обращения к какому-либо сервису, выполняющему сложную, ресурсоемкую операцию. Это может быть, например, длительное обращение к одному из активных компонентов (скрипту) web-сервера. Сервер тратит все ресурсы машины на обработку запросов атакующего, а пользователям приходится ждать. Флуд бывает разным: ICMP-флуд, SYN-флуд, UDP-флуд и HTTP-флуд

    Сбор информации о сетевых соединениях

    Просмотр открытых соединений

    Количество подключений к 80 порту

    TCP-дамп подключений (на какой домен чаще всего идут запросы)

    SYN-флуд можно проверить через подсчет числа полуоткрытых TCP-соединений

    Защита от разных видов флуда.

    ICMP-флуд. Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потока трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:

    Или с помощью iptabels :

    SYN-флуд. Один из распространенных способов не только забить канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство ОС ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты. Идентифицировать такую атаку просто: достаточно попробовать подключиться к одному из сервисов.

    Оборонительные мероприятия обычно включают в себя:

    Увеличение очереди "полуоткрытых" TCP-соединений:

    Уменьшение времени удержания "полуоткрытых" соединений:

    Включение механизма TCP syncookies:

    Ограничение максимального числа "полуоткрытых" соединений с одного IP к конкретному порту:

    UDP-флуд. Типичный метод захламления полосы пропускания. Основан на бесконечной посылке UDP-пакетов на порты различных UDP-сервисов. Легко устраняется за счет отрезания таких сервисов от внешнего мира и установки лимита на количество соединений в единицу времени к DNS-серверу на стороне шлюза:

    HTTP-флуд. Один из самых распространенных на сегодняшний день способов флуда. Основан на бесконечной посылке HTTP-сообщений GET на 80-ый порт с целью загрузить web-сервер настолько, чтобы он оказался не в состоянии обрабатывать все остальные запросы. Часто целью флуда становится не корень web-сервера, а один из скриптов, выполняющих ресурсоемкие задачи или работающий с базой данных. В любом случае, индикатором начавшейся атаки будет служить аномально быстрый рост логов web-сервера.

    Определившись с IP виновника начинаем дропать по IP-адресам

    Или сразу по подсетям:

    Для ограничения количества одновременных подключений к серверу для клиента по IP используется модуль connlimit. Ограничим количество параллельных подключений по SSH до трех, для одного клиента

    Ограничим количество параллельных подключений по HTTP до трех, для одного клиента

    • --connlimit-above 10 - условие для проверки одновременных подключенийне более 10;
    • --connlimit-mask 24 - группировка хостов по длине префикса (для IPv4 это число должно быть 0 и 32;

    Также ограничить количество подключений в единицу времени можно с помощью модуля limit .

    • -m limit - подключаем модуль limit ;
    • –limit 25/minute - порог в 25 подключений в минуту;
    • –limit-burst 100 - условие включения порога: после достижения 100 подключений;

    Добавь в /etc/sysctl.conf следующие строки:

    Балансировка нагрузки с помощью iptables

    Надстройки, GUI к iptables

    Проверить настройки iptables можно с помощью nmap .