[原创] Linux 上的服务器搭建和配置 - 读书笔记

2,117 阅读33分钟

Linux 系统服务器搭建与配置

Samba 服务器

跨平台通信,实现不同操作系统之间的资源共享

应用环境:

  • 文件和打印机共享 使用 SMB 进程实现文件和打印机共享是 Samba 的主要功能

  • 身份验证和权限设置 smbd 服务支持身份验证和权限设置模式,通过加密方式保护共享文件和打印机

  • 名称解析 nmbd 服务可以搭建 NBNS(NetBIOS Name Service)服务器,将计算机的 NetBIOS 名解析为 IP 地址

  • 浏览服务 局域网中,可配置 Samba 服务器为本地主浏览服务器,保存可用资源列表

工作原理

基于 SMB 通信协议,直接运行于 TCP/IP 协议之上,使用 445 端口

  • 工作流程
  1. 协议协商

    客户端发送支持的 SMB 协议类型,服务器选择最最优的 SMB 类型并回应

  2. 建立连接

    通过身份验证后,服务器为客户端分配唯一的 UID,开始通信

  3. 访问共享资源

    客户端发送 tree connect 指令请求资源,服务器为资源访问连接分配 TID,开始访问

  4. 断开连接

    客户端发送 tree disconnect 指令关闭共享,服务器断开连接

  • 相关进程

    nmbd:进行 NetBIOS 名解析,并提供浏览服务,显示网络上的共享资源列表

    smbd:管理网络上的共享资源

NFS 服务器

Network File System 网络文件系统,可在 Linux 系统间实现资源共享

NFS 无固定工作端口,需要配合 RPC (Remote Procedure Call 远程进程调用,固定工作端口 111) 服务使用

NFS & RPC 工作过程

  1. NFS 启动时,自动选择小于 1024 的可用端口,并向 RPC 服务注册

  2. 客户端请求 NFS 时,首先向 RPC 查询 NFS 工作端口

  3. RPC 返回 NFS 工作端口给客户端

  4. 客户端访问 NFS 工作端口,请求服务

  5. 经过权限验证,NFS 服务器与客户端建立连接

DCHP 服务器

Dynamic Host Configuration Protocol 动态主机配置协议,自动为客户端配置 IP 地址

基于客户/服务器模式,运行在 TCP/IP 协议之上

工作过程

  1. DHCP 客户端发送 IP 租约请求

    客户端启动网络时,TCP/IP 地址与 0.0.0.0 绑定。客户端发送一个 DHCP Discover 广播信息到本地子网,发送至 UDP 端口 67。

  2. DHCP 服务器提供 IP 地址

    DHCP 服务器保留预分配地址并发送 DHCP Offer 信息包广播至 UDP 端口 68,该信息包含 IP 地址、子网掩码、DHCP 服务器 IP 地址、租用期限等信息。

  3. DHCP 客户端进行 IP 租用选择

    客户端通常对第一个 DHCP Offer 信息包产生响应,并发送 DHCP Request 信息包广播。未被采用的 DHCP 服务器会将预留的 IP 地址回收。

  4. DHCP 服务器认可 IP 租用

    服务器接收到客户端采用的 DHCP Request 信息后,会发送一个 DHCP Acknowledge 信息包广播,信息包含了客户端请求的信息。

IP 地址租约和更新

客户端从 DHCP 服务器取得 IP 地址后,本次租约行为就会被记录到主机的租赁信息文件中,并开始租约计时。

  1. IP 地址租约

    • 限定租期。DHCP 服务器提供给客户端的租约是有期限的,当租约到期客户端没有更新租约,则 DCHP 服务器将回收该 IP 地址。

    • 永久租用。DHCP 服务器提供给客户端的租约是永久使用的。

  2. 租约更新

    • 更新。租期过了 50% 或者接近 87.5% 时,客户端会发送包含 DHCP Request 的 UDP 信息给 DHCP 服务器,询问是否能保持 TCP/IP 配置信息并更新租期。如果服务可用 DHCP 服务器会发送一个 DHCP Acknowledge 信息给客户端,并更新租期。

    • 重新捆绑。如果在租期 87.5% 时更新租约失败,客户端会尝试与任何一个 DHCP 服务器联系并获得一个有效的 IP 地址,重新进入捆绑状态。如果客户端当前的 IP 地址租用期满,客户端必须放弃该 IP 地址,并重新进入初始化状态,重复整个 DHCP 工作过程。

