防火墙的基础知识入门

文章目录

  • 防火墙
    • 基于实现方式,防火墙的发展分为四个阶段:
  • Linux 环境中主要的防火墙形式
  • TCP wrappers~~详解~~ 粗解
    • Tcp wrappers的认识
      • 它的基本过程是这样的:
  • iptable
  • 攻击和防御
    • DDOS 攻击
      • 常见的可能受到 DDOS 攻击体现的症状有:
      • 而常见的 DDOS 攻击有以下几种
  • SYN 攻击
    • SYN flood(SYN 洪水攻击)

防火墙

防火墙指的是一个由 软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。

基于实现方式,防火墙的发展分为四个阶段:

  • 第一代防火墙:基于路由器的防火墙,由于多数路由器中本身就包含有分组过滤功能,故网络访问控制可通过路由控制来实现,从而使具有分组过滤功能的路由器成为第一代防火墙产品。
  • 第二代防火墙:用户化的防火墙,将过滤功能从路由器中独立出来,并加上审计和告警功能。针对用户需求,提供模块化的软件包,是纯软件产品。
  • 第三代防火墙:建立在通用操作系统上的防火墙,近年来在市场上广泛使用的就是这一代产品。包括分组过滤和代理功能。第三代防火墙有以纯软件实现的,也有以硬件方式实现的。
  • 第四代防火墙:具有安全操作系统的防火墙:具有安全操作系统的防火墙本身就是一个操作系统,因而在安全性上得到提高

Linux 环境中主要的防火墙形式

  • Netfilter 的数据包过滤机制
    • Netfilter 这个机制主要就是分析进入主机的数据包,也就是將包的报头信息提取出来进行分析,以決定该链接是应该放行或阻挡下来。
      由于这种方式可以直接分析数据报头的信息,而报头的信息主要就是 OSI 参考模型中的数据链路层,网络层,以及传输层的信息,如 MAC 地址, IP 地址 , TCP, UDP, ICMP 等的信息都可以进行分析过滤,并且 Netfilter 提供了 iptables 来作为防火墙封包过滤的指令。十分强大
  • TCP Wrappers 的程序管理
    • TCP Wrappers 主要是分析TCP的报头信息,并与/etc/hosts.allow和/etc/hosts.deny中的规则进行匹配,从而决定哪些主机可以访问系统服务或资源。他的功能并没有 Netfilter 那么强大,但是他的配置相对于 Netfilter 的 iptables 要简单许多。
  • Proxy 的代理服务器
    • 其实代理服务器这样的防火墙相对于 Netfilter 是更安全一些,若是外面的人给小姐的物品是有毒的(外面发送有害的数据,或者想获取 server 信息),那也是丫鬟先中毒,小姐很安全呀(代理服务器中招,内网还是安全的)。

但是这是因为所有的链接,所有的数据包都中转过一层,多了一个环境,就需要多消耗一些时间,效率便降低了,高带宽也会到达瓶颈,并且因为通过代理服务器的转发那么便需要修改表头中的信息,地址转换,这样的话对 VPN 的使用也会增加一定的难度。所以相对来说 Netfilter 比 代理服务器式的防火墙应用的更加的广泛

而为什么上文说相较而言,proxy 形式比 Netfilter 要安全些,是因为数据包式的防火墙主要是在网络的七层模型中处理这样的事情:

  • 拒绝让外部网络的数据包进入主机的部分敏感的端口:比如我的 FTP 只是供给公司内部人员使用的,外面的人不能从中获取消息,那么添加规则让所有想访问该端口的请求数据包全部丢弃。

  • 拒绝某些 IP 来源的数据包进入主机:就如我知道有一个 IP 地址属于某个黑客的常用 IP,这个 IP 的请求一定是来攻击我或者对我不利的,便可添加规则将只要是由这个 IP 地址发来的请求数据包全部丢弃

  • 拒绝带有某些特殊标签(flag)的数据包进入:最常见的便是带有 SYN 的主动连接标签了,便可添加规则只有一发现这个标签,就把这个带有该标签的数据包丢掉

  • 拒绝某些 MAC 地址的链接与数据包:如果内网中有人中病毒,或者他是有意捣乱网络的,封 IP 地址他可以更换,那么我们就直接封掉其 MAC 地址,这样即使更换 IP 地址也没有用。
    这样的处理虽然可以阻挡大部分不利的数据,或者说攻击,但是还有许多的问题是无法防范的:

  • 防火墙不能有效的阻挡病毒或者木马程序:

    • 比如内网中的 DMZ 区域有一台 web 服务器,有 web 服务供给外网访问势必我们就需要将80端口开放出去,让外部网络能够请求,否则外部网络得不到数据,该服务器的功能根本无法起作用,而80端口的开放是的外部网络的数据包可以进入主机中,若是web服务有漏洞,数据包中有病毒利用该漏洞做一些事情。
  • 防火墙主要是针对外网的攻击添加规则,所以对于内网的攻击并无太强的招架之力。

