LINUX.ORG.RU
ФорумAdmin

Отправить клиенту TCP RST

 , , , ,


1

1

Имеем набор правил для Suricata:

pass tcp any any <> any any (content: "GET /d/247048.html";content: "Host: memo.ru"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:10;)
pass tcp any any <> any any (content: "GET /d/247048.html";content: "Host: www.memo.ru"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:11;)

pass tcp any any <> any any (content: "GET /news/286782/rossiya_ustroila_ocherednuyu_provokatsiyu_na_granitse_s_ukrainoyi_mid";content: "Host: censor.net.ua"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:12;)
pass tcp any any <> any any (content: "GET /news/286782/rossiya_ustroila_ocherednuyu_provokatsiyu_na_granitse_s_ukrainoyi_mid";content: "Host: www.censor.net.ua"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:13;)


pass tcp any any <> any any (content: "GET http://memo.ru/d/247048.html";content: "Host: memo.ru"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:20;)
pass tcp any any <> any any (content: "GET http://www.memo.ru/d/247048.html";content: "Host: www.memo.ru"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:21;)

pass tcp any any <> any any (content: "GET http://censor.net.ua/news/286782/rossiya_ustroila_ocherednuyu_provokatsiyu_na_granitse_s_ukrainoyi_mid";content: "Host: censor.net.ua"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:22;)
pass tcp any any <> any any (content: "GET http://www.censor.net.ua/news/286782/rossiya_ustroila_ocherednuyu_provokatsiyu_na_granitse_s_ukrainoyi_mid";content: "Host: www.censor.net.ua"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:23;)


#pass tcp any any <> any any (content: "Firefox/40.0";replace: "Firefox/35.0"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x6/0xffffffff; sid:10202;)
#pass tcp any any <> any any (content: "GET http://";content: "Host: ";content: "HTTP"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:10200;)
pass tcp any any <> any any (pcre: "/\n/i"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x8/0xffffffff; sid:10208;)
#pass tcp any any <> any any (content: "CONNECT ";content: "HTTP"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:10204;)
root@debian:/home/admin# 

iptables:

root@debian:/home/admin# iptables -t mangle -L -v
Chain PREROUTING (policy ACCEPT 457K packets, 595M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 621K  627M NFQ_DV     all  --  any    any     anywhere             anywhere            
 500K  604M REMARK_BL  all  --  any    any     anywhere             anywhere            

Chain INPUT (policy ACCEPT 2228 packets, 152K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 454K packets, 595M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 2751 packets, 369K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 457K packets, 595M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain NFQ_DV (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 392K  582M RETURN     all  --  any    any     anywhere             anywhere             connbytes 1000000 connbytes mode bytes connbytes direction both
 121K   24M NFQUEUE    all  --  any    any     anywhere             anywhere             mark match ! 0x1/0x1 NFQUEUE num 0 bypass

Chain REMARK_BL (1 references)
 pkts bytes target     prot opt in     out     source               destination         
  154 46929 CONNMARK   all  --  any    any     anywhere             anywhere             mark match 0x2/0xfe CONNMARK save
   19 16502 CONNMARK   all  --  any    any     anywhere             anywhere             mark match 0x8/0xfe connmark match  0x2/0xfe CONNMARK xset 0x98/0xfe
  238 70850 LOG        all  --  any    any     anywhere             anywhere             connmark match  0x2/0xfe LOG level warning prefix "DPI MARK 0x2/0xfe"
  238 70850 CONNMARK   all  --  any    any     anywhere             anywhere             connmark match  0x2/0xfe CONNMARK restore
root@debian:/home/admin# 


root@debian:/home/admin# iptables -L -v
Chain INPUT (policy ACCEPT 701 packets, 42762 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 443K packets, 637M bytes)
 pkts bytes target     prot opt in     out     source               destination         
   61 61851 REJECT     tcp  --  any    any     anywhere             anywhere             connmark match  0x98/0xfe reject-with tcp-reset

Chain OUTPUT (policy ACCEPT 943 packets, 128K bytes)
 pkts bytes target     prot opt in     out     source               destination         
root@debian:/home/admin#

Если попытаться перейти на сайт, указанный в Suricata,то соединение начинает висеть на Ожидании ответа (браузер не получает синволы). Я провирял, если сервер пытается отправить ответ, ему отдают RST. Задача: отправить клиенту RST или поддельный ответ средствами iptables.

★★★★★

Ответ на: комментарий от ne-vlezay

Не совсем так. Ответ идет тому, кто послал этот пакет.

т.е. если ты делаешь reject на пакет пришедший от клиента, то он получил этот ресет. Беда в том, что в этом случае сервер его не получит (реально ddos сделать). Область применения - ресет в ответ на первый синк.

vel ★★★★★
()
Ответ на: комментарий от ne-vlezay

Нужно дописать код.

Этот вопрос поднимался несколько раз в LKML, но то ли патчи были плохо написаны, то ли кто-то не смог пропихнуть их в ядро. А воз и ныне там.

У меня есть самописный патчик для >3.14, но беда в том, что он совмещен еще с одним патчем и его оттуда нужно выковыривать. Для 4.1.9 он есть отдельно.

vel ★★★★★
()
Ответ на: комментарий от vel

По идее в -j REJECT хорошо было бы добовать отправку 302 Redirect. Хотя в некоторых случеях это может привести к непредсказуемым последствиям

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от vel

Этот вопрос поднимался несколько раз в LKML, но то ли патчи были плохо написаны, то ли кто-то не смог пропихнуть их в ядро. А воз и ныне там.

Скорее всего крупные вендоры DPI систем. Представьте себе, вот включат в ядро данные патчи, и сразу же iptables приобретёт полный функционал. А если тут ещё и Suricat'у подключить, которая понимает много правил и поддерживает LUA, на которым можно писать от простого сетевого антивируса, до блокировщика сайтов из реестра запрещённых сайтов в РФ, или просто «вшивать» кряки в лицензионный софт на лету. Кроме того, с помощью этой Suricat'ы можно например сделать QoS и многое другое. А если её ещё и совместить с нормальным iptables, то мы получим полнофункциональную DPI-систему. И тогда все Cisco DPI, Corbon Reductor, СКАТ DPI, и всякие там барьеры полетят на помойку. Все пересядут на бесплатное ПО. И тогда вышеупомянутые компании разорятся и потеряют свой хлеб. На сколько мне известно, что поддержка IPv6 есть только в СКАТ. Даже во всеми любимом кбоне нету IPv6. А Suricata может работать не только с IPv4, но и с IPv6.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

ты в linux-kernel патчи пробовал пропихивать?

На счет ресета в обе стороны - можно соорудить велосипед из connmark/CONNMARK и REJECT

Для разрыва соединения маркируем соединение через CONMARK и отсылаем ресет стразу. Далее посылаем ресет в ответ на все, что появляется в соединении. Вторая сторона по таймауту будет попытавшись что-то отослать получит ресет.

vel ★★★★★
()
Ответ на: комментарий от vel

У меня DPI и так использует следующий велосипед:
Матчим host: GET сайта из реестра оппозиционных организаций:

pass tcp any any <> any any (content: "GET /d/247048.html";content: "Host: memo.ru"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:10;)

Матчим сайт из реестра запрещённых сайтов, который генерируется скриптом:
pass tcp any any <> any any (content: "GET /news/286782/rossiya_ustroila_ocherednuyu_provokatsiyu_na_granitse_s_ukrainoyi_mid";content: "Host: censor.net.ua"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x2/0xffffffff; sid:100;)

Далее мы матчим весь входящий поток с запрещённых сайтов вот этим правилом:
pass tcp any any <> any any (pcre: "/\n/i"; msg: "PROXY_METHOD_GET"; nfq_set_mark:0x8/0xffffffff; sid:10208;)

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

Теперь iptables:
Матчим соединения со всех Host: GET:
iptables -t mangle -N DPI_MATCH
iptables -t mangle -A DPI_MATCH -m mark 0x2/0xfe -j CONNMARK --save-mark
Теперь самое интересное:
iptables -t mangle -A DPI_MATCH -m mark 0x8/0xfe -m connmark --mark 0x2/0xfe -j CONNMARK --set-mark 0x98/0xfe
Собственно говоря, этом правилом мы «прыгаем» на седьмой уровень модели OSI. Вот тут и получается то, что src и dst меняются местами.
Завершаем анализ пакетов, и сбрасываем марку для дальнейшего использования.
Теперь делаем:
iptables -A FORWARD -m connmark --mark 0x98/0xfe -p tcp -j REJECT --reject-with tcp-rst


Для всего этого изврата мы используем Suricata.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от vel

cast vel

У меня есть самописный патчик для >3.14, но беда в том, что он совмещен еще с одним патчем и его оттуда нужно выковыривать. Для 4.1.9 он есть отдельно.

Интересно было бы взглянуть на этот патч

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от vel

vel

При попытке устоновать на 4.2.1 ошибка:

root@debian:/usr/src/linux-4.2.1# make
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/bounds.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CC [M]  net/bridge/netfilter/nft_reject_bridge.o
  CC      net/ipv4/netfilter/nf_reject_ipv4.o
  CC      net/ipv4/netfilter/ipt_REJECT.o
  LD      net/ipv4/netfilter/built-in.o
  CC [M]  net/ipv4/netfilter/nft_reject_ipv4.o
  LD      net/ipv4/built-in.o
  CC [M]  net/netfilter/nft_reject_inet.o
net/netfilter/nft_reject_inet.c: In function 'nft_reject_inet_eval':
net/netfilter/nft_reject_inet.c:35:4: error: too few arguments to function 'nf_send_reset'
    nf_send_reset(pkt->skb, pkt->ops->hooknum);
    ^
In file included from net/netfilter/nft_reject_inet.c:17:0:
include/net/netfilter/ipv4/nf_reject.h:9:6: note: declared here
 void nf_send_reset(struct sk_buff *oldskb, int hook, int rev);
      ^
scripts/Makefile.build:264: recipe for target 'net/netfilter/nft_reject_inet.o' failed
make[2]: *** [net/netfilter/nft_reject_inet.o] Error 1
scripts/Makefile.build:403: recipe for target 'net/netfilter' failed
make[1]: *** [net/netfilter] Error 2
Makefile:949: recipe for target 'net' failed
make: *** [net] Error 2
root@debian:/usr/src/linux-4.2.1#

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

И тогда все Cisco DPI, Corbon Reductor, СКАТ DPI, и всякие там барьеры полетят на помойку

Подскажи, пожалуйста, сколько нужно железа чтобы прокачать, скажем, 50Gbps и например 1М пользователей?

zolden ★★★★★
()
Ответ на: комментарий от ne-vlezay

При попытке собрать на 4.1.10:

  LD      net/ipv4/built-in.o
  CC [M]  net/netfilter/nft_reject_inet.o
net/netfilter/nft_reject_inet.c: In function 'nft_reject_inet_eval':
net/netfilter/nft_reject_inet.c:35:4: error: too few arguments to function 'nf_send_reset'
    nf_send_reset(pkt->skb, pkt->ops->hooknum);
    ^
In file included from net/netfilter/nft_reject_inet.c:17:0:
include/net/netfilter/ipv4/nf_reject.h:9:6: note: declared here
 void nf_send_reset(struct sk_buff *oldskb, int hook, int rev);
      ^
scripts/Makefile.build:264: recipe for target 'net/netfilter/nft_reject_inet.o' failed
make[2]: *** [net/netfilter/nft_reject_inet.o] Error 1
scripts/Makefile.build:403: recipe for target 'net/netfilter' failed
make[1]: *** [net/netfilter] Error 2
Makefile:947: recipe for target 'net' failed
make: *** [net] Error 2

патч не рабочий

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от zolden

Если так посчитать, то около 10 серверов с 10-ти гигабитными сетивухами. Мохно и два сервака. Недостаток этих решений, что там надо каждый месец платить.

ne-vlezay ★★★★★
() автор топика
Последнее исправление: ne-vlezay (всего исправлений: 1)
Ответ на: комментарий от ne-vlezay

гм, а я nft не использую :)

добавь в nft_reject_inet.c:35 третьм параметром 0.

И про ipv6 оно не знает.

vel ★★★★★
()
15 декабря 2015 г.
Ответ на: комментарий от ne-vlezay

detect-parce.c строки 714 и далее

int SigParseAction(Signature *s, const char *action) {
    if (strcasecmp(action, "alert") == 0) {
        s->action = ACTION_ALERT;
        return 0;
    } else if (strcasecmp(action, "drop") == 0) {
        s->action = ACTION_DROP;
        return 0;
    } else if (strcasecmp(action, "pass") == 0) {
        s->action = ACTION_PASS;
        return 0;
    } else if (strcasecmp(action, "reject") == 0) {
        if (!(SigParseActionRejectValidate(action)))
            return -1;
        s->action = ACTION_REJECT|ACTION_DROP;
        return 0;
    } else if (strcasecmp(action, "rejectsrc") == 0) {
        if (!(SigParseActionRejectValidate(action)))
            return -1;
        s->action = ACTION_REJECT|ACTION_DROP;
        return 0;
    } else if (strcasecmp(action, "rejectdst") == 0) {
        if (!(SigParseActionRejectValidate(action)))
            return -1;
        s->action = ACTION_REJECT_DST|ACTION_DROP;
        return 0;
    } else if (strcasecmp(action, "rejectboth") == 0) {
        if (!(SigParseActionRejectValidate(action)))
            return -1;
        s->action = ACTION_REJECT_BOTH|ACTION_DROP;
        return 0;
    } else {
        SCLogError(SC_ERR_INVALID_ACTION,"An invalid action \"%s\" was given",action);
        return -1;
    }
}
то есть чтобы отправить rst клиенту необходимо заменить pass на rejectboth

Расскажите про свой DPI для реестра, сейчас делаю тоже самое на основе suricata+cuda. И кстати, согласно правилам блокировки - rst отправлять нельзя, нужно отвечать кодами 301 или 302. Точнее «ревизор», стоимостью 84 ляма, корректно обрабатывает только 301 и 302. PS: вы реально думаете что задействую iptables вы сможете прокачать хоть какой то значительный объем данных без огромных задержек ?

Dimonyga
()
Ответ на: комментарий от Dimonyga

Если на счёт редирект - можно использовать nfq_filter. Правда он с разбитыми пакетами работать не будет. Но, это при желании можно дописать. Короче, он ищет GET и Host: в одном пакете

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

AF-PACKET. Работает хорошо. Но у меня беда сейчас в том что я не могу корректно отправить 302 Found, ну уходит он почемуто. И еще беда с русскими символами в URI, а точнее то, что там в реестре бардак и часть написана так, а часть этак. А в целом - всё хорошо.

Dimonyga
()
Ответ на: комментарий от ne-vlezay

Предлагаю поделиться наработками, мне больше всего интересен парсер XML-ки от РКН, я же взамен могу дать наработки по редиректу, там говнокод конечно но можно и причесать. Пиши в скайп, ник такой же как и на форуме

Dimonyga
()
Ответ на: комментарий от Dimonyga

Выложи пожалуйста свой конфиг. AF-PACKET у меня работает плохо. Кстати, я DPI пытался поставить на ARM-боксе (старый разбитый телефон) Кстати, как ты 302 Found хочишь направлять? поделись решением с linux.org.ru.

ne-vlezay ★★★★★
() автор топика
Последнее исправление: ne-vlezay (всего исправлений: 1)
Ответ на: комментарий от ne-vlezay

AF-PACKET

  - interface: eth1
    threads: 1
    cluster-id: 98
    cluster-type: cluster_flow
    defrag: yes
    buffer-size: 64535
    copy-iface: eth0
    copy-mode: ips
    use-mmap: yes

  - interface: eth0
    threads: 1
    cluster-id: 97
    cluster-type: cluster_flow
    defrag: yes
    buffer-size: 64535
    copy-iface: eth1
    copy-mode: ips
    use-mmap: yes
Код отправки 302 Found, в файле /src/respond-reject-libnet11.c добавляем
void RejectSendLibnet11L3IPv4TCPHTTP (Libnet11Packet *lpacket, char *devname)
{
    static u_int8_t httphead[] =
    "HTTP/1.0 302 Found\n"
    "Location: http://тутурл\n"
    "Connection:close\n"
    "Content-Length: 0\n";
    
    char ebuf[LIBNET_ERRBUF_SIZE];

    int SIZEHTTPHEAD = strlen((const char*) httphead);
    
    libnet_t *c;
    
    if ((c = libnet_init(LIBNET_RAW4, devname, ebuf)) == NULL) {
        SCLogError(SC_ERR_LIBNET_INIT,"libnet_init failed: %s", ebuf);
    	goto cleanup;
	} 
    
    if (libnet_build_tcp(lpacket->sp, 
		    lpacket->dp, 
		    lpacket->seq,
		    lpacket->ack, 
		    TH_ACK | TH_PUSH | TH_FIN, 
		    4096, 
		    0, 
		    0, 
		    20 + SIZEHTTPHEAD,
		    httphead, 
		    SIZEHTTPHEAD, 
		    c, 
		    0)<0 ) {
		SCLogError(SC_ERR_LIBNET_BUILD_FAILED,"libnet_build_tcp for http %s", libnet_geterror(c));
		goto cleanup;
	} 

   if (libnet_build_ipv4(40 + SIZEHTTPHEAD, 
			0, 
			0,
			0x4000, 
			63,
			IPPROTO_TCP, 
			0, 
			lpacket->src4, 
			lpacket->dst4, 
			0, 
			0, 
			c, 
			0) < 0) {
			SCLogError(SC_ERR_LIBNET_BUILD_FAILED,"libnet_build_ipv4 http %s", libnet_geterror(c));
			goto cleanup;
		}
    if (libnet_write(c)==-1) {
		SCLogError(SC_ERR_LIBNET_WRITE_FAILED,"libnet_write http failed: %s", libnet_geterror(c));
		goto cleanup;
	}
    
cleanup:
    libnet_destroy (c);
}
Ну и в блоке
case REJECT_DIR_SRC: 
в самом конце вызываем
RejectSendLibnet11L3IPv4TCPHTTP (&lpacket, devname);
ЗЫ: за хардкод не пинать, переделаю после того как разберусь с остальным

Dimonyga
()
Ответ на: комментарий от Dimonyga

Кстати, у тебя:

    copy-mode: ips
я бы сделал:
    copy-mode: ids
скинь пожалюйста немного своих правил и не будет ли конфликтов с другими программами, с такими как ftp-клиент

ne-vlezay ★★★★★
() автор топика
Последнее исправление: ne-vlezay (всего исправлений: 1)
Ответ на: комментарий от ne-vlezay

IDS для SPAN порта, не ?

Правила вида :

reject http $HOME_NET any -> $EXTERNAL_NET any (content:"8torrent.net"; http_header; content:"|2F 34 34 37 31 2D 6D 65 74 6F 64 2D 32 30 31 35 2E 68 74 6D 6C|"; http_uri; sid:26167;)
Как понятно из правила - ни на что кроме http не влияет =)

Dimonyga
()
Ответ на: комментарий от ne-vlezay

HP ProLiant DL 380G4

cpu family	: 15
model		: 4
model name	: Intel(R) Xeon(TM) CPU 3.40GHz
stepping	: 10
microcode	: 2
cpu MHz		: 3399.866
2 вот таких проца, всего 4 потока, жует 300 мегабит и может еще до 500 прожевать. Дальше нужны будут пляски с бубном.

Dimonyga
()
Ответ на: комментарий от Dimonyga

как я понял, таких правил загружается много

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Dimonyga

А кстати, сожно ли на этот сервер зеркалиовать трафик

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Dimonyga

Парсер XML

У меня есть парсер написанный на С++, писал согласно рекомендациям РКН. У меня FreeBSD и компилятор clang. Использовал стандартные типы С++. Интересует сильно возможность средствами suricata реализовать редирект на страницу заглушку.

zevs5
()
Ответ на: комментарий от ne-vlezay

Аватарка у тебя прикольная, подходит хорошо.

Ты по моему обещал свой парсер выложить, или мне память изменяет ?

Dimonyga
()
Ответ на: комментарий от Dimonyga

у меня почему-то на VirtualBox глючил AF-PACKET. А кстати, можно ли на этот сервер фильтрации mirror настроить? На счёт парсера: на данный момент я доступ к реестру не имею, так как я являюсь оператором эвм. Дома на сервере использую пока такой скрипт:

#!/bin/bash

DUMP="/opt/dump.csv"
API="https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv"
IPT_RULE_IP="zapret_gov"
# IPT_RULE_URL="ZAPRET_GOV_URL"
RULEFILE=/tmp/rule.txt
ZAPRET_GOV_FILE=/opt/zapret_gov.txt
GW=10.255.0.1
ACTION=$1

search_dump ()
{
	if ls $DUMP 2>/dev/null >/dev/null
	then
		true
	else
		echo "Dump not found. Rebuilding..."
		if wget $API -O- 2>/dev/null >/dev/null  >$DUMP
		then
			echo "Rebuild OK"
		else
			echo "Rebuild FAILED"
			rm $DUMP
			exit 1
		fi
	fi
}

add_rule_to_ip ()
{
	echo "Cleaning..."
	ip route flush proto 122 table 122
	echo "Build iproute from ip rules..."
	for a in $(cat $DUMP|iconv -f cp1251 -t utf8|tr ' |' ' '|tr '  '  ','|tr ';' ' '|awk '{print $1}'|sed 's/,,,/=/g'|tr '=' '\n'|sort -u|sed '/Updated:/d')
	do
		# iptables -A $IPT_RULE_IP -d $a -m ndpi --http --ssl -j $IPT_RULE_URL
	ip route add $a via $GW proto 122 table 122 >/dev/null 2>/dev/null
	done
}

iptables_zapret_gov ()
{
	ipset -F $IPT_RULE_IP
	echo "Build ipset from ip rules..."
	for a in $(cat $DUMP|iconv -f cp1251 -t utf8|tr ' |' ' '|tr '  '  ','|tr ';' ' '|awk '{print $1}'|sed 's/,,,/=/g'|tr '=' '\n'|sort -u|sed '/Updated:/d')
	do
		#iptables -t mangle -A $IPT_RULE_IP -d "$a" -j DPI
		ipset -A $IPT_RULE_IP $a >/dev/null 2>/dev/null
	done

}

add_rule_to_url ()
{
	rm $ZAPRET_GOV_FILE
	echo "Build squid3 from url rules..."
        for a in $(cat $DUMP|iconv -f cp1251 -t utf8|tr ' |' ' '|tr '  '  ','|tr ';' ' '|awk '{print $3}'|grep http|tr ',' '~'|sed 's/~~~/ /'|tr ' ' '\n'|sort -u)
        do
                echo "$a" >>$ZAPRET_GOV_FILE
        done
	service squid3 restart
}

clean_ipt_rule ()
{
	echo "Cleaning $IPT_RULE"
#	iptables -F $IPT_RULE_IP
	ip route flush proto 122 table 122
	ipset -F $IPT_RULE
}

case $ACTION in

start)
	search_dump
	add_rule_to_ip
	iptables_zapret_gov
	add_rule_to_url
	exit 0
	;;