客户端在租约期内,会在租期 50% 与 接近 87.5% 时与服务器联系并决定下一步动作。

  1. 解约条件

    • 客户端租约到期。客户端 IP 地址租用期满,且没有成功更新租约,DHCP 服务器将会回收该 IP 地址。

    • 客户端离线。当客户端进行关闭网络接口(禁用网卡)、关机或重启等操作时,会造成客户端离线。此时,DHCP 服务器会将 IP 地址回收。

DHCP 服务器分配的 IP 地址类型

  1. 动态 IP 地址

    DHCP 动态地为客户端分配 IP 地址。在 IP 地址有限的单位内,动态 IP 地址可以最大化地利用资源。

  2. 固定 IP 地址

    DHCP 服务器记录特定计算机的 MAC 地址,然后为其分配一个固定的 IP 地址。

查询 MAC 地址方法:

查询本机:

ifconfig 命令

查询远程计算机:

ping c 1 远程计算机 IP 地址 // ping 命令连接远程计算机

arp -n // 查询缓存在本地的远程计算机中的 MAC 地址

DHCP 服务器规划

  1. 小型网络 DHCP 服务器

    如果网络规模在几十台计算机并且网络拓扑结构简单,采用 DHCP 服务器就是个不错的选择。在规划 DHCP 服务器的同时需要注意以下两点:

    • DHCP 服务器硬件设备选择。

      DHCP 服务器需要长时间运行,所以要选择性能稳定的计算机搭建。

    • 计算机 IP 获取方式规划。

      确定哪些计算机需要采用动态 IP 地址配置,哪些计算机、服务器及网络设备采用静态 IP 地址配置。

  2. 大型网络 DHCP 服务器

    如果网络中存在大量计算机,为了管理和维护的方便,我们应该配置 DHCP 服务器来动态分配 IP 地址。在规划同时需要考虑以下几点:

    • DHCP 服务器位置。

      客户端在每次获取 IP 地址时需要发送 DHCP Discover 消息广播,如果在一段时间内没有接到 DHCP 服务器的响应,将继续发送消息广播。这样会造成网络带宽的浪费。所以为了缩短 DHCP 服务器的响应时间,应选择适当的介入位置,尽量使服务器连接网络核心位置。

    • DHCP 服务器作用域设置。

      根据不同的需求特点设计合适的作用域,并进行租约、网关及 IP 范围的划分。

    • 跨路由网络 DHCP 服务器。

      如果网络内部划分有多个子网并采用路由器进行连接,所以需要每个子网都可以请求有效的 DHCP 服务器,但子网内的客户机无法向其他子网的 DHCP 服务器发送请求。因此我们可以搭建一台 DHCP 服务器,同时在连接多个子网的路由器上设置 DHCP 中继代理就可以利用路由器转发 DHCP 消息,所有计算机都可以请求同一台 DHCP 服务器。

配置存在路由的网络需要注意:

  • 存在 DHCP 服务器

一个物理网络被划分为多个逻辑子网,在所有子网中必须存在一台 DHCP 服务器能够提供 TCP/IP 信息分配服务。

  • 路由器中继代理设置

路由器默认并不转发广播数据包,为了能够转送 DHCP Discover 消息,必须要在路由器上配置 DHCP 中继代理。

  1. 80/20 规则

    为了确保 DHCP 服务的稳定性,应配置 DHCP 主服务器和 DHCP 辅助服务器,并合理划分 DHCP 服务器的地址池,防止为客户端分配重复的地址。 一般主 DHCP 服务器管理 80% 的网络地址,辅助 DHCP 服务器管理剩余 20% 网络地址。日常工作中,由主 DHCP 服务器完成 TCP/IP 分配任务,在该服务器不可用时,辅助 DHCP 服务器才开始工作。

此规则适用于多子网的网络拓扑结构,并根据具体需求进行服务器规划。

DNS 服务器

DNS ( Domain Name Service, 域名服务 ) 是 Internet/Intranet 中最基础也非常重要的一项服务,它提供了网络访问中域名和 IP 地址的互相转换。

域名空间

DNS 是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的数,这个逻辑的属性结构称为域名空间。

DNS 域名空间中,数的最大深度不超过 127 层,树中的每个节点最长可以存储 63 个字符。

  1. 域和域名

    DNS 数的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字通过域名表示。 域名通常由一个完全正式域名(FQDN —— Fully Quanlified Domain Name)标识。FQDN 采用节点到树根的反向书写形式,并将每个节点用 “.” 分隔,来表示每个节点相对于 DNS 域树根的位置。

