38、保障 Linux 系统安全

保障 Linux 系统安全

在当今数字化时代,保障 Linux 系统的安全至关重要。本文将详细介绍 Linux 系统安全相关的知识,包括防火墙设置、网络地址转换(NAT)、数据包过滤以及如何使用相关工具进行配置。

1. 简单防火墙的设置

防火墙是一种网络设备或主机,通常具有两个或更多网络接口,一个连接受保护的内部网络,另一个连接不受保护的网络,如互联网。它的主要作用是控制受保护的内部网络与外部网络之间的访问。

如果直接将内部网络连接到互联网,就必须确保内部网络上的每个系统都得到妥善保护。但这几乎是不可能的,因为一个粗心的用户就可能使整个内部网络变得脆弱。而防火墙作为连接互联网的单一节点,我们可以集中精力将其打造成阻止未经授权的外部用户的强大屏障。

一个有效的防火墙应具备以下一般特征:
- 控制互联网与内部网络之间的数据包流动。
- 不提供动态路由,因为动态路由表容易受到路由欺骗攻击,而是使用静态路由表(可在 Linux 系统上使用 route 命令设置)。
- 不允许任何外部用户以 root 身份登录,这样即使防火墙系统被攻破,入侵者也无法通过远程登录使用 root 权限。
- 放置在物理安全的位置。
- 能够区分来自互联网和受保护内部网络的数据包,从而拒绝那些来自互联网但具有内部可信系统 IP 地址的数据包。
- 作为内部网络的 SMTP 邮件网关,设置 sendmail 软件,使所有外发邮件看起来都来自防火墙系统。
- 用户账户仅限于少数需要访问外部系统的内部用户。需要访问内部网络的外部用户应使用 SSH 进行远程登录。
- 记录所有系统活动,如成功和失败的登录尝试。
- 为外部世界提供 DNS 名称查找服务,以解析外部已知的主机名。
- 提供良好的性能,不妨碍内部用户访问特定的互联网服务(如 HTTPS 和 SFTP)。

防火墙有多种形式,常见的有以下三种:
| 防火墙类型 | 特点 | 优点 | 缺点 |
| — | — | — | — |
| 数据包过滤防火墙 | 使用能够根据各种特征(如源和目的 IP 地址、网络协议(TCP 或 UDP)以及源和目的端口号)过滤(阻止或允许)数据包的路由器,通常位于与不可信网络的最外层边界,形成第一道防线。 | 速度快、灵活性高 | 无法防止利用特定应用程序漏洞或功能的攻击;只能记录最少的信息;容易受到利用 TCP/IP 协议漏洞的攻击,如 IP 地址欺骗。 |
| 状态检测防火墙 | 跟踪网络应用程序使用的网络连接。当内部系统上的应用程序使用网络连接与远程系统创建会话时,内部系统上会打开一个端口接收来自远程系统的网络流量。 | 通过创建出站网络连接表和相应的内部端口表来验证入站数据包,比数据包过滤防火墙更安全,因为它单独跟踪内部端口,而不是为外部访问打开所有内部端口。 | |
| 应用代理网关防火墙 | 作为内部应用程序与外部服务器(如 Web 服务器)之间的中介。Web 代理接收来自防火墙内部 Web 浏览器客户端的外部网页请求,并将其转发给外部 Web 服务器,就好像防火墙是请求的 Web 客户端一样。外部 Web 服务器响应防火墙,防火墙再将响应转发给内部客户端,就好像防火墙是 Web 服务器一样。 | 检查整个网络数据包,而不仅仅是网络地址和端口,因此能够提供比数据包过滤或状态检测防火墙更广泛的日志记录功能;可以直接对用户进行身份验证,而数据包过滤和状态检测防火墙通常基于系统的 IP 地址进行身份验证。 | 由于需要完全解析每个数据包,处理时间较长,不太适合高带宽或实时应用;对新网络应用和协议的支持有限,每种需要通过防火墙的网络流量都需要单独的特定应用代理。 |

大多数防火墙会结合这些功能,许多数据包过滤防火墙或状态检测防火墙的供应商也实现了基本的应用代理功能,以弥补其防火墙的一些弱点。

