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