Gabriel Cánepa 发布的文章

之前我听说高效的系统管理员的一个特点是懒惰。一开始看起来很矛盾,但作者接下来解释了其中的原因:

自动化 Linux 系统维护任务

RHCE 系列:第四部分 - 自动化 Linux 系统维护任务

如果一个系统管理员花费大量的时间解决问题以及做重复的工作,你就应该怀疑他这么做是否正确。换句话说,一个高效的系统管理员/工程师应该制定一个计划使得其尽量花费少的时间去做重复的工作,以及通过使用本系列中第三部分 使用 Linux 工具集监视系统活动报告 介绍的工具来预见问题。因此,尽管看起来他/她没有做很多的工作,但那是因为 shell 脚本帮助完成了他的/她的大部分任务,这也就是本章我们将要探讨的东西。

什么是 shell 脚本?

简单的说,shell 脚本就是一个由 shell 一步一步执行的程序,而 shell 是在 Linux 内核和最终用户之间提供接口的另一个程序。

默认情况下,RHEL 7 中用户使用的 shell 是 bash(/bin/bash)。如果你想知道详细的信息和历史背景,你可以查看这个维基页面

关于这个 shell 提供的众多功能的介绍,可以查看 man 手册,也可以从 (Bash 命令)处下载 PDF 格式。除此之外,假设你已经熟悉 Linux 命令(否则我强烈建议你首先看一下 Tecmint.com 中的文章 从新手到系统管理员指南 )。现在让我们开始吧。

写一个脚本显示系统信息

为了方便,首先让我们新建一个目录用于保存我们的 shell 脚本:

# mkdir scripts
# cd scripts

然后用喜欢的文本编辑器打开新的文本文件 system_info.sh。我们首先在头部插入一些注释以及一些命令:

#!/bin/bash

# RHCE 系列第四部分示例脚本
# 该脚本会返回以下这些系统信息:
# -主机名称:
echo -e "\e[31;43m***** HOSTNAME INFORMATION *****\e[0m"
hostnamectl
echo ""
# -文件系统磁盘空间使用:
echo -e "\e[31;43m***** FILE SYSTEM DISK SPACE USAGE *****\e[0m"
df -h
echo ""
# -系统空闲和使用中的内存:
echo -e "\e[31;43m ***** FREE AND USED MEMORY *****\e[0m"
free
echo ""
# -系统启动时间:
echo -e "\e[31;43m***** SYSTEM UPTIME AND LOAD *****\e[0m"
uptime
echo ""
# -登录的用户:
echo -e "\e[31;43m***** CURRENTLY LOGGED-IN USERS *****\e[0m"
who
echo ""
# -使用内存最多的 5 个进程
echo -e "\e[31;43m***** TOP 5 MEMORY-CONSUMING PROCESSES *****\e[0m"
ps -eo %mem,%cpu,comm --sort=-%mem | head -n 6
echo ""
echo -e "\e[1;32mDone.\e[0m"

然后,给脚本可执行权限:

# chmod +x system_info.sh

运行脚本:

./system_info.sh

注意为了更好的可视化效果各部分标题都用颜色显示:

服务器监视 Shell 脚本

服务器监视 Shell 脚本

颜色功能是由以下命令提供的:

echo -e "\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m"

其中 COLOR1 和 COLOR2 是前景色和背景色(Arch Linux Wiki 有更多的信息和选项解释), 是你想用颜色显示的字符串。

使任务自动化

你想使其自动化的任务可能因情况而不同。因此,我们不可能在一篇文章中覆盖所有可能的场景,但是我们会介绍使用 shell 脚本可以使其自动化的三种典型任务:

1) 更新本地文件数据库, 2) 查找(或者删除)有 777 权限的文件, 以及 3) 文件系统使用超过定义的阀值时发出警告。

让我们在脚本目录中新建一个名为 auto_tasks.sh 的文件并添加以下内容:

#!/bin/bash

# 自动化任务示例脚本:
# -更新本地文件数据库:
echo -e "\e[4;32mUPDATING LOCAL FILE DATABASE\e[0m"
updatedb
if [ $? == 0 ]; then
        echo "The local file database was updated correctly."
else
        echo "The local file database was not updated correctly."
fi
echo ""

# -查找 和/或 删除有 777 权限的文件。
echo -e "\e[4;32mLOOKING FOR FILES WITH 777 PERMISSIONS\e[0m"
# Enable either option (comment out the other line), but not both.
# Option 1: Delete files without prompting for confirmation. Assumes GNU version of find.
#find -type f -perm 0777 -delete
# Option 2: Ask for confirmation before deleting files. More portable across systems.
find -type f -perm 0777 -exec rm -i {} +;
echo ""
# -文件系统使用率超过定义的阀值时发出警告 
echo -e "\e[4;32mCHECKING FILE SYSTEM USAGE\e[0m"
THRESHOLD=30
while read line; do
        # This variable stores the file system path as a string
        FILESYSTEM=$(echo $line | awk '{print $1}')
        # This variable stores the use percentage (XX%)
        PERCENTAGE=$(echo $line | awk '{print $5}')
        # Use percentage without the % sign.
        USAGE=${PERCENTAGE%?}
        if [ $USAGE -gt $THRESHOLD ]; then
                echo "The remaining available space in $FILESYSTEM is critically low. Used: $PERCENTAGE"
        fi
