我在CentOS盒子里增加了几千个包装在多个/ 24class的IP地址,因此我得到了日夜扫描。 由于这台服务器将是一个主力,它只需要在SSH(更改的SSH端口)和http / s上可用,我最终阻止邮件端口和ping答复。 这解决了http / s的高响应时间,但iptables增加了服务器上的负载。
我正进入(状态:
top - 22:01:30 up 2 days, 10:17, 3 users, load average: 1.99, 2.23, 2.07 Tasks: 198 total, 2 running, 195 sleeping, 0 stopped, 1 zombie Cpu(s): 1.0%us, 5.1%sy, 0.0%ni, 85.0%id, 0.0%wa, 0.0%hi, 8.8%si, 0.0%st Mem: 16638532k total, 2692948k used, 13945584k free, 206992k buffers Swap: 8193140k total, 0k used, 8193140k free, 2093204k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7091 root 23 0 25704 23m 512 R 72.5 0.1 0:02.26 iptables 28507 root 15 0 10236 3308 2684 S 4.5 0.0 0:51.00 sshd
我怎么能解决这个问题,因为服务器甚至做基本的东西,如接受一个命令通过SSH很慢? 我将在即将到来的几个月里看到硬件防火墙,但在此之前,这个问题必须通过软件解决scheme来解决。
添加一个硬件防火墙。 MIkrotik拥有惊人的新的 – 每个networking端口2个核心,运行在1.2GHz。
同时你可以尝试优化你的iptable规则。 这么多 – 如果规则处理需要这么多时间,优化它们会更快。
有几件事你可以做,以优化你的iptables:
删除不做任何事情的规则。 任何没有目标的规则( -j <something> )都不会对数据包做任何事情,所以除非你使用这些规则进行记帐,否则它们是无用的,应该被删除。
将规则分解成链。 一个数据包必须与每个规则相匹配,直到find一个目标或者使用该策略的链的末端。 如果您为可以与简单规则匹配的IP组创build链,则可以显着减less必须与每个数据包进行比较的规则数量。 像这样的东西:
:group0 ACCEPT [0:0] :group1 ACCEPT [0:0] :group2 ACCEPT [0:0] :group3 ACCEPT [0:0] :group4 ACCEPT [0:0] -A INPUT -d 10.0.0.0/24 -j group0 -A INPUT -d 10.0.0.1/24 -j group1 -A INPUT -d 10.0.0.2/24 -j group2 -A INPUT -d 10.0.0.3/24 -j group3 -A INPUT -d 10.0.0.4/24 -j group4 -A group0 -d 10.0.0.1 -i ! lo -p tcp -m tcp --sport 80 ...etc
然后将10.0.0.0/24所有规则放在group0链中。 假定10.0.0.0/16每个65,536个IP地址都有一个规则,那么在这个设置中一个数据包所经历的最坏的比较次数是512次。比每次数据包的65,536次比较要好得多如果他们都在相同的链中经历。 它不必是您分割的目标IP范围,它可以是端口号或IPTables可以匹配的任何其他数据包方面。
如果您将此用于会计目的,请使用交换机上的镜像端口将所有这些stream量的副本发送到单独的框。 让主要路由防火墙以达到您的安全性目标的最less数量的规则运行。 (除了iptables,还可能有更好的处理会计的方法,但这不是我的领域。)
把目标放在每一个规则。 除非你想匹配下面所有的三条规则,否则你可能对每条规则都有一个-j ACCEPT 。 如果你想匹配所有的人,最后一个接受。 这样,你就不必比较永远不会匹配的规则。
-A acctboth -s 93.xyx.40.250 -i ! lo -p tcp -m tcp --dport 80 -A acctboth -s 93.xyx.40.250 -i ! lo -p tcp -A acctboth -s 93.xyx.40.250 -i ! lo
合并规则。 由于防火墙中的逻辑非常简单,因此可以用大约10条规则来replace整个事物 – 只是使用-j TARGET规则。
删除重复和冗余的规则。 这些规则看起来不是很有序或有组织。 如果你没有在那里有重复的规则,我会感到惊讶。 如果拥有几千个IP地址,那么对于您不再拥有的IP的某些规则,我也会感到惊讶。 find这些并删除它们。
不要组合INPUT和OUTPUT的链。 将-s <IP>规则放在OUTPUT链中,将-d <IP>规则放在INPUT链中,并去掉-j acctboth规则和acctboth链。 再次,这一半的规则,必须检查之前发现一个匹配。
订购规则,以便首先列出最频繁匹配的目标。 你可以看到iptables -L -nv和iptables -L -nvx原始数字。 如果您的数据包从低延迟中受益更多(例如端口22上的数据包),请将它们放在列表中,而不要使用比较less的数据包(如端口25)。