通常 FQDN 有严格的命名限制,长度不能超过 256 字节,只允许使用字符 a-z, 0-9, A-Z 和 -(减号)。.(点号)只允许在域名标志之间或者 FQDN 的结尾使用。

域名不区分大小写。

  1. Internet 域名空间

    Inernet 域名空间整体进行划分,由最顶层到下层,可以分成:根域、顶级域、二级域、子域,并且域中能够包含主机和子域。

    Internet 域名空间的最顶层是根域(root),其记录着 Internet 的重要 DNS 信息,由 Internet 域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到 Internet 的各个组织。

    DNS 根域下面是顶级域,也由 Internet 域名注册授权机构管理。共有 3 种类型的顶级域。

    • 组织域:采用 3 个自负的代号,表示 DNS 域中所包含的组织及其主要功能或活动。比如,com 为商业机构组织,edu 为教育机构组织, gov 为政府机构组织,mil 为军事机构组织,net 为网络机构组织,org 为非盈利机构组织,int 为国际机构组织。

    • 地址域:采用两个字符的国家或地区代号。比如,cn 代表中国,kr 代表韩国,us 代表美国。

    • 反向域:名字为 in-addr.arpa 的特殊域,用于将 IP 地址映射到域名(反向查询)。

  2. 区是 DNS 名称空间的一个连续部分,包含了一组存储在 DNS 服务器上的资源记录。

    每个区都位于一个特殊的节点,但区并不是域。DNS 域是名称空间的一个分支,而区一般是存储在文件中的 DNS 名称空间的一部分,可以包括多个域。一个域再分成几个部分,每个部分或区可以由一台 DNS 服务器控制。使用区的概念,DNS 服务器回答关于自己区中主机的查询,以及哪个区的授权服务器。

DNS 服务器分类

  1. 主 DNS 服务器(Master 或 Primary)

    主 DNS 负责维护所管辖域的域名服务信息,并从本地磁盘中的取文件中加载域信息。

    配置主与服务器需要一整套的配置文件,包括主配置文件、正向域的区文件、反向域的区文件、高速缓存初始化文件和回送文件。

  2. 辅助 DNS 服务器(Slave 或 Secondary)

    辅助 DNS 服务器用于分担主 DNS 服务器的查询负载。

    辅助 DNS 服务器上的区文件是从主服务器中转移出来并作为本地磁盘文件存储在辅助服务器中。因此,配置辅助 DNS 服务器只需配置主配置文件、高速缓存文件和会送文件即可。

  3. 转发 DNS 服务器(Forwarder Name Server)

    转发 DNS 服务器可以向其他 DNS 服务器转发解析请求。

    当 DNS 服务器无法解析客户端的请求,则需要向其他制定的 DNS 服务器转发解析请求;其他 DNS 服务器完成解析并返回解析结果,转发 DNS 服务器将结果缓存在自己的 DNS 缓存中,并向客户端返回解析结果。

目前网络中所有的 DNS 服务器均被配置为转发 DNS 服务器,向指定的其他 DNS 服务器或者根域服务器转发自己无法解析的请求。

  1. 唯高速缓存 DNS 服务器(Caching-only DNS server)

    唯高速缓存 DNS 服务器供本地网络上的客户机进行域名转换。

    唯高速缓存 DNS 服务器通过查询其他 DNS 服务器并将获得的信息存放在高速缓存中,为客户机查询提供服务。其提供的所有信息都是间接信息,因此并不是权威的服务器。

DNS 查询模式

  1. 递归查询

    DNS 服务器收到请求后会在本机查找,如果没有查询结果,将会转发到其他 DNS 服务器查询,并将查询结果返回给客户机。

  2. 转寄查询(又称迭代查询)

    DNS 服务器收到请求后会在本机查找,如果没有查询结果,将会返回给客户端另一台 DNS 服务器的 IP 地址,然后客户端向另一台 DNS 服务器查询结果。以此类推,直到查询到所需结果。如果最后一台 DNS 服务器也没有查到所需数据,则通知客户端查询失败。

一般在 DNS 服务器之间的查询便属于转寄查询。

域名解析工作原理

  1. 客户机提交域名解析请求,发送给本地的 DNS 服务器。

  2. 本地 DNS 服务器收到请求后,首先查询本地缓存。如果缓存中有结果,则直接返回结果,否则,本地 DNS 服务器将把请求转发给根域名服务器。

  3. 根域名服务器返回给本地 DNS 服务器所查询域的顶级域名服务器的地址。

  4. 本地 DNS 服务器向该顶级域名服务器发送查询请求。

  5. 顶级域名服务器查询缓存和记录,如果成功,将结果返回给客户机。否则,向客户机返回二级域名服务器的地址。

  6. 本地 DNS 服务器向二级域名服务器发送查询请求。

  7. 二级域名服务器查询并返回结果(重复转寄查询)。

  8. 本地 DNS 服务器将得到的结果返回给客户机并缓存该结果。

正向解析:将域名解析为 IP 地址。

反向解析:将 IP 地址解析为域名。反向解析可用于服务器身份验证。

资源记录

服务器区文件(又称 DNS 数据库文件或简单数据库文件)中包含组成相关 DNS 域资源信息的资源记录(RR)。

  1. SOA 资源记录

    每个区的开始处都包含了一个起始授权记录(Start of Authority Record),简称 SOA 记录。SOA 定义了域的全局参数,管理整个域。

    一个区文件中只允许存在唯一的 SOA 记录。

  2. NS 资源记录

    名称服务器(NS)资源记录表示该区的授权服务器,即表示 SOA 资源记录中指定的该区的主服务器和辅助服务器。每个区在区根处都至少包含一个 NS 记录。

  3. A 资源记录

    地址(A)资源记录把 FQDN 映射到 IP 地址。

  4. PTR 资源记录

    相对于 A 资源记录,指针(PTR)记录把 IP 地址映射到 FQDN。

  5. CNAME 资源记录

    规范名字(CNAME)资源记录创建特定 FQDN 的别名。

    用户可以使用 CNAME 来隐藏用户网络的实现细节。

  6. MX 资源记录

    邮件交换(MX)资源记录为 DNS 域名指定邮件交换服务器。

FTP 服务器

File Transfer Protocol 文件传输协议,具备强大的文件传输可靠性和更高的效率。

FTP 工作原理

  1. 客户端向服务器发出连接请求,同时客户端系统动态地打开一个大于 1024 的端口(比如 1031 端口)等候服务器连接。

  2. 若 FTP 服务器在端口 21 监听到请求,则会在客户端的 1031 端口和服务器的 21 端口建立 FTP 会话链接。

  3. 传输数据时,FTP 客户端动态地打开一个大于 1024 的端口(比如 1032 端口)连接到服务器的 20 端口,并在这两个端口之间进行数据传输。

  4. 数据传输完毕,客户端 1032 端口和服务器 20 端口之间的自动断开。

  5. 会话结束,FTP 客户端断开与 FTP 服务器的连接,客户端动态分配的端口自动释放。

FTP 服务的传输模式

FTP 服务有两种工作模式:主动传输模式(Active FTP)和被动传输模式(Passive FTP)。

  1. 主动传输模式

    FTP 客户端随机打开一个大于 1024 的端口 N(比如 1031 端口)向服务器的 21 号端口发起连接。同时,客户端开启 N+1 号端口(1032)进行监听,并向服务器发出 PORT 1032 命令。

    服务器接收到命令后,会用其本地的 FTP 数据端口(通常是 20)来连接客户端指定的 1032 端口,并进行数据传输。

  2. 被动传输模式

    FTP 客户端随机开启一个大于 1024 的端口 N(比如 1031 端口)向服务器的 21 号端口发起连接。同时,客户端开启 N+1 号端口(1032)并向服务器发送 PASV 命令。

    服务器接收到命令后,会开放一个大于 1024 的端口 P(比如 1521 端口)进行监听,然后用 PORT 1521 命令通知客户端。

    客户端收到命令后,会通过 1032 端口连接到服务器的 1521 端口,然后在两个端口之间进行数据传输。

主动传输模式是指服务器主动连接客户端的数据端口,被动传输模式是指服务器被动等待客户端连接。

被动传输模式的 FTP 服务通常用于处在内网的 FTP 客户端访问外界 FTP 服务器的情况。

因为在这种情况下,防火墙通常会阻止外网的主机连接内网主机,而只允许内网主机连接外网主机。因此这种情况下,不能有效地使用主动传输模式,而被动传输模式却可以很好地工作。

Sendmail 服务器

电子邮件(Electronic Mail)服务是 Internet 最基本也是最重要的服务之一。

电子邮件系统的组成

Linux 系统中的电子邮件系统包括 3 个组件:MUA ( Mail User Agent 邮件用户代理 )、MTA ( Mail Transfer Agent 邮件传送代理 ) 和 MDA ( Mail Delivery Agent 邮件投递代理 )。

  1. MUA

    MUA 是电子邮件系统的客户端程序,主要负责邮件的发送和接收以及邮件书写、阅读等工作。比如:Windows 平台下的 Outlook、Foxmail,Linux 平台下的 mail、elm、pine 和 Evolution 等。

  2. MTA

    MTA 是电子邮件系统的服务器端程序,主要负责邮件的存储和转发。比如:Windows 平台下的 Exchange 和 Linux 平台下的 sendmail、qmail 和 postfix 等。

  3. MDA

    MDA 也称 LDA ( Local Dilivery Agent 本地投递代理 )。MTA 把邮件投递到邮件接收者所在的邮件服务器,MDA 则负责把邮件按照接收者的户名投递到邮箱中。

  4. MUA、MTA 和 MDA 协同工作原理

    发送邮件时,MUA 程序将信件传递给 MTA 程序,MTA 与目的邮件服务器建立连接并发送邮件,MDA 将接收到的邮件投递到相应的邮箱中。

    MTA 程序可以判断邮件发送的地址,如果邮件是寄给局域网或者本机,则直接将邮件转交给 MDA 程序投递,如果邮件是寄给远程系统用户的,MTA 必须能够选择路由并建立连接。

    MTA 程序还必须能够处理发送邮件时产生的问题,并向发信人报告出错信息。

    MTA 程序还支持别名机制,使得用户能够方便地使用别名与其他用户、主机或网络通信。

电子邮件传输过程

  1. 邮件用户在客户机使用 MUA 书写邮件,并将写好的邮件提交到本地 MTA 上的缓冲区。

  2. MTA 每隔一定时间发送一次缓冲区中的邮件队列。MTA 根据邮件的接收者地址,使用 DNS 服务器的 MX(邮件交换器资源记录)解析邮件地址的域名部分,从而决定将邮件投递到哪个目标主机。

  3. 目标主机上的 MTA 收到邮件后,根据邮件信息判断收件人,并使用 MDA 程序将邮件投递到该用户的邮箱。

  4. 收件人使用 MUA 软件登陆邮箱,查阅新邮件。

相关协议

常见的与电子邮件相关的协议有 SMTP、POP3 和 IMAP4。

  1. SMTP(Simple Mail Transfer Protocol)

    SMTP 即简单邮件传输协议,该协议默认工作在 TCP 的 25 端口。SMTP 属于客户机/服务器模型,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

    SMTP 属于 TCP/IP 协议簇,它帮助每台计算机在发信或中转信件时找到下一个目的地,并通过 SMTP 所指定的服务器把电子邮件寄到收件人的服务器上。

  2. POP3(Post Office Protocol 3)

    POP3 即邮局协议的第三个版本,该协议默认工作在 TCP 的 110 端口。POP3 属于客户机/服务器模型,它规定个人计算机连接到 Internet 的邮件服务器和下载电子邮件的方式。

    POP3 是 Internet 电子邮件的第一个离线协议标准,POP3 允许从服务器上把邮件存储到本地主机,同时删除保存在邮件服务器上的邮件。

  3. IMAP4(Internet Message Access Protocol 4)

    IMAP4 即 Internet 信息访问协议的第四个版本,该协议默认工作在 TCP 的 143 端口。IMAP4 属于客户机/服务器模型,是用于从本地服务器上访问电子邮件的协议。用户的电子邮件由服务器负责接收保存,用户可以通过浏览信件头来决定是否要下载此信件。用户也可以在服务器上创建或更改文件夹或者邮箱,删除信件或检索信件的特定部分。

虽然 POP3 和 IMAP4 都用于处理电子邮件的接收,但二者在机制上有所不同。用户访问电子邮件时,IMAP4 需要持续访问邮件服务器,而 POP3 则是将信件保存在服务器上,当用户阅读信件时,所有内容将会被下载到用户的机器上。

邮件中继

邮件服务器在接收到邮件后,会根据邮件的目的地址判断邮件发送至本域还是外部域,然后进行不同的操作。

  1. 本地邮件发送

    当邮件服务器检测到邮件发往本地邮箱时,会直接将邮件投递到指定邮箱。

  2. 邮件中继

    中继是指要求服务器向其他服务器传递邮件的一种请求。

    • 中继

      用户通过服务器将邮件传递到外部域。

    • OPEN RELAY(开放中继)

      不受限制的开放中继,无需经过验证就可以中继邮件到外部域。

    • 第三方中继

      由其他服务器提交而来的发往其他外部域的邮件中继。比如 A 服务器发送给 B 服务器的邮件,由 C 服务器中继转发,则 C 服务器被称为第三方代理。

  3. 邮件认证机制

    邮件认证机制要求用户在发送邮件时,必须提交账号和密码,经过服务器验证该用户合法后才允许发送邮件。

    如果关闭了 OPEN RELAY,那么必须是该组织的成员并通过验证后才可以提交中继请求。