done < <(df -h --total | grep -vi filesystem)

请注意该脚本最后一行两个 < 符号之间有个空格。

查找 777 权限文件的 Shell 脚本

查找 777 权限文件的 Shell 脚本

使用 Cron

想更进一步提高效率,你不会想只是坐在你的电脑前手动执行这些脚本。相反,你会使用 cron 来调度这些任务周期性地执行,并把结果通过邮件发动给预先指定的接收者,或者将它们保存到使用 web 浏览器可以查看的文件中。

下面的脚本(filesystem\_usage.sh)会运行有名的 df -h 命令,格式化输出到 HTML 表格并保存到 report.html 文件中:

#!/bin/bash
# 演示使用 shell 脚本创建 HTML 报告的示例脚本
# Web directory
WEB_DIR=/var/www/html
# A little CSS and table layout to make the report look a little nicer
echo "<HTML>
<HEAD>
<style>
.titulo{font-size: 1em; color: white; background:#0863CE; padding: 0.1em 0.2em;}
table
{
border-collapse:collapse;
}
table, td, th
{
border:1px solid black;
}
</style>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
</HEAD>
<BODY>" > $WEB_DIR/report.html
# View hostname and insert it at the top of the html body
HOST=$(hostname)
echo "Filesystem usage for host <strong>$HOST</strong><br>
Last updated: <strong>$(date)</strong><br><br>
<table border='1'>
<tr><th class='titulo'>Filesystem</td>
<th class='titulo'>Size</td>
<th class='titulo'>Use %</td>
</tr>" >> $WEB_DIR/report.html
# Read the output of df -h line by line
while read line; do
echo "<tr><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $1}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $2}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $5}' >> $WEB_DIR/report.html
echo "</td></tr>" >> $WEB_DIR/report.html
done < <(df -h | grep -vi filesystem)
echo "</table></BODY></HTML>" >> $WEB_DIR/report.html

在我们的 RHEL 7 服务器(192.168.0.18)中,看起来像下面这样:

服务器监视报告

服务器监视报告

你可以添加任何你想要的信息到那个报告中。添加下面的 crontab 条目在每天下午的 1:30 运行该脚本:

30 13 * * * /root/scripts/filesystem_usage.sh

总结

你很可能想起各种其他想要自动化的任务;正如你看到的,使用 shell 脚本能极大的简化任务。如果你觉得这篇文章对你有所帮助就告诉我们吧,别犹豫在下面的表格中添加你自己的想法或评论。


via: http://www.tecmint.com/using-shell-script-to-automate-linux-system-maintenance-tasks/

作者:Gabriel Cánepa 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

作为一个系统工程师,你经常需要生成一些显示系统资源利用率的报告,以便确保:1)正在合理利用系统,2)防止出现瓶颈,3)确保可扩展性,以及其它原因。

监视 Linux 性能活动报告

RHCE 第三部分:监视 Linux 性能活动报告

除了著名的用于检测磁盘、内存和 CPU 使用率的原生 Linux 工具 - 可以给出很多例子,红帽企业版 Linux 7 还提供了另外两个可以为你的报告更多数据的工具套装:sysstat 和 dstat。

在这篇文章中,我们会介绍两者,但首先让我们来回顾一下传统工具的使用。

原生 Linux 工具

使用 df,你可以报告磁盘空间以及文件系统的 inode 使用情况。你需要监视这两者,因为缺少磁盘空间会阻止你保存更多文件(甚至会导致系统崩溃),就像耗尽 inode 意味着你不能将文件链接到对应的数据结构,从而导致同样的结果:你不能将那些文件保存到磁盘中。

# df -h         [以人类可读形式显示输出]
# df -h --total         [生成总计]

检查 Linux 总的磁盘使用

检查 Linux 总的磁盘使用

# df -i         [显示文件系统的 inode 数目]
# df -i --total     [生成总计]

检查 Linux 总的 inode 数目

检查 Linux 总的 inode 数目

用 du,你可以估计文件、目录或文件系统的文件空间使用。

举个例子,让我们来看看 /home 目录使用了多少空间,它包括了所有用户的个人文件。第一条命令会返回整个 /home 目录当前使用的所有空间,第二条命令会显示子目录的分类列表:

# du -sch /home
# du -sch /home/*

检查 Linux 目录磁盘大小

检查 Linux 目录磁盘大小

别错过了:

另一个你工具集中不容忽视的工具就是 vmstat。它允许你查看进程、CPU 和 内存使用、磁盘活动以及其它的大概信息。

如果不带参数运行,vmstat 会返回自从上一次启动后的平均信息。尽管你可能以这种方式使用该命令有一段时间了,再看一些系统使用率的例子会有更多帮助,例如在例子中定义了时间间隔。

例如

# vmstat 5 10

会每个 5 秒返回 10 个事例:

检查 Linux 系统性能

检查 Linux 系统性能

正如你从上面图片看到的,vmstat 的输出分为很多列:proc(process)、memory、swap、io、system、和 CPU。每个字段的意义可以在 vmstat man 手册的 FIELD DESCRIPTION 部分找到。

在哪里 vmstat 可以派上用场呢?让我们在 yum 升级之前和升级时检查系统行为:

# vmstat -a 1 5

Vmstat Linux 性能监视

Vmstat Linux 性能监视

请注意当磁盘上的文件被更改时,活跃内存的数量增加,写到磁盘的块数目(bo)和属于用户进程的 CPU 时间(us)也是这样。

或者直接保存一个大文件到磁盘时(由 dsync 标志引发):

# vmstat -a 1 5
# dd if=/dev/zero of=dummy.out bs=1M count=1000 oflag=dsync

Vmstat Linux 磁盘性能监视

Vmstat Linux 磁盘性能监视

在这个例子中,我们可以看到大量的块被写入到磁盘(bo),这正如预期的那样,同时 CPU 处理任务之前等待 IO 操作完成的时间(wa)也增加了。

别错过: Vmstat – Linux 性能监视

其它 Linux 工具

正如本文介绍部分提到的,这里有其它的工具你可以用来检测系统状态和利用率(不仅红帽,其它主流发行版的官方支持库中也提供了这些工具)。

sysstat 软件包包含以下工具:

  • sar (收集、报告、或者保存系统活动信息)。
  • sadf (以多种方式显示 sar 收集的数据)。
  • mpstat (报告处理器相关的统计信息)。
  • iostat (报告 CPU 统计信息和设备以及分区的 IO统计信息)。
  • pidstat (报告 Linux 任务统计信息)。
  • nfsiostat (报告 NFS 的输出/输出统计信息)。
  • cifsiostat (报告 CIFS 统计信息)
  • sa1 (收集并保存二进制数据到系统活动每日数据文件中)。
  • sa2 (在 /var/log/sa 目录写入每日报告)。

dstat 比这些工具所提供的功能更多一些,并且提供了更多的计数器和更大的灵活性。你可以通过运行 yum info sysstat 或者 yum info dstat 找到每个工具完整的介绍,或者安装完成后分别查看每个工具的 man 手册。

安装两个软件包:

# yum update && yum install sysstat dstat

sysstat 主要的配置文件是 /etc/sysconfig/sysstat。你可以在该文件中找到下面的参数:

# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=28
# Compress (using gzip or bzip2) sa and sar files older than (in days):
COMPRESSAFTER=31
# Parameters for the system activity data collector (see sadc manual page)
# which are used for the generation of log files.
SADC_OPTIONS="-S DISK"
# Compression program to use.
ZIP="bzip2"

sysstat 安装完成后,/etc/cron.d/sysstat 中会添加和启用两个 cron 任务。第一个任务每 10 分钟运行系统活动计数工具,并在 /var/log/sa/saXX 中保存报告,其中 XX 是该月的一天。

因此,/var/log/sa/sa05 会包括该月份第 5 天所有的系统活动报告。这里假设我们在上面的配置文件中对 HISTORY 变量使用默认的值:

*/10 * * * * root /usr/lib64/sa/sa1 1 1

第二个任务在每天夜间 11:53 生成每日进程计数总结并把它保存到 /var/log/sa/sarXX 文件,其中 XX 和之前例子中的含义相同:

53 23 * * * root /usr/lib64/sa/sa2 -A

例如,你可能想要输出该月份第 6 天从上午 9:30 到晚上 5:30 的系统统计信息到一个 LibreOffice Calc 或 Microsoft Excel 可以查看的 .csv 文件(这样就可以让你创建表格和图片了):

# sadf -s 09:30:00 -e 17:30:00 -dh /var/log/sa/sa06 -- | sed 's/;/,/g' > system_stats20150806.csv

你可以在上面的 sadf 命令中用 -j 标记代替 -d 以 JSON 格式输出系统统计信息,这当你在 web 应用中使用这些数据的时候非常有用。

Linux 系统统计信息

Linux 系统统计信息

最后,让我们看看 dstat 提供什么功能。请注意如果不带参数运行,dstat 默认使用 -cdngy(表示 CPU、磁盘、网络、内存页、和系统统计信息),并每秒添加一行(可以在任何时候用 Ctrl + C 中断执行):

# dstat

Linux 磁盘统计检测

Linux 磁盘统计检测

