Linux的铜墙铁壁:防火墙之iptables
【来源】
所谓防火墙,实质上是指由软硬件组合成的一个在内外网之间构造的一种保护屏障,它是一种隔离技术。因此从物理上区分,可以分为软件和硬件防火墙,从逻辑上区分,可以分为主机和网络防火墙,而我们现在要讲到的iptables,是属于防火墙中的软件防火墙的范畴,但它只是一个命令行工具或者说是一种客户端代理,并不是真正的防火墙,用户通过这个代理,把安全设定执行到真正的防火墙框架中,这个框架叫做Netfilter
【原理】
Netfilter是Linux中的一个子项目,它的主要功能是进行数据包过滤、连接跟踪、地址转换等,而iptables则是netfilter提供的对用户数据包进行过滤、修改等操作的一种命令行工具,当数据包通过网卡进入进入内核时,它得先经过iptables的五条链,这些链都有相应的处理数据包的规则,而我们正是通过在这些链上设置规则来控制管理数据包,从而达到防火墙的功能。每当数据包到达一个链时,iptables就会从链中的所有规则逐一开始校验该数据包是否符合规则中限定的条件。若满足,系统就会根据每个规则定义的方法来处理该数据包;若不满足,iptables则继续检查下一条规则,如果该数据包不符合链中的任意规则,iptables则会该链的默认策略去处理该数据包。
【四个表】
iptables的结构是由tables组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables的规则时,通过要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。
tables的类型分别有:
表名 | 功能 | 优先级 | 内建链 |
filter | 数据包的过滤功能 | 4 | INPUT OUTPUT FORWARD |
nat | 网络地址转换功能 | 3 | PREROUTING POSTROUTING OUTPUT |
mangle | 数据包的修改功能,拆解数据包,进行修改,然后重新组装成数据包 | 2 | PREROUTING OUTPUT FORWARD INPUT POSTROUTING |
raw | 数据跟踪 | 1 | PREROUTING OUTPUT |
【五条链】
链,也称为钩子函数,它是一系列规则的一个组合,当数据包经过这些狗子函数时,她必须完全匹配每一个钩子函数中的所有规则,方能进入下一个钩子函数。
钩子函数的类型分别有:
链类型 | 作用域 |
PREROUTING | 数据包进入路由表之前 |
INPUT | 通过路由表后目的地为本机 |
OUTPUT | 由本机产生,向外转发 |
FORWARD | 通过路由表后,目的地不为本机 |
POSTROUTING | 发送到网卡接口之前 |
【语法规则】
语法:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
1)常用的命令选项:
-t:指定要操纵的表(四个表);
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源
2)常用的处理动作:
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG:在/var/log/messages文件中记录日志然后将数据包传递给下一条规则
REDIRECT: 端口映射。
SNAT :源地址转换,修改包来源IP为某IP或IP范围,做内网和公网之间的转换。
DNAT::目标地址转换。 修改数据包目的地IP为某 Ip 或 IP 范围。
3)常用的条件匹配:
1、状态匹配:-m state --state 连接状态
NEW:与任何连接无关的
ESTABLISHED:响应请求或已建立连接的
RELATED:与已有连接有相关性的,如FTP数据连接
2、MAC地址匹配:-m mac --mac-source MAC地址
eg:iptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP
3、IP范围匹配:-m iprange --src-range IP范围
eg:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.0.1-192.168.0.10 -j ACCEPT
4、多端口匹配:-m multiport --sports 源端口列表 和 -m multiport --sports 目的端口列表
eg:iptables -A INPUT -p tcp -m multiport --dport 11,29,116,121 -j ACCEPT
4)常用的一些iptables策略:
1、拒绝转发来自192.168.2.33主机的数据
iptables -A FORWARD -s 192.168.2.33 -j REJECT
2、允许转发来自192.168.2.1/99网段的数据
iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT
3、允许本机开放从TCP端口20-1024提供的应用服务。
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
4、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。
iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
5、 允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。
iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT
6、屏蔽ip 110.1.1.1的访问
iptables -I INPUT -s 110.1.1.1 -j DROP
7、屏蔽从123.0.0.1到123.255.255.254iptables -I INPUT -s 123.0.0.0/8 -j DROP
8、屏蔽从从123.45.0.1到123.45.255.254iptables -I INPUT -s 124.45.0.0/16 -j DROP
9、屏蔽从从123.45.6.1到123.45.6.254iptables -I INPUT -s 123.45.6.0/24 -j DROP
10、允许所有本机向外的访问iptables -A OUTPUT -j ACCEPT
11、允许访问22端口iptables -A INPUT -p tcp --dport 22 -j ACCEPT
5)常用的iptables命令:
1、查看当前 IPTABLES 规则
service iptables status
2、 将所有iptables以序号标记显示
iptables -L -n --line-numbers
3、 比如要删除INPUT里序号为22的规则
iptables -D INPUT 22