2. 使用网络地址转换(NAT)

网络地址转换(NAT)是一种有效的工具,它可以将内部网络的网络地址隐藏在防火墙后面。本质上,NAT 允许组织在防火墙后面使用私有网络地址,同时保持通过防火墙连接到外部系统的能力。

实现 NAT 有三种方法:
- 静态 NAT :私有网络上的每个内部系统都有一个对应的外部可路由 IP 地址。由于唯一的 IP 地址供应短缺,这种技术很少使用。
- 隐藏 NAT :防火墙后面的所有系统共享一个外部可路由 IP 地址,内部系统使用私有 IP 地址。因此,在隐藏 NAT 中,防火墙后面的多个系统看起来仍然像是一个系统。
- 端口地址转换 :可以将主机放在防火墙系统后面,并使它们有选择地对外部用户可用。

每种类型的 NAT 在某些情况下都有其优缺点,主要区别在于每种类型提供的设计灵活性。静态 NAT 提供最大的灵活性,但由于 IP 地址短缺,并不总是实用。隐藏 NAT 技术很少使用,因为端口地址转换提供了额外的功能。端口地址转换往往是最方便和安全的解决方案。

3. 在 Linux 系统上启用数据包过滤

Linux 内核内置了名为 netfilter 的数据包过滤软件。可以使用 iptables 命令根据数据包头部的 IP 地址和网络连接类型设置数据包处理规则。

要了解更多关于 netfilter iptables 的信息,可以访问 netfilter 网站的文档部分: www.netfilter.org/documentation

当 Linux 系统和互联网之间没有专用防火墙时(例如通过 DSL 或电缆调制解调器连接到互联网),内置的数据包过滤功能就非常有用。实际上,我们可以在 Linux 系统内部的内核和应用程序之间设置一个数据包过滤防火墙。

4. 使用安全级别配置工具

大多数 Linux 发行版(如 Fedora 和 SUSE)现在都包含图形用户界面(GUI)工具,用于开启数据包过滤防火墙并简化用户的配置体验。

在某些发行版中,需要安装 ufw (Uncomplicated Firewall 的缩写),它可以管理 netfilter 防火墙并简化配置。 ufw iptables 的前端,允许在终端窗口中直接输入命令。

以下是一些常用的 ufw 命令:
- 开启防火墙:

sudo ufw enable
  • 显示防火墙详细状态:
sudo ufw status verbose

输出示例如下:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

在大多数情况下,这些默认设置正是客户端机器所需要的,即允许外发流量,拒绝入站流量。

我们还可以允许特定互联网服务(如 SSH、Telnet 和 FTP)的入站数据包。如果将某个网络接口(如 eth0 ,即第一块以太网卡)选为受信任的接口,则该接口上的所有网络流量都将被允许,无需任何过滤。

在 SUSE 中设置防火墙的步骤如下:
1. 选择主菜单➪系统➪YaST。
2. 在出现的 YaST 控制中心窗口中,点击左侧的“Security and Users”,然后点击右侧的“Firewall”。
3. YaST 将打开一个窗口,可用于配置防火墙。
4. 可以将网络接口(按设备名称,如 eth0 ppp0 等)指定到三个区域之一:内部、外部或非军事区。
5. 对于每个区域,可以指定允许的服务(如 HTTPS、SFTP 和 SSH)。
6. 如果有两个或更多网络接口,并将 Linux 系统用作网关(路由器),可以启用网络接口之间的数据包转发(称为伪装功能)。
7. 还可以开启不同级别的日志记录,如记录所有尝试连接特定端口的丢弃数据包。
8. 如果更改了防火墙设置,选择“Startup”类别,然后点击“Save Settings and Restart Firewall Now”。

5. 使用 iptables 命令

图形用户界面(GUI)防火墙配置工具实际上是使用 iptables 命令来实现防火墙功能的前端。如果 Linux 系统没有 GUI 工具,可以直接使用 iptables 命令来配置防火墙。