要输出统计信息到 .csv 文件,可以用 -output 标记后面跟一个文件名称。让我们来看看在 LibreOffice Calc 中该文件看起来是怎样的:

检测 Linux 统计信息输出

检测 Linux 统计信息输出

为了更多的阅读体验,我强烈建议你查看 dstatsysstat 的 pdf 格式 man 手册。你会找到其它能帮助你创建自定义的详细系统活动报告的选项。

别错过: Sysstat – Linux 的使用活动检测工具

总结

在该指南中我们解释了如何使用 Linux 原生工具以及 RHEL 7 提供的特定工具来生成系统使用报告。在某种情况下,你可能像依赖最好的朋友那样依赖这些报告。

你很可能使用过这篇指南中我们没有介绍到的其它工具。如果真是这样的话,用下面的表单和社区中的其他成员一起分享吧,也可以是任何其它的建议/疑问/或者评论。

我们期待你的回复。


via: http://www.tecmint.com/linux-performance-monitoring-and-file-system-statistics-reports/

作者:Gabriel Cánepa 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

无论你以前有没有使用 RAID 阵列的经验,以及是否完成了 此 RAID 系列 的所有教程,一旦你在 Linux 中熟悉了 mdadm --manage 命令的使用,管理软件 RAID 将不是很复杂的任务。

在 Linux 中使用 mdadm 管理 RAID 设备 - 第9部分

在 Linux 中使用 mdadm 管理 RAID 设备 - 第9部分

在本教程中,我们会再介绍此工具提供的功能,这样当你需要它,就可以派上用场。

RAID 测试方案

在本系列的最后一篇文章中,我们将使用一个简单的 RAID 1(镜像)阵列,它由两个 8GB 的磁盘(/dev/sdb 和 /dev/sdc)和一个备用设备(/dev/sdd)来演示,但在此使用的方法也适用于其他类型的配置。也就是说,放心去用吧,把这个页面添加到浏览器的书签,然后让我们开始吧。

了解 mdadm 的选项和使用方法

幸运的是,mdadm 有一个内建的 --help 参数来对每个主要的选项提供说明文档。

因此,让我们开始输入:

# mdadm --manage --help

就会使我们看到 mdadm --manage 能够执行哪些任务:

Manage RAID with mdadm Tool

使用 mdadm 工具来管理 RAID

正如我们在上面的图片看到,管理一个 RAID 阵列可以在任意时间执行以下任务:

  • (重新)将设备添加到阵列中
  • 把设备标记为故障
  • 从阵列中删除故障设备
  • 使用备用设备更换故障设备
  • 先创建部分阵列
  • 停止阵列
  • 标记阵列为 ro(只读)或 rw(读写)

使用 mdadm 工具管理 RAID 设备

需要注意的是,如果用户忽略 --manage 选项,mdadm 默认使用管理模式。请记住这一点,以避免出现最坏的情况。

上图中的高亮文本显示了管理 RAID 的基本语法:

# mdadm --manage RAID options devices

让我们来演示几个例子。

​例1:为 RAID 阵列添加设备

你通常会添加新设备来更换故障的设备,或者使用空闲的分区以便在出现故障时能及时替换:

# mdadm --manage /dev/md0 --add /dev/sdd1

Add Device to Raid Array

添加设备到 Raid 阵列

​例2:把一个 RAID 设备标记为故障并从阵列中移除

在从逻辑阵列中删除该设备前,这是强制性的步骤,然后才能从机器中取出它 - 注意顺序(如果弄错了这些步骤,最终可能会造成实际设备的损害):

# mdadm --manage /dev/md0 --fail /dev/sdb1

请注意在前面的例子中,知道如何添加备用设备来自动更换出现故障的磁盘。在此之后,恢复和重建 raid 数据 就开始了:

Recover and Rebuild Raid Data

恢复和重建 raid 数据

一旦设备已被手动标记为故障,你就可以安全地从阵列中删除它:

# mdadm --manage /dev/md0 --remove /dev/sdb1

例3:重新添加设备,来替代阵列中已经移除的设备

到现在为止,我们有一个工作的 RAID 1 阵列,它包含了2个活动的设备:/dev/sdc1 和 /dev/sdd1。现在让我们试试重新添加 /dev/sdb1 到/dev/md0:

# mdadm --manage /dev/md0 --re-add /dev/sdb1

我们会碰到一个错误:

# mdadm: --re-add for /dev/sdb1 to /dev/md0 is not possible

因为阵列中的磁盘已经达到了最大的数量。因此,我们有两个选择:a)将 /dev/sdb1 添加为备用的,如例1;或 b)从阵列中删除 /dev/sdd1 然后重新添加 /dev/sdb1。

我们选择选项 b),先停止阵列然后重新启动:

# mdadm --stop /dev/md0
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1

如果上面的命令不能成功添加 /dev/sdb1 到阵列中,使用例1中的命令来完成。