stop)
	clean_ipt_rule
	exit 0
	;;

esac

я для парсинга xml хотел написать, но я не знаю, чем на bash можно парсить xml

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

Перед тем как Делать громкие заявления вида «И тогда все Cisco DPI, Corbon Reductor, СКАТ DPI, и всякие там барьеры полетят на помойку.» Почитай хотя бы спец форумы, уж не до хорошего, тот же nag.ru

И брось ты эту идею, подход не верен от слова совсем. Это конечно работает, но на какие-то вменяемый скорости и pps это не рабочее решение. Очередной Carbon Reductor, они пошли по этому пути, сделали, оно работает, но .....

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

Dimonyga
()
Ответ на: комментарий от Dimonyga

Да, тогда придётся отказаться от льгот и тп тд. Кстати, интересно было бы устроиться на работу в carbonsoft, и посмотреть как у них там всё устроено. Особенно интересно, как он пасит пакеты. Кстати, вот ещё блокиратор: https://github.com/max197616/nfqfilter (правда там надо допилить анализ tcp по мелким пакетам), также советую ознакомиться: https://github.com/max197616

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Dimonyga

Да и кстати, какие штрафы? Штрафы - если парсер который состовляет реестр, составит криво его. Да и кстати - что ты там с suricat'ой делаешь

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

