RHCE 系列(二):如何进行包过滤、网络地址转换和设置内核运行时参数

正如第一部分(“设置静态网络路由”)提到的,在这篇文章(RHCE 系列第二部分),我们首先介绍红帽企业版 Linux 7(RHEL)中包过滤和网络地址转换(NAT)的原理,然后再介绍在某些条件发生变化或者需要变动时设置运行时内核参数以改变运行时内核行为。

RHCE 第二部分:网络包过滤

RHEL 7 中的网络包过滤

当我们讨论数据包过滤的时候,我们指防火墙读取每个试图通过它的数据包的包头所进行的处理。然后,根据系统管理员之前定义的规则,通过采取所要求的动作过滤数据包。

正如你可能知道的,从 RHEL 7 开始,管理防火墙的默认服务是 firewalld。类似 iptables,它和 Linux 内核的 netfilter 模块交互以便检查和操作网络数据包。但不像 iptables,Firewalld 的更新可以立即生效,而不用中断活跃的连接 - 你甚至不需要重启服务。

Firewalld 的另一个优势是它允许我们定义基于预配置服务名称的规则(之后会详细介绍)。

在第一部分,我们用了下面的场景:

静态路由网络示意图

然而,你应该记得,由于还没有介绍包过滤,为了简化例子,我们停用了2号路由器的防火墙。现在让我们来看看如何使接收的数据包发送到目的地的特定服务或端口。

首先,让我们添加一条永久规则允许从 enp0s3 (192.168.0.19) 到 enp0s8 (10.0.0.18) 的入站流量:


  1. # firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

上面的命令会把规则保存到 /etc/firewalld/direct.xml 中:


  1. # cat /etc/firewalld/direct.xml

检查 Firewalld 保存的规则

然后启用规则使其立即生效:


  1. # firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

现在你可以从 RHEL 7 中通过 telnet 到 web 服务器并再次运行 tcpdump 监视两台机器之间的 TCP 流量,这次2号路由器已经启用了防火墙。


  1. # telnet 10.0.0.20 80
  2. # tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

如果你想只允许从 192.168.0.18 到 web 服务器(80 号端口)的连接而阻塞 192.168.0.0/24 网络中的其它来源呢?

在 web 服务器的防火墙中添加以下规则:


  1. # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'
  2. # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent
  3. # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'
  4. # firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop' --permanent

现在你可以从 192.168.0.18 和 192.168.0.0/24 中的其它机器发送到 web 服务器的 HTTP 请求。第一种情况连接会成功完成,但第二种情况最终会超时。

任何下面的命令可以验证这个结果:


  1. # telnet 10.0.0.20 80
  2. # wget 10.0.0.20

我强烈建议你看看 Fedora Project Wiki 中的 Firewalld Rich Language 文档更详细地了解关于富规则的内容。

RHEL 7 中的网络地址转换(NAT)

网络地址转换(NAT)是为专用网络中的一组计算机(也可能是其中的一台)分配一个独立的公共 IP 地址的过程。这样,在内部网络中仍然可以用它们自己的私有 IP 地址来区别,但外部“看来”它们是一样的。

另外,网络地址转换使得内部网络中的计算机发送请求到外部资源(例如因特网),然后只有源系统能接收到对应的响应成为可能。

现在让我们考虑下面的场景:

网络地址转换

在2号路由器中,我们会把 enp0s3 接口移动到外部区域(external),enp0s8 到内部区域(external),伪装(masquerading)或者说 NAT 默认是启用的:


  1. # firewall-cmd --list-all --zone=external
  2. # firewall-cmd --change-interface=enp0s3 --zone=external
  3. # firewall-cmd --change-interface=enp0s3 --zone=external --permanent
  4. # firewall-cmd --change-interface=enp0s8 --zone=internal
  5. # firewall-cmd --change-interface=enp0s8 --zone=internal --permanent

对于我们当前的设置,内部区域(internal) - 以及和它一起启用的任何东西都是默认区域:


  1. # firewall-cmd --set-default-zone=internal