mdadm 能检测到新添加的设备并将其作为备用设备,当添加完成后它会开始重建数据,它也被认为是 RAID 中的活动设备:

Raid Rebuild Status

重建 Raid 的状态

例4:使用特定磁盘更换 RAID 设备

在阵列中使用备用磁盘更换磁盘很简单:

# mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdd1

Replace Raid Device

更换 Raid 设备

这会导致 --replace 指定的设备被标记为故障,而 --with指定的设备添加到 RAID 中来替代它:

Check Raid Rebuild Status

检查 Raid 重建状态

​例5:标记 RAID 阵列为 ro 或 rw

创建阵列后,你必须在它上面创建一个文件系统并将其挂载到一个目录下才能使用它。你可能不知道,RAID 也可以被设置为 ro,使其只读;或者设置为 rw,就可以同时写入了。

要标记该设备为 ro,首先需要将其卸载:

# umount /mnt/raid1
# mdadm --manage /dev/md0 --readonly
# mount /mnt/raid1
# touch /mnt/raid1/test1

Set Permissions on Raid Array

在 RAID 阵列上设置权限

要配置阵列允许写入操作需要使用 --readwrite 选项。请注意,在设置 rw 标志前,你需要先卸载设备并停止它:

# umount /mnt/raid1
# mdadm --manage /dev/md0 --stop
# mdadm --assemble /dev/md0 /dev/sdc1 /dev/sdd1
# mdadm --manage /dev/md0 --readwrite
# touch /mnt/raid1/test2

Allow Read Write Permission on Raid

配置 Raid 允许读写操作

总结

在本系列中,我们已经解释了如何建立一个在企业环境中使用的软件 RAID 阵列。如果你按照这些文章所提供的例子进行配置,在 Linux 中你会充分领会到软件 RAID 的价值。

如果你碰巧任何问题或有建议,请随时使用下面的方式与我们联系。


via: http://www.tecmint.com/manage-software-raid-devices-in-linux-with-mdadm/

作者:GABRIEL CÁNEPA 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

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

RHEL 中的网络包过滤

RHCE 第二部分:网络包过滤

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

在 CentOS 7 中检查 Firewalld 保存的规则

检查 Firewalld 保存的规则

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

# 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 地址来区别,但外部“看来”它们是一样的。

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

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

RHEL 中的网络地址转换

网络地址转换

在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)要求多个值:

在 Linux 中查看内核参数

查看内核参数

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

请注意系统重启后这些设置会丢失。要使这些更改永久生效,我们需要添加内容到 /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

总结

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

别犹豫,在下面的表单中和我们分享你的疑问、评论和建议吧。


via: http://www.tecmint.com/perform-packet-filtering-network-address-translation-and-set-kernel-runtime-parameters-in-rhel/

作者:Gabriel Cánepa 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

RHCE(Red Hat Certified Engineer,红帽认证工程师)是红帽公司的一个认证,红帽向企业社区贡献开源操作系统和软件,同时它还给公司提供训练、支持和咨询服务。

RHCE 考试准备指南

RHCE 考试准备指南

这个 RHCE 是一个绩效考试(代号 EX300),面向那些拥有更多的技能、知识和能力的红帽企业版 Linux(RHEL)系统高级系统管理员。

重要: 获得RHCE 认证前需要先有 红帽认证系统管理员认证 Red Hat Certified System Administrator,RHCSA

以下是基于红帽企业版 Linux 7 考试的考试目标,我们会在该 RHCE 系列中分别介绍:

  • 第一部分:如何在 RHEL 7 中设置和测试静态路由
  • 第二部分:如何进行包过滤、网络地址转换和设置内核运行时参数
  • 第三部分:如何使用 Linux 工具集产生和发送系统活动报告
  • 第四部分:使用 Shell 脚本进行自动化系统维护
  • 第五部分:如何在 RHEL 7 中管理系统日志(配置、轮换和导入到数据库)
  • 第六部分:设置 Samba 服务器并配置 FirewallD 和 SELinux 支持客户端文件共享
  • 第七部分:设置 NFS 服务器及基于 Kerberos 认证的客户端
  • 第八部分:在 Apache 上使用网络安全服务(NSS)通过 TLS 提供 HTTPS 服务
  • 第九部分:如何使用无客户端配置来设置 Postfix 邮件服务器(SMTP)
  • 第十部分:在 RHEL/CentOS 7 中设置网络时间协议(NTP)服务器
  • 第十一部分:如何配置一个只缓存的 DNS 服务器

在你的国家查看考试费用和注册考试,可以到 RHCE 认证 网页。

在 RHCE 的第一和第二部分,我们会介绍一些基本的但典型的情形,也就是静态路由原理、包过滤和网络地址转换。

在 RHEL 中设置静态网络路由

RHCE 系列第一部分:设置和测试网络静态路由

