亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 19537 | 回復(fù): 27
打印 上一主題 下一主題

呵呵,我也湊個熱鬧,轉(zhuǎn)發(fā)一個原來寫的 iptables 版 DNS 匹配模塊 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-12-18 18:45 |只看該作者 |倒序瀏覽
只貼核心代碼了,完整內(nèi)容見附件

使用方法:

  1. iptables -A FORWARD -m domain --name "www.chinaunix.net" -j DROP
  2. iptables -A FORWARD -m domain --name "www.163.com" -j DROP
復(fù)制代碼


ipt_domain.c
#if defined(MODVERSIONS)
#include <linux/modversions.h>
#endif
#include <linux/module.h>
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
#&nbsp;&nbsp;&nbsp;&nbsp;include <linux/netfilter/x_tables.h>
#&nbsp;&nbsp;&nbsp;&nbsp;define ipt_register_match xt_register_match
#&nbsp;&nbsp;&nbsp;&nbsp;define ipt_unregister_match xt_unregister_match
#&nbsp;&nbsp;&nbsp;&nbsp;define ipt_match xt_match
#else
#&nbsp;&nbsp;&nbsp;&nbsp;include <linux/netfilter_ipv4/ip_tables.h>
#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) */

#include <linux/types.h>
#include <linux/skbuff.h>
#include "ipt_domain.h"
#include <net/udp.h>


#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
static bool
#else
static int
#endif
match(const struct sk_buff *skb, const struct net_device *in,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct net_device *out,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct xt_match  *mymatch,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const void *matchinfo,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int offset,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int myprotoff,
#else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const void *matchinfo,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int offset,
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const void *hdr,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u_int16_t datalen,
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool *hotdrop)
#else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int *hotdrop)
#endif
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
&nbsp;&nbsp;&nbsp;&nbsp;struct iphdr *ip = ip_hdr(skb);
#else
&nbsp;&nbsp;&nbsp;&nbsp;struct iphdr *ip = skb->nh.iph;
#endif
&nbsp;&nbsp;&nbsp;&nbsp;struct udphdr *udph;
&nbsp;&nbsp;&nbsp;&nbsp;const struct ipt_domain_info *info = matchinfo;

&nbsp;&nbsp;&nbsp;&nbsp;if (offset || ip->protocol != IPPROTO_UDP)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;

&nbsp;&nbsp;&nbsp;&nbsp;udph = (char *)ip + ip->ihl*4;

&nbsp;&nbsp;&nbsp;&nbsp;return ( (ntohs(udph->source) == 53 || ntohs(udph->dest) == 53)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&& (udph->len >= (8 + 12 + info->len + 5))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&& !strcmp(info->name,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(char *)((void *)udph + ntohs(udph->len) - info->len - 5))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);

}


#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
static bool
#else
static int
#endif
checkentry(const char *tablename,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const void *ip,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct xt_match *mymatch,
#else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const struct ipt_ip *ip,
#endif
&nbsp;&nbsp;&nbsp;&nbsp;   void *matchinfo,
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18)
&nbsp;&nbsp;&nbsp;&nbsp;   unsigned int matchsize,
#endif

&nbsp;&nbsp;&nbsp;&nbsp;unsigned int hook_mask)
{
//&nbsp;&nbsp;&nbsp;&nbsp;if (matchsize != IPT_ALIGN(sizeof(struct ipt_domain_info)))

//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;


&nbsp;&nbsp;&nbsp;&nbsp;return 1;
}


static struct ipt_match domain_match = {
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
&nbsp;&nbsp;&nbsp;&nbsp;{ NULL, NULL },
&nbsp;&nbsp;&nbsp;&nbsp;"domain",
&nbsp;&nbsp;&nbsp;&nbsp;&match,
&nbsp;&nbsp;&nbsp;&nbsp;&checkentry,
&nbsp;&nbsp;&nbsp;&nbsp;NULL,
&nbsp;&nbsp;&nbsp;&nbsp;THIS_MODULE
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
&nbsp;&nbsp;&nbsp;&nbsp;.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "domain",
&nbsp;&nbsp;&nbsp;&nbsp;.match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= &match,
&nbsp;&nbsp;&nbsp;&nbsp;.checkentry&nbsp;&nbsp;&nbsp;&nbsp;= &checkentry,
&nbsp;&nbsp;&nbsp;&nbsp;.me&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= THIS_MODULE,
#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) */
&nbsp;&nbsp;&nbsp;&nbsp;.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= "domain",
&nbsp;&nbsp;&nbsp;&nbsp;.match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= &match,
&nbsp;&nbsp;&nbsp;&nbsp;.family         = AF_INET,
&nbsp;&nbsp;&nbsp;&nbsp;.matchsize      = XT_ALIGN(sizeof(struct ipt_domain_info)),
&nbsp;&nbsp;&nbsp;&nbsp;.checkentry&nbsp;&nbsp;&nbsp;&nbsp;= &checkentry,
&nbsp;&nbsp;&nbsp;&nbsp;.me&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= THIS_MODULE,
#endif
};


