标签归档:iptables

iptables简单规则性能测试

近日,收到一个需求,需要对iptables的性能进行测试,确定是否能够在一些场景替换掉硬件防火墙(F5)。由于测试在内网进行,这里仅贴出测试方案和测试结果。

测试方案

首先使用脚本生成6w个左右的iptables黑名单规则

#!/usr/bin/env python2.7

with open('./ips.txt', 'w') as f:
    for x in range(100,101):
        for y in range(255):
            for z in range(255):
                f.write('iptables -I INPUT -s '+'192.'+str(x)+'.'+str(y)+'.'+str(z)+' -j DROP\n')

生成的规则如下

iptables -I INPUT -s 192.100.0.1 -j DROP
...
255x255 ips
...
iptables -I INPUT -s 192.100.255.255 -j DROP

将这些规则写入到被测服务器的iptables中。

然后在LoadRunner中建立测试ip池,地址范围为192.100.0.1 ~ 192.100.1.255共计510个。使用LR以100个的并发选择测试ip池中的ip对被测服务器进行访问。

测试结果

  1. 测试ip池中的所有访问请求均得到超时返回。即防火墙有效
  2. 测试过程中,使用top命令观察系统负载抖动<0.01。即未产生较高负载
  3. 使用黑名单以外的ip访问被测服务器80端口,得到httpd的正确返回。即未影响到正常服务。

局限性

  • 仅对简单的drop规则
  • 仅测试简单的连接
  • 仅测试静态页面
  • 规模较小

Linux(Ubuntu)SSH登录白名单设置

为了服务器安全,我们可以通过白名单的方法对服务器登录和SQL登录进行限制,仅让白名单上的IP通过而禁止其他用户登录SSH和SQL。具体原理为在iptables中加入Accept和Drop规则,仅让Accept的IP地址访问对应端口而Drop其他的请求。实现方法:

我们查看服务器初始的iptables

root@localhost:~# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

初始的iptables没有任何规则。

在/etc/network/目录中找到if-up.d/  if-down.d/两个文件夹,向其中分别加入shell脚本,不妨命名为login_protection,在脚本中写入IP限制规则。下面给出样例:

#/etc/network/if-up.d/login_protect
#!/usr/bin/env bash
/sbin/iptables -A INPUT -s <YOUR_IP> -p tcp -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -s <YOUR_IP> -p tcp -m tcp --dport 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
#/etc/network/if-down.d/login_protect
#!/usr/bin/env bash
/sbin/iptables -D INPUT -s <YOUR_IP> -p tcp -m tcp --dport 22 -j ACCEPT
/sbin/iptables -D INPUT -s <YOUR_IP> -p tcp -m tcp --dport 3306 -j ACCEPT
/sbin/iptables -D INPUT -p tcp -m tcp --dport 22 -j DROP
/sbin/iptables -D INPUT -p tcp -m tcp --dport 3306 -j DROP

将这两个sh设置为可执行,然后重启network服务

~# chmod 755 /etc/network/if-up.d/bfa_protection
~# chmod 755 /etc/network/if-down.d/bfa_protection
~# /etc/init.d/networking restart