文章来源:知了堂冯老师
第7章 iptables防火墙
一. iptables防火墙
1.1 netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
1.2 iptables
位于/sbin/iptables,用来管理防火墙规则的工具
称为Linux防火墙的“用户态”
上述2种称呼都可以表示Linux防火墙
1.3 iptables的表、链结构
1.3.1规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
1.3.2默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
1.3.3规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
1.3.4默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
1.4数据包过滤的匹配流程
规则表之间的顺序:rawàmangleànatàfilter
规则链之间的顺序
入站:PREROUTINGàINPUT
出站:OUTPUTàPOSTROUTING
转发:PREROUTINGàFORWARDàPOSTROUTING
1.5规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
二. iptables基本语法
2.1格式
iptables [-t 表名] 选项 链名 条件 -j 控制类型
//表filter的INPUT链的开头写入拒绝(必要时会给出提示)以icmp协议的数据
例: iptables -t filter -I INPUT -p icmp -j REJECT
注意:如-t 表名不写,则默认是filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
2.2数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
三. iptables的管理:
3.1添加新的规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则(大写的i)
//表filter的INPUT链的末尾写入允许以tcp协议的数据入站规则
例: iptables -t filter -A INPUT -p tcp -j ACCEPT
//表filter的INPUT链的开头写入允许以tcp协议的数据入站规则
iptables -t filter -I INPUT -p tcp -j ACCEPT
//表filter的INPUT链的第2行写入允许以tcp协议的数据入站规则
iptables -t filter -I INPUT 2 -p tcp -j ACCEPT
3.2查看规则列表
-L:列出所有的规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
–line-numbers:显示规则的序号
例: iptables -nL INPUT //-nL不可调转位置
3.3删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
例: iptables -D INPUT 3 //删除表filter中的链INPUT中的第3条规则
iptables -t nat -F //删除表nat中的所有链的所有规则
3.4设置默认策略
-P:为指定的链设置默认规则
注意:默认策略要么是ACCEPT、要么是DROP
//表filter的默认规则是转发的数据都丢弃
例: iptables -t filter -P FORWARD DROP
3.5规则的匹配条件
3.5.1通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
3.5.2隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
3.5.3显式匹配
要求以“-m 扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
3.5.4常见的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡
//表filter的INPUT链的开头写入丢弃以icmp协议入站的数据的规则
例: iptables -I INPUT -p icmp -j DROP
//表filter的FORWARD链末尾写入允许除了icmp协议转发的数据的规则
iptables -A FORWARD -p !icmp -j ACCEPT
//表filter的INPUT链末尾写入丢弃网卡eth1,网段1.0的入站数据规则
iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j DROP
//意义同上
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
3.5.5常用的隐含匹配条件
端口匹配:–sport 源端口、–dport 目的端口
TCP标记匹配:–tcp-flags 检查范围 被设置的标记
ICMP类型匹配:–icmp-type ICMP类型
//链FORWARD末尾写入允许转发以udp协议,网段1.0,端口53的数据规则
例:iptables -A FORWARD -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT
//链INPUT末尾写入允许以协议tcp,端口20,21的入站数据规则
iptables -A INPUT -p tcp –dport 20:21 -j ACCEPT
//链INPUT末尾写入丢弃以协议icmp,类型为8的入站数据规则,8请
求,0回显,3不可达
iptables -A INPUT -p icmp –icmp-type 8 -j DROP
//链INPUT末尾写入丢弃以协议icmp,类型为0的入站数据规则
iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT
//链INPUT末尾写入丢弃以协议icmp,类型为3的入站数据规则
iptables -A INPUT -p icmp –icmp-type 3 -j ACCEPT
3.5.6常用的显式匹配条件
多端口匹配:-m multiport –sports 源端口列表
-m multiport –dports 目的端口列表
IP范围匹配:-m iprange –src-range IP范围
MAC地址匹配:-m mac –mac-source MAC地址
状态匹配:-m state –state 连接状态
//链INPUT开头写入允许以tcp协议,多端口(此处只有一个)80的入站数据规则
例:iptables -I INPUT -p tcp -m multiport –dport 80 -j ACCEPT
//链INPUT开头写入允许以tcp协议,连接状态ESTABLISHED,RELATED的入站数据规则
iptables -I INPUT -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT
//链INPUT末尾写入允许以tcp协议,多端口25,80,110,143的入站数据规则
iptables -A INPUT -p tcp -m multiport –dport 25,80,110,143 -j ACCEPT
//链RORWARD末尾写入默认允许以tcp协议,地址范围4.21-4.28的入站数据规则
iptables -A FORWARD -p tcp -m iprange –src-range 192.168.4.21-192.168.4.28
-j ACCEPT
//链INPUT末尾写入丢弃来自mack地址为00:0c:29:c0:55:3f的入站数据规则
iptables -A INPUT -m mac –mac-source 00:0c:29:c0:55:3f -j DROP
四. SNAT策略
应用环境:局域网主机共享单个公网IP地址接入Internet
原理:源地址转换,修改数据包的源地址
4.1条件
局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址
Linux网关支持IP路由转发
4.2写SNAT转换规则
//表nat的链POSTROUTING末尾写入以SNAT策略把源网段1.0的经出站
网卡eth1出去的地址转成目标地址2.39出去的规则(转换内网的地址)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT –to-source 192.168.2.39
//192.168.1.0/24:内网网段
//eth1:外网接口的名称
//192.168.2.39:外网接口的IP地址
4.3验证SNAT结果
在局域网主机 192.168.1.40 中能够访问外网的Web服务器192.168.2.40
查看Web主机 192.168.1.40 的访问日志,记录的来访者应是网关主机的外网IP地址 192.168.2.39。也可用客户端ping服务端,看是否通
五. DNAT策略
应用环境:在Internet中发布位于企业局域网内的服务器
原理:目标地址转换,修改数据包的目标地址
5.1条件
局域网的Web服务器能够访问Internet
网关的外网IP地址有正确的DNS解析记录
Linux网关支持IP路由转发
5.2写DNAT转换规则
//表nat的链PREROUTING末尾写入以DNAT策略把以tcp协议,端口:80,目标地址2.39
经入站网卡eth0来的转成源地址1.40的规则(转换的外网Internet地址)
iptables -t nat -A PREROUTING -i eth0 -d 192.168.2.39 -p tcp –dport 80 -j DNAT
–to-destination 192.168.1.40
//192.168.2.39:外网接口的IP地址
//80:发布的服务端口
//192.168.1.46:Web:防火墙的内网IP地址
5.3验证DNAT结果
在外网客户机 192.168.2.40 中能够访问位于企业内网的Web服务,访问地址为
查看Web服务器 192.168.1.40 的访问日志,记录了外网客户机的IP地址192.168.2.40,
也可用外网客户机ping内网web服务机,看是否通
5.4发布时修改目标端口
DNAT规则中以“IP:Port”的形式指定目标地址
//表nat的链PREROUTING末尾写入以DNAT策略把以tcp协议,端口:2346,目标地址2.39
经入站网卡eth0来的地址转成源地址1.40,端口:22的规则(端口也改变)
iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.39 -p tcp –dport 2346 -j DNAT
–to-destination 192.168.1.46:22
//2346:访问的目标端口
//22:实际提供服务的端口
———————————————–end———————————————
大家还有什么想了解的都可以通过评论或者私信告诉小编哦~
来源:freebuf.com 2019-11-19 14:09:35 by: zltjwsys
请登录后发表评论
注册