There are modification of NOTRACK netfilter target to avoid creating new connection entries for packets, unrelated to any existing connection.

Best way to make new target (clone NOTRACK to NOTRACK-NEW and fix - to mix both), but I have enough motivation to this work ;)

PS There are not same patch with [EMAIL PROTECTED] Verifyed and fixed. (& net-2.6.25)

PPS Idea about u32 was bad. Sorry.

--
WBR,
Denis Kaganovich,  [EMAIL PROTECTED]  http://mahatma.bspu.unibel.by
diff -pruN net-2.6.orig/net/netfilter/Kconfig 
net-2.6.fixed/net/netfilter/Kconfig
--- net-2.6.orig/net/netfilter/Kconfig  2008-01-30 20:17:08.000000000 +0200
+++ net-2.6.fixed/net/netfilter/Kconfig 2008-02-02 14:37:22.000000000 +0200
@@ -375,6 +375,12 @@ config NETFILTER_XT_TARGET_NOTRACK
          If you want to compile it as a module, say M here and read
          <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
 
+config NETFILTER_XT_TARGET_NOTRACK_NEW
+       bool "NOTRACK safe (only new)"
+       depends on NETFILTER_XT_TARGET_NOTRACK
+       help
+         Slow but safe way to NOTRACK only new/untracked connections.
+
 config NETFILTER_XT_TARGET_RATEEST
        tristate '"RATEEST" target support'
        depends on NETFILTER_XTABLES
diff -pruN net-2.6.orig/net/netfilter/nf_conntrack_core.c 
net-2.6.fixed/net/netfilter/nf_conntrack_core.c
--- net-2.6.orig/net/netfilter/nf_conntrack_core.c      2008-01-30 
20:17:08.000000000 +0200
+++ net-2.6.fixed/net/netfilter/nf_conntrack_core.c     2008-02-02 
14:22:53.000000000 +0200
@@ -587,6 +587,9 @@ resolve_normal_ct(struct sk_buff *skb,
        struct nf_conntrack_tuple tuple;
        struct nf_conntrack_tuple_hash *h;
        struct nf_conn *ct;
+#ifdef CONFIG_NETFILTER_XT_TARGET_NOTRACK_NEW
+       struct nf_conntrack_expect *exp;
+#endif
 
        if (!nf_ct_get_tuple(skb, skb_network_offset(skb),
                             dataoff, l3num, protonum, &tuple, l3proto,
@@ -598,6 +601,17 @@ resolve_normal_ct(struct sk_buff *skb,
        /* look for tuple match */
        h = nf_conntrack_find_get(&tuple);
        if (!h) {
+#ifdef CONFIG_NETFILTER_XT_TARGET_NOTRACK_NEW
+               if(skb->nfctinfo == IP_CT_NEW) {
+                   exp = nf_ct_expect_find_get(&tuple);
+                   if(!exp){
+                       skb->nfct = &nf_conntrack_untracked.ct_general;
+                       nf_conntrack_get(skb->nfct);
+                       return NULL;
+                   }
+                   nf_ct_expect_put(exp);
+               }
+#endif
                h = init_conntrack(&tuple, l3proto, l4proto, skb, dataoff);
                if (!h)
                        return NULL;
@@ -675,6 +689,12 @@ nf_conntrack_in(int pf, unsigned int hoo
        ct = resolve_normal_ct(skb, dataoff, pf, protonum, l3proto, l4proto,
                               &set_reply, &ctinfo);
        if (!ct) {
+#ifdef CONFIG_NETFILTER_XT_TARGET_NOTRACK_NEW
+               if(skb->nfct == &nf_conntrack_untracked.ct_general){
+                   NF_CT_STAT_INC_ATOMIC(ignore);
+                   return NF_ACCEPT;
+               }
+#endif
                /* Not valid part of a connection */
                NF_CT_STAT_INC_ATOMIC(invalid);
                return NF_ACCEPT;
diff -pruN net-2.6.orig/net/netfilter/xt_NOTRACK.c 
net-2.6.fixed/net/netfilter/xt_NOTRACK.c
--- net-2.6.orig/net/netfilter/xt_NOTRACK.c     2008-01-30 20:17:08.000000000 
+0200
+++ net-2.6.fixed/net/netfilter/xt_NOTRACK.c    2008-02-02 14:22:02.000000000 
+0200
@@ -21,6 +21,9 @@ notrack_tg(struct sk_buff *skb, const st
        if (skb->nfct != NULL)
                return XT_CONTINUE;
 
+#ifdef CONFIG_NETFILTER_XT_TARGET_NOTRACK_NEW
+       skb->nfctinfo = IP_CT_NEW;
+#else
        /* Attach fake conntrack entry.
           If there is a real ct entry correspondig to this packet,
           it'll hang aroun till timing out. We don't deal with it
@@ -28,6 +31,7 @@ notrack_tg(struct sk_buff *skb, const st
        skb->nfct = &nf_conntrack_untracked.ct_general;
        skb->nfctinfo = IP_CT_NEW;
        nf_conntrack_get(skb->nfct);
+#endif
 
        return XT_CONTINUE;
 }

Reply via email to