一,何为防火墙
是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。后来这个词语引入到了网络中,把从外向内的网络入侵行为看做是火灾,防止这种入侵的策略叫做防火墙
二,防火墙分类
1.从构造上分类
硬件防火墙:
深信服,联想的网御,华为
软件防火墙
个人防火墙
定义**😗*个人防火墙运行在 PC 上,用于监控 PC 和外网的通信信息
如windows自带的防火墙
网关防火墙
定义**:在网络中的网关上配置防火墙的功能,能对网络中的流量进行策略控制,这就是网关防火墙**
软件网关防火墙:如linux上的iptables防火墙, windows上的火绒,360等.
硬件网关防火墙
百度
个人防火墙与网关防火墙区别
个人防火墙主要监控 PC 的通信流量,网关防火墙是监控网络中所有终端的通信流量,在网关处进行策略控制
2.从工作机制上分类
包过滤防火墙
对源ip地址,目的IP地址,源端口,目的端口做所谓的数据包过滤
应用层防火墙
对URL,主机名对数据包做所谓的过滤
3.从模块上分类
定义:其实就是Linux上的iptables
应用态
其实就是iptables
内核态
netfilter
iptables与netfilter区别
iptables只是防火墙的配置工具(官方定义:iptables 是一个简单、灵活、实用的命令行工具,可以用来配置、控制 linux 防火墙.)
而真正的防火墙是netfilter(毫不夸张的说,整个linux系统的网络安全就是基于netfilter构建起来的)
简单来说,netfilter是源代码形式的,我们操作不了,只能靠iptables这个配置工具来实现netfilter的功能,有点像linux内核与shell的关系.
CentOS6与CentOS7版本的防火墙
CentOS6叫iptables, CentOS7叫firewalld.变得只是工具,内核态不变,换汤不换药嘛相当于.平常我们都是用iptables,因为简单好理解,firewalld可以停用或者删除,然后安装iptables来使用.
下面是各个内核版本对应各个防火墙版本的表格
kernel 2.0.x
firewall
ipfw
kernel 2.2.x
firewall
ipchains
kernel 2.4.x
firewall
iptables
kernel 3.13.x
firewall
firewall
三,iptables介绍
iptables主要工作在OSI七层的3.4层。七层的控制可以使用squid代理+iptables. 在实际生产环境中,我们要关闭linux自身防火墙,(解决安全问题尽量不给服务器配置外网IP.需要访问的话,就使用代理转发.)因为高并发,iptables会加大延迟,除非并发小,服务器必须处于公网,考虑开启防火墙,大并发的情况下,不能开iptables,影响性能,利用硬件防火墙提升架构安全.
四,iptables原理
五链
INPUT就是第一个链:在入口对流量做过滤
OUTPUT就是第二个链:在出口对流量做过滤
FORWARD就是第三个链: 处理数据包的转发
PREROUTING;在进路由表之前对数据包处理
POSTROUTING:在进路由表之后对数据包处理
四表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源,目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
提示:用的最多的表示nat和filter
防火墙结构
对运维来说红色最重要
五,防火墙顺序
表顺序
raw----mangle----nat----filter
链顺序
提示:链顺序比较复杂,要分情况是入站,出站还是转发
入站: PREROUTING INPUT
出站: OUTPUT POSTROUTING
转发: PREROUTING FORWARD POSTROUTING
所有的访问都是按顺序:
入站:比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发:经过linux网关的流量.先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。)
出站:源自linux自身的流量.先OUTPUT,然后路由。再给POSTROUTING(是否改IP)。
规则顺序
自上而下,依次匹配. 匹配即停止
数据匹配流程图
难点
流程分析
入站请求:比如A网络想要进这个机器,它先进入raw表的PREROUTING链,再进入mangle表的PREROUTING链,再进入nat表的PREROUTING链, 然后经过路由选择后,先进入mangle表的INPUT链,再进入filter表的INPUT链,到我们的应用程序
出站请求: 从本机的应用程序经过路由选择,然后到达raw表的OUTPUT链,再进入mangle表的OUTPUT链,再进入nat表的OUTPUT链,再进入filter表的OUTPUT链,再进入mangle表的POSTROUTING链,再进入nat表的POSTROUTING链最后出去
转发请求:它先进入raw表的PREROUTING链,再进入mangle表的PREROUTING链,再进入nat表的PREROUTING链,然后经过路由选择后确定是转发请求后,直接进入mangle表的FORWARD链,再进入filter表的FORWARD链,仔进入mangle表的POSTROUTING链,再进入nat表的POSTROUTING链,最后出去.
六,iptables语法规则
常见控制类型
ACCEPT: 允许通过
DROP: 直接丢弃,不给出任何回应
REJECT: 拒绝通过,必要时会给出提示
LOG: 记录日志信息,然后传给下一条规则继续匹配
SNAT:修改数据包源地址 (能够让内网用户通过同一个公网IP访问公网的能力)
DNAT:修改数据包目的地址 (叫端口映射, 把公网中的访问映射到私网的一个服务器上)
REDIRECT: 重定向
选项
注:默认规则最后匹配
匹配类型
NAT表
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
原理
其实在我们家用路由器上都在做SNAT转换,只要我们在家能上网,一般都是SNAT.例如下图:私网用户10.10.10.12要想访问公司内网的网站服务器,那要在网关服务器上做SNAT转换才能访问
例如下图,路由器有两块网卡,一块是内网网卡。一块是公网网卡,还有一台公网的网站服务器
现在用户发送数据包,由于路由器做了路由转发功能,用户可以把包发到web服务器,但是当web服务器返回数据包时,由于目标地址是私网IP,根据网络知识,私网IP是无法在Internet上通信的,除非做了NAT.所以这个请求是错误的.
SNAT
如果我们在路由器做了SNAT转换,当用户请求Web服务器时,数据包报文经过路由器时源IP地址192.168.1.234改成了路由器网卡上的公网IP地址218.29.30.31,web服务器在返回请求时数据包上的目的IP地址依然是公网IP地址,到达路由器时,经过地址转换,变成了私网IP地址192.168.1.234.
所以我们加一条iptables规则就可以实现内网访问外网了
注: 一个数据包在经过路由之后(或者说在通过防火墙的过滤之后)才被知道他的源IP是谁,在路由之前只能看到目标IP,如果我看不到你的源IP,那怎么匹配想过滤的数据包并进行源地址转换?我防火墙根本就不能确定你是否是符合匹配条件的IP,所以只能使用POSTROUTING
但是在家里我们做的SNAT转换并不是这种,因为这种公网地址是让我们写的,但我们知道拨号上网公网地址是一直变的,如果每次都抓取公网的话,是很费事的.所以用MASQ技术可以避免这个缺点.这个技术会自动判断你的公网地址是多少,而不用你指定一个公网地址,家用路由器就是用这种技术实现上网的
DNAT
如下图, 内网有一个web服务器,然后网关服务器上有两块网卡,eth0充当公网网卡,eth1充当私网网卡,公网中有一台主机,现主机发送http请求,目标地址为公网ip地址,当到达路由器时,公网地址218.29.30.31转换为192.168.1.6.web服务器收到请求发送http应答报文,进过路由器时,私网192.168.1.6转换为218.29.30.31.
如下图客户端要访问公司内网的web服务器,要先经过路由前(即NAT表的PREROUTING链),即图中的1接口,然后再进入路由表修改目标IP. 而不能进入2接口(POSTROUTING链),如果进入2接口,那么目标ip地址就不会被路由表修改为10.10.10.12,则导致数据包只会发送到路由器中,所以当我们设置DNAT服务时不能写POSTROUTING链.
如果我们想导出文件,例如:iptables-save > 1.iptables . 如果想导入规则,例如:iptables-restore < 1.iptables
SeLinux
刚开发linux时开发者并没有涉及到安全问题,当C语言之父发布了关于UNIX安全的文章之后,才出了大量的软件来弥补这项漏洞,如今分成了iptables(防火墙类),selinux,acl(在应用层做的访问控制),tcp wrappers这四大类
经历历程
关于netfilter,iptables,firewalld,ufw,nftables那点事
netfilter在linux内核模块级别控制访问网络栈. 因为调用netfilter让我们晦涩难懂,因为它接近于内核了,所以各种用户友好的实现方式,如ufw和firewalld被引入, 作为更高级别的netfilter的解释器,然而,ufw 和 firewalld 主要是为解决单独的计算机所面临的各种问题而设计的。构建全方面的网络解决方案通常需要 iptables,或者从 2014 年起,它的替代品 nftables (nft 命令行工具)iptables 没有消失,仍然被广泛使用着。事实上,在未来的许多年里,作为一名管理员,你应该会使用 iptables 来保护你的网络。但是 nftables 通过操作经典的 Netfilter 工具集带来了一些重要的崭新的功能。
PS
本笔记的主要来源
尚硅谷Linux集群教程(linux集群经典之作)_哔哩哔哩_bilibili
【命令解析】Linux-iptables命令 (qq.com)
干货:25 条有用的 iptables 常用示例 (qq.com)
Linux下 iptables 超详细教程和使用示例 (qq.com)
【大神笔记】Iptables防火墙基本配置 (qq.com)
iptables资源指路汇总
linux2020-老男孩教育-iptables_哔哩哔哩_bilibili
iptables基础知识详解_LarryHai6的博客-CSDN博客_iptables
iptables防火墙详解: https://www.zsythink.net/archives/1199/
关于Linux防火墙’iptables’的面试问答: https://www.cnblogs.com/wajika/p/6382956.html
运维人员20道必会iptables面试题: https://www.cnblogs.com/wajika/p/6382853.html
day56-第十三周-iptables防火墙(上): https://www.jianshu.com/p/e4af319659b4
第十四周-day55-iptables防火墙(下): https://www.jianshu.com/p/44e30e87e9c9
CentOS防火墙的设置与优化: https://www.jianshu.com/p/dec0e94f357c
视频配套笔记-iptables防火墙: https://www.jianshu.com/p/9d81c0b2c6fa
【千锋云计算】Linux系统安全_Iptables及Firewalld加固服务器安全_哔哩哔哩_bilibili
Linux iptables视频教学_哔哩哔哩_bilibili
netfilter及iptables基本概念_哔哩哔哩_bilibili
Linux内核学习课程 Iptables和netfilter框架分析篇_哔哩哔哩_bilibili
【千锋】云计算运维安全详解全套视频(推荐观看)_哔哩哔哩_bilibili
linux iptables 防火墙讲解实战视频课程_哔哩哔哩_bilibili韩立刚的
…B站上,C站上还有其他网站上都有很多关于iptables的知识,我就汇总了我认为比较好的。如果有好的资源我还会再更新的。