iptables 命令使用链的概念,链是一系列规则的集合。每个规则规定了如果数据包头部包含特定信息(如源或目的 IP 地址)时应如何处理该数据包。如果某个规则不适用, iptables 将咨询链中的下一个规则。默认情况下,有三个链:
- INPUT 链 :包含用于测试数据包的第一组规则。只有当 INPUT 链未指定 DROP 或 REJECT 时,数据包才会继续到下一个链。
- FORWARD 链 :包含适用于试图通过该系统传输到另一个系统的数据包的规则(例如,当将 Linux 系统用作局域网和互联网之间的路由器时)。
- OUTPUT 链 :包含在数据包发送出去之前(无论是发送到另一个网络还是应用程序)应用的规则。

当一个入站数据包到达时,内核使用 iptables 根据数据包的目的 IP 地址做出路由决策:
- 如果数据包是发给本服务器的,内核将数据包传递给 INPUT 链。如果数据包满足 INPUT 链中的所有规则,它将由本地进程(如监听此类数据包的互联网服务器)处理。
- 如果内核启用了 IP 转发,并且数据包的目的 IP 地址是另一个网络的地址,内核将数据包传递给 FORWARD 链。如果数据包满足 FORWARD 链中的规则,它将被发送到另一个网络。如果内核未启用 IP 转发,并且数据包的目的地址不是本服务器的地址,则该数据包将被丢弃。
- 如果接收输入数据包的本地处理程序想要发送网络数据包,这些数据包将通过 OUTPUT 链。如果 OUTPUT 链接受这些数据包,它们将被发送到指定的目的网络。

可以使用 iptables 命令查看当前的链、向现有链添加规则或创建新的规则链。通常需要以 root 身份执行这些操作。当查看当前链时,可以将它们保存到一个文件中。

如果没有进行其他配置,并且系统没有配置防火墙,输入 iptables -L 应该显示如下内容:

Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

在这种情况下,所有三个链(INPUT、FORWARD 和 OUTPUT)都显示相同的 ACCEPT 策略,这意味着一切都是开放的。

如果要设置数据包过滤器,首先要指定想要接受的数据包。例如,要接受来自 192.168.0.0 网络地址的数据包,可以向 INPUT 链添加以下规则:

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

然后添加规则,除了本地回环( lo 网络接口)流量外,丢弃所有其他流量,并停止所有转发:

iptables -A INPUT -i ! lo -j REJECT
iptables -A FORWARD -j REJECT

在拒绝所有其他数据包之前,可以向 INPUT 链添加更多规则,以允许特定的数据包进入。可以根据许多参数(如 IP 地址、协议类型(TCP、UDP)、网络接口和端口号)选择接受或拒绝数据包。

例如,假设设置了一个 Web 服务器,只希望接受用于 HTTPS(端口 443)和 SSH 服务(端口 22)的数据包,并且服务器的 IP 地址是 192.168.0.10 ,可以这样设置规则:

iptables -P INPUT DROP
iptables -A INPUT -s 0/0 -d 192.168.0.10 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -s 0/0 -d 192.168.0.10 -p tcp --dport 22 -j ACCEPT

第一条规则将 INPUT 链的默认策略设置为 DROP,这意味着如果没有特定规则匹配,数据包将被丢弃。接下来的两条规则表示将发往 192.168.0.10 且用于端口 443 和 22 的数据包接受。

需要注意的是,不要从远程登录会话中输入 iptables 命令。一个开始拒绝所有地址数据包的规则可能会阻止你输入的内容到达系统,在这种情况下,可能无法通过网络访问系统。为避免意外情况,始终在控制台(直接连接到运行数据包过滤器的 Linux PC 的键盘和显示器)上输入 iptables 规则。如果想快速删除所有过滤规则,可以输入 iptables -F 进行清除。要将 INPUT 链的默认策略更改为 ACCEPT,可以输入 iptables -t filter -P INPUT ACCEPT ,此命令将使 iptables 默认接受所有入站数据包。

综上所述,保障 Linux 系统安全需要综合运用防火墙、NAT、数据包过滤等技术,并合理使用相关工具进行配置。通过本文的介绍,希望能帮助你更好地保护 Linux 系统的安全。

保障 Linux 系统安全(下半部分)

6. 防火墙规则配置示例与流程图

为了更清晰地展示防火墙规则的配置过程和数据包的流向,我们来看一个具体的示例,并使用 mermaid 流程图进行说明。

