一、iptables介绍
iptables :包过滤防火墙,是内核防火墙netfilter的管理工具。
核心:四表五链
iptables并不是真正意义上的防火墙,可以将它理解为一个客户端工具。
用户通过iptables这个客户端,将用户的安全设定执行到对应的“安全框架”--netfilter中。
netfilter才是正在的防火墙,netfilter位于内核空间。
而iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。
netfilter/iptables组成Linux平台下的包过滤防火墙,它可以完成封包过滤、封包重定向和网络地址转换(NAT)等功能.
防火墙分类
(1)从逻辑上分类
主机防火墙:针对单个主机进行防护
网络防火墙:处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网
(2)从物理上分类
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低
二、iptables四表五链详解
规则
防火墙的作用就在于对经过的报文匹配“规则”,然后执行对应的“动作”
规则:网络管理员预定义的条件,即如果数据包头符合这样的条件,就这样处理这个数据包。 规则存储在内核空间的信息包过滤表中。
规则指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP、SMTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accep)、拒绝(reject)和丢弃(drop)等。
等。 配置防火墙的主要工作就是添加、修改和删除这些规则。
匹配条件加上处理动作共同组成了规则
链
netfilter才是真正的防火墙,它是内核的一部分,所以,如果想要防火墙能够达到“防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡。
经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止。
于是,就出现了input关卡和output关卡,而这些关卡在iptables中被称为“链”。
五链:
INPUT
OUTPUT
PREROUTING:路由前
FORWARD:转发
POSTROUTING:路由后
表
表:把具有相同功能的规则的集合叫做“表”,不同的规则放置于不同的表中工作,在iptables中定义了四种表,每种表对应不同的功能。
表 | 说明 |
---|---|
filter表 | 负责过滤功能 |
nat表 | network address translation,网络地址转换功能;内核模块:iptable_nat |
mangle表 | 拆解报文,做出修改,并重新分装的功能;iptable_mangle |
raw表 | 关闭nat表上启用的连接追踪机制;iptable_raw |
当iptables定义的四种表处于同一条“链”时,执行的优先级如下:
优先级次序(由高而低):raw–>mangle–>nat–>filter
链 | 表 |
---|---|
PREROUTING | raw表,mangle表,nat表 |
INPUT | mangle表,filter表,(centos7中还有nat表,centos6中没有) |
FORWARD | mangle表,filter表 |
OUTPUT | raw表,mangle表,nat表,filter表 |
POSTROUTING | mngle表,nat表 |
三、iptables基本用法
匹配条件
基本匹配条件 | 扩展匹配条件 |
---|---|
源地址Source IP | 源端口Source Port |
目标地址Destination IP | 目标端口Destination Port |
处理动作
动作 | 含义 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 丢弃数据包,不给任何回应信息客户端过了超时时间才会有反应 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息 |
SNAT | 源地址转换,解决内网用户用同一个公网地址上网的问题 |
MASQUERADE | 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上 |
DNAT | 目标地址转换 |
REDIRECT | 在本机做端口映射,80–>8080 |
LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则让下一条规则去匹配,也就是说除了记录以外不对数据包做任何其他操作 |
iptables参数
常用操作命令 | 说明 |
---|---|
-A | 在指定链尾部添加规则 |
-D | 删除匹配的规则 |
-R | 替换匹配的规则 |
-I | 在指定位置插入规则(例:iptables -t filter -I INPUT 1 --dport 80 -j ACCEPT将规则插入到filter表INPUT链中的第一位上) |
-L/S | 列出指定链或所有链的规则 |
-F | 删除指定链或所有链的规则 |
-N | 创建用户自定义链 |
-X | 删除指定的用户自定义链 |
-P | 为指定链设置默认规则策略,对自定义链不起作用 |
-Z | 将指定链或所有链的计数器清零 |
-E | 更改自定义链的名称 |
-n | ip地址和端口号以数字方式显示,不解析IP地址,直接显示出IP地址 |
-t | 指定要操作的表,缺省时表示filter表 |
-v | verbose,列出详细信息 |
–line-numbers | 显示规则序号 |
-x | 显示出计算器的精确值 |
常用规则匹配器 | 说明 |
---|---|
-p tcp/udp/icmp/all | 匹配协议,all会匹配所有协议 |
-s addr[/mask] | 匹配源地址 |
-d addr[/mask]匹配目标地址 | |
- -sport | 匹配源端口(可指定连续的端口)如- -sport80 |
- -dport | 匹配目的端口(可指定连续的端口)如- -dport80 |
-o interface | 匹配出口网卡,只适用于FORWARD、POSTROUTING、OUTPUT(例:iptables -A FORWARD -o eth0) |
-i interface | 匹配入口网卡,只适用于PREROUTING、INPUT、FORWARD |
- -icmp-type | 匹配icmp类型(使用iptables -p icmp -h可查看可用的icmp类型) |
- -tcp-flags mask comp | 匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记(例:iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT 表示匹配SYN和ACK标记的数据包) |
-j DROP/ACCEPT/REJECT/LOG | 拒绝/允许/拒绝并发出消息/在/var/log/messages中登记分组匹配的记录 |
-m mac -mac | 绑定MAC地址 |
-m limit -limit 1/s 1/m | 设置时间策略 |
-s 192.168.1.153或192.168.1.0/24 | 指定源地址或地址段 |
-d 192.168.1.153或192.168.1.0/24 | 指定目标地址或地址段 |
-s ! 192.168.1.0 | 指定源地址以外的 |
iptables -t 表 -A 链 匹配的条件 -j 动作
规则保存
[root@localhost ~]# service iptables save #保存规则到文件 /etc/sysconfig/iptables
[root@localhost ~]# iptables-save > /root/iptables #导出iptables模板
[root@localhost ~]# iptables-restore < iptables #导入iptables模板