static int __init init(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;return ipt_register_match(&domain_match);
}


static void __exit fini(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;ipt_unregister_match(&domain_match);
}


module_init(init);
module_exit(fini);


MODULE_AUTHOR("Platinum, www.72891.cn");
MODULE_DESCRIPTION("A module to match DOMAIN. VERSION: 0.0.3");
MODULE_LICENSE("GPL");


[ 本帖最后由 platinum 于 2009-12-18 18:49 編輯 ]

domain-0.0.3.tar.gz

4.14 KB, 下載次數(shù): 648

評分

參與人數(shù) 1可用積分 +30 收起 理由
T-Bagwell + 30 精品文章,白金終于放血了

查看全部評分

論壇徽章:
0
2 [報告]
發(fā)表于 2009-12-18 19:23 |只看該作者
冒昧的問一下:
iptables -A FORWARD -m domain --name "www.chinaunix.net" -j DROP

iptables -A FORWARD -s www.chinaunix.net -j DROP
iptables -A FORWARD -d www.chinaunix.net -j DROP
的區(qū)別是什么?

論壇徽章:
0
3 [報告]
發(fā)表于 2009-12-18 21:29 |只看該作者
白金兄這個domain 以前就學(xué)習(xí)過了^_^

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
4 [報告]
發(fā)表于 2009-12-18 23:07 |只看該作者
頂一下白金兄的好文

論壇徽章:
0
5 [報告]
發(fā)表于 2009-12-18 23:20 |只看該作者
頂一下,最近很多強文啊。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
6 [報告]
發(fā)表于 2009-12-18 23:30 |只看該作者
是啊,希望大家多多發(fā)好文,一起交流。。

論壇徽章:
0
7 [報告]
發(fā)表于 2009-12-19 10:55 |只看該作者
讓樓上幾位大牛見笑了,和你們比我還差得太遠了

論壇徽章:
0
8 [報告]
發(fā)表于 2009-12-19 10:57 |只看該作者
原帖由 marsaber 于 2009-12-18 19:23 發(fā)表
冒昧的問一下:
iptables -A FORWARD -m domain --name "www.chinaunix.net" -j DROP

iptables -A FORWARD -s www.chinaunix.net -j DROP
iptables -A FORWARD -d www.chinaunix.net -j DROP
的區(qū)別是什么?

不一樣,后者是匹配 IP 地址,而前者是匹配 DNS 域名解析
當多個域名公用一臺服務(wù)器時,后者會誤殺
當一個域名多個 IP 時,后者會漏殺
當用戶使用 hosts 的方式自定義 HOST 及 IP,前者會無效
所以,各有優(yōu)缺點

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
9 [報告]
發(fā)表于 2009-12-19 11:08 |只看該作者
原帖由 platinum 于 2009-12-19 10:55 發(fā)表
讓樓上幾位大牛見笑了,和你們比我還差得太遠了


白金兄不要過謙了,不管是資歷還是經(jīng)驗,你都是大佬啊。:wink:
希望能夠多分享一下開發(fā)設(shè)計的經(jīng)驗給偶們這些后來者。。。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
10 [報告]
發(fā)表于 2009-12-19 11:10 |只看該作者
原帖由 platinum 于 2009-12-19 10:57 發(fā)表

不一樣,后者是匹配 IP 地址,而前者是匹配 DNS 域名解析
當多個域名公用一臺服務(wù)器時,后者會誤殺
當一個域名多個 IP 時,后者會漏殺
當用戶使用 hosts 的方式自定義 HOST 及 IP,前者會無效
所以,各有 ...


也就是第1條規(guī)則,如果本地緩存已經(jīng)有DNS的解析結(jié)果時,就不會被命中了。
但是后面的規(guī)則其本質(zhì)是內(nèi)部轉(zhuǎn)換成IP,然后按照IP去過濾了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP