服务器检查点指南:确保网络安全的10个关键步骤

简介

这个检查点旨在帮助您评估您从我们的网络服务器入门文章中所学到的内容,我们在其中介绍了实际实现和配置您的网络服务器的流行选项。您可以使用这个检查点来测试您在这些主题上的知识,复习关键术语和命令,并找到持续学习的资源。

网络服务器充当请求(如您在浏览器中输入的URL)和对该请求的响应(如与特定URL相关联的网页)之间的中间人。在安装了用于处理请求的网络服务器后,您将能够构建开发您的网页应用所需的堆栈。

在这个检查点中,您将找到三个部分,总结了介绍性文章中的核心思想:定义什么是Web服务器,使用Linux命令配置和修改您的Web服务器,以及了解网络协议。在每个部分中,都有互动组件帮助您测试知识。在这个检查点结束时,您将有机会继续学习有关安全和Web应用的知识。

资源

  • 网络服务器介绍
  • 如何安装Apache
  • 如何安装Nginx
  • Apache与Nginx:实际考虑因素
  • 如何使用Let’s Encrypt保护Apache
  • 如何使用Let’s Encrypt保护Nginx

什么是网络服务器?

一个网络服务器通过HTTP和HTTPS协议向浏览器提供渲染网页应用所需的文件。网页应用是一种可以通过浏览器访问并供最终用户互动的软件。

信息

自查

在评估网页服务器解决方案时,你应该考虑哪些特点和共同目标?

通过下拉功能获取答案。

  • 稳定使用和快速加载的高可用性
  • 多个用户同时进行并发访问
  • 随着受众和用户基数增长,具备可扩展性
  • 安装和设置简单且可重复
  • 清晰的文件说明
  • 开发者支持,包括短期修补和长期软件更新
  • 社区支持和软件普及

要理解网页服务器,熟悉一些重要的计算机和网络术语是很重要的。

信息

了解的术语

定义以下各项术语,然后使用下拉列表来核对你的答案。

端口
端口是单台机器上可以与特定软件绑定的地址。它不是一个物理接口或位置,但它允许你的服务器使用多个应用程序进行通信。
协议
协议是一组规则和标准,定义设备之间可以用来通信的语言。
一些低层协议包括TCP、UDP、IP和ICMP。一些熟悉的应用层协议,建立在这些较低的协议之上,包括HTTP(用于访问网络内容)、SSH、TLS/SSL和FTP。
防火墙
防火墙是一种通过根据一组用户定义的规则来过滤进出网络流量的系统,提供网络安全保护。
常用的防火墙包括Iptables、UFW和Fail2Ban。想了解更多关于防火墙的工作原理,请参阅什么是防火墙以及它是如何工作的?
DNS
DNS(域名系统)是一个应用层协议,将一个域名(如自定义URL)与一个特定的IP地址进行连接。
HTTP和HTTPS服务器
HTTP服务器是使用超文本传输协议(HTTP)在计算机网络上进行通信的Web服务器。
HTTPS是指使用传输层安全(TLS)或安全套接字层(SSL)加密通信的超文本传输协议。要启用HTTPS服务器和SSL/TLS加密,你需要通过诸如Let’s Encrypt之类的证书授权机构生成和提供SSL证书。
代理服务器
作为额外的传输层,代理服务器充当客户端和服务器之间的互联网门卫,将HTTP请求流量路由到其后面的Web服务器。
Nginx被设计为反向代理服务器,Apache也可以用作反向代理服务器。了解如何使用Nginx作为反向代理,可阅读了解Nginx HTTP代理、负载均衡、缓冲和缓存。
要了解更多关于代理的内容,请阅读我们的代理简介。

在构建应用程序时,安装一个用于为你的Web应用程序提供文件服务的Web服务器是至关重要的。Web服务器可以处理静态和动态内容,尤其是在响应调用你网站域名的HTTP请求时。为了确保你的Web服务器能够处理这些请求,你可以使用命令行管理配置设置。

使用命令行配置您的网络服务器

在云服务器介绍中,你开始学习使用Linux命令行。通过安装和配置Apache和Nginx等网络服务器,你不断地通过修改配置文件、编写网页文件和运行启动脚本来操作命令行。你还使用了APT软件包管理器来更新你的服务器。

现在您可以使用命令来配置和更新您的网络服务器,例如:

  • chown – 更改文件所有权
  • chmod – 设置或更改文件访问权限
  • curl – 与指定位置(URL)传输数据
  • hostname – 设置或显示主机名和域名
  • systemctl – 控制systemd服务

