https://blog.csdn.net/weixin_38166318/article/details/127344897
目录
一、防火墙基本概念
https://www.zsythink.net/archives/1199
https://blog.csdn.net/qq_34645863/article/details/129329035 (条理)
https://blog.csdn.net/wzj_110/article/details/108890766
https://blog.csdn.net/wzj_110/article/details/108875481(详细说明了数据包的流向)
由大到小,表、链、规则。
链的执行顺序
关于iptables
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
二、语法
https://blog.csdn.net/qq_43320461/article/details/106518013
(一)表、链 (4表5链)
1.链
链的概念:
1.1自定义链
https://blog.csdn.net/ss810540895/article/details/127427771
https://www.cnblogs.com/YuAnTime/p/13998574.html
自定义链并不能直接使用,而是需要被默认链引用才能够使用;删除自定义链注意2个错误。
1.2默认策略
报文在某个链上没有匹配到规则,此报文就会去匹配当前链的默认动作(默认策略)。
2.表
具有相同功能的规则的集合叫做”表”
filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw
3.表链关系
- 优先级
iptables为我们定义了4张”表”,当他们处于同一条”链”时,执行的优先级如下。
优先级次序(由高而低):
raw –> mangle –> nat –> filter
(二)、规则
规则的概念:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;
规则由匹配条件和目标组成,目标可以是处理动作,也可以是一条自定义链。
1.匹配
2.处理动作
3.规则管理
三、iptables命令
1.规则
1-1.查看规则
基本格式:iptables -t 表名 -L 链名
,不指定-t ,默认为操作filter表,不指定链名,默认打印所有规则。
其它常用参数:
-v
显示详情
-n
表示不对IP地址进行名称反解,直接显示IP地址
--line-numbers
或者--line
显示规则的编号
1-2.清空规则(慎用!!)
iptables -t 表名 -F 链名
F即Flush之意,iptables -t 表名 -F
不指定链名会删除表中所有规则。
1-3.增加规则
- 链首增加规则
iptables -t 表名 -I 链名 [编号] 匹配条件 动作
不指定编号默认在链首添加规则
- 链尾增加规则
iptables -t 表名 -A 链名 匹配条件 动作
1-4.删除规则
- 方法一:根据规则的编号去删除规则
iptables -t 表名 -D 链名 编号
- 方法二:根据具体的匹配条件与动作删除规则
iptables -t 表名 -D 链名 匹配条件 动作
1-5.修改规则
iptables -t 表名 -R 链名 规则编号 匹配条件 动作
注意:即使我们已经指定了规则对应的编号,但是在使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定)
1-6.修改链的默认策略
iptables -t 表名 -P 链名 策略
注意:默认策略最好设置为ACCEPT,否则规则被意外清除,管理员会把自己隔离在主机网络外。
2.匹配
当一条规则中有多个匹配条件时,这多个匹配条件之间,默认存在”与”的关系。
通用
- 条件取反(!)
2.1 基本匹配条件
2.1.1)ip地址匹配
1)源地址匹配 (-s)
1.指定1或者多个源IP,多个IP并列时可以使用逗号隔开;
iptables -t filter -I INPUT -s 192.168.10.32,192.168.10.6 -j DROP
2.指定网段IP
iptables -t filter -I INPUT -s 192.168.0.0/16 -j DROP
2)目标地址匹配 (-d)
和源地址匹配类似
2.1.2)协议类型匹配 (-p)
那么,-p选项都支持匹配哪些协议呢?我们总结一下
- centos6中,-p选项支持如下协议类型
tcp, udp, udplite, icmp, esp, ah, sctp
- centos7中,-p选项支持如下协议类型
tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。
2.1.3)网卡匹配
FORWARD链能同时使用-i选项与-o选项。
1)流入网卡匹配 (-i)
-i选项只能用于上图中的PREROUTING链、INPUT链、FORWARD链。
2)流出网卡匹配 (-o)
-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链中。
- -m -p
-m: module_name
-p:protocol
iptables -p tcp : 表示使用 TCP协议
iptables -m tcp:表示使用TCP模块的扩展功能(tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
2.2 扩展匹配条件 --
netfilter中的一部分,以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。
语法:-m 模块名称 --扩展条件
多个扩展模块可以联合使用
2.2.1 tcp/udp扩展模块
-
源端口 (
--sport
)
指定单个端口
指定多个连续的端口A:B,匹配A到B之间所有的端口。 -
目标端口 (
--dport
) -
tcp头标志位 (
--tcp-flags
)
--syn
等价于--tcp-flags SYN,RST,ACK,FIN SYN
2.2.2 multiport模块扩展模块
multiport扩展只能用于tcp协议与udp协议,即配合-p tcp或者-p udp使用。
- 源端口 (
--sports
)
1)同时指定了多个离散的端口,每个端口之间用逗号隔开,如A,B
2)也可以指定连续的端口范围,并且能够在指定连续的端口范围的同时,指定离散的端口号,如A,C:D - 目标端口 (
--dports
)
2.2.3 iprange扩展模块(匹配连续的ip)
- 源地址(
--src-range
)
IP段的始末IP使用”横杠”连接,如192.168.1.1-192.168.1.100
- 目标地址(
--dst-range
)
2.2.4 string扩展模块(匹配字符串)
-
匹配算法(
--algo
)
可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但是我们必须指定一个。 -
匹配字符串(
--string
)
用于指定需要匹配的字符串,字符串要加双引号。
2.2.5 time扩展模块 (匹配时间)
2.2.6 connlimit扩展模块 (限制连接数)
2.2.7 limit扩展模块 (限制报文到达速率)
2.2.8 icmp扩展 (对icmp协议作精确的过滤)
2.2.9 state扩展 (连接状态)
3.链
3-1.自定义链
- 创建
iptables -t filter -N 自定义链名称
- 引用
作为某个规则(新建规则)的target即可 - 重命名
iptables -E 旧自定义链名称 新自定义链名称
- 删除
iptables -t filter -X 自定义链名称
删除自定义链时,需要满足两个条件:
1)自定义链没有被任何默认链引用,即自定义链的引用计数为0。
2)自定义链中没有任何规则,即自定义链为空。
4.动作
4-1.基本动作
ACCEPT、DROP、REJECT、LOG等动作,还有一些其他的常用动作,比如DNAT、SNAT。
4-2.扩展动作
扩展动作不需要依赖扩展模块,但是要带上基本动作,再加扩展动作选项。
REJECT
- 具体提示信息(
--reject-with
)
NAT相关
SNAT(Source Network Address Translation,源网络地址转换)
用于改变数据包的源IP地址。常用于将内部网络的私有IP地址转换为公网的合法IP地址,使得内部网络可以连接到外部网络。
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 公网IP
DNAT(Destination Network Address Translation,目的网络地址转换)
用于改变数据包的目的IP地址。常用于根据实际情况将数据包转发到特定的内部服务器上,以实现负载均衡或者进行IP透明代理。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 内部服务器IP
MASQUERADE
动态的、自动化的SNAT
REDIRECT
端口转发
四、iptables规范
https://www.zsythink.net/archives/1869
五、不同的操作系统兼容性问题
-
在debian上使用iptables命令:ERROR: Couldn't determine iptables version
https://www.cnblogs.com/liujiaxin2018/p/17081003.html -
iptables/1.8.2 Failed to initialize nft: Protocol not supported
https://codeleading.com/article/48046401113/
在内核中添加nf_tables支持。
打开kernel/arch/arm64/configs/rockchip_linux_defconfig
文件添加:
CONFIG_NF_TABLES=y
0 条评论