Штрафы за незаблокированный сайт

http://www.dp.ru/a/2015/10/29/Provajderov_budut_shtrafov/

Вот допустим.

Про «устроиться в карбонсофт для того чтобы посмотреть как оно устроено» - ну смотри, только не выноси за пределы дверей компании, а то посодют.

я suricata использую на L2 уровне, как блокиратор запрещенных сайтов. будет побыстрее сервер - буду еще использовать для QOS и шейпинга.

Использование костылей как ты писал выше + в купе с твоим подходом - малоэффективная переработка электричества в малое-кол-во полезного действия.

Почитай про СКАТ-DPI, вот у них сделано достататочно качественно и цена не большая. Карбон - рабочее решение но не для больших провайдеров, да и цена, внезапно, выше чем у СКАТа.

У тебя проблем 2:

1 - использование iptables, это не нужно

2 - заворачивание трафика на сурикату по IP - больше 80% заблокированных сайтов не жди.

С таким подходом проще через squid провернуть, меньше проблем.

Dimonyga
()
Ответ на: комментарий от Dimonyga

Кстати, хочу огорчить: для СКАТ и corbon reductor, нужен как минимум мощьный сервер для suricata AF_PACKET или PF_RING - тоже нужен мошьный сервер.

Когда я делал suricat'у на virtualbox в режиме NFQ, то скорость почему-то была 250Kbps. Кстати я загружал гдето около 14800 правил в suricat'у. Кстати, сколько правил у тебя? (правда у меня были правила на pcre)

