我们有一些奇怪的问题,当外部服务器试图连接到端口443(TCP),这是一个Apache2 +乘客和Rails应用程序的我们的网站。 这个问题很less发生。 我开始调查,通过启用iptableslogging使用iptables -I INPUT -m state --state NEW,INVALID -j LOG --log-prefix "iptables [INPUT]: " (这也为FORWARD(通常不使用)和OUTPUT)。
现在每个新的连接都被logging到syslog中。 现在我在这个系统日志上看到了正常的连接,并且经过了与Vhost的连接(正常工作请求),但是有时(在大约100个连接中),我只能看到iptables日志中的新连接,但连接似乎没有达到apache2或乘客实例)(没有apache日志条目,没有连接的结果)。 当用curl来做这件事时,我们会得到一个超时或一个空string。 我们刚刚发送了一个启用debugging的curl请求代码片段,用于增强日志loggingcurl错误的样子。
我们正在使用Debian Squeeze(稳定),在具有E1000网卡(虚拟化)的桥接以太网的VMWare ESXi环境中运行。 但是,当数据包到达VM-OS本身时,我不认为这会导致问题。
我也检查了有40到50个连接的ip_conntrack,挤压极限是65k,所以没问题。 另外,我们没有任何丢弃的网卡的本身。
内核版本 :Linux servername 2.6.32-5-amd64#1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU / Linux Apache2 :服务器版本:Apache / 2.2.16(Debian) – 服务器版本:Nov 30 2012 08:58:38 乘客 :Phusion Passenger版本3.0.12 Ruby :RVM 1.17.9 + Ruby 1.9.3-p362
iptables -L
链INPUT(策略ACCEPT)目标protselect源目的地
logging所有 – 任何地方的任何地方状态INVALID,NEW LOG级别警告前缀`iptables [INPUT]:'链FORWARD(政策接受)目标保护select源的目的地
logging所有 – 任何地方的任何状态INVALID,NEW LOG级别警告前缀`iptables [FORWARD]:'链OUTPUT(策略ACCEPT)目标protselect源目的地
LOG全部 – 任何地方的任何地方状态INVALID,NEW LOG级别警告前缀iptables [OUTPUT]: '
对此我没有真正的“答案”,但也许是一种可以追踪的方法。 这个问题似乎发生在内核空间,在iptables链接之后或在用户空间中,当apache接受连接时或之前。
内核可以在nic和iptables之后自行丢弃数据包,因为数据包的负载会捕获成本。 你有没有build立一个testing环境没有iptables和定义数量的访问可以计算在Apache日志?
如果你有一些C的经验,你应该给libpcap一个尝试,这是一个美好的自由,做坏事和好事。 这是一个很好的如何开始文章: http : //recursos.aldabaknocking.com/libpcapHakin9LuisMartinGarcia.pdf
这可能会显示出数据包的差异以及将要丢弃的数据包。