假设我们有一个 Linux 服务器,它作为内部网络和互联网之间的网关。我们希望允许内部网络的用户访问互联网,同时只允许外部用户通过 SSH(端口 22)和 HTTPS(端口 443)访问服务器。

以下是具体的 iptables 规则配置:

# 设置默认策略为拒绝所有流量
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许本地回环接口流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 允许已建立和相关的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许外部用户通过 SSH 和 HTTPS 访问服务器
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许内部网络访问互联网
iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

下面是对应的 mermaid 流程图,展示了数据包在不同链中的处理流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([数据包到达]):::startend --> B{是否为本地回环接口?}:::decision
    B -->|是| C(接受):::process
    B -->|否| D{是否为已建立或相关连接?}:::decision
    D -->|是| C
    D -->|否| E{是否为 SSH 或 HTTPS 请求?}:::decision
    E -->|是| C
    E -->|否| F(拒绝):::process

这个流程图清晰地展示了数据包从到达服务器开始,经过 INPUT 链的各个规则检查,最终决定是接受还是拒绝的过程。

7. 防火墙规则的备份与恢复

为了避免因误操作或系统故障导致防火墙规则丢失,我们需要定期备份防火墙规则,并了解如何在需要时恢复这些规则。

备份防火墙规则

可以使用以下命令将当前的防火墙规则保存到一个文件中:

iptables-save > /etc/iptables.rules

这个命令将当前的 iptables 规则保存到 /etc/iptables.rules 文件中。

恢复防火墙规则

在系统重启或需要恢复规则时,可以使用以下命令从文件中加载规则:

iptables-restore < /etc/iptables.rules

为了确保系统重启后自动加载规则,可以在 /etc/rc.local 文件中添加上述恢复命令,或者使用系统的服务管理工具(如 systemd )来实现。

8. 防火墙性能优化

防火墙的性能对于系统的整体性能至关重要。以下是一些优化防火墙性能的建议:

  • 减少规则数量 :尽量简化防火墙规则,避免不必要的规则。过多的规则会增加数据包检查的时间,降低防火墙的性能。
  • 使用状态检测 :状态检测防火墙可以跟踪网络连接的状态,只允许已建立和相关的连接通过,减少不必要的检查。
  • 合理排序规则 :将常用的规则放在前面,这样可以更快地匹配到规则,减少检查时间。
  • 使用硬件加速 :如果服务器的性能要求较高,可以考虑使用硬件防火墙或具有硬件加速功能的网卡,以提高防火墙的处理能力。
9. 常见防火墙配置错误及解决方法

在配置防火墙时,可能会遇到一些常见的错误。以下是一些常见错误及解决方法的列表:

错误描述 可能原因 解决方法
无法访问外部网络 防火墙规则阻止了外出流量 检查 OUTPUT 链的规则,确保允许外出流量。可以使用 iptables -L OUTPUT 查看规则。
无法通过 SSH 或其他服务访问服务器 防火墙规则未允许相应的端口 检查 INPUT 链的规则,确保允许 SSH(端口 22)或其他服务的端口。可以使用 iptables -A INPUT -p tcp --dport <端口号> -j ACCEPT 添加规则。
防火墙规则无法保存或加载 文件权限问题或规则语法错误 检查保存规则的文件权限,确保有读写权限。同时,检查规则的语法是否正确。
10. 总结

保障 Linux 系统的安全是一个复杂而重要的任务。通过设置防火墙、使用网络地址转换(NAT)、启用数据包过滤以及合理配置相关工具,我们可以有效地保护 Linux 系统免受外部攻击。

在实际应用中,需要根据具体的需求和网络环境来配置防火墙规则。同时,要定期备份防火墙规则,优化防火墙性能,并及时解决配置过程中遇到的问题。

希望本文的内容能够帮助你更好地理解和实施 Linux 系统的安全保障措施,让你的系统在网络环境中更加安全可靠。

通过上述内容,我们全面介绍了 Linux 系统安全的各个方面,包括防火墙设置、NAT 应用、数据包过滤以及相关工具的使用。合理运用这些技术和方法,可以为 Linux 系统构建一个坚固的安全防线。

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值