你还使用过systemd,它是Linux系统启动时运行的初始进程(init)的一个选项。要了解更多关于使用systemd命令的内容,请参阅《如何使用Systemctl管理Systemd服务和单元》。系统启动脚本通常存储在/etc/init.d目录中,需要root或sudo权限访问,并且日志可以在/var/log目录中找到。

你还使用了Certbot的–standalone选项来处理Let’s Encrypt对你的域名的认证。

配置您的服务器文件

配置文件为网络服务器提供设置,并可按照您的需求进行定制。

信息

请检查一下自己的系统配置文件在哪里?使用下拉功能获取答案。

配置文件通常位于…
通常,配置文件位于/etc目录中,并可以通过命令行使用诸如nano或vim之类的编辑器进行编辑。
作为网页被提供的Web文件通常位于…
作为网页被提供的Web文件通常位于/var/www目录中,并可通过命令行编辑器或使用集成开发环境(IDE)进行更新。

您已在远程服务器上安装并配置了常见的开源Web服务器,如Apache或Nginx。它们共同为约50%的网络流量提供服务。

一个防火墙将在您的Web服务器或其他应用服务器上运行,以便管理流入和流出您的Web应用的流量。Ubuntu的默认防火墙是简化的防火墙(ufw),它管理iptables防火墙。您可以阅读更多关于什么是防火墙和如何选择有效的防火墙策略的内容,了解Apache和Nginx为常用端口提供这些配置文件。

信息

安装后,Apache和Nginx都会向防火墙注册,每个都有三个针对常见端口的配置文件。

端口 Apache配置 Nginx配置
仅开放端口80 Apache Nginx HTTP
同时开放端口80和443 Apache全开放 Nginx全开放
仅开放端口443 Apache安全 Nginx HTTPS

使用Apache

Apache使用.htaccess文件来进行分散配置设置,这意味着你可以在目录级别上进行配置更改。.htaccess文件提供了除了主要Apache配置文件之外的细粒度自定义选项。

您可以通过下方的互动组件来检查您对Apache的其他方面的了解。

信息

检查一下

使用下拉功能获取答案。

Apache的主配置文件存放在哪里?
Apache的配置文件存放在/etc/apache2目录中。
其他关键的Apache文件,例如虚拟主机和访问日志,存放在哪里?
每个站点的虚拟主机存放在/etc/apache2/sites-available/中,并可以链接到/etc/apache2/sites-enabled/。
与虚拟主机无关的配置片段存放在/etc/apache2/conf-available/中,并链接到/etc/apache2/conf-enabled/。
访问日志存放在/var/log/apache2/access.log中,错误消息根据在/etc/apache2/apache2.conf全局配置文件中的LogLevel指令记录在/var/log/apache2/error.log中。

Apache使用特定的术语来支持其系统设置。通过了解Apache术语来评估您的知识。

信息

了解Apache的术语

定义以下每个术语,然后使用下拉列表来检查您的答案。

虚拟主机
每个虚拟主机描述一个可以独立自定义和配置的个别网站或域,使您能够向不同的访问者提供不同的内容。
有关虚拟主机的更多信息,请参阅《如何设置Apache虚拟主机》教程。
多处理模块
Apache的多处理模块(MPMs)处理客户端请求,但服务器一次只能加载一个MPM。常用的模块,例如mpm_prefork和mpm_worker,依赖于线程系统来响应请求。
模块存放在/etc/apache2/mods-available/和/etc/apache2/mods-enabled/目录中。

使用Nginx

Nginx 在其配置文件中使用集中式统一资源标识符(URI)模式匹配。统一资源标识符是一串独特的字符序列,用于区别资源。

你可以通过下面的交互式组件检查自己关于 Nginx 其他方面的知识。

信息

检查一下你自己

使用下拉功能来获取答案。

Nginx的配置文件在哪里找到?
配置文件保存在/etc/nginx目录中。每个网站服务器块都在/etc/nginx/sites-available中,并链接到/etc/nginx/sites-enabled目录。
其他重要的Nginx文件在哪里找到,比如访问日志和错误信息?
访问日志和错误信息都在/var/log/nginx目录中。
访问日志在/var/log/nginx/access.log中,错误信息记录在/var/log/nginx/error.log中。

使用特定的术语来支持其系统设置,Nginx评估您对Nginx术语的了解,以便了解您的知识水平。

信息

Nginx相关术语