请注意我们不会作深入的介绍,但以这种方式组织内容能帮助你开始第一步并继续后面的内容。

红帽企业版 Linux 7 中的静态路由

现代网络的一个奇迹就是有很多可用设备能将一组计算机连接起来,不管是在一个房间里少量的机器还是在一栋建筑物、城市、国家或者大洲之间的多台机器。

然而,为了能在任意情形下有效的实现这些,需要对网络包进行路由,或者换句话说,它们从源到目的地的路径需要按照某种规则。

静态路由是为网络包指定一个路由的过程,而不是使用网络设备提供的默认网关。除非另有指定静态路由,网络包会被导向默认网关;而静态路由则基于预定义标准所定义的其它路径,例如数据包目的地。

我们在该篇指南中会考虑以下场景。我们有一台 RHEL 7,连接到 1号路由器 [192.168.0.1] 以访问因特网以及 192.168.0.0/24 中的其它机器。

第二个路由器(2号路由器)有两个网卡:enp0s3 同样连接到路由器1号以访问互联网,及与 RHEL 7 和同一网络中的其它机器通讯,另外一个网卡(enp0s8)用于授权访问内部服务所在的 10.0.0.0/24 网络,例如 web 或数据库服务器。

该场景可以用下面的示意图表示:

静态路由网络示意图

静态路由网络示意图

在这篇文章中我们会集中介绍在 RHEL 7 中设置路由表,确保它能通过1号路由器访问因特网以及通过2号路由器访问内部网络。

在 RHEL 7 中,你可以通过命令行用 ip 命令 配置和显示设备和路由。这些更改能在运行的系统中及时生效,但由于重启后不会保存,我们会使用 /etc/sysconfig/network-scripts 目录下的 ifcfg-enp0sXroute-enp0sX 文件永久保存我们的配置。

首先,让我们打印出当前的路由表:

# ip route show

在 Linux 中检查路由表

检查当前路由表

从上面的输出中,我们可以得出以下结论:

  • 默认网关的 IP 是 192.168.0.1,可以通过网卡 enp0s3 访问。
  • 系统启动的时候,它启用了到 169.254.0.0/16 的 zeroconf 路由(只是在本例中)。也就是说,如果机器设置通过 DHCP 获取 IP 地址,但是由于某些原因失败了,它就会在上述网段中自动分配到一个地址。这一行的意思是,该路由会允许我们通过 enp0s3 和其它没有从 DHCP 服务器中成功获得 IP 地址的机器机器相连接。
  • 最后,但同样重要的是,我们也可以通过 IP 地址是 192.168.0.18 的 enp0s3 与 192.168.0.0/24 网络中的其它机器连接。

下面是这样的配置中你需要做的一些典型任务。除非另有说明,下面的任务都在2号路由器上进行。

确保正确安装了所有网卡:

# ip link show

如果有某块网卡停用了,启动它:

# ip link set dev enp0s8 up

分配 10.0.0.0/24 网络中的一个 IP 地址给它:

# ip addr add 10.0.0.17 dev enp0s8

噢!我们分配了一个错误的 IP 地址。我们需要删除之前分配的那个并添加正确的地址(10.0.0.18):

# ip addr del 10.0.0.17 dev enp0s8
# ip addr add 10.0.0.18 dev enp0s8

现在,请注意你只能添加一个通过网关到目标网络的路由,网关需要可以访问到。因为这个原因,我们需要在 192.168.0.0/24 范围中给 enp0s3 分配一个 IP 地址,这样我们的 RHEL 7 才能连接到它:

# ip addr add 192.168.0.19 dev enp0s3

最后,我们需要启用包转发:

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

并停用/取消防火墙(从现在开始,直到下一篇文章中我们介绍了包过滤):

# systemctl stop firewalld
# systemctl disable firewalld

回到我们的 RHEL 7(192.168.0.18),让我们配置一个通过 192.168.0.19(2号路由器的 enp0s3)到 10.0.0.0/24 的路由:

# ip route add 10.0.0.0/24 via 192.168.0.19

之后,路由表看起来像下面这样:

# ip route show

显示网络路由表

确认网络路由表

同样,在你尝试连接的 10.0.0.0/24 网络的机器中添加对应的路由:

# ip route add 192.168.0.0/24 via 10.0.0.18

你可以使用 ping 测试基本连接:

在 RHEL 7 中运行:

# ping -c 4 10.0.0.20

10.0.0.20 是 10.0.0.0/24 网络中一个 web 服务器的 IP 地址。

在 web 服务器(10.0.0.20)中运行

# ping -c 192.168.0.18

192.168.0.18 也就是我们的 RHEL 7 机器的 IP 地址。

另外,我们还可以使用 tcpdump(需要通过 yum install tcpdump 安装)来检查我们 RHEL 7 和 10.0.0.20 中 web 服务器之间的 TCP 双向通信。

首先在第一台机器中启用日志:

# tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

