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

RHEL 7 中的网络包过滤

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

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

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

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

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

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

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

# cat /etc/firewalld/direct.xml

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

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

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

# telnet 10.0.0.20 80

# tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

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

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

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'

# 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 请求。第一种情况连接会成功完成,但第二种情况最终会超时。

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

# telnet 10.0.0.20 80

# wget 10.0.0.20

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

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

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

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

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

# firewall-cmd --list-all --zone=external

# firewall-cmd --change-interface=enp0s3 --zone=external

# firewall-cmd --change-interface=enp0s3 --zone=external --permanent

# firewall-cmd --change-interface=enp0s8 --zone=internal

# firewall-cmd --change-interface=enp0s8 --zone=internal --permanent

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

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

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

# firewall-cmd --reload

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

# ip route add default via 10.0.0.18

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

# ping -c 2 192.168.0.1

# 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: 内核的虚拟内存的使用。

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

# sysctl -a | less

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

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

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

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

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

# sysctl <parameter.name>

例如,

# sysctl net.ipv4.ip_forward

# sysctl kernel.sysrq

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

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

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

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

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

并用下面命令启用更改:

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

总结

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

免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.itxdl.cn/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

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

  1. 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form

    使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...

  2. H3C模拟器实验之网络地址转换

    网络拓扑图 NOTE:各个设备的基本配置在拓扑图上已经标明(需要注意的是RTB的出接口也需要配置IP,但是使用ping -a 10.1.1.1 202.117.144.1 ping不通,这点不是很理解 ...

  3. CCNA学习 NAT网络地址转换

    CCNA基础 NAT网络地址转换 在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是 ...

  4. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  5. [知识库分享系列] 二、.NET(ASP.NET)

    最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...

  6. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

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

    原文:SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体.基准.本初 ...

  8. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  9. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

随机推荐

  1. The type XXX cannot be resolved. It is indirectly referenced from required .class files错误.....

    遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误.....,查找的 ...

  2. Microsoft Office Excel 不能访问文件及COM无法访问

    Microsoft Office Excel 不能访问文件及COM无法访问 Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有: 1 文件名称或路径不存在. 2  ...

  3. mysql复制表结构及检查表、存储过程是否存在

    mysql命令行复制表结构的方法: 1.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2  或者 CREATE TABLE 新表 LIKE 旧表 ...

  4. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  5. WPFの静态资源(StaticResource)和动态资源(DynamicResource)

    下面是前台代码: <Window.Resources>        <TextBlock x:Key="res1" Text="好好学习"/ ...

  6. GMF:如何在不打开Editor的情况下生成图片

    问题 GMF应用中,有时我们希望在不打开*DiagramEditor的情况下,从文件就能生成它的图片   解决方案 首先,从文件中构造DiagramImpl实例: TransactionalEditi ...

  7. Python3基础 isinstance 判断一个变量是否为指定的类型

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  8. Tomcat内存设置

    MyEclipse Tomcat的JDK菜单:“Optional Java VM arguments:”框中输入“有前置空格”   -Xms512m -Xmx512m -XX:PermSize=512 ...

  9. android 修改framework下资源文件后如何编译

    在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用 进入项目根目录 cd frameworks/base/core/re ...

  10. 设置MySQL自动增长从某个指定的数开始

    自增字段,一定要设置为primary key. 以指定从1000开始为例.1 创建表的时候就设置: CREATE TABLE `Test` ( `ID` int(11) NOT NULL AUTO_I ...