- 论坛徽章:
- 0
|
写在前面:\r\n为什么我自己不试验一下?\r\n因为我自己对Iptables了解非常少,仅对状态检测机制有所了解。\r\n希望验证的内容:\r\n一、关于IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP 规则\r\n此规则是对于这样的包进行过滤:外部网络主机已经与防火墙内部或者其自身建立了链接,而此规则后来生效的那些此连接的数据包\r\n具体实施环境:\r\n防火墙之外的主机A:10.1.1.2/24 \r\n放火墙F:10.1.1.1/24 与 10.1.2.1/24 \r\n受防火墙保护的网段:10.1.2.0/24 \r\n受防火墙保护的网段内的一台主机X:10.1.2.10/24(开启telnet服务) \r\n具体实施分两个种情况进行模拟:\r\n\r\n情况I(公网访问内网): \r\n1、主机A telnet 到 主机X,并保持连接状态. \r\n2、开启防火墙F上的iptables服务,并使规则: \r\nIPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP \r\n生效。 \r\n3、使用刚才的telnet客户端执行随便一个命令,如:ls \r\n上面的ls命令应该是执行不成功的。 \r\n\r\n如果防火墙之外的主机A先连到了我们的内部网络主机X,防火墙F的规则发生了改变,禁止A发送SYN段链接进入X,规则不生效.所以我们不的不应用此规则,让其重新链接。\r\n\r\n基与这一点,我想iptables虽然是工作在网络层的防火墙,但是它会查看TCP包头的,所以严格的说,iptables是一个传输层与网络层的放火墙。但就象手机可以录音一样,我们还是称之为手机,所以,iptables还是网络层的防火墙。\r\n\r\n情况II(内网为私用网地址,防火墙使用了SNAT):\r\n1、内网的一台机器X,telnet到防火墙F \r\n2、启动防火墙F的ppp时起用此规则 \r\n刚才的telnet会中断。如果把conntrack和nat直接编译进内核心,就不会出现上面的情况。 \r\n\r\n二、关于iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset 规则\r\n此规则是对这样的包进行过滤,并发出错误报告:tcp包头中的syn=1并且ack=1的段进行过滤,并向此链接的发起端发出tcp-reset(也就是RST=1)的数据包,通知关闭其链接。\r\n具体实施:\r\n攻击这A:10.1.1.2\r\n放火墙F:10.1.1.1/24 与 10.1.2.1/24 \r\n受防火墙保护的网段:10.1.2.0/24 \r\n受防火墙保护的网段内的一台主机O(无辜者):10.1.2.10/24\r\n受害者V:11.22.33.44\r\n1、[A]以[O]的IP为源地址向[V]发SYN。\r\n\r\n2、[V]向[O]回应SYN/ACK。(这也是为什么要三次握手才可以确定链接与否的原因,而不是两次。)\r\n\r\n3、现在,若[O]以RST回应这个未知的SYN/ACK,攻击就失败了,但如果[O]已经没有这个能力了呢?比如它早已被另外的攻击(如SYN flood)降服,或者被关闭,或者它的RST包被防火墙拒绝。\r\n\r\n4、如果[O]没能破坏这条连接,而且[A]猜对了序列号,那它就能以[O]的身份发出第三次握手并与V通信了。\r\n这条规则的存在还产生了另外一问题,就是有几个portscan(端口扫描器)会看到我们的防火墙。因为RST=1的链接复位包是由防火墙发起的。\r\n注意:这条规则并不能防止你成为受害者。\r\n\r\n三、关于两个规则的功能的相互替换。 \r\n1、可以用此规则:IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP 防止syn欺骗么? \r\n不可以。因为在第2次握手(ack=1,syn=1),如果iptables检测到这个包是第一次到来,那么状态是NEW。这样就与规则ack=1(! --syn用来匹配那些 RST或ACK被置位的包)匹配。规则生效。但是这样做只是把包drop掉了,并没有发出RST以通知连结的发起者。 \r\n2、可以用此规则:iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset来防止外网先链接到本地机器,而规则后生效,并且阻止此链接的后续包进入么? \r\n不可以。因为在此规则生效后,链接的后续包的状态标志位并不是syn=1。 \r\n多谢论坛里的兄弟和我探讨,让我有了更进一步的了解。如果有任何错误,请回帖。 |
|