一般服务器的开放中继和第三方中继是要禁止的,但中继不能关闭,否则将无法将邮件发送至外部域。

防火墙

防火墙可以隔离局域网与外网、限制网络互访,以此来保护内部网络

防火墙特点

位置权威性。网络规划中,防火墙必须位于网络的主干线路。只有当防火墙是内外网络之间通信的唯一通道时,才可以全面、有效地保护企业内部的网络安全。

检测合法性。防火墙最基本的功能是确保网络流量的合法性,只有满足防火墙策略的数据包才能进行相应转发。

性能稳定性。防火墙处于网络边缘,是连接网络的唯一通道,时刻都会经受网络入侵的考验,所以其稳定性至关重要。

防火墙种类

传统意义上讲,防火墙大致分为三类,分别是“包过滤”、“应用代理”和“状态检测”。

  1. 包过滤防火墙

    包过滤防火墙检查每一个接受的数据包,查看包中可用的基本信息,如源地址和目的地址、端口号、协议等。然后将这些信息与设立的规则相比较,符合规则的数据包通过,否则将被拒绝。

    现在防火墙使用的包过滤技术基本都属于“动态包过滤”技术,它的前身是“静态包过滤”技术。

    静态包过滤技术是包过滤防火墙的第一代模型,这种技术只能根据预设的过滤规则进行判断,显得有些笨拙。

    动态包过滤技术在保持静态包过滤技术优点的基础之上,增加了对于已经成功与计算机连接的报文传输跟踪,并判断该连接发送的数据包是否会对系统构成威胁,从而有效地组织了有害的数据继续传输。

    与静态包过滤技术相比,虽然动态包过滤技术需要消耗更多的系统资源和时间,但这是目前市场上通用的技术。

  2. 代理防火墙

    代理防火墙接受来自内部网络用户的通信请求,然后建立与外部网络服务器单独的连接,并为每个应用服务建立一个专门的代理。代理防火墙的内外部网络之间的通信不是直接的,都需要经过代理服务器审核,通过审核后再由代理服务器代为连接。

    应用代理技术使用了“应用协议分析”技术,其工作在 OSI 模型的应用层,可以比包过滤技术更有效地检查数据是否存在危害。而且,由于应用代理防火墙工作在应用层,可以实现双向限制,在过滤外部数据的同时还能监控内部网络的数据。

    代理防火墙通常支持的服务有:HTTP、HTTPS/SSL、SMTP、POP3、IMAP、NNTP、TELNET、FTP、IRC。

    虽然应用代理技术比包过滤技术更加完善,但当用户对网络要求比较高时,代理防火墙会成为网络出口的瓶颈。防火墙需要为不同的网络服务建立专门的代理服务,因此也会增加网络延时。

  3. 状态检测技术

    状态检测技术是基于“动态包检测”技术并添加了“状态检测”模块的新技术,它会在不影响网络正常工作的情况下,采用抽取相关数据的方法对网络通信的各个层进行监测,并根据各种过滤规则做出安全决策。

    状态检测技术在每个连接建立时,都会为这个连接构造一个会话状态,里面包含了这个连接数据包的所有信息(比如数据包的头部、协议、地址、端口等信息),以后对该连接的检测都基于这个会话状态进行。并且会话状态的保留时间是有限的,在限制范围内如果没有再进行数据传输,这个会话状态就会被丢弃。

    状态检测技术的优点是能对每个数据包的内容进行监控,一旦建立了一个会话状态,此后的数据传输都要以这个会话状态作为依据。它可以对包的内容进行分析,从而摆脱了传统防火墙仅局限于过滤包头信息的弱点,而且这种防火墙不必开放过多端口,从而进一步杜绝了因开放端口过多带来的隐患。

iptables 简介