在同一个系统上的另一个终端,让我们通过 telnet 连接到 web 服务器的 80 号端口(假设 Apache 正在监听该端口;否则应在下面命令中使用正确的监听端口):

# telnet 10.0.0.20 80

tcpdump 日志看起来像下面这样:

检查服务器之间的网络连接

检查服务器之间的网络连接

通过查看我们 RHEL 7(192.168.0.18)和 web 服务器(10.0.0.20)之间的双向通信,可以看出已经正确地初始化了连接。

请注意你重启系统后会丢失这些更改。如果你想把它们永久保存下来,你需要在我们运行上面的命令的相同系统中编辑(如果不存在的话就创建)以下的文件。

尽管对于我们的测试例子不是严格要求,你需要知道 /etc/sysconfig/network 包含了一些系统范围的网络参数。一个典型的 /etc/sysconfig/network 看起来类似下面这样:

# Enable networking on this system?
NETWORKING=yes
# Hostname. Should match the value in /etc/hostname
HOSTNAME=yourhostnamehere
# Default gateway
GATEWAY=XXX.XXX.XXX.XXX
# Device used to connect to default gateway. Replace X with the appropriate number.
GATEWAYDEV=enp0sX

当需要为每个网卡设置特定的变量和值时(正如我们在2号路由器上面做的),你需要编辑 /etc/sysconfig/network-scripts/ifcfg-enp0s3/etc/sysconfig/network-scripts/ifcfg-enp0s8 文件。

下面是我们的例子,

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.0.19
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
NAME=enp0s3
ONBOOT=yes

以及

TYPE=Ethernet
BOOTPROTO=static
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
NAME=enp0s8
ONBOOT=yes

其分别对应 enp0s3 和 enp0s8。

由于要为我们的客户端机器(192.168.0.18)进行路由,我们需要编辑 /etc/sysconfig/network-scripts/route-enp0s3

10.0.0.0/24 via 192.168.0.19 dev enp0s3

现在reboot你的系统,就可以在路由表中看到该路由规则。

总结

在这篇文章中我们介绍了红帽企业版 Linux 7 的静态路由。尽管场景可能不同,这里介绍的例子说明了所需的原理以及进行该任务的步骤。结束之前,我还建议你看一下 Linux 文档项目 The Linux Documentation Project 网站上的《 安全加固和优化 Linux Securing and Optimizing Linux 》的第四章,以了解这里介绍主题的更详细内容。

在下篇文章中我们会介绍数据包过滤和网络地址转换,结束 RHCE 验证需要的网络基本技巧。

如往常一样,我们期望听到你的回复,用下面的表格留下你的疑问、评论和建议吧。


via: http://www.tecmint.com/how-to-setup-and-configure-static-network-routing-in-rhel/

作者:Gabriel Cánepa 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在阅读过 RAID 系列 前面的文章后你已经对 RAID 比较熟悉了。回顾前面几个软件 RAID 的配置,我们对每一个都做了详细的解释,使用哪一个取决与你的具体情况。

Recover Rebuild Failed Software RAID's

恢复并重建故障的软件 RAID - 第8部分

在本文中,我们将讨论当一个磁盘发生故障时如何重建软件 RAID 阵列并且不会丢失数据。为方便起见,我们仅考虑RAID 1 的配置 - 但其方法和概念适用于所有情况。

RAID 测试方案

在进一步讨论之前,请确保你已经配置好了 RAID 1 阵列,可以按照本系列第3部分提供的方法:在 Linux 中如何创建 RAID 1(镜像)

在目前的情况下,仅有的变化是:

  1. 使用不同版本 CentOS(v7),而不是前面文章中的(v6.5)。
  2. 磁盘容量发生改变, /dev/sdb 和 /dev/sdc(各8GB)。

此外,如果 SELinux 设置为 enforcing 模式,你需要将相应的标签添加到挂载 RAID 设备的目录中。否则,当你试图挂载时,你会碰到这样的警告信息:

SELinux RAID Mount Error

启用 SELinux 时 RAID 挂载错误

通过以下命令来解决:

# restorecon -R /mnt/raid1

配置 RAID 监控

存储设备损坏的原因很多(尽管固态硬盘大大减少了这种情况发生的可能性),但不管是什么原因,可以肯定问题随时可能发生,你需要准备好替换发生故障的部分,并确保数据的可用性和完整性。

首先建议是。虽然你可以查看 /proc/mdstat 来检查 RAID 的状态,但有一个更好的和节省时间的方法,使用监控 + 扫描模式运行 mdadm,它将警报通过电子邮件发送到一个预定义的收件人。

要这样设置,在 /etc/mdadm.conf 添加以下行:

MAILADDR user@<domain or localhost>

我自己的设置如下:

MAILADDR gacanepa@localhost

RAID Monitoring Email Alerts

监控 RAID 并使用电子邮件进行报警

