我们在Debian Lenny系统上使用iptables运行防火墙。 我只向你展示我们防火墙的相关条目。
Chain INPUT (policy DROP 0 packets, 0 bytes) target prot opt in out source destination ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW Chain OUTPUT (policy DROP 0 packets, 0 bytes) target prot opt in out source destination ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED LOGDROP all -- * * 0.0.0.0/0 0.0.0.0/0
有些数据包每天都会丢弃日志消息,如下所示:
2月5日15:11:02 host1内核:[104332.409003] drop IN = OUT = eth0 SRC = <OWN_IP> DST = <REMOTE_IP> LEN = 1420 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 18576 DF PROTO = TCP SPT = 80 DPT = 59327 WINDOW = 54 RES = 0x00 ACK URGP = 0
出于隐私的原因,我用<OWN_IP>和<REMOTE_IP>replace了IP地址
这是没有任何理由,但我只是想了解发生了什么。 Web服务器尝试向客户端发送数据包,但防火墙以某种方式得出结论:此数据包对于任何之前的stream量都是“不相关的”。
我已经将内核参数ip_conntrack_ma设置为足够高的值,以确保获得由iptables状态模块跟踪的所有连接:
sysctl -w net.ipv4.netfilter.ip_conntrack_max=524288
有趣的是我每20分钟就有一次连接掉线:
06:34:54 06:52:10 07:10:48 07:30:55 07:51:29 08:10:47 08:31:00 08:50:52 09:10:50 09:30:52 09:50:49 10:11:00 10:30:50 10:50:56 11:10:53 11:31:00 11:50:49 12:10:49 12:30:50 12:50:51 13:10:49 13:30:57 13:51:01 14:11:12 14:31:32 14:50:59 15:11:02
那是从今天开始的,但是在其他的日子里也是这样(有时候这个速度是变化的)。
可能是什么原因?
任何帮助是极大的赞赏。 亲切的问候Janning
我在自己的系统上看到过一个非常类似的问题,我可能会对正在发生的事情有一个答案。
很显然,TCP允许客户端发送一个FIN数据包,并且你可以确认FIN数据包,但是仍然保持连接的结束,并且通过它传送更多的数据,在将来某个时候发送你自己的FIN数据包。 我记得在内核2.6的某个时候读到这个实现,尽pipe我在这方面的记忆可能是不准确的/不相关的。
包括IPTables在内的许多防火墙似乎还没有实现这个function,或者不正确地实现它,并且只要看到一个FIN后面跟着一个ACK就认为连接已经closures。 这样做的结果是,每隔一段时间,我的服务器都会向客户端发送一个数据包,防火墙认为这个数据包不是已build立连接的一部分,并且不是新数据,因此将其丢弃。
实际上,在最后几个被丢弃的数据包中,我还没有看到任何重要的数据,所以影响是几个额外的重置数据包被抛出,并且一些额外的连接保留在FIN_WAIT状态,但没有损坏或半载的页面。
我不知道你所看到的20分钟的时间,但是我猜测这是一个每20分钟定时运行一次的客户端,并且请求会导致你的服务器执行FIN ACK PSH FIN RST序列。
这篇文章可能会提供更多关于IPTables为何丢弃这些数据包的信息: http : //lists.netfilter.org/pipermail/netfilter/2005-August/062059.html
根据Chris Brenton的说法,客户端,服务器和防火墙之间的数据包在单向closures状态下的超时时间不匹配。
在该日志输出中是否显示始发/源IP? 如果是的话,IP会在http日志中显示任何有效的请求? 也许某种监控系统正在检查你服务器上的http,因为你说的是一致的时间间隔。 只是扔东西在那里。
如果有人试图通过发送ACK数据包来扫描您,并且您的防火墙需要一个STATE(一个已build立的连接),它将被丢弃。
无状态防火墙只丢弃传入的SYN数据包并让ACK通过。 这意味着即使端口被阻塞,您也可以扫描防火墙后面的内容。 怎么样? 由于ACK不被识别,系统将播放出好的并发送一个RST(RESET)数据包,告诉你我们没有连接。 你现在知道有什么东西在这个端口上听。
看看你提供的信息确实是一个被丢弃的ACK包。
您可以使用nmap (来自外部系统)来确认:
nmap -sA -p80 your_ip
从来没有尝试过这一点,但也许使用这些说明在pcap中logging整个数据包可能会帮助您find答案。
我不明白的是:iptables日志消息如何显示外发时丢弃的数据包,而后者日志显示丢弃的数据包正在进入?
我怀疑你可能在这里有两个单独的问题。 也许有人试图欺骗你的地址,因此一个无关的回复(欺骗性地址)被iptables捕获并被丢弃。 这将包括即将离任的下降。
关于传入的下降,20分钟的时间间隔是可疑的。也许ARP? 一些DHCPauthentication..? 20分钟是1200秒; 也许有3个独立的链进行,每个加起来3600(默认的DHCP租约时间),但你只看到单个数据包。 只是一个提示。