Netfilter/iptables IP 信息包过滤系统实际由 netfilter 和 iptables 两个组件构成。Netfilter 是集成在 Linux 内核中的一部分,它的作用是定义、保存相应的规则。Iptables 是一种工具,用以修改信息的过滤规则及其他配置。用户通过 iptables 来设置适合当前环境的规则,而这些规则将会保存在内核空间 netfilter 中。

  1. iptables 工作原理

    netfilter 提供了一系列的表(table),每个表由若干个链(chain)组成,每条链由若干条规则(rule)组成。实际上,netfilter 是表的容器,表是链的容器,链是规则的容器。

    规则(rule)是设置过滤数据包的具体条件,如 IP 地址、端口、协议以及网络接口等信息。

    条件 说明
    Address 数据包内的地址信息,包括源地址(Source Address)、目的地址(Destination Address)和网卡地址(MAC Address)
    Port 数据包内的端口信息,包括源端口(Source Port)、目的端口(Destination Port)
    Protocol 通信协议,包括 TCP、UDP 或者 ICMP 等协议
    Interface 接口,包括封包接收或者输出的网络适配器名称
    Fragment 不同 Network Interface 的网络系统会有不同的封包长度的限制,因此在不同的网络系统间传输数据时,数据包可能会被裁切(Fragment)。此规则针对裁切后的封包信息进行监控和过滤。
    Counter 数据包的数量

    动作(target)是对 netfilter 检测通过的数据包的操作内容。

    动作 说明
    ACCEPT 允许数据包通过
    DROP 丢弃数据包
    REJECT 拒绝数据包,并返回错误信息
    LOG 将数据包信息写入日志
    QUEUE 传送给应用程序处理该数据包

    链(chain)是数据包传递过程中所有规则的组合,规则链通常分为内置链(Build-in Chains)和用户自定义链(User-Defined Chains)。netfilter 常用有五个内置链:

    内置链 说明
    PREROUTING 数据包进入本机,但在进入路由表之前
    INPUT 数据包通过路由表,目的地为本机
    OUTPUT 数据包从本机发出
    FORWARD 数据包通过路由表,目的地不为本机
    POSTROUTING 数据包通过路由表后,发送到网卡接口之前

    表(table)是 netfilter 根据数据包处理需求(过滤、地址转换或信息变更)对链进行的组合,共有三个表:filter、nat 和 mangle。

    filter 是 netfilter 默认的表,通常使用该表进行过滤的设置,其包含 INPUT、FORWARD 和 OUTPUT 内置链,几乎可以设定所有的动作。

    nat 可以修改数据包并完成网络地址转换,包含 PREROUTING、OUTPUT 和 POSTROUTING 链。nat 表仅用于网络地址转换,可转换包的源地址或目标地址,具体的动作包含 DNAT、SNAT 和 MASQUERADE。

    mangle 用于数据包的特殊变更操作,包含所有内置链 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING,其支持 TOS、TTL 和 MARK 的操作。

TOS 操作用来设置或改变数据包的服务类型,常用来设置网络上的数据包如何被路由等策略。

TTL 操作用来改变数据包的生存时间,通过让所有数据包共用同一个 TTL 来避免通过 TTL 检测连接网络的主机数量。

MARK 用来给数据包设置标记,并根据不同的标记来决定不同的路由,可用于做宽带限制和基于请求的分类。

iptables 工作流程

Route 1

数据包进入防火墙 -> mangle:PREROUTING -> nat:PREROUTING -> 路由 -> mangle:INPUT -> filter:INPUT -> 本机进程

数据包进入防火墙后,首先进入 mangle 表的 PREROUTING 链并按照设定修改数据包信息,然后进入 nat 表的 PREROUTING 链按照规则进行网络地址转换。

数据包信息修改完成,进入路由,判断数据包是否发送给本机或者向其他网络转发。

发往本机的数据包将进入 mangle 表的 INPUT 链,根据需要修改数据包信息,然后进入 filter 表的 INPUT 链进行数据过滤。

最后通过的数据包将进入本机的处理进程。

Route 2

数据包进入防火墙 -> mangle:PREROUTING -> nat:PREROUTING -> 路由 -> mangle:FORWARD -> filter:FORWARD -> mangle:POSTROUTING -> nat: PSOTROUTING -> 外网

数据包进入防火墙后,首先进入 mangle 表的 PREROUTING 链并按照设定修改数据包信息,然后进入 nat 表的 PREROUTING 链按照规则进行网络地址转换。

数据包信息修改完成后,进入路由,判断数据包是否发送给本机或者向其他网络转发。

转发至其他主机的数据包将进入 mangle 表的 FORWARD 链进行数据包信息的修改,然后进入 filter 表的 OUTPUT 链进行过滤。通过的数据包将依次进入 mangle 表的 POSTROUTING 链和 nat 表的 POSTROUTING 链进行数据包信息的修改和网络地址转换。

