目录
安全技术
防火墙
分类
防火墙功能:
防火墙工具
Netfilter组件
firewalld
nftables
iptables
iptables组成
规则表
规则链
防火墙工作原理
内核中数据包的传输过程
iptables命令语法:
规则
跳转命令
查看iptables的规则列表
将规则加上序号
添加规则
删除规则
修改默认规则(默认是允许通过,黑名单)
替换规则
扩展模块
扩展匹配条件
命令格式
入侵检测系统:特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
入侵防御系统:以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
防火墙:隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中
防水墙:与防火墙相对,是一种防止内部信息泄漏的安全产品。网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。
按保护范围划分:
主机防火墙:服务范围为当前本机
网络防火墙:服务范围为防火墙一侧的局域网
按实现方式划分:
硬件防火墙:在硬件级别实现部分功能的防火墙
软件防火墙:运用于通用硬件平台的防火墙的应用软件
按网络协议划分:
网络防火墙:OSI模型下四层,又称为包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
应用层防火墙:代理服务器,OSI模型七层,代理网关,可控制真实数据
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查
收包
拆包
检查
没问题——装包发送
有问题——隔离或丢弃
Netfilter防火墙机制,是搭载于内核的子系统
属于“内核态”又称内核空间(kernel space)的防火墙功能体系
Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架
centos7引入的前端管理工具
操作简单,易上手,具有图形化管理界面
软件包:
firewalld
firewalld-config
管理工具:
firewalld-cmd:命令行工具
firewalld-config:图形工具
是centos8的新特性,包含了netfilter、iptables及ebtables中的大部分功能,更加全面,是未来的发展趋势
Linux的防火墙工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下
iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
五个表table
五个链chain
以及一些规则
表的作用是存放链
链决定了在什么地方控制流量
表中有链,链中有规则
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
包含两个规则链:OUTPUT、PREROUTING
mangle表:为数据包设置标记,包括优先级等
包含五个规则链:INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING
nat表:地址转换,修改数据包中的源、目标IP地址或端口
包含三个规则链,OUTPUT、PREROUTING、POSTROUTING
filter表:确定是否放行该数据包(过滤)
包含三个链:PREROUTING、POSTROUTING、OUTPUT
security表:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现,基本不用
优先级:security——raw——mangle——nat——filter
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT:处理进入本机的数据包
OUTPUT:处理从本机出去的数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
三种报文流向
流入本机:PREROUTING ——> INPUT——>用户空间进程
流出本机:用户空间进程 ——>OUTPUT——> POSTROUTING
转发:PREROUTING——> FORWARD——> POSTROUTING
iptables -t 指定表 子命令 指定链 规则
命令选项 | 作用 |
---|---|
-A | 在指定链末尾追加一条,例:iptables -A INPUT(操作) |
-I | 在指定链中插入一条新的,未指定序号默认作为第一条,例:iptables -I INPUT(操作) |
-P | 指定默认规则链,例:iptables -P OUTPUT ACCEPT(操作) |
-D | 删除,例:iptables -t nat -D INPUT 2(操作) |
-p | 服务名称:icmp、tcp |
-R | 修改、替换某一条规则,例:iptables -t nat -R INPUT(操作) |
-L | 查看,例:iptables -t nat -L (查看) |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名),例:iptables -L -n,iptables -nL,iptables -vnL(查看) |
-v | 查看时显示更详细信息,常跟-L一起使用(查看) |
--line-number | 规则带编号,例:iptables -t nat -L -n --line-number / iptables -t nat -L --line-number |
-F | 清除链中所有规则,例:iptables -F(操作) |
-N | 新加自定义链 |
-X | 清空自定义链的规则,不影响其他链,例: iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和),例:iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
规则选项 | 作用 |
---|---|
-s | 指定源地址 |
-d | 指定目的地址 |
-i | 指定进口的网卡 |
-o | 指定出口的网卡 |
-p | 指定协议,例:tcp、udp、icmp |
--sport | 指定源端口,使用端口必须同时使用协议-p |
--dport | 指定目的端口 |
操作命令 | 说明 |
---|---|
DROP | 丢弃数据包 |
REJECT | 拒绝通过 |
ACCEPT | 允许通过 |
LOG | 记录日志 |
SNAT | 源地址转换 |
DNAT | 目的地址转换 |
MASQUERADE | 伪装成非固定公网IP |
iptables -vnL
-v:详细
-n:数字
-L:防火墙列表
默认为fliter表,如果查询其他表,需指明表,命令后跟上[-t 表名]
iptables [-t 表名] -vnL --line-num
iptables [-t 表名] -A 链 规则 操作
[root@localhost ~]# iptables [-t 表名] -A INPUT -s 192.168.190.0/24 -j ACCEPT或REJECT或DROP
-A:在末尾追加
-I(大写的i):需要指明序号
-I INPUT:在INPUT链的规则的第一条前添加
#对网段添加规则
#注意:谨慎操作,如果执行拒绝或丢弃操作,但本机在此网段中,会直接死机
[root@localhost ~]# iptables -A INPUT -s 192.168.190.0/24 -j REJECT
#需使用-I命令,指定本机允许通过的规则位于第一条
[root@localhost ~]# iptables -I INPUT 1 -s 192.168.190.1 -j ACCEPT
注意:此处允许通过的IP必须是真机地址,即本机的IPV4协议固定的地址,如果设置当前设备的IP,如:192.168.190.130,规则不会生效
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
133 7744 ACCEPT all -- * * 192.168.190.1 0.0.0.0/0
0 0 REJECT all -- * * 192.168.190.0/24 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 732 bytes)
pkts bytes target prot opt in out source destination
#或者也可以直接添加网卡,指定添加网卡名称
[root@localhost ~]# iptables -I INPUT 2 -i lo -j ACCEPT
#添加规则,指定名为lo的网卡允许通过
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
219 12937 ACCEPT all -- * * 192.168.190.1 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 192.168.190.0/24 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 480 bytes)
pkts bytes target prot opt in out source destination
iptables [-t 表名] -F:删除所有规则
iptables [-t 表名] -D 链 规则序号:删除指定链,优先级序号的规则
例:删除filter表中INPUT链中的第二条规则
[root@localhost ~]# iptables -t filter -D INPUT 2
iptables [-t 表名] -P INPUT DROP
iptables [-t 表名] -P INPUT ACCEPT
iptables [-t 表名] -R 链 优先级序号 规则 -j 操作
[root@localhost ~]# iptables -R INPUT 4 -s 192.168.190.129 -j DROP
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
615 36462 ACCEPT all -- * * 192.168.190.1 0.0.0.0/0
8 672 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 192.168.190.0/24 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 DROP all -- * * 192.168.190.129 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 552 bytes)
pkts bytes target prot opt in out source destination
隐式扩展
显式扩展
注意:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
查看帮助命令:man iptables-extensions
iptables [-t 表名] 选项 链 [-m 扩展机制(协议)] -p 协议 规则 指定端口 -j 转跳操作
[root@localhost ~]# iptables -A INPUT -p tcp --sport 1000:3000 -j REJECT
#指定tcp协议源端口是1000-3000的数据包都拒绝
#-p已经指定了协议,-m可以省略
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -s 192.168.190.129 -j REJECT
#指定tcp协议的目的80端口,拒绝主机129的访问
[root@localhost ~]# iptables -A INPUT -i ens33 -p tcp --sport 1000:3000 -j REJECT
#丢弃SYN请求包,允许其他包通过
--tcp-flags SYN,ACK,FIN,RST SYN
等同于[!] --syn
#表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手
端口号表示范围
--tcp-flags ALL ALL 6个位置全为1,检测错误包
--tcp-flags ALL NONE 6个位置全为0
--sport 1000 匹配源端口是1000的数据包
--sport 1000:3000 匹配源端口是1000-3000的数据包
--sport :3000 匹配源端口是3000及以下的数据包
--sport 1000: 匹配源端口是1000及以上的数据包
注意: --sport和--dport 必须配合-p <协议类型>使用