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

五、不同的操作系统兼容性问题

打开kernel/arch/arm64/configs/rockchip_linux_defconfig文件添加:

CONFIG_NF_TABLES=y


0 条评论

发表回复

您的电子邮箱地址不会被公开。