最后数据包转发至其他主机。

Route 3

数据在本地封包 -> 路由 -> mangle:OUTPUT -> nat:OUTPUT -> filter:OUTPUT -> mangle:POSTROUTING -> nat:POSTROUTING -> 外网

数据包由本机产生并封包,首先进入路由,然后经过 mangle 表的 OUTPUT 链并进行数据包信息的修改,在进入 nat 表的 OUTPUT 链进行网络地址转换。

数据包信息修改完成,进入 filter 表的 OUTPUT 链进行过滤,通过的数据包将依次进入 mangle 表的 POSTROUTING 链和 nat 表的 POSTROUTING 链进行数据包信息的修改和网络地址转换。

最后数据包发送至外网。

NAT 简介

网络地址转换器(Network Address Translator)位于专用网络和公网之间,用于实现以下功能:

  • 从专用网络内部传出的数据包由 NAT 实现专用地址转换为公网地址

  • 从公网传入的数据包由 NAT 将公网地址转换为专用网络内部的地址

  • 支持多重服务器和负载均衡

  • 实现透明代理

在内网中计算机使用未注册的专用网络 IP 地址,而在外部网络通信时使用注册的公网 IP 地址,大大降低了连接成本。同时 NAT 也可以将内部网络隐藏起来,对外只暴露注册的公网 IP 地址,可以保护内网。

NAT 工作过程

客户机将数据包发给运行 NAT 的计算机,NAT 将数据包中的源 IP 地址和端口号换成已注册的公网 IP 地址(即运行 NAT 的计算机自己的 IP 地址)和端口号,然后将数据包发送给目的主机,同时在映像表中记录一个跟踪信息,以便向客户机发送回答信息。

外部网络发送信息给运行 NAT 的计算机,NAT 将收到的数据包的公网 IP 地址和端口号转换为专用网络的 IP 地址和端口号,并根据映像表中的记录转发给客户机。

NAT 转换对于网络内部的主机和网络外部的主机都是透明的,如同直接通信一般。

NAT 分类

源 NAT(Source NAT, SNAT)指修改第一个包的源 IP 地址,其会在包送出之前的最后一刻做好 Post-Routing 的动作,比如 Linux 中的 IP 伪装(MASQUERADE)。

目的 NAT(Destination NAT, DNAT)指修改第一个包的目的 IP 地址,其会在包进入后立刻进行 Pre-Routing 动作,比如端口转发、负载均衡和透明代理。

代理服务器

  • 工作原理

Route 1

客户端发送 web 请求至代理服务器 -> 代理服务器检查缓存中是否有客户端所需数据 -> 将缓存数据返回给客户端

Route 2

客户端发送 web 请求至代理服务器 -> 代理服务器检查缓存中是否有客户端所需数据 -> 代理服务器请求 web 服务器并将转发至客户端 -> 代理服务器将请求结果保存在缓存中

  • 作用

提高访问速度。代理服务器会将请求结果缓存在本地,所以当再次请求相同内容时,就可以直接从代理服务器的硬盘中读取,提高访问速度。

用户访问限制。所有用户都必须通过代理服务器访问或请求远程站点,因此通过设置代理服务器可以限制用户访问范围。

加强安全性能。使用代理服务器时,所有客户端对外暴露的都是代理服务器的相关信息,而真实的客户端 IP 会被隐藏,可以提高使用者的安全性。

VPN 服务器

VPN ( Virtual Private Network, 虚拟专用网络 )模拟点对点专用连接的方式,通过 Internet 或 Intranet 在两台计算机之间传送数据,具有良好的保密性和抗干扰能力。

VPN 提供了一种通过公用网络安全地对企业内部专用网络远程访问的连接方式。

VPN 工作原理

Internet 中的某客户端通过 VPN 拨号方式与内网的 VPN 服务器建立一条虚拟连接,建立连接时双方须确定 VPN 协议和连接线路的路由路径。

连接建立后,客户端与内网主机通信时,会按照所确定的 VPN 协议对信息进行加密,并重新添加上数据报的报头封装成为在公共网络上发送的数据报,然后通过公网发送至接收方。

内网主机接收到该信息,使用相应的 VPN 协议对数据解密。

由于在 VPN 隧道中传送的数据是加密的,因此公网上的路由器都无法获取内部数据报的内容,确保了通信数据的安全。