TCP wrappers详解 粗解

TCP wrappers 是 Linux 中两大防护措施的其中之一,这层保护通过定义哪些主机允许或不允许连接到网络服务上来实现。

Tcp wrappers的认识

它被设计为一个介于外来服务请求和服务回应的中间处理

它的基本过程是这样的:

当服务器或主机接收到一个外来服务请求的时候,
先由TCP Wrapper 来对请求进行分析处理,TCP Wrapper 会根据请求所需要的服务和对这个服务所设定的规则来判断请求方是否有权限,
如果有,TCP Wrapper 会把这个请求按照配置文件所设定的规则转交给相应的守护进程去处理,同时记录这个请求动作。

TCP Wrappers虽然能对 TCP 协议的报文做过滤动作,
但是并不是所有的 TCP 协议报文 TCP Wrappers 都可以过滤掉。
只有该服务链接到TCP Wrappers的函式库才可以使用TCP Wrappers进行报文过滤。

因为 TCP Wrapper 的功能主要来自于 libwrap.a这个静态库,它是一个服务库。
像 xinetd、sshd 和 portmap 等许多服务编译时都依赖于 libwrap.so 这个动态链接库,其他的网路服务甚至你自己编写的服务都可以加上这个编译选项来提供 TCP Wrapper 的功能。

iptable

这个是Linux内核到了2.4才有的,很复杂,另开一篇文章研究吧

攻击和防御

DDOS 攻击

在计算中,拒绝服务( DOS,denial-of-service )攻击是试图消耗一台机器或网络的资源,例如去暂时或无限期中断甚至去暂停服务的主机连接到互联网,使其无法给予真正需求的用户。拒绝服务通常是通过 flood 攻击有针对性的尝试对目标机器或资源的多余请求,以使得系统过载,并防止一些或所有合法的请求。因为早期的服务器的性能和网络刚发展,性能并不高,所以由一台主机去不断地请求服务,就可以导致服务器应付不过来

后来硬件与网络飞速的发展,一台主机发动再多的请求,服务器也能够从容地应对,既然一台不够,那就成千上万台的来,所以有了分布式拒绝服务(DDoS,distributed denial-of-service)。

一个分布式拒绝服务(DDoS,distributed denial-of-service)攻击源往往不止一个,又往往成千上万个,并且都是真实唯一的IP地址。

它类似于一群人拥挤的堵在一家商店里面,就连门口都是人,而且这些人什么也不干,不买东西,无所事事,而真正需要买东西的人却堵在门口,进不去,这样便扰乱了商店或者企业的正常的运作。DDoS攻击的规模仍在不断增长

常见的可能受到 DDOS 攻击体现的症状有:

  • 网络堵塞,打开网站的速度异常的缓慢,或者平时都能打开,却打不开了
  • 服务器的 CPU 长期处于满负荷
  • 服务器的频繁死机,重启

而常见的 DDOS 攻击有以下几种

  • Ping flood :发送ping包的攻击者压倒性的数量给受害者
  • Ping of Death:攻击者发送修改后的 ping 数据包,如添加分包使前后的逻辑不正确,或者加长数据包使其超过 IP 报文的限制
  • Teardrop attacks:向目标机器发送损坏的IP包,诸如重叠的包或过大的包载荷。
  • UDP flood:利用大量UDP小包冲击服务器
  • SYN flood:利用 TCP 的连接过程,来消耗系统资源。
  • CC(challenge Collapsar):通过构造有针对性的、对最为消耗服务器端资源的业务请求,让服务器“劳累过度”而停止服务等等

SYN 攻击

