系统学习------IPtables包过滤防火墙

防火墙基本概念

根据逻辑分类:

主机防火墙

对单个主机进行防护
a) window上的防火墙
b) 云上的安全组

网络防火墙

对网络入口进行防护,防火墙的背后是本地局域网
a) 安全厂商设备
b)云上的FaaS服务(对VPC网络进行防护)

主机防火墙(个人)和网络防火墙(集体)相辅相成的

根据物理分类

物理防火墙

硬件级别实现部分防火墙功能;性能高,但是成本也高

软件防火墙

应用软件出力逻辑运行于通用硬件平台上的防火墙;成本低,但是性能低

IPtables

是一个客户端代理软件,用于将用户安全设定执行到对应的“安全框架”中;所以它能够实现的是软件防火墙

  • “安全框架” - Netfilter 位于在内核中
    Netfilter - 内核空间;是真正去实现软件防火墙功能
    IPtables - 用户空间;是一个用户空间的客户端代理软件

    在用户空间中使用IPtables工具,将安全策略执行到内核空间中netfilter上从而来实现Linux主机上的防火墙功能。

  • Netfilter是Linux操作系统下的包过滤防火墙的“安全框架”(免费);所以说IPtables没有守护进程,不是真正的服务,而是内核提供的功能。

    • 功能:
      • 网络地址转换
      • 数据包内容修改
      • 数据包过滤的防火墙功能(***)

IPtables基础

IPtables能够根据它的rule匹配而进对数据包进行处理:accept(放行) drop(丢弃) reject(拒绝)
不同的处理方式 -> 动作

rule存储在内核空间的信息过滤表中,这些规则指定:SIP DIP 传输协议类型(Tcp/Udp)等等。

Netfilter 位于在内核空间中,设置了"关卡": Input Output等等。

网卡的驱动也是位于内核空间中,所以IPtables+Netfilter可以在内核空间中设置“关卡”,当用户去访问应用服务的时候,数据包是通过网卡流经内核空间之后到达用户空间
在这里插入图片描述

如果我们的报文需要转发,则不会经过Input和output链(即不会从用户空间绕一圈);只需要通过prerouting FORWARD postrouting链。

Input链 和 Output链 : 作用于数据包于用户空间和内核空间的流入流出

prerouting FORWARD postrouting链: 在内核空间中关于数据包的流入流出及转发

在这里插入图片描述

  • 常见应用场景
    到本地某个进程(服务)的报文: prerouting -> input -> ouput -> postrouting
    由本地进行转发的报文: prerouting -> forward -> postrouting

这里的“关卡”就是下面要提到的“链”的概念。

链的概念

  • 防火墙的作用在于对经过的报文匹配“规则”,然后执行相对应的动作,如果有多个“规则”组合到一起,那么我们就称之“链”。
  • 每经过一条链则需要把所有规则都匹配一遍;如果有符合条件的规则,则执行响应动作即可。
  • 简单来说:多个规则组成链,经过链时,链上的所有规则需要匹配一遍,符合规则的条件,执行相应动作。
    在这里插入图片描述

表的概念

  • 每个链上都有一些规则,但是有许多相似的规则,这些规则可能是:
    • 对IP或者端口进行过滤
    • 对报文进行修改
    • 对网络地址进行转化

把这些功能相似的规则的集合称之为“表”; 多张表的规则的集合叫做“链”。
IPtables所有规则的定义:都是去定义到不同的表中。

  • IPtables表:
    • raw表:关闭nat上启动的连接追踪机制; iptable_raw模块
    • mangle表:解析报文,做出修改,并重新封装的功能; iptable_mangle模块
    • nat表: 网络地址转换; iptable_nat模块
    • filter表:负责过滤功能(包过滤防火墙使用到的表);iptables_filter模块

在这里插入图片描述
这里nat表、raw表、mangle表构成一条链。

表存在优先级:raw -> mangle -> nat -> filter ; 优先级越高的表中规则优先匹配处理。

概念:4表5链

表链关系

那么是不是每类链上的规则都会存在于4张表中?
肯定不是;每个链只能有某些规则 -> 拥有某些表

总结:每个链中的规则都会存在于哪些表中
prerouting链: raw mangle nat
input链: mangle filter nat
forward链: mangle filter
output链:raw mangle nat filter
postrouting链: mangle nat

实际操作过程中,往往都是通过表为操作入口,查看表中对应的规则,以及该表上规则所作用的“链”。
表 ------ 链
raw表:prerouting output
mangle表: prerouting input output forward postrouting
nat表: prerouting input output postrouting
filter表: input forward output

当一个数据包经过一个“链”的时候,会将当前链上的所有规则进行匹配,而定义的规则都汇聚到表中;匹配时,因此会存在于优先级,所以就拥有了表的优先级。

  • 注意:想要主机支持转发功能,需要开启内核中ip_forward参数
[root@test ~]# cat /proc/sys/net/ipv4/ip_forward

[root@test ~]# iptables -t <table_type> -L 
		-t : 指定表
		-L :查看表中规则

在这里插入图片描述

规则概念

匹配条件 + 动作

