iptables配置dns和域名过滤的问题

無肉不欢 2015-03-04 05:45:44
要求:仅允许baidu.com的域名通过。其它网站地址都不能通过。
规则如下配置:
/ # iptables -F / #/ #/ # iptables -t filter -A FORWARD -p udp -m string --algo bm --string baidu.com -j ACCEPT
<---这里将baidu.com的udp报文通过
/ # iptables -t filter -A FORWARD -p tcp -m string --algo bm --string baidu.com -j ACCEPT
<---这里将baidu.com的tcp报文通过
/ # iptables -t filter -A FORWARD -p udp -m multiport --dports 53 -j DROP
<---这里将所有dns的报文drop。 由于前面规则保证baidu.com的dns(udp报文)通过。这里不应该drop baidu.com发出来的dns报文。
/ #
/ # iptables -vnL
Chain INPUT (policy ACCEPT 73 packets, 23326 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 23 packets, 1939 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 STRING match "baidu.com" ALGO name bm TO 65535
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 STRING match "baidu.com" ALGO name bm TO 65535
6 354 DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 53
<---最终ping baidu的时候,包还是被这条规则drop了。说明前面udp匹配baidu.com字符串的规则没有匹配上。我抓包看了dns发出的报文里面,有baidu.com字段。
Chain OUTPUT (policy ACCEPT 21 packets, 2857 bytes) pkts bytes target prot opt in out source destination
/ #

如果该规则不行,请问如何才能实现该要求?十分感谢!
...全文
6380 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_15195737 2021-06-24
  • 打赏
  • 举报
回复

hello,我看了您的文章,下面的帖子也全部看了,我照着试验,用上INPUT、FORWARD链,确实成功;但是,我有一个疑惑,就是为什么,明明应该是FORWAR链上的,却跑到INPUT、OUTPUT链上了?

其实也罢 2015-08-25
  • 打赏
  • 举报
回复
dns会把baidu.com中的.更换为3,因为点后面是3个字符
無肉不欢 2015-03-16
  • 打赏
  • 举报
回复
引用 17 楼 lee244868149 的回复:
[quote=引用 16 楼 u013497469 的回复:] 找到原因了。 我们输入的baidu.com的这个'.'的ascii码是46. 但是我们抓包里面。 baidu.com的这个点是03. 肯定匹配不上。 这个太坑了! 03表示正文结束。
不输入点能匹配上吗,只过滤baidu[/quote] 可以的。只过滤baidu就能匹配上。加上点不得行。原因就是前面分析的asscii码问题。 dns发出来的报文,抓包看这个点号的ascii码是03,表示正文结束。太坑爹了!
無肉不欢 2015-03-16
  • 打赏
  • 举报
回复
dns这个报文相关知识参考: http://www.tuicool.com/articles/zyMBZz
奔跑的路 2015-03-14
  • 打赏
  • 举报
回复
问题解决了吗,如果没有疑问可结贴
奔跑的路 2015-03-13
  • 打赏
  • 举报
回复
我直接点吧,按我说,将下面六条都添加到你的规则中, iptables -A FORWARD -p tcp -m string --algo bm --string "baidu.com" -j ACCEPT iptables -A FORWARD -p udp -m string --algo bm --string "baidu.com" -j ACCEPT iptables -A FORWARD -p udp -m multiport --dport 53 -j DROP iptables -A OUTPUT -p tcp -m string --algo bm --string "baidu.com" -j ACCEPT iptables -A OUTPUT -p udp -m string --algo bm --string "baidu.com" -j ACCEPT iptables -A OUTPUT -p udp -m multiport --dport 53 -j DROP 然后将 iptables -nvL 的输出贴出来,就能判断我的推断是不是对的了
無肉不欢 2015-03-13
  • 打赏
  • 举报
回复


这是我PC去ping baidu抓包的截图.

我环境确实是pppoe连接. pppoe下发的dns是119.6.6.6. 我的wifi给我pc通过dhcp下发的dns是61.139.2.69.

PC获取到的地址是192.168.2.100. 网关是192.168.2.1. 抓包看发出去的dns目的地址也是61.139.2.69.
我的路由:
/ # ip route
default dev ppp0
10.32.128.1 dev ppp0 src 10.32.155.7
192.168.0.0/24 dev eth0 src 192.168.0.1
192.168.2.0/24 dev br0 src 192.168.2.1
pc报文是从br0上来的.

那么这个报文是怎么走的呢?

你前面说的比较模糊. 有点不太懂, 特别是以下两点:
这三个入口只有840 有匹配到包,前两条规则都没有匹配到包,所以在forward处有端口是53的udp包经过上,不能判断出你的包里面是否有查询baidu的dns包。
---> 确实只有840匹配到了.但是发出来的dns udp报文里面(见截图)不是包含了baidu.com字段吗? 为何不能匹配上496这条规则?
"53的udp包经过上" 是什么意思? 没打全字没看明白你的意思.

那么下发的dns是由pppoe server下发的,和dhcp怎么样的配置没有关系,ppp在链路层进行连接
---->pppoe连接我不太熟悉,在链路层进行连接,和这里的规则不能匹配上有什么关系呢? 不是我都匹配到840这个规则吗?

等下我再按照你的试试dhcp. 在回复.

十分感谢您的帮助, 希望您能详细说下原理, 十分感谢啦!
奔跑的路 2015-03-13
  • 打赏
  • 举报
回复
引用 16 楼 u013497469 的回复:
找到原因了。 我们输入的baidu.com的这个'.'的ascii码是46. 但是我们抓包里面。 baidu.com的这个点是03. 肯定匹配不上。 这个太坑了! 03表示正文结束。
不输入点能匹配上吗,只过滤baidu
無肉不欢 2015-03-13
  • 打赏
  • 举报
回复
找到原因了。 我们输入的baidu.com的这个'.'的ascii码是46. 但是我们抓包里面。 baidu.com的这个点是03. 肯定匹配不上。 这个太坑了! 03表示正文结束。
無肉不欢 2015-03-13
  • 打赏
  • 举报
回复
我今天在内核代码加了调试信息。最终分析到是报文去进行了匹配的,都走到bm算法匹配函数,但是最终是没有匹配上。 然后我修改规则: 我将规则改到OUTPUT链表,然后在wifi shell本地去ping baidu,com. iptables -A OUTPUT -p tcp -m string --algo bm --string "baidu.com" -j ACCEPT iptables -A OUTPUT -p udp -m multiport --dport 53 -j DROP 这种是ping不通的。但是我改成如下规则: iptables -A OUTPUT -p tcp -m string --algo bm --string "baidu" -j ACCEPT iptables -A OUTPUT -p udp -m multiport --dport 53 -j DROP 就能够ping通了。 我内核加的打印,在bm算法匹配那里, baidu.com是没有匹配上,但是baidu是匹配上了。 目前问题应该就是出在为何通过算法匹配,baidu.com匹配不上,但是baidu就匹配上了呢? 这个还不知道为何,需要继续分析定位。
無肉不欢 2015-03-12
  • 打赏
  • 举报
回复
不好意思。这几天比较忙。没来得及回复帖子。 上面是我收集的LOG信息,我的环境如下: PC通过dhcp获取到地址192.168.2.100/24, 网关是192.168.2.1. 从PC去ping www.baidu.com。 那么先匹配PREROUTING规则,没有匹配到规则,然后dns报文的目的地址是61.139.2.69. 不是本地地址,则走FORWARD链。然后去匹配三条规则,三条规则的entry分别是152、496、840. 按道理说,dns报文应该能够匹配到496这个规则,但是实际是匹配上,走到840这个规则drop掉了。 第三条规则不能去掉!因为我的要求是仅允许baidu.com域名可以通过,其他域名都丢弃。第三条规则是为了丢弃其他域名而做的。
無肉不欢 2015-03-12
  • 打赏
  • 举报
回复

/ # ifconfig
br0       Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:845 errors:0 dropped:0 overruns:0 frame:0
          TX packets:350 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:55334 (54.0 KiB)  TX bytes:39909 (38.9 KiB)

eth0      Link encap:Ethernet  HWaddr 64:51:7E:01:01:05  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7219 errors:2 dropped:558 overruns:0 frame:0
          TX packets:622 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:575080 (561.6 KiB)  TX bytes:96451 (94.1 KiB)

eth0.1000 Link encap:Ethernet  HWaddr 64:51:7E:01:01:05  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:870 errors:0 dropped:0 overruns:0 frame:0
          TX packets:353 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:62210 (60.7 KiB)  TX bytes:40047 (39.1 KiB)

eth0.784  Link encap:Ethernet  HWaddr 64:51:7E:01:01:05  
          UP BROADCAST RUNNING MULTICAST  MTU:1488  Metric:1
          RX packets:5766 errors:0 dropped:5222 overruns:0 frame:0
          TX packets:210 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:344839 (336.7 KiB)  TX bytes:22336 (21.8 KiB)

eth0:mng  Link encap:Ethernet  HWaddr 64:51:7E:01:01:05  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.1    Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.2    Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.3    Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.4    Link encap:Ethernet  HWaddr 64:51:7E:01:01:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

mon.wlan0 Link encap:UNSPEC  HWaddr 64-51-7E-01-01-04-00-00-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7991 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1726228 (1.6 MiB)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.32.155.7  P-t-P:10.32.128.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1488  Metric:1
          RX packets:98 errors:0 dropped:0 overruns:0 frame:0
          TX packets:196 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:15150 (14.7 KiB)  TX bytes:17561 (17.1 KiB)

wlan0     Link encap:Ethernet  HWaddr 64:51:7E:01:01:06  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:259 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:29287 (28.6 KiB)

/ # 
/ # iptables -vnL
Chain INPUT (policy ACCEPT 119 packets, 5640 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 51 packets, 4101 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
   33  1975 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 53

Chain OUTPUT (policy ACCEPT 74 packets, 12416 bytes)
 pkts bytes target     prot opt in     out     source               destination         
/ # 
/ # 
/ # iptables -vnL
Chain INPUT (policy ACCEPT 143 packets, 7179 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 66 packets, 5271 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
   33  1975 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 53

Chain OUTPUT (policy ACCEPT 152 packets, 21074 bytes)
 pkts bytes target     prot opt in     out     source               destination         
/ # 
/ # 
/ # iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       53   --  anywhere             192.168.2.1          PHYSDEV match --physdev-in wlan0 to:119.6.6.6
DNAT       53   --  anywhere             192.168.2.1          PHYSDEV match --physdev-in eth1.4 to:119.6.6.6
DNAT       53   --  anywhere             192.168.2.1          PHYSDEV match --physdev-in eth1.2 to:119.6.6.6

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            
/ # 
/ # ps | grep dhcp
  360 root       0:00 dhcpd -cf /var/etc/dhcpd0.conf -lf /var/run/dhcpd0.run -pf /var/run/dhcpd0.pid -q br0
  442 root       0:00 grep dhcp
/ # 
/ # cat va
cat: can't open 'va': No such file or directory
/ # cat var/etc/dhcpd0.conf 
subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.100 192.168.2.200;
    default-lease-time 43200;
    max-lease-time 86400;
    option routers 192.168.2.1;
    option ip-forwarding off;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 61.139.2.69;
}
/ # 
無肉不欢 2015-03-12
  • 打赏
  • 举报
回复

/ # iptables -F
/ # iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
/ # 
/ # 
/ # 
/ # 
/ # 
/ # 
/ # 
/ # iptables -A FORWARD -p tcp -m string --algo bm --string "baidu.com" -j ACCEPT
/ # iptables -A FORWARD -p udp -m string --algo bm --string "baidu.com" -j ACCEPT
/ # iptables -A FORWARD -p udp -m multiport --dport 53 -j DROP
/ # 
/ # 
/ # iptables -vnL
Chain INPUT (policy ACCEPT 22 packets, 902 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 2 packets, 158 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
    3   181 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 53

Chain OUTPUT (policy ACCEPT 12 packets, 760 bytes)
 pkts bytes target     prot opt in     out     source               destination         
/ # 
/ # 
/ # iptables -vvnL
Chain INPUT (policy ACCEPT 47 packets, 2144 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 15 packets, 1175 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "baidu.com" ALGO name bm TO 65535
   13   783 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 53

Chain OUTPUT (policy ACCEPT 23 packets, 2065 bytes)
 pkts bytes target     prot opt in     out     source               destination         
libiptc vlibxtables.so.6. 1552 bytes.
Table `filter'
Hooks: pre/in/fwd/out/post = ffffffff/0/98/4c8/ffffffff
Underflows: pre/in/fwd/out/post = ffffffff/0/430/4c8/ffffffff
Entry 0 (0):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 0
Flags: 00
Invflags: 00
Counters: 47 packets, 2144 bytes
Cache: 00000000
Target name: `' [40]
verdict=NF_ACCEPT

Entry 1 (152):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 6
Flags: 00
Invflags: 00
Counters: 0 packets, 0 bytes
Cache: 00000000
Match name: `string'
Target name: `' [40]
verdict=NF_ACCEPT

Entry 2 (496):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 17
Flags: 00
Invflags: 00
Counters: 0 packets, 0 bytes
Cache: 00000000
Match name: `string'
Target name: `' [40]
verdict=NF_ACCEPT

Entry 3 (840):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 17
Flags: 00
Invflags: 00
Counters: 13 packets, 783 bytes
Cache: 00000000
Match name: `multiport'
Target name: `' [40]
verdict=NF_DROP

Entry 4 (1072):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 0
Flags: 00
Invflags: 00
Counters: 15 packets, 1175 bytes
Cache: 00000000
Target name: `' [40]
verdict=NF_ACCEPT

Entry 5 (1224):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 0
Flags: 00
Invflags: 00
Counters: 23 packets, 2065 bytes
Cache: 00000000
Target name: `' [40]
verdict=NF_ACCEPT

Entry 6 (1376):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 0
Flags: 00
Invflags: 00
Counters: 0 packets, 0 bytes
Cache: 00000000
Target name: `ERROR' [64]
error=`ERROR'

/ # 
/ # 
/ # ip route
default dev ppp0 
10.32.128.1 dev ppp0  src 10.32.155.7 
192.168.0.0/24 dev eth0  src 192.168.0.1 
192.168.2.0/24 dev br0  src 192.168.2.1 
/ # 
/ # 
/ # 
奔跑的路 2015-03-12
  • 打赏
  • 举报
回复
引用 11 楼 u013497469 的回复:
不好意思。这几天比较忙。没来得及回复帖子。 上面是我收集的LOG信息,我的环境如下: PC通过dhcp获取到地址192.168.2.100/24, 网关是192.168.2.1. 从PC去ping www.baidu.com。 那么先匹配PREROUTING规则,没有匹配到规则,然后dns报文的目的地址是61.139.2.69. 不是本地地址,则走FORWARD链。然后去匹配三条规则,三条规则的entry分别是152、496、840. 按道理说,dns报文应该能够匹配到496这个规则,但是实际是匹配上,走到840这个规则drop掉了。 第三条规则不能去掉!因为我的要求是仅允许baidu.com域名可以通过,其他域名都丢弃。第三条规则是为了丢弃其他域名而做的。
Entry 1 (152): SRC IP: 0.0.0.0/0.0.0.0 DST IP: 0.0.0.0/0.0.0.0 Interface: `'/................to `'/................ Protocol: 6 Flags: 00 Invflags: 00 Counters: 0 packets, 0 bytes Cache: 00000000 Match name: `string' Target name: `' [40] verdict=NF_ACCEPT Entry 2 (496): SRC IP: 0.0.0.0/0.0.0.0 DST IP: 0.0.0.0/0.0.0.0 Interface: `'/................to `'/................ Protocol: 17 Flags: 00 Invflags: 00 Counters: 0 packets, 0 bytes Cache: 00000000 Match name: `string' Target name: `' [40] verdict=NF_ACCEPT Entry 3 (840): SRC IP: 0.0.0.0/0.0.0.0 DST IP: 0.0.0.0/0.0.0.0 Interface: `'/................to `'/................ Protocol: 17 Flags: 00 Invflags: 00 Counters: 13 packets, 783 bytes Cache: 00000000 Match name: `multiport' Target name: `' [40] verdict=NF_DROP 这三个入口只有840 有匹配到包,前两条规则都没有匹配到包,所以在forward处有端口是53的udp包经过上,不能判断出你的包里面是否有查询baidu的dns包。 你这里连接使用的是pppoe连接(我猜),那么下发的dns是由pppoe server下发的,和dhcp怎么样的配置没有关系,ppp在链路层进行连接,你不妨使用dhcp连接方式,在output链上添加一下这三条规则,看看能不能匹配到包,我测试了是能够匹配到baidu数据包的 如果你指定要使用pppoe连接,建议使用ebtables进行链路层过滤 或者使用pptp、l2tp廉价
奔跑的路 2015-03-06
  • 打赏
  • 举报
回复


你把INPUT链和FORWARD链的规则都打印出来看一下吧, 我能想的情况如下:
1. 数据包进入了INPUT链,绕过了FORWARD链,然后从OUTPUT链出去了,你可以在INPUT链和OUTPUT链都将前面两条规则添加上,然后看看是不是在这两条链上有匹配到包,如果有,说明数据包绕过了FORWARD链,那么只需要将那两条规则同时添加到OUTPUT链上就行了
2. FORWARD链规则逻辑错误,这个需要间该链的规则打印出来好好分析一下了,规则执行的顺序是从上到下一条一条执行的,所以我说你的第三条规则是多于的,可以去掉
3. 你所设置的规则并没有真正添加到内核起效,可以试试固话一下规则,让防火墙重启的时候这些规则仍然存在且有效
無肉不欢 2015-03-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/jk110333/article/details/7712884 根据这个看。man手册里面。字符串匹配 --from和--to都没有配置。默认值是匹配0到整个报文大小。 即字符串匹配会去匹配整个报文。说明我的猜测是不正确的。 那么到底是为何没有匹配到第一条规则呢?
無肉不欢 2015-03-06
  • 打赏
  • 举报
回复
同时。请教下。如果这三条规则不能实现需求: 仅可以访问baidu.com。其他域名不可访问。 那要怎么样配置iptables才可以实现该需求呢? 十分感谢!
無肉不欢 2015-03-06
  • 打赏
  • 举报
回复
引用 4 楼 lee244868149 的回复:
iptables -t filter -A FORWARD -p udp -m multiport --dports 53 -j DROP 这条将前面接收到的包都丢弃了,应该删掉的,你测试一下吧,baidu字符串加一下双引号,以免连义。 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20788275&id=3208030
把这个规则删掉,就使得所有域名都可以通过了。这样导致达不到要求。我的需求是:只允许baidu.com可以访问,其它域名都不可以访问。即笔记本连到wifi之后baidu.com可以访问,但是163.com不可访问。 另外,我的理解是: 我总共配置了三条规则。 前面两条是分别允许包含'baidu.com’字串的udp和tcp报文通过,第三条丢弃所有dns报文。 根据iptables规则匹配从上到下原则。三条规则都是在FORWARD链。那么baidu.com的dns报文过来的时候,由于dns报文是udp报文,那么应该能够匹配到第一条规则,直接就ACCEPT了。但是实际看是第一条规则没有匹配上。从而匹配到第三条被丢弃了。 那么问题来了。为何baidu.com的dns报文没有匹配上第一条规则? 我抓包看了dns报文,协议是udp,报文字段里面也有baidu.com的数据。 我的一直猜测是:iptables的字符串匹配不是去匹配整个报文。可能只是匹配报文的头部?报文的数据段不会去匹配吗?
奔跑的路 2015-03-05
  • 打赏
  • 举报
回复
1. ping 包是ICMP包,你确定udp和tcp包的规则对它起作用了? 2.如果是对本地进程进行“baidu”过滤,为什么这些规则不是添加在OUTPUT链上,而是FORWARD链上?难道这些规则是用在路由器上?
奔跑的路 2015-03-05
  • 打赏
  • 举报
回复
iptables -t filter -A FORWARD -p udp -m multiport --dports 53 -j DROP 这条将前面接收到的包都丢弃了,应该删掉的,你测试一下吧,baidu字符串加一下双引号,以免连义。 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20788275&id=3208030
加载更多回复(2)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