iptables实现IP黑白名单功能

概述:

      在我们嵌入式设备,可能有时候为了安全会有黑白名单功能,黑名单模式:在黑名单的IP就不能访问我们的设备,白名单模式:

只有白名单的IP可以访问我们的设备,其他IP均不能访问我们设备。这里我们就是用iptables完成想要的功能。

 

一,了解iptables基本操作

       已经有很多博客解释了这个iptables怎么使用了,我就不多写了,附上参考链接:

                  iptables命令使用详解

                  iptables指令操作

二,实现思路

      对于IP黑白名单模式,我们主要控制的就是INPUT这个数据包流入口的控制,如果我们拒绝这些IP访问,只要让其IP访问的数据包都拒绝就可以实现了。

       黑名单模式:

                1,默认所有IP是都可以访问设备

                 2,将黑名单的ip禁止访问

      示例脚本如下:

#!/bin/sh
#清除所有iptables规则
iptables -F
#默认INPUT访问允许
iptables -P INPUT -j ACCEPT
#开放22 23 端口
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#关闭21端口
iptables -A INPUT -p tcp --dport 21 -j DROP
#禁止ip可以访问设备,黑名单就按类似规则增加就可以
iptables -A INPUT -s 10.10.114.111 -j DROP

       白名单模式:

                1,默认所有IP都不可以访问设备

                2,将白名单的IP允许访问,127.0.0.1回环地址一定要默认加入白名单

                3,特别注意:由于我们设备可能会主动访问一些服务器,如果服务器是IP地址形式,那我们将其加入默认白名单就可以,但如果是域名呢,我们知道域名解析后的地址有时候是变换的,那你不能每次都去加入默认白名单,有可能就会出问题,并且要是我们访问的服务器很多,一条一条加会极其麻烦。那就要用到iptables 的state的扩展模块了, 参考链接:iptables state扩展模块。

      示例脚本如下:

#!/bin/sh
#清除所有iptables规则
iptables -F
#默认INPUT访问禁止
iptables -P INPUT -j DROP
#开放22 23 端口
iptables -A INPUT -p tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#关闭21端口
iptables -A INPUT -p tcp --dport 21 -j DROP
#开放ip可以访问设备,白名单就按类似规则增加就可以
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 10.10.114.111 -j ACCEPT
#开放所有设备主动访问的服务器,处在RELATED,ESTABLISHED状态可以通信,这样设备需要主动访问的服务器就不用一个一个添加到白名单了
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

三,注意事项

           在实际使用中,由于我们是多线程运行,发现会出现这样的错误打印:

               Another app is currently holding the xtables lock. Perhaps you want to use the -w option?

           是由于多线程并行,iptables可能被别的线程执行占用锁,而iptables是默认等待1s的,导致有的指令未执行成功。

           这我们可以使用-w选项,设置等待时间5s或者10s等等,自己根据实际情况使用。

 

你可能感兴趣的:(笔记)