iptables防火墙简介及安装与使用!老男孩SRE工程师培训
老男孩IT教育
技术博客
2022年9月2日 14:01
iptables是Linux 防火墙工作在用户空间的管理工具,是 netfilter/iptablesIP 信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则
iptables是Linux 防火墙工作在用户空间的管理工具,是 netfilter/iptablesIP 信息包过滤系统是一部分,用来设置、维护和检查 Linux 内核的 IP 数据包过滤规则
| iptables特点
iptables 是基于内核的防火墙,功能非常强大
iptables 内置了filter,nat和mangle三张表
所有规则配置后,立即生效,不需要重启服务
iptables 组成
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规则组成
因此我们在编写iptables规则时,要先指定表,再指定链
tables的作用是区分不同功能的规则,并且存储这些规则

注意:raw表:用于处理异常,包括的规则链有:prerouting,output;一般使用不到
总体说来,iptables是由“三表五链”组成
| 三张表介绍
- filter:负责过滤数据包,包括的规则链有:input,output和forward
- nat:用于网络地址转换(IP、端口),包括的规则链有:prerouting,postrouting 和 output
- mangle:主要应用在修改数据包、流量整形、给数据包打标识,默认的规则链有:INPUT,OUTPUT
| 五条链介绍
- input:匹配目标IP是本机的数据包
- output:出口数据包 , 一般不在此链上做配置
- forward:匹配流经本机的数据包
- prerouting:修改目的地址,用来做 DNAT 。如:把内网中的 80 端口映射到互联网端口
- postrouting:修改源地址,用来做 SNAT。如:局域网共享一个公网IP接入Internet
iptables 处理数据包流程

- 当一个数据包进入网卡时,它首先进入 PREROUTING 链,内核根据数据包目的 IP 判断是否需要转送出去;
- 如果数据包就是进入本机的,它就会沿着图向下移动,到达 INPUT 链;
- 数据包到了 INPUT 链后,任何进程都会收到它;
- 本机上运行的程序可以发送数据包,这些数据包会经过 OUTPUT 链,然后到达 POSTROUTING 链输出;
- 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD 链,然后到达 POSTROUTING 链输出;
总结:整体数据包分两类:
- 发给防火墙本身的数据包
- 需要经过防火墙的数据包
iptables 安装
| 关闭 firewall 防火墙
# 关闭firewalld服务
systemctl stop firewalld
# 禁止firewalld开机自启动
systemctl disable firewalld
| 安装 iptables
yum -y install iptables-services
| 启动服务
# 启动iptables
systemctl start iptables
# 设置iptables开机自启动
systemctl start iptables
| 配置文件
# rpm -ql iptables-services
/etc/sysconfig/iptables # iptables的配置文件

iptables 常用命令选项
| 关闭 firewall 防火墙
iptables 命令基本语法
iptables [-t table] command [链名] [条件匹配] [-j 目标动作]
| -t table
用来指明使用的表,有三种选项: filter,nat,mangle。若未指定,则默认使用filter表
| command参数
指定iptables 对我们提交的规则要做什么样的操作,以下是command常用参数:
-A:Append,追加一条规则(放到所有规则的最后)
# 举例:拒绝所有人访问服务器(作为最后一条规则)
# 若未 -t 指定表,默认使用filter表
iptables -A INPUT -j DROP
-I:Insert,在指定的位置插入规则
# 举例:允许10.0.0.10主机访问本机
# 在 filter 表的 INPUT 链插入成第2条规则
iptables -I INPUT 2 -s 10.0.0.10 -j ACCEPT
-L:List,查看规则列表
具体参数:

# 举例:
iptables -nxvL --line-number