下一步,让我们重载防火墙规则并保持状态信息:


  1. # firewall-cmd --reload

最后,在 web 服务器中添加2号路由器为默认网关:


  1. # ip route add default via 10.0.0.18

现在你会发现在 web 服务器中你可以 ping 1号路由器和外部网站(例如 tecmint.com):


  1. # ping -c 2 192.168.0.1
  2. # ping -c 2 tecmint.com

验证网络路由

在 RHEL 7 中设置内核运行时参数

在 Linux 中,允许你更改、启用以及停用内核运行时参数,RHEL 也不例外。当操作条件发生变化时,/proc/sys 接口(sysctl)允许你实时设置运行时参数改变系统行为,而不需太多麻烦。

为了实现这个目的,会用 shell 内建的 echo 写 /proc/sys/<category> 中的文件,其中 <category> 一般是以下目录中的一个:

  • dev: 连接到机器中的特定设备的参数。
  • fs: 文件系统配置(例如 quotas 和 inodes)。
  • kernel: 内核配置。
  • net: 网络配置。
  • vm: 内核的虚拟内存的使用。

要显示所有当前可用值的列表,运行


  1. # sysctl -a | less

在第一部分中,我们通过以下命令改变了 net.ipv4.ip_forward 参数的值以允许 Linux 机器作为一个路由器。


  1. # echo 1 > /proc/sys/net/ipv4/ip_forward

另一个你可能想要设置的运行时参数是 kernel.sysrq,它会启用你键盘上的 Sysrq 键,以使系统更好的运行一些底层功能,例如如果由于某些原因冻结了后重启系统:


  1. # echo 1 > /proc/sys/kernel/sysrq

要显示特定参数的值,可以按照下面方式使用 sysctl


  1. # sysctl <parameter.name>

例如,


  1. # sysctl net.ipv4.ip_forward
  2. # sysctl kernel.sysrq

有些参数,例如上面提到的某个,只需要一个值,而其它一些(例如 fs.inode-state)要求多个值:

查看内核参数

不管什么情况下,做任何更改之前你都需要阅读内核文档。

请注意系统重启后这些设置会丢失。要使这些更改永久生效,我们需要添加内容到 /etc/sysctl.d 目录的 .conf 文件,像下面这样:


  1. # echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/10-forward.conf

(其中数字 10 表示相对同一个目录中其它文件的处理顺序)。

并用下面命令启用更改:


  1. # sysctl -p /etc/sysctl.d/10-forward.conf

总结

在这篇指南中我们解释了基本的包过滤、网络地址变换和在运行的系统中设置内核运行时参数并使重启后能持久化。我希望这些信息能对你有用,如往常一样,我们期望收到你的回复!

本文来自合作伙伴“Linux中国”,原文发布日期:2015-10-24

时间: 2025-01-29 18:16:42

RHCE 系列(二):如何进行包过滤、网络地址转换和设置内核运行时参数的相关文章

RHCE :如何进行包过滤、网络地址转换和设置内核运行时参数

在这篇文章(RHCE 系列第二部分),我们首先介绍红帽企业版 Linux 7(RHEL)中包过滤和网络地址转换(NAT)的原理,然后再介绍在某些条件发生变化或者需要变动时设置运行时内核参数以改变运行时内核行为. RHCE 第二部分:网络包过滤 RHEL 7 中的网络包过滤 当我们讨论数据包过滤的时候,我们指防火墙读取每个试图通过它的数据包的包头所进行的处理.然后,根据系统管理员之前定义的规则,通过采取所要求的动作过滤数据包. 正如你可能知道的,从 RHEL 7 开始,管理防火墙的默认服务是 fi

RHCE 系列(一):如何设置和测试静态网络路由

RHCE(Red Hat Certified Engineer,红帽认证工程师)是红帽公司的一个认证,红帽向企业社区贡献开源操作系统和软件,同时它还给公司提供训练.支持和咨询服务. RHCE 考试准备指南 这个 RHCE 是一个绩效考试(代号 EX300),面向那些拥有更多的技能.知识和能力的红帽企业版 Linux(RHEL)系统高级系统管理员. 重要: 获得RHCE 认证前需要先有 红帽认证系统管理员认证Red Hat Certified System Administrator,RHCSA.