要让 mdadm 运行在监控 + 扫描模式中,以 root 用户添加以下 crontab 条目:

@reboot /sbin/mdadm --monitor --scan --oneshot

默认情况下,mdadm 每隔60秒会检查 RAID 阵列,如果发现问题将发出警报。你可以通过添加 --delay 选项到crontab 条目上面,后面跟上秒数,来修改默认行为(例如,--delay 1800意味着30分钟)。

最后,确保你已经安装了一个邮件用户代理(MUA),如mutt 或 mailx。否则,你将不会收到任何警报。

在一分钟内,我们就会看到 mdadm 发送的警报。

模拟和更换发生故障的 RAID 存储设备

为了给 RAID 阵列中的存储设备模拟一个故障,我们将使用 --manage--set-faulty 选项,如下所示:

# mdadm --manage --set-faulty /dev/md0 /dev/sdc1  

这将导致 /dev/sdc1 被标记为 faulty,我们可以在 /proc/mdstat 看到:

Stimulate Issue with RAID Storage

在 RAID 存储设备上模拟问题

更重要的是,让我们看看是不是收到了同样的警报邮件:

Email Alert on Failed RAID Device

RAID 设备故障时发送邮件警报

在这种情况下,你需要从软件 RAID 阵列中删除该设备:

# mdadm /dev/md0 --remove /dev/sdc1

然后,你可以直接从机器中取出,并将其使用备用设备来取代(/dev/sdd 中类型为 fd 的分区是以前创建的):

# mdadm --manage /dev/md0 --add /dev/sdd1

幸运的是,该系统会使用我们刚才添加的磁盘自动重建阵列。我们可以通过标记 /dev/sdb1 为 faulty 来进行测试,从阵列中取出后,并确认 tecmint.txt 文件仍然在 /mnt/raid1 是可访问的:

# mdadm --detail /dev/md0
# mount | grep raid1
# ls -l /mnt/raid1 | grep tecmint
# cat /mnt/raid1/tecmint.txt

Confirm Rebuilding RAID Array

确认 RAID 重建

上面图片清楚的显示,添加 /dev/sdd1 到阵列中来替代 /dev/sdc1,数据的重建是系统自动完成的,不需要干预。

虽然要求不是很严格,有一个备用设备是个好主意,这样更换故障的设备就可以在瞬间完成了。要做到这一点,先让我们重新添加 /dev/sdb1 和 /dev/sdc1:

# mdadm --manage /dev/md0 --add /dev/sdb1
# mdadm --manage /dev/md0 --add /dev/sdc1

Replace Failed Raid Device

取代故障的 Raid 设备

从冗余丢失中恢复数据

如前所述,当一个磁盘发生故障时, mdadm 将自动重建数据。但是,如果阵列中的2个磁盘都故障时会发生什么?让我们来模拟这种情况,通过标记 /dev/sdb1 和 /dev/sdd1 为 faulty:

# umount /mnt/raid1
# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
# mdadm --stop /dev/md0
# mdadm --manage --set-faulty /dev/md0 /dev/sdd1

此时尝试以同样的方式重新创建阵列就(或使用 --assume-clean 选项)可能会导致数据丢失,因此不到万不得已不要使用。

让我们试着从 /dev/sdb1 恢复数据,例如,在一个类似的磁盘分区(/dev/sde1 - 注意,这需要你执行前在/dev/sde 上创建一个 fd 类型的分区)上使用 ddrescue

# ddrescue -r 2 /dev/sdb1 /dev/sde1

Recovering Raid Array

恢复 Raid 阵列

请注意,到现在为止,我们还没有触及 /dev/sdb 和 /dev/sdd,它们的分区是 RAID 阵列的一部分。

现在,让我们使用 /dev/sde1 和 /dev/sdf1 来重建阵列:

# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1

请注意,在真实的情况下,你需要使用与原来的阵列中相同的设备名称,即设备失效后替换的磁盘的名称应该是 /dev/sdb1 和 /dev/sdc1。

在本文中,我选择了使用额外的设备来重新创建全新的磁盘阵列,是为了避免与原来的故障磁盘混淆。

当被问及是否继续写入阵列时,键入 Y,然后按 Enter。阵列被启动,你也可以查看它的进展:

# watch -n 1 cat /proc/mdstat

当这个过程完成后,你就应该能够访问 RAID 的数据:

Confirm Raid Content

确认 Raid 数据

总结

在本文中,我们回顾了从 RAID 故障和冗余丢失中恢复数据。但是,你要记住,这种技术是一种存储解决方案,不能取代备份。

本文中介绍的方法适用于所有 RAID 中,其中的概念我将在本系列的最后一篇(RAID 管理)中涵盖它。

如果你对本文有任何疑问,随时给我们以评论的形式说明。我们期待倾听阁下的心声!


via: http://www.tecmint.com/recover-data-and-rebuild-failed-software-raid/

作者:Gabriel Cánepa 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出