-D:Delete,从规则列表中删除规则
# 举例:删除 filter 表 INPUT 链中的第 2 条规则
iptables -D INPUT 2
-P:Policy,设置某个链的默认规则
当数据包没有被任何规则匹配时,则按默认规则处理
# 举例:设置 filter 表 INPUT 链的默认规则是 DROP
iptables -P INPUT DROP
-F:Flush,清空规则
注意:-F 是清空链中规则,但并不影响 -P 设置的默认规则
因此在生产环境中,若指定默认规则为DROP,一旦执行iptables -F,很容易导致自己也无法连接服务器
(-F 会把配置的明细ACCEPT规则删除,只留下默认规则拒接所有)
iptables -F INPUT # 清空filter 表中INPUT链上的规则
iptables -F # 清空filter 表中所有链上的规则
iptables -t nat -F PREROUTING # 清空NAT表中PREROUTING链上的规则
iptables -t nat -F # 清空NAT表中所有链上的规则
-Z:zero,将指定链的所有计数器归零。(如未指定,则认为是所有链)
# 举例:清除filter表INPUT链上的计数器
iptables -Z INPUT
| 条件匹配参数
按网络接口匹配
-i:匹配数据进入的网络接口,此参数主要应用nat表,例如目标地址转换
-o:匹配数据流出的网络接口
# 举例:-i eth0 匹配从网络接口eth0进来的数据包
# 禁止来自 10.0.0.101 的访问
iptables -I INPUT -p tcp -s 10.0.0.101 -i eth0 -j DROP
# 举例:-o eth1 匹配从eth1流出的数据包
# 禁止访问 10.0.0.101
iptables -A OUTPUT -d 10.0.0.101 -o eth0 -j DROP
按源及目的地址匹配
-s:匹配源地址,可以是IP、网段、域名,也可空(代表任何地址)
-d:匹配目标地址
# -s 参数举例:拒绝10.0.0.10主机访问本机
iptables -A INPUT -s 10.0.0.10 -j DROP
# -d 参数举例:禁止本机访问 www.baidu.com
iptables -A OUTPUT -d www.baidu.com -j DROP
按协议类型匹配
-p:匹配协议类型,可以是TCP、UDP、ICMP等
# 举例:禁止10.0.0.10主机ping通本机
iptables -A INPUT -s 10.0.0.10 -p icmp -j DROP
按源及目的端口匹配
--sport:匹配源端口;可以是单个端口,也可以是端口范围
--dport:匹配目的端口
注意:--sport 和 --dport 必须配合 -p 参数使用
# 举例:禁止外部数据访问80端口
iptables -A INPUT -p tcp --dport 80 -j DROP
# 举例:禁止内部数据访问外部的22到25端口
iptables -A INPUT -p tcp --sport 22:25 -j DROP
| 目的动作
-j ACCEPT:允许数据包通过本链而不拦截它
# 举例:允许所有访问本机的数据包通过
iptables -A INPUT -j ACCEPT
-j DROP:丢弃数据包;阻止数据包通过本链
# 举例:阻止来自10.0.0.10 的数据包通过本机
iptables -A FORWARD -s 10.0.0.10 -j DROP
-j SNAT:源地址转换,支持转换为单IP,也支持转换到IP地址池
# 举例:将内网 172.16.1.0/24 转换为外网 10.0.0.7 地址;SNAT,用于访问互联网
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to 10.0.0.7
-j DNAT:目的地址转换,支持转换为单IP,也支持转换到IP地址池
# 举例:把从eth0口进来访问TCP/80端口的数据包目的地址改成10.0.0.101
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.101
-j MASQUERADE:动态SNAT转换(适用于动态 IP 场景 )
# 举例:将源地址是 10.0.0.0/24 的数据包进行地址伪装,转换成 eth0 上的 IP 地址
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables 常用附加模块
| 按包状态匹配 (state)
-m state --state 状态
# 举例:将目前已运行的服务端口全部放行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
| 按来源 MAC 匹配(mac)
-m mac --mac-source MAC
# 举例:拒绝来自9F:FD:87:1F:4E:53 MAC 地址的数据包进入本机
iptables -A INPUT -m mac --mac-source 9F:FD:87:1F:4E:53 -j DROP
| 按包速率匹配 (limit)
limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,50/s 表示 1 秒中转发 50 个数据包,要想限制的话后面要再跟一条DROP规则
-m limit --limit 匹配速率
# 举例:
iptables -A FORWARD -d 192.168.1.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.1.1 -j DROP
| 多端口匹配(multiport)
注意:该参数必须与 -p 参数一起使用
-m multiport <--sports|--dports|--ports> 端口 1[,端口 2,..,端口 n]
# 举例:允许访问本机TCP/22,53,80,443端口
iptables -A INPUT -p tcp -m multiport --dports 22,53,80,443 -j ACCEPT
iptables 规则备份和恢复
我们执行 iptables 命令时,规则只是保存在内存中,并没有保存到某一个文件中
因此系统重启之后,之前设定的规则就没有了,所以规则设定完毕,检查无误后要及时保存规则,使用命令:
service iptables save
会看到提示,防火墙规则保存在 /etc/sysconfig/iptables 文件内,这个文件就是iptables的配置文件
所以如果要备份防火墙规则,复制该配置文件即可,例如:
cp /etc/sysconfig/iptables /opt/myipt.rule
如果需要恢复这些规则,使用以下命令:
文件即可,例如:
iptables-restore < /opt/myipt.rule
service iptables save
老男孩教育Linux运维云计算课程汇集了虚拟化、云计算、安全攻防、Python开发、SRE等技术,课堂效率高、内容丰富全面,由浅入深,循序渐进,帮助学员稳扎稳打,夯实基础,在有限的时间内帮助学员高效提升,成为符合企业需求的技术型人才。
老男孩教育专注IT教育10余年,只培养IT技术精英
全国免费咨询电话(渠道合作):400-609-2893











