如何防止iptables内的ip欺骗?

Linux上的我的Apachenetworking服务器正在被一个不存在的文件的大量请求所淹没。 直接的影响是访问和错误日​​志的快速增长。 我已经通过不logging这些请求(如果它匹配特定string)来照顾这一点。 我们正在讨论来自多个IP地址每秒40到50个请求(对于同一个文件)。

我最初认为它是一个僵尸networking,但我相信这是一个脚本小子欺骗源IP。 我正在服务器上运行iptables,我想知道,这些数据包如何绕过TCP / IP初始握手到达应用层(HTTP服务器)? 如果我有:

--Default Policy for INPUT chain is to DROP <snip> iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <...> <snip> iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 

…不应该在我的服务器的SYN / ACK响应 – 初始连接请求后发送到欺骗性IP? 所以输了? 如果数据包是精心devise的,似乎是来自已build立的连接,netfilter的状态跟踪机制不应该通过上面的RELATED,ESTABLISHED行来处理它,并且将它们识别为不是已build立会话的一部分,因此删除它们(通过默认策略:DROP)?

在此先感谢,Craconia

这些请求来自有效的互联网地址。

即使他们欺骗了源IP,在连接到Apache之前也需要SYN / ACK TCP握手。 这有效地防止了欺骗性的TCP连接。 所以,你可以确定所有的连接都是通过你可以在日志中看到的IP地址来完成的。

一个僵尸networking或开放代理是一个更可能的祸根。 这或在某个网页的漏洞。 一个典型的漏洞是在网站的HTML中embedded一个链接到你的web服务器上的一个大对象,使得所有的客户端击中你的web服务器,试图从你的服务器获取对象。

你的IPTABLES规则现在有意义;)

你的iptables规则没问题。 在防火墙的上下文中,除了确保您不被使用源路由的人所捕获外,没有什么可以做的。 在Linux内核中有一个名为rp_filter (反向pathfilter)的设置,您可以启用该设置来阻止指定源路由的数据包。 由于源路由几乎从不在诊断上下文之外使用,所以阻止这样的分组是安全的。

大多数Linux系统都有/etc/sysctl.conf ,其中包含内核设置。 将下列行添加到该文件中:

 net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 

然后重新启动以确保设置这些variables。 或者,您可以通过常规方式在运行时将其设置为单个networking接口,例如

 echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter echo 1 > /proc/sys/net/ipv4/conf/eth1/rp_filter ... 

要么

 sysctl -w net.ipv4.conf.eth0.rp_filter=1 sysctl -w net.ipv4.conf.eth1.rp_filter=1 ... 

你是如何消除僵尸networking的可能性的?

攻击者可以使用IP源路由吗?


从上面的URL

不幸的是,源路由经常被互联网上(和其他地方)的恶意用户滥用,并被用来制造一台机器(A),认为它正在与另一台机器(B)通话,当它正在与第三台机器交谈时C)。 这意味着C为了某些目的而控制了B的IP地址。

根据微软的文章

远程攻击者可能试图访问受TCP包装保护的UNIX系统,或基于源地址访问列表所保护的Windows NT Internet信息服务器(IIS)。 如果攻击者只是欺骗了一个允许的源地址,攻击者可能永远得不到回应。 但是,如果攻击者既欺骗了一个地址, 又设置了松散源路由选项来强制响应返回到攻击者的networking,攻击就可以成功。

(我的重点)