规则:规则指定的匹配条件来尝试匹配流经的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理

  • 匹配条件:
    基本匹配条件: SIP DIP等等
    扩展匹配条件: Sport Dport等等
    扩张匹配条件也是Netfilter中的一部门,以模块插件的形式存在,如果想要试用,则需要依赖对应的模块

  • 处理动作:在IPtables中称之为“target”

    • 常用动作:
      ACCEPT: 允许数据包通过
      DROP:直接丢弃数据包,没有任何响应信息
      REJECT:拒绝数据包通过,必要的时候会向发送端发送一个响应的拒接消息
      SNAT:源地址转换,解决内网用户同一个公网地址上网问题
      MASQUERADE: 是SNAT的一种特殊处理动作,适用于动态的,临时会变的公网IP地址
      DNAT:目的地址转换,解决外部网络访问内部局域网中的服务
      REDIRECT:在本地端口做端口映射
      LOG:/var/log/message系统日志文件中记录日志信息,然后将数据包传递给下一条匹配条件,不催数据包做任何处理,只是进行记录

    • 扩展动作

  • 规则查询: 以filter表进行操作,filter负责过滤功能

[root@test ~]# iptables -t filter -L

			-t: 指定表
			-L: 列出表中的规则,默认是所有链的规则
	[root@test ~]# iptables -t filter -vnL INPUT
	Chain INPUT (policy ACCEPT 172 packets, 12678 bytes)
	 pkts bytes target     prot opt in     out     source               destination    
		-v : 显示详细信息
		-n : 展开数字
		
		--line-numbers: 显示有序序号 
	
	policy : 当前链的默认策略
	packets: 当前链默认策略匹配到的包的数量
	bytes: 当前链默认策略匹配到的包的大小总和
	
	pkts: 对应匹配到的报文个数
	bytes: 对应匹配到的报文大小综合
	target: 规则对应的处理动作
	prot: 规则对应的传输协议 
	opt: 规格对应的选项
	in: 数据包由哪个接口流入
	out:数据包由哪个接口流出
		即 设置哪块网卡的报文需要匹配当前规则
	source: 规则对应的SIP
	destination: 规则对应的DIP

规则操作 : 增删改

增: iptables -t filter -A INPUT -s x.x.x.x -j <action>
实例1:

[root@test ~]# iptables -t filter -A INPUT -s 172.16.0.1 -j DROP	
# 关于源地址为172.16.0.1/16主机数据包报文的流入给drop掉	
	- 清除规则:iptables -t <tables..> -F <chains...>
		-F:清除规则
	
		
	- 增加规则:
		-A : 追加
		-I :插入 
		-s :匹配条件中的源地址
		-j :匹配条件中的所对应动作
	
	- 删除规则:
		- 方法1:根据规则的编号去删除规则
		- 方法2:根据具体的匹配条件去删除规则
	
		-D:删除指定链中的规则
		-F:删除操作,冲刷指定链中的规则
	
	- 修改规则:
[root@test ~]# iptables -t filter -R INPUT 1 -s 172.16.10.0/24 -j ACCEPT
[root@test ~]# iptables -t filter -P FORWARD DROP	
		-R:修改规则
		-P:修改链的默认规则的处理动作
	
	- 保存规则:
		iptables-save > /etc/sysconfig/iptables
		 # 是系统启动后可导入的规则
	
	- 导入规则:
		iptables-restore < /etc/sysconfig/iptables 

匹配条件

基本条件:

-s:指定源地址
-d:指定目的地址
-p:指定协议类型
-i / -o : 指定网卡流入和流出
-i : prerouting INPUT FORWARD
-o : OUTput postrouting

扩展条件:

需要模块支持

	-m:指定扩展模块
	- tcp/udp扩展模块
		--sport: 指定源端口
		--dport:指定目的端口
	
	- iprange扩展模块
		--src-range: 指定源地址范围
		--dst-range:指定目的地址范围
	
	- string扩展模块:指定匹配报文中的字符串
		--algo: 指定匹配算法(bm和kmp)
		--string: 指定需要匹配的字符串
	
	- time扩展模块:时间段匹配,如果报文在到达时间范围内,则符合匹配条件
		--timestart [起始时间] --tiemstop [结束时间]
		--weekdays: 指定星期
		--mouthdays: 指定日
		--datastart [起始日期] --datastop [结束日期]
		
	- connlimit扩展模块:限制每个IP地址同时连接到Server端的连接数量,不需要指定IP地址,默认就是针对每个客户端IP地址
		--connlimit-above : 限制每个客户端IP的并发连接数量;如果高于此数量则执行响应动作
		--connlimit-upto  : 限制每个客户端IP的并发连接数量;如果低于次数量则执行响应动作

自定义链

当默认链的规则非常多的时候,不方便我们管理,如果INPUT链中放置了几百条规则,我们可以针对不同服务(httpd ftp mysql);有针对性将规则放置到自定义链中,在其他5个链进行引用即可,此时当我们想要去修改关于某个服务的规则时,只需要去对应的自定义链中修改即可。

  • 创建自定义链:
[root@test ~]# iptables -t filter -N httpd
[root@test ~]# iptables -t filter -I httpd -s 172.16.0.0/16 -p icmp -j REJECT 
[root@test ~]# iptables -t filter -I INPUT -j httpd		# 去引用自定义链中的规则	

-N: 创建自定链
- 关于自定义链的增删改查同上


  • 删除自定义链
[root@test ~]# iptables -t filter -F httpd		
# 1.清除自定义链中的规则	
[root@test ~]# iptables -t filter -D INPUT 1 	
# 2.删除引用自定义链中的相关规则
[root@test ~]# iptables -t filter -X httpd		
# 3.通过-X参数删除自定义链
  • 关于删除自定义链规则:
  1. 自定义链中没有任何默认链的引用,即引用参数refer为0
  2. 自定义链中不能有任何规则,即自定义链为空
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值