服务器块
服务器块是一些配置细节,可用于在单个服务器上托管多个域名。
通常,服务器块的配置信息将保存在/etc/nginx/sites-available目录下,虽然Ubuntu 22.04默认启用的服务器块可以在/var/www/html目录中找到。
符号链接
符号链接,又称为符号链接,类似于指向机器上的另一个文件或文件夹的快捷方式。符号链接本身没有数据,而是指向具有数据的文件。
在/etc/nginx/sites-enabled目录中的文件是通过符号链接指向/etc/nginx/sites-available目录中的相应文件的。
工作进程
Nginx使用工作进程通过事件循环来处理客户端请求。与Apache的多线程系统不同,工作进程是单线程的,并且连接是在循环内异步管理的。

理解网络通信和安全协议

网络通信协议通常可以分层,常见的组合是在TCP和UDP协议之上使用加密技术。TCP是传输控制协议的缩写,通过三次握手处理数据通信的分组传输。UDP是用户数据报协议,在数据传输中也被广泛应用。

TLS,即传输层安全性(以及其前身安全套接字层,即SSL),是一种加密协议,可以将普通流量放入保护的加密包装中。

信息

请自查

使用下拉菜单获取答案。

TCP和UDP有什么区别?
TCP使用握手协议来验证双方确认请求。UDP在向主机发送数据时不完成此验证步骤,速度较快但可靠性较低。
TCP和UDP还会影响您选择有效的防火墙策略。
TCP和HTTP有什么关联?
超文本传输协议(HTTP)是一个应用层协议,运行在传输控制协议(TCP)之上。简而言之,TCP定义了在网络上如何交换数据包,而HTTP和HTTPS提供了如何处理这些数据包的指令。

关于网络和进程间通信的更多信息,请查阅《什么是套接字?》和《理解套接字》。

在运行自己的网络服务器时,您自己处理安全问题。在这个部分的资源教程中,您已经使用Certbot客户端在Apache和Nginx网络服务器上启用了Let’s Encrypt的TLS加密。

虽然您已经使用Certbot为您的域名从Let’s Encrypt配置了SSL证书,但您还可以使用以下教程为您选择的Web服务器生成自签名证书,以加密服务器和任何客户端之间的通信。

  • 如何在Ubuntu 22.04中为Apache创建自签名SSL证书
  • 如何在Ubuntu 22.04中为Nginx创建自签名SSL证书

信息

自签名证书是指没有经过Web浏览器和操作系统自带的受信任证书机构签署的证书,因此用户无法自动使用该证书验证您服务器的身份。结果就是,当用户访问您的网站时,他们会看到一个安全错误。

你可以将OpenSSL Essentials作为快速参考手册,用于处理SSL证书、私钥和证书签名请求。

接下来怎么做?

通过搭建好您的Web服务器,之后您可以根据需要创建额外的服务器块或虚拟主机,并修改配置文件来满足您Web应用的需求。您可以尝试将Nginx配置为Apache的反向代理。

为了建立对防火墙的理解或重新配置您的网页服务器的防火墙设置,请尝试以下教程:

  • 什么是防火墙以及它是如何工作的?
  • 如何选择有效的防火墙策略来保护您的服务器
  • 如何在Ubuntu 22.04上使用UFW设置防火墙
  • 如何在Ubuntu 20.04上使用Iptables实施基本防火墙模板
  • Iptables防火墙的工作原理
  • Fail2Ban如何保护Linux服务器上的服务
  • 如何在Ubuntu 22.04上使用Fail2Ban保护Nginx服务器
  • 保护服务器的推荐安全措施

您也可以考虑搭建一个常用的开源软件集合,用于提供网页应用程序的服务,比如LAMP、LEMP或LOMP技术栈。

  • LAMP技术栈教程集合
  • 如何在Ubuntu 20.04上安装Linux、Nginx、MySQL、PHP(LEMP技术栈)
  • 如何在Ubuntu 20.04上安装Linux、OpenLiteSpeed、MariaDB、PHP(LOMP技术栈)

要开始构建你的网页应用程序,尝试遵循我们的《如何编码系列》,包括:

  • JavaScript编程指南
  • Python编程指南
  • Go编程指南
  • React.js编程指南
  • TypeScript编程指南
  • Ruby编程指南
  • Node.JS编程指南
  • PHP编程指南

有了对于网络服务器的新认识,你也可以继续学习关于数据库、容器和安全性方面的云端知识。如果你还没有的话,可以去了解一下我们有关云服务器的入门文章。

bannerAds