据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。在2000年时 YAHOO 的网站遭受的攻击,就是黑客利用的就是简单而有效的 SYN 攻击,而 SYN 攻击依靠的就是 TCP 三次握手

TCP( Transmission Control Protocol 传输控制协议)是一个 Internet 协议套件的核心协议。它起源于最初的网络实现,它补充了互联网协议(IP,网络层的 IP 协议,IPv4、IPv6)。因此,整个套件通常被称为 TCP/IP。TCP 提供可靠的,有序的,和错误检查流在 IP 网络上的主机通信的运行的应用程序之间传递数据。

TCP是面向连接的,可靠的进程通信的协议,提供全双工服务,即数据可在同一时间双向传输,也正是因为 TCP 的可靠连接,所以广泛应用在大多数的应用层协议,而 TCP 在建立一个连接,需要客户端与服务器端发送3个数据包,这个过程叫 Three-way Handshake(三次握手)。

在这之前,服务器必须先绑定到一个端口并监听一个端口,以打开它的连接:这被称为被动打开。一旦被动打开,客户端可以启动一个主动打开,建立连接

1.由客户端使用一个随机的端口号,向服务器端特定的端口号发送 SYN 建立连接的请求,并将 TCP 的SYN 控制位置为1。SYN(synchronous)是TCP/IP建立连接时使用的握手信号,客户端将该段的序列号设置为一个随机值。
2.服务器端收到了客户端的请求,会向客户端发送一个确认的信息,表示已收到请求,这是的数据包里会将 ACK 设置为客户端请求序列号+1,同时服务器端还会向客户端发送一个 SYN 建立连接的请求,SYN 的序列号为另外一个随机的值
3.客户端在收到了服务器端的确认型号以及请求信号之后,也会向服务器端发送一个确认信号,确认信号的序列号为服务器端发送来的请求序列号+1。在这一点上,客户端和服务器都已收到了连接的确认。步骤1,2建立一个方向的连接参数(序列号),它是公认的。步骤2、3建立了另一个方向的连接参数(序列号),并被确认。有了这些,便建立了一个全双工通信。

SYN flood(SYN 洪水攻击)

这样是一次完整的 TCP 连接过程,而若是我的客户端发送了 SYN 的请求连接的信号,然后服务器从关闭变成监听状态,然后响应了我的请求,发送来了确认信息以及他的请求信号,并将该信息加入未连接的队列中,变成SYN_RCVD的状态若是客户端若是不处理,不给予响应,那么服务器便会一直的等待,只有等待超过了一定的时间,才会将此信息从队列中移除,而当有很多这样的事情发生时是非常耗费资源的。这是整个服务器建立连接时 TCP 状态的变化过程:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 常用算数生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 计算容器元素累计总和 param beg 容器开始迭代…

fork()请问下面的程序一共输出多少个“A”?多少个-?

题目&#xff1a;请问下面的程序一共输出多少个“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共输出8个。 首先程序一开始&am…

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 param beg1 容器1开始迭代器 par…

本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童

他本能富可敌国&#xff0c;最后却选择拯救世界 在命令行界面输入vim会出现一堆文件&#xff0c;但是一直有这么一句话 Help poor children in Uganda! “帮助可怜的乌干达儿童” 查询了一下这里面相关的历史背景和知识 在Vim许可证文件结束后的部分翻译 &#xff0d;如果…

linux 常用命令01

/bin/bash 就是linux默认的shell ls命令 ls -a 显示所有文件 包含隐藏文件 ls -R 递归显示子目录 ls -l 显示详细信息 ls -lrt 按照时间排序&#xff0c;显示文件信息 配合通配符使用 ls *.c *匹配任意多个字符 ls xx.? 匹配任意一个字符 cd 命令 cd - 为切换到上次目录 cd 回…

Linux基础查漏补缺

文章目录第二遍重新回顾Linux基础查看主机名修改主机名查看IP地址Linux的 “--”和“-”根目录文件的意义和作用alias直接在命令行界面输入firefox数组越界发生什么命令行光标移动的几个操作重定向第二遍重新回顾Linux基础 1.查找忽略的知识点 2.再次记忆一些基础知识 3.巩固基…

linux 常用命令02--文件属性 以及软硬链接