Вот небольшой набор сохранившихся правил:

pass tcp any any <> any any (pcre: "Host: kasparov.ru";  msg: "DPI"; nfq_set_mark:0x8/0xffffffff; sid:100000;)
pass tcp any any <> any any (pcre: "/plat/i";pcre: "/Host: hospital-vrn.ru/i";  msg: "DPI"; nfq_set_mark:0x8/0xffffffff; sid:100000;)

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay
[root@AssHole rules]# cat rzs.rules | wc -l
16283

Про сервер я писал выше сколько такой стоит ? тысяч за 50 наверное можно взять.

-------------------------------------------------------------------
Date: 12/23/2015 -- 22:38:50 (uptime: 1d, 20h 37m 20s)
-------------------------------------------------------------------
Counter                   | TM Name                   | Value
-------------------------------------------------------------------
capture.kernel_packets    | RxAFPeth11                | 1292640349
capture.kernel_drops      | RxAFPeth11                | 99035
dns.memuse                | RxAFPeth11                | 0
dns.memcap_state          | RxAFPeth11                | 0
dns.memcap_global         | RxAFPeth11                | 0
decoder.pkts              | RxAFPeth11                | 1292541286
decoder.bytes             | RxAFPeth11                | 263475058178
decoder.invalid           | RxAFPeth11                | 271
decoder.ipv4              | RxAFPeth11                | 1292536710
decoder.ipv6              | RxAFPeth11                | 5283651
decoder.ethernet          | RxAFPeth11                | 1292541286
decoder.raw               | RxAFPeth11                | 0
decoder.null              | RxAFPeth11                | 0
decoder.sll               | RxAFPeth11                | 0
decoder.tcp               | RxAFPeth11                | 876839443
decoder.udp               | RxAFPeth11                | 414943483
decoder.sctp              | RxAFPeth11                | 1
decoder.icmpv4            | RxAFPeth11                | 2138289
decoder.icmpv6            | RxAFPeth11                | 146916
decoder.ppp               | RxAFPeth11                | 131124
decoder.pppoe             | RxAFPeth11                | 0
decoder.gre               | RxAFPeth11                | 131124
decoder.vlan              | RxAFPeth11                | 268
decoder.vlan_qinq         | RxAFPeth11                | 0
decoder.teredo            | RxAFPeth11                | 5238739
decoder.ipv4_in_ipv6      | RxAFPeth11                | 0
decoder.ipv6_in_ipv6      | RxAFPeth11                | 0
decoder.avg_pkt_size      | RxAFPeth11                | 203
decoder.max_pkt_size      | RxAFPeth11                | 1514
defrag.ipv4.fragments     | RxAFPeth11                | 714
defrag.ipv4.reassembled   | RxAFPeth11                | 357
defrag.ipv4.timeouts      | RxAFPeth11                | 0
defrag.ipv6.fragments     | RxAFPeth11                | 3
defrag.ipv6.reassembled   | RxAFPeth11                | 1
defrag.ipv6.timeouts      | RxAFPeth11                | 0
defrag.max_frag_hits      | RxAFPeth11                | 0
capture.kernel_packets    | RxAFPeth01                | 1800673812
capture.kernel_drops      | RxAFPeth01                | 309073
dns.memuse                | RxAFPeth01                | 0
dns.memcap_state          | RxAFPeth01                | 0
dns.memcap_global         | RxAFPeth01                | 0
decoder.pkts              | RxAFPeth01                | 1800364746
decoder.bytes             | RxAFPeth01                | 2067953190173
decoder.invalid           | RxAFPeth01                | 5504
decoder.ipv4              | RxAFPeth01                | 1801257168
decoder.ipv6              | RxAFPeth01                | 6286011
decoder.ethernet          | RxAFPeth01                | 1800364746
decoder.raw               | RxAFPeth01                | 0
decoder.null              | RxAFPeth01                | 0
decoder.sll               | RxAFPeth01                | 0
decoder.tcp               | RxAFPeth01                | 1355973715
decoder.udp               | RxAFPeth01                | 439745241
decoder.sctp              | RxAFPeth01                | 0
decoder.icmpv4            | RxAFPeth01                | 5439384
decoder.icmpv6            | RxAFPeth01                | 1164
decoder.ppp               | RxAFPeth01                | 104799
decoder.pppoe             | RxAFPeth01                | 0
decoder.gre               | RxAFPeth01                | 104799
decoder.vlan              | RxAFPeth01                | 0
decoder.vlan_qinq         | RxAFPeth01                | 0
decoder.teredo            | RxAFPeth01                | 6285632
decoder.ipv4_in_ipv6      | RxAFPeth01                | 0
decoder.ipv6_in_ipv6      | RxAFPeth01                | 0
decoder.avg_pkt_size      | RxAFPeth01                | 1148
decoder.max_pkt_size      | RxAFPeth01                | 1514
defrag.ipv4.fragments     | RxAFPeth01                | 1921426
defrag.ipv4.reassembled   | RxAFPeth01                | 908374
defrag.ipv4.timeouts      | RxAFPeth01                | 0
defrag.ipv6.fragments     | RxAFPeth01                | 706
defrag.ipv6.reassembled   | RxAFPeth01                | 353
defrag.ipv6.timeouts      | RxAFPeth01                | 0
defrag.max_frag_hits      | RxAFPeth01                | 0
tcp.sessions              | Detect                    | 37941137
tcp.ssn_memcap_drop       | Detect                    | 0
tcp.pseudo                | Detect                    | 2950192
tcp.invalid_checksum      | Detect                    | 0
tcp.no_flow               | Detect                    | 0
tcp.reused_ssn            | Detect                    | 15447
tcp.memuse                | Detect                    | 60104928
tcp.syn                   | Detect                    | 81148684
tcp.synack                | Detect                    | 16972436
tcp.rst                   | Detect                    | 13352546
dns.memuse                | Detect                    | 0
dns.memcap_state          | Detect                    | 0
dns.memcap_global         | Detect                    | 0
tcp.segment_memcap_drop   | Detect                    | 0
tcp.stream_depth_reached  | Detect                    | 104811
tcp.reassembly_memuse     | Detect                    | 2834592462
tcp.reassembly_gap        | Detect                    | 2963
http.memuse               | Detect                    | 102358651
http.memcap               | Detect                    | 0
detect.alert              | Detect                    | 24240
flow_mgr.closed_pruned    | FlowManagerThread         | 16566667
flow_mgr.new_pruned       | FlowManagerThread         | 49902723
flow_mgr.est_pruned       | FlowManagerThread         | 19270957
flow.memuse               | FlowManagerThread         | 51085600
flow.spare                | FlowManagerThread         | 20799
flow.emerg_mode_entered   | FlowManagerThread         | 0
flow.emerg_mode_over      | FlowManagerThread         | 0
Dimonyga
()
Ответ на: комментарий от Dimonyga

Кстати, suricata может обрабатывать трафик до 10Gbit на обычном оборудовании. Да, и кстати, а как ты QoS будешь реализовывать в режиме AF_PACKET.

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от Dimonyga

Кстати, на этот сервер можно настроить зеркало как то так:

iptables -t mangle -A PREROUTING -m connbytes --connbytes-mode bytes --connbytes-dir both --connbytes 100000 -j TEE --gw 172.19.114.2

ne-vlezay ★★★★★
() автор топика
Ответ на: комментарий от ne-vlezay

Re

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

zevs5
()
Ответ на: Re от zevs5

Через зеркалирование можно разорвать HTTP через TCP RST. Также можно отправить 302 Redirect

ne-vlezay ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.