iptables 是集成在 Linux 内核中的包过滤防火墙系统。 使用 iptables 可以添加、删除具体的过滤规则, iptables 默认维护着 4 个表和 5 个链, 所有的防火墙策略规则都被分别写入这些表与链中。4个表
“四表”是指 iptables 的功能,默认的 iptables规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表): filter :控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。 nat :控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。 mangle :修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。 raw :控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。5个链
“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。 每个规则表中包含多个数据链: INPUT(入站数据过滤) OUTPUT(出站数据过滤) FORWARD(转发数据过滤) PREROUTING(路由前过滤) POSTROUTING(路由后过滤) 防火墙规则需要写入到这些具体的数据链中。iptables语法格式
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION iptables [-t 表名] 命令选项 [链名] [条件匹配] -j 目标动作或跳转 -t :指定需要维护的防火墙规则表 filter、nat、mangle或raw。在不使用 -t 时则默认使用 filter 表。 COMMAND :子命令,定义对规则的管理。 chain :指明链表。 CRETIRIA:匹配参数。 ACTION :触发动作。COMMAND选项
-A 添加防火墙规则 -D 删除防火墙规则 -I 插入防火墙规则 -F 清空防火墙规则 -L 列出添加防火墙规则 -R 替换防火墙规则 -E 重命名用户定义的链,不改变链本身 -Z 清空防火墙数据表统计信息 -P 设置链默认规则 -N 新建(new-chain)一条用户自己定义的规则链 -X 删除指定表中用户自定义的规则链(delete-chain) -n 使用数字形式(numeric)显示输出结果 -v 查看规则表详细信息(verbose)的信息CHINA链选项
INPUT 入站数据过滤 OUTPUT 出站数据过滤 FORWARD 转发数据过滤 PREROUTING 路由前过滤 POSTROUTING 路由后过滤CRETIRIA条件
-p 指定协议(TCP、UDP、ICMP、all) -s 指定ip或网段(1.1.1.0/24) -d 指定ip或网段 -i 指定网卡 -o 指定网卡 --sport 指定服务及端口 --dport 指定端口 -m state 表示数据包的连接状态 --state NEW -m mac --mac-source 指定mac地址 -m multiport --dport 指定端口范围 -m iprange --src-range 指定ip范围ACTION动作
ACCEPT 允许数据包通过 DROP 丢弃数据包 REJECT 拒绝数据包通过 LOG 将数据包信息记录 syslog 曰志 DNAT 目标地址转换 SNAT 源地址转换 MASQUERADE 地址欺骗 REDIRECT 重定向查看规则
iptables -nvL 参数 -L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。 -n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。 -v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。添加规则
iptables -A INPUT -s 1.1.1.1 -j ACCEPT 参数 -A 添加到规则末尾 -l 可插入指定位置修改规则
iptables -R INPUT 1 -s 1.1.1.1 -j DROP # 将第1条规则修改为DROP删除规则
iptables -D INPUT 1 -s 1.1.1.1 -j DROP # 将第一条规则删除 iptables -D INPUT 1 # 也可通过行号直接删除 可先使用--line-number查看行号确保操作失误 iptables -nvL --line-number防火墙的备份与还原
默认的 iptables 防火墙规则会立刻生效,但如果不保存,当计算机重启后所有的规则都会丢失,
所以对防火墙规则进行及时保存的操作是非常必要的。
CentOS 7 系统中防火墙规则默认保存在 /etc/sysconfig/iptables 文件中,
使用 iptables-save 将规则保存至该文件中可以实现保存防火墙规则的作用,计算机重启后会自动加载该文件中的规则。
如果使用 iptables-save 将规则保存至其他位置,可以实现备份防火墙规则的作用。
当防火墙规则需要做还原操作时,可以使用 iptables-restore 将备份文件直接导入当前防火墙规则。
1、iptables-save
iptables-save > /etc/sysconfig/iptables # 保存防火墙规则 iptables-save > /etc/sysconfig/iptables.bak # 备份防火墙规则 保存到其他位置
2、iptables-restore
iptables-restore < iptables.bak # 导入防火墙规则 注意需要是iptables-save导出的文件才可导入常用iptables规则
1、拒绝所有icmp数据包进入
iptables -I INPUT -p icmp -j REJECT
2、允许转发除ICMP协议以外的所有数据包 使用’!'条件取反
iptables -A FORWARD -p ! icmp -j ACCEPT
3、拒绝转发来自192.168.1.1主机的数据,允许转发来自192.168.0.0/24网段的数据
# 注意拒绝规则放在前面 注意规则顺序 iptables -A FORWARD -s 192.168.1.1 -j REJECT iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
4、丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
5、封堵网段(192.168.1.0/24),两小时后解封
iptables -I INPUT -s 10.20.30.0/24 -j DROP iptables -I FORWARD -s 10.20.30.0/24 -j DROP at now 2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1
6、只允许管理员从192.168.0.0/24网段使用SSH远程登录防火墙主机
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
7、允许本机开放从TCP端口20-1024提供的应用服务
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
8、允许转发来自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
9、禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
10、禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包
iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP
11、允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
12、禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
13、禁止转发与正常TCP连接无关的非–syn请求数据包
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
14、拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
15、 只开放本机的web服务(80)、FTP(20、21、20450-20480)
放行外部主机发住服务器其它端口的应答数据包
将其他入站数据包均予以丢弃处理
iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT iptables -P INPUT DROP