文件属性和用户用户组 通过ls-l 显示文件详细信息 drwxrwxr-x 2 user usergroup 4096 10月 30 20:55 stu1drwxrwxr-x d代表目录文件&#xff0c; -代表普通文件 rwx rwx r-x 归属用户的权限 归属组的权限 其他用户的权限 权限位数字表示法(8进制数…

linux查漏补缺之常用命令

wc命令 -c, --bytes, --chars输出字节统计数。-l, --lines输出换行符统计数。-L, --max-line-length输出最长的行的长度。-w, --words输出单词统计数。grep命令 图解

linux 常用命令03--修改文件的权限与归属

chmod 命令 改变文件权限 第一种&#xff1a; chmod [u|g|o|a] [|-] [r|w|x] filename 比如&#xff1a; chmod ux filename 给所属用户增加执行的权限第二种&#xff1a; 给a.out 文件&#xff0c;所属用户可读可写&#xff0c;所属组可读可写&#xff0c;其他的读 chmod 06…

思维导图:面试小结

文件&#xff1a;思维导图

linux 常用命令04 查找和检索

先说一下 文件的基本类型 文件类型 l 符号链接文件&#xff08;软连接&#xff09; b 块设备 &#xff08;磁盘文件&#xff09;c 字符设备p 管道设备&#xff08;pipe&#xff09;s 本地套接字&#xff08;网络编程&#xff09;- 普通文件 用find命令的时候&…

linux 常用命令05 常用的压缩与解压缩文件

zip/unzip ----zip格式 使用方式&#xff1a;zip -r 压缩包名 原材料 -r代表递归子目录 原材料可以有多个 例如&#xff1a;zip -r bb.zip bb hello 对应的解压缩&#xff1a;unzip bb.zip .gz格式的压缩包 gzip和gunzip tar 最常用打包工具 .tar.gz tar相应参数介绍 -c 压缩…

apt-howto

https://www.debian.org/doc/manuals/apt-howto/index.zh-cn.html#contents

Linux系统监控shell脚本

开源项目 https://github.com/atarallo/TECMINT_MONITOR #! /bin/bash # unset any variable which system may be usingunset tecreset os architecture kernelrelease internalip externalip nameserver loadaveragewhile getopts iv name docase $name ini)iopt1;;v)vopt1…

linux ubuntu 软件安装的三种方式

apt-get 自动安装软件&#xff0c;解决依赖关系 sudo apt-get update 更新源 源在 /etc/apt/sources.list 文件中sudo apt-get install softwarename sudo apt-get remove softwarenamedpkg 根据deb安装包来安装软件 dpkg 是“Debian Packager ”的简写 sudo dpkg -i xxx.de…

linux 用户管理以及其他命令

设置用户组 sudo groupadd test 增加test用户组创建用户 选项&#xff1a; -s 指定shell -g 指定组 -d 用户家目录 -m 家目录不在时&#xff0c;自动创建 sudo useradd -s /bin/bash -g test -d /home/newuser -m newuser设置密码 sudo passwd newuser切换用户 su xiaowan…

蒙特卡洛法求圆周率100亿数据

代码 import time import random hits0 pi0 DARTS100000*100000 starttime.perf_counter() for i in range(DARTS):x,yrandom.random(),random.random()distpow(x ** 2y**2,0.5)if dist < 1.0:hits1 pi4*(hits/DARTS) print("圆周率的值是{:.10f}".format(pi)) p…

linux gcc 简单使用记录01

大体编译流程 gcc 参数&#xff1a; I 包含头文件路径 L 包含库文件路径 l 库名 比如libxxx.so 对应着 -lxxx(掐头去尾) O 优化选项 1&#xff0c;3 W 警告 all 显示更多的 c 编译成 .o 文件&#xff08;二进制&#xff09; E 输出到标准输出&#xff0c;宏替换&#xff0c…

No module named 'Tkinter'

sudo apt install python3-tk这一句就搞定了。网上长篇大论也真是醉了

Linux gcc 制作静态库01

制作步骤 编译为 .o 文件 createliba目录下 结构为 ├── head │ └── test.h ├── jia.c ├── jian.c ├── cheng.c ├── chu.c 这4个源文件&#xff0c;提供 - * /算数运算&#xff0c; 使用了 head目录下 test.h文件 先编译为.o文件 gcc -c *.c -I./head l…