如何正确应用网络地址转换(NAT)技术

前言:随着Internet技术的的不断以指数级速度增长,珍贵的网络地址分配给专用网络终于被视作是一种对宝贵的虚拟房地产的浪费.因此出现了网络地址转换(NAT)标准,就是将某些IP地址留出来供专用网络重复使用.本文将详细告诉你如何正确应用网络地址转换NAT技术. 一.NAT技术的定义 NAT英文全称是Network Address Translation,称是网络地址转换,它是一个IETF标准,允许一个机构以一个地址出现在Internet上.NAT将每个局域网节点的地址转换成一个IP地址,反之亦然

RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器

RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器 网络时间协议 - NTP - 是运行在传输层 123 号端口的 UDP 协议,它允许计算机通过网络同步准确时间.随着时间的流逝,计算机内部时间会出现漂移,这会导致时间不一致问题,尤其是对于服务器和客户端日志文件,或者你想要复制服务器的资源或数据库. 在 CentOS 和 RHEL 7 上安装 NTP 服务器 前置要求: CentOS 7 安装过程 RHEL 安装过程 额外要求: 注册并启用 RHEL 7

RHCE 系列(六):安装 Samba 并配置 Firewalld 和 SELinux,和 Windows 共享文件

由于计算机很少作为一个独立的系统工作,作为一个系统管理员或工程师,就应该知道如何在有多种类型的服务器之间搭设和维护网络. 在本篇以及该系列后面的文章中,我们会介绍用 Windows/Linux 配置 Samba 和 NFS 服务器以及 Linux 客户端. RHCE 系列第六部分 - 设置 Samba 文件共享 如果有人让你设置文件服务器用于协作或者配置很可能有多种不同类型操作系统和设备的企业环境,这篇文章就能派上用场. 由于你可以在网上找到很多关于 Samba 和 NFS 背景和技术方面的介绍

SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础

原文:SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体.基准.本初子午线.计量单位.投影等相关理论知识,我们可以使用这些空间参照系统组件来定义一系列应用于地球空间上的几何图像来表示地理空间中的特定功能,表示着地球上一个一个特定的位置点. 本篇主要介绍地理空间索引的概念以及微软SQL Server 2008 R2中的空间索引的应用.   一.空间索引 空间索引是指依

《Cisco IPv6网络实现技术(修订版)》一1.6 网络地址转换

1.6 网络地址转换 Cisco IPv6网络实现技术(修订版)自1992年以来,CIDR并不是唯一的直接与缓解IPv4地址短缺相关的机制.多年来,被视为短期解决方案的NAT机制(在RFC 1631中定义)在允许组织机构在大型网络中使用少量Internet全球唯一单播IP地址方面扮演着重要角色.NAT通常从一个网络转换数据包到Internet,这个网络使用全球唯一单播IP地址或使用一个在RFC 1918中定义的私有地址空间. 注:IANA预留了3块IP地址用于私有编址.地址空间10.0.0.0/

cisco-思科关于NAT网络地址转换问题!

问题描述 思科关于NAT网络地址转换问题! Building configuration... Current configuration : 1422 bytes ! version 15.1 no service timestamps log datetime msec no service timestamps debug datetime msec no service password-encryption ! hostname Router ! ! ! enable secret 5

使用网络地址转换实现多服务器负载均衡

服务器|网络|转换 摘要:本文探讨了分布式网络服务器使用的负载均衡技术及负载分配的策略,并基于网络地址转换在FreeBSD上实现了负载均衡网关,应用于我们的Internet网络服务器上,将负载分给多个服务器分担,以解决Internet服务器面临的大量并发访问造成的CPU或I/O的高负载问题.为了达到最佳的负载均衡效果,负载控制器需要根据各个服务器的当前CPU和I/O状态来分配负载,这就需要动态监视服务器的负载,并应用优化的负载分配策略,达到平均分配负载的目的. 关键字: 负载均衡,网络地址转换,