Iptables (xtables-addons): TARPIT и кое-что из защит, примерыПодписка на Комментарии к "Iptables (xtables-addons): TARPIT и кое-что из защит, примеры"

Аватар zenon

Для работы TARPIT в Gentoo:

emerge -av xtables-addons

В Debian:

aptitude install module-assistant xtables-addons-source
module-assistant prepare
module-assistant auto-install xtables-addons-source
depmod -a

С помощью Netfilter можно сделать так, чтобы сканеры портов (nmap и подобные) принимали сканируемую систему за Microsoft Windows. Для этого надо открыть порты NetBIOS, а при попытке обращения к ним отправлять соединения в TARPIT.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 135,139,1025 -j TARPIT

Защита ssh и ftp от брут-форса.

Это, наверное, одно из главных условий защиты сервера, смотрящего одним из соответствующих портов в сеть. Способы защиты любого из таких портов одинаковы.

  • Вариант 1.
  • iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j TARPIT
    iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT

    Первое правило проверяет наличие в динамическом списке ip-адреса отправтеля, и запись об этом адресе должна быть “моложе” 20 секунд. Иначе – TARPIT. Второе правило разрешает обращение на 22-й порт и заносит IP-адрес в динамический список.

  • Вариант 2.
  • iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH --hashlimit-htable-expire 60000 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j DROP

    Первое правило разрешает два соединения на 22-й порт в течение часа, после чего начнёт срабатывать второе правило. Срок действия хэш-таблицы с ip-адресами – 60 секунд, после которых можно повторить попытку. Однако при срабатывании второго правила этот счетчик будет сбрасываться. При действии этих правил в /proc/net/ipt_hashlimit будет создаваться файл с именем, заданным параметром –hashlimit-name.

    Закрытие всех портов кроме списка разрешённых.

    Бывает полезным определить, какие порты всё-таки должны бть доступны извне, а какие лучше запретить. Например, если надо запретить все порты кроме 80,25 и 110:

    for port in 80 25 110; do
    iptables -A INPUT -i eth0 -p tcp --dport $port -j ACCEPT
    done
    iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
    iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

    Здесь попытки доступа на запрещенные порты будут логироваться, и их можно просмотреть в dmesg.

    Фильтрация по содержанию.

    Если необходимо отфильтровать пакеты, содержащие внутри определённый набор символов и направленные, например, на 80-й порт на наш сервер, то можем воспользоваться правилом:

    iptables -A INPUT -p tcp --dport 80 -m string --string 'wrong' --algo kmp -j DROP

    Одно из возможных вариантов применения этой возможности – фильтрация по браузеру или операционной системе HTTP-запросов:

    iptables -A INPUT -p tcp --dport 80 -m string --algo kmp --string "Mozilla" -j REJECT

    Защита от DoS.

  • Защита от SYN-flood:
  • iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
    iptables -A INPUT -p tcp --syn -j DROP
  • Защита от сканеров портов:
  • iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
  • Защита от Ping of death:
  • iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • Фильтрация по дате:
  • Для добавления в критерии iptables логики, учитывающей время и дату, используется модуль time. С помощью него, например, можно запретить вход на HTTP-сервер с 6 до 7 утра по субботам и воскресеньям:

    iptables -A INPUT -p tcp --dport 80 -m time --timestart 06:00 --timestop 07:00 --weekdays Sat,Sun -j REJECT
    Аватар Вася

    depmod -a

    Спасибо, весь день провозился, а оказалось, что всё просто.

    PS: Капча понравилась и я её нагло сворую. Прошу за это простить :).

    Аватар Вася

    Её - в смысле идею.

    Аватар Igor

    замечательная заметка, но вот вопрос а как в CentOS подключить TARPIT. Если стоит minimal и там нету такого модуля ?

    Аватар zenon

    Igor написал:
    как в CentOS подключить TARPIT

    Нет вроде в CentOS xtables-addons... придется так:
    # yum -y install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel
    # rpm -i http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
    # yum -y install perl-Text-CSV_XS
    # wget http://sourceforge.net/projects/xtables-addons/files/Xtables-addons/1.47/xtables-addons-1.47.1.tar.xz
    # tar xvf xtables-addons-1.47.1.tar.xz
    # cd xtables-addons-1.47.1
    # ./configure
    # make
    # make install

    Лучше конечно "опакетить".
    Отсюда.
    Аватар Igor

    zenon написал:

    Igor написал:
    как в CentOS подключить TARPIT


    Нет вроде в CentOS xtables-addons... придется так:
    # yum -y install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel

    # rpm -i http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

    # yum -y install perl-Text-CSV_XS

    # wget http://sourceforge.net/projects/xtables-addons/files/Xtables-addons/1.47/xtables-addons-1.47.1.tar.xz

    # tar xvf xtables-addons-1.47.1.tar.xz

    # cd xtables-addons-1.47.1

    # ./configure

    # make

    # make install


    Лучше конечно "опакетить".
    Отсюда.

    сделал при попытке заюзать TARPIT :
    Цитата:
    [root@srv ~]# iptables -A INPUT -p tcp -m multiport --dports 135,139,1025 -j TARPIT
    iptables: No chain/target/match by that name.

    в логах:
    Цитата:
    Sep 29 01:42:28 vpn kernel: xt_TARPIT: Unknown symbol ip6_route_me_harder
    Sep 29 01:42:28 vpn modprobe: FATAL: Error inserting xt_TARPIT (/lib/modules/2.6.32-358.18.1.el6.x86_64/extra/xt_TARPIT.ko): Unknown symbol in module, or unknown parameter (see dmesg)

    Аватар zenon

    Ядро какое? Для ядра >= 3.7 надо использовать xtables версии 2.x. Для раньше 3.7 надо использовать xtables версии 1.x.
    Была подобная ошибка, на форуме.
    У меня Cent на виртуалке где-то есть, если не получится, завтра попробую пнуть.

    Аватар zenon

    А, еще - не ошибся с битностью? Инструкция выше для x86, для x86_64 соответственно изменить надо.

    Аватар Igor

    да не я установил для x86_64, эм ядро 2.6.32 и я поставил версию 1.4.1

    Добавить комментарий