原文链接:https://blog.csdn.net/ll945608651/article/details/12999676安全技术
- 入侵检测系统(Intrusion Detection Systems):
特点是不阻任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类似于监控系统,一般采用旁路部署(默默的看着你)方式。- 入侵防御系统(Intrusion Prevention System):
以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中。广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。(华为的ensp就是类似与防水墙,不透明的工作,你干什么都会记录,但是你自己不知道!)硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint, NetScreen(Juniper2004年40亿美元收购)等软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows防火墙网络层防火墙:OSI模型下四层,又称为包过滤防火墙应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用层去检查Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中Netfilter是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。Netfilter官网文档:https://netfilter.org/documentation/由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包[root@localhost ~]# iptables --version此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表,然后由长期的netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内核中,自2014年以来已在内核3.13中可用。它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时评估的那些部分。Linux的防火墙体系主要工作在网络层,针对数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。netfilter/iptables:IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。通信五元素: 源/目的 端口 源/目的 IP 协议:(tcp/udp)SCTP:在网络连接两端之间同时传输多个数据流的协议。SCTP提供的服务与UDP和TCP类似属于“内核态”又称内核空间(kernel space)的防火墙功能体系。由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)四个表:table:filter、nat、mangle、rawfilter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表nat:network address translation 地址转换规则表raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现 #了解即可security -->raw–>mangle–>nat–>filterFilter表:用于过滤数据包,可以控制数据包的进出,以及是否接受或拒绝数据包。NAT表:用于网络地址转换,可以改变数据包的源地址和目标地址,以便实现不同的网络连接。Mangle表:用于修改数据包的头部信息,可以更改数据包的TTL、QoS等信息。Raw表:用于控制数据包的状态跟踪,可以决定是否跳过后续的处理流程。PREROUTING链:处理数据包进入本机之前的规则。FORWARD链:处理数据包转发到其他主机的规则。OUTPUT链:处理本机发出的数据包的规则,一般不做处理。POSTROUTING链:处理数据包离开本机之后的规则。在iptables中,路由选择是指根据不同的目的地址将数据包路由转发到不同的网络接口可以把这些表和链类比成一个检查站,数据包需要通过这些检查站才能被接受或者拒绝。- 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
- 如果数据包是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达
- 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
流入本机:PREROUTING --> INPUT–>用户空间进程 httpd服务-目的转换-httpd流出本机:用户空间进程 -->OUTPUT–> POSTROUTING httpd服务-out-源地址转发:PREROUTING --> FORWARD --> POSTROUTING -----FOR------nat PREROUTING 目的地址转换,要把别人的公网IP换成你们内部的IPnat POSTROUTING 源地址转换,要把你的内网地址转换成公网地址才能上网,一般用于对外发布内网的服务自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。systemctl stop firewalld.service systemctl disable firewalld.serviceyum -y install iptables iptables-servicessystemctl start iptables.servicesystemctl enable iptables.service2、使用system-config-firewall;centso7不能使用 centos 6可以使用iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。-A 在指定链末尾追加一条 iptables -A INPUT (操作)-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)-P 指定默认规则 iptables -P OUTPUT ACCEPT (操作)-D 删除 iptables -t nat -D INPUT 2 (操作)-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-numbers 规则带编号 iptables -t nat -L -n --line-number iptables -t nat -L --line-number-F 清除链中所有规则 iptables -F (操作)-X 清空自定义链的规则,不影响其他链 iptables -X-Z 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号-I,在指定位置前插入规则。如果不指定,则在首行插入添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。例如,若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。iptables -F #清空规则
如果不写表名和链名,默认清空filter表中所有链里的所有规则
iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主机ping本机
iptables -t filter -A INPUT -p icmp -j ACCEPT #允许ping通,-A在前一条规则后添加
iptables -t filter -I INPUT 1 -p icmp -j ACCEPT #指定序号插入,插入到第一条
iptables -t filter -A INPUT -p tcp -j REJECT #允许任何主机tcp
iptables -I INPUT 1 -p udp -j ACCEPT #允许任何主机udp
iptables -nL --line-number #查看行规则的位置
iptables -t filter -A INPUT -s 192.168.154.11 -p icmp -j REJECT#拒绝某一台主机,其他的可以
iptables -t filter -A INPUT -s 192.168.154.11,192.168.154.11 -p icmp -j REJECT#拒绝多台主机
iptables -t filter -A OUTPUT -s 192.168.154.11 -p icmp -j REJECT#不允许21的数据包出去,其他的就都ping不通了
iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT#指定端口
iptables -t filter -A INPUT -s 192.168.154.11 -p tcp --dport 22 -j REJECT#指定IP地址的服务端口拒绝
iptables -t filter -A INPUT -s 192.168.154.11 -p tcp --dport 80 -j REJECT#禁止192.168.154.21:80的端口入访问
[root@localhost ~]# iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则
2、内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的[root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #删除序号小的
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -nL INPUT --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
2 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0
[root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #第二次就时删除指定。
[root@localhost ~]# iptables -nL INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0
注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。为了保险起见,我们可以尝试着先添加一条新的规则,确保新规则不会带来任何不利的影响再删除旧的规则(也能达到替换的效果)[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -nL INPUT --line-number #查看规则
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0
[root@localhost ~]# iptables -R INPUT 1 -p icmp -j REJECT #替换
[root@localhost ~]# iptables -nL INPUT --line-number #ACCEPT替换成了REJECT
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT icmp – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
默认策略是指四表五链中链的默认策略,INPUT,FORWARD,OUTPUT,filter三条链的默认值为ACCEPT就像是设定黑名单一样,默认其他的协议操作都是允许的,只有指定加入的且声明权限的为(DROP 或 REJECT)是拒绝禁止的对象。[root@localhost ~]#iptables -P INPUT DROP
[root@localhost ~]# iptables -t filter -A INPUT -p ICMP -j ACCEPT #在主机配置一条允许的,相当与设置了白名单
1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改2.-P 设置了DROP后,使用 -F 一定要小心!#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸![root@localhost ~]# iptables -A INPUT ! -p icmp -j ACCEPT #除了icmp以外,所有的协议都可以进入
#这是假的取反。定义的默认策略还在执行ACCEPT,只有该变默认策略,才能生效
[root@localhost ~]#iptables -P INPUT DROP #这时候才能取反
#其他的服务不受影响,这个时候,把策略清空,所有的协议都将被DROP
[root@localhost ~]#iptables -F
#只能进虚拟机重启
[root@localhost ~]# iptables -A INPUT -s 192.168.233.22 -j DROP #禁止22的数据进入
网络接口:
[root@localhost ~]# iptables -I INPUT 1 -i ens33 -s 192.168.233.0/24 -j DROP #禁止指定的网络设备名称ens33的所有网段
#怎么使整个网段不能用指定的端口
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口
Echo–Reply (代码为0) 表示回显 #回复信息显示Dest ination-Unreachable (代码为3) 表示目标不可达[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j REJECT #拒绝请求 其他的主机都不能ping本机,本机还是可以ping其他主机
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j REJECT #拒绝回显,本机ping不了其他的主机,且没有任何显示
#其他的主机还是ping通本机,因为出入的数据并没有被屏蔽,只针对自己。
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT ##当本机ping 不通其它主机时提示目标不可达,需要其他主机设置REJECT
在23上设置拒绝,才能生效,了解即可
[root@localhost ~]# iptables -A INPUT -s 192.168.154.10 -p icmp -j REJECT
要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件-m multiport --sport 源端口列表-m multiport --dport 目的端口列表[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP多端口匹配,一次性放通多个udp网络协议的端口匹配规则-m iprange --src-range 源IP范围-m iprange --dst-range 目的IP范围[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,所有的设置都会清空且还原为原本的设置。为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原[root@localhost ~]# iptables-save >/opt/iptables.bak
[root@localhost ~]#iptables-restore </opt/iptables.bak
iptables的默认配置文件存在于 cat /etc/sysconfig/iptables
直接把配置导入配置文件:cat /opt/iptables.bak >/etc/sysconfig/iptables[root@localhost opt]# systemctl restart iptables #重启之后生效的就是配置文件中的内容,操作需谨慎,注意拍快照,方便还原
自定义链添加:iptables -N custom(链名) 创建链自定义链改名:iptables -E custom(原来名称) test (新名称) 自定义链改名创建自定义链规则:iptables -t filter -I test -p icmp -j REJECT 创建自定义规则,iptables的链中添加一条对应到自定义链中才能生效iptabales创建对应链规则然后跳转自定义链web:iptables -t filter -I INPUT -p icmp -j custom删除自定义规则链:先删除iptables INPUT链中的对应关系,然后删除自定义链中的规则。然后再用 iptables -X test 删除这个链源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。就是把内网地址转成指定的IP地址,这个iP地址可以访问公网DNAT:目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。通常来说,合法地址的数量比起本地内部的地址数量来要少得多。私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问wireshark 抓包工具只在windows中使用。[root@localhost opt]# tcpdump tcp -i ens33 -t -s0 -c 100 and dst port 80 and src net 192.168.154.0/24 -w ./target.cap
tcp∶ ip、icmp、arp、rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
-s0 :抓取数据包时默认抓取长度为68字节。加上"-s0"后可以抓到完整的数据包。dst port ! 22 :不抓取目标端口是22的数据包。src net 192.168.154.0/24 :数据包的源网络地址为192.168.154.0/24。Net:网段,host:主机。-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析。进行动态抓包处理(一旦遇到有指定数据包的出现,开始运转)[root@localhost opt]# tcpdump -i ens33 -s0 -w ./ens33.cap
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com
刘遄老师QQ:5604215
Linux技术交流群:3861509
(新群,火热加群中……)
想要学习Linux系统的读者可以点击"阅读原文"按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!