отбрасывание пакетов, содержащих строковый модуль ядра Linux - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь отбросить сетевые пакеты, которые содержат строку: то есть, если на веб-странице написано «бесплатная загрузка», мне нужен мой модуль ядра, чтобы отбросить пакеты, содержащие эту строку. Я пытаюсь просканировать sk_buff в хуке netfilter, но не уверен, что это правильное место для поиска строки. вот код:

unsigned int hook_func_outgoing(void *priv,
                struct sk_buff *skb,
                const struct nf_hook_state *state) {
    int pos;
    struct ts_config *conf;
    struct ts_state statetext;
    const char *pattern = "free download";

    conf = textsearch_prepare("kmp", pattern, strlen(pattern),
                             GFP_KERNEL, TS_AUTOLOAD);

    pos = textsearch_find_continuous(conf, &statetext, skb->data, skb->len);
    printk(KERN_INFO "pos: %d", pos); 
    printk(KERN_INFO "data: %s ", skb->data); 
    if (pos != UINT_MAX){
            return NF_DROP; 
        printk(KERN_INFO "found spam\n");
    }
    textsearch_destroy(conf);
    return NF_ACCEPT; 
}

1 Ответ

0 голосов
/ 15 января 2019

Это не так просто, как кажется.

Я не полностью осведомлен о написании модулей ядра для сетевой фильтрации, поэтому не могу комментировать ваш код. Но я думаю, что главная проблема в том, что у вас есть доступ только к «сырому» пакету. В настоящее время Интернет в основном зашифрован с использованием TLS (https), и поэтому вы не можете прочитать содержание передачи на этом уровне (что хорошо). Это означает, что ваш модуль может работать только на незашифрованных HTTP-соединениях. Другой проблемой может быть сжатие HTTP, например GZIP , которое также может шифровать ваши данные.

...