RedHat / Centos Linux 系统运维与管理实践技巧荟萃,持续更新

RedHat / Centos Linux 系统运维与管理实践技巧荟萃

磁盘分区相关的知识

加载与卸载内核模块

内核模块是 linux 内核加载和管理硬件设备驱动程序的其中一种方式;另一种方式为静态内核映像,这些硬件驱动就集成到位于 /boot/vmlinuz-version 的内核映像中,其中 version 是内核版本号,我这个机器上的例子为

/boot/vmliunz-2.6.32-431.el6.i686

有些硬件驱动,例如 IDE 磁盘,SCSI 磁盘,SATA 磁盘等驱动,必须通过 GRUB (引导装载程序),随着内核映像一起,从磁盘上的启动分区( /boot )加载到内存中,否则内核就不能识别磁盘上的其它独立分区,如根分区( / ),也就无法提供基本的文件系统功能;既然无法访问文件系统,也就无法从下面的目录,以内核模块的形式来加载其余在系统引导阶段用不上的硬件设备驱动,例如网卡,声卡等驱动;

静态内核映像形式的硬件驱动和内核模块形式的硬件驱动之间的区别在于:通过 modprobe 与 modprobe -r 命令,后者可以“动态”的“按需”加载,卸载;

*****如果要配置作为静态内核映像一部分加载的硬件驱动的行为模式,可以通过 GRUB 或者 LILO 等引导加载程序提供的“内核命令行”来设置引导参数;如下命令可以查看当前的内核引导参数:

[root@centos6-5~]#cat/proc/cmdlineroroot=UUID=0d1c20e2-6fb8-4b37-8ced-987df661f7c8rd_NO_LUKSKEYBOARDTYPE=pcKEYTABLE=usrd_NO_MDcrashkernel=128MLANG=zh_CN.UTF-8rd_NO_LVMrd_NO_DMrhgbquiet

*****如果要配置作为内核模块动态加载的硬件驱动行为模式,可以通过编辑 /etc/modprobe.conf 文件来实现,内核在加载相应模块时会读取该文件中的配置参数,来决定该硬件驱动的工作模式;

(但是我发现在 centos6.5 中,该文件默认不存在,只有在基于 RHEL5 系列的发布版中,才有类似文件)

CentOS 6.5 的内核模块存放目录为

/lib/modules/2.6.32-431.el6.i686/

如前所述,这个目录下存放不需要在系统引导阶段加载的硬件设备驱动程序;

其中,2.6.32-431.el6.i686 为执行命令 uname -r 的结果,取决于你系统的内核版本,这个值可能会有所不同;

每个单独的内核模块,都以 .ko 结尾

参考上面截图,内核模块中有一个是实现类似 iptables 的防火墙日志记录功能,位于目录

/lib/modules/2.6.32-431.el6.i686/kernel/net/netfilter

该目录下的 nf_conntrack.ko 和其家族模块,就是用于记录数据包出入的 IP 地址,端口,状态等信息的模块,在 centos 6.5 中,默认是开启(加载)的;在较低版本的 centos 中,模块的名字可能是以 ip_conntrack 为前缀,需要注意;

nf_conntrack.ko 及其家族模块,会将日志信息输出到基于内存的虚拟文件系统目录下

/proc/net/nf_conntrack

稍后我们将对记录中的每个字段做详细解释;

*****补充知识:与 iptables / netfilter 相关的内核模块,规则表与规则链

我们知道,位于用户态的 iptables 命令行工具,主要用来设置4个表的策略(规则),而相应的内核模块读取这些表中的规则,执行实际的包过滤任务:

filter 表,

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv4/iptable_filter.ko

将会根据该表中的策略来过滤数据包

nat 表,

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv4/iptable_nat.ko

将会根据该表中的策略来路由转发数据包,并且执行 SNAT(源地址转换)与 DNAT(目标地址转换)

mangle 表,

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv4/iptable_mangle.ko

将会根据该表中的策略来修改数据包

raw 表,

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv4/iptable_raw.ko

将会根据该表中的策略对状态跟踪机制提供支持

我们用后面介绍的 modinfo 命令,可以查看这4个内核模块的详细信息,如下:

在处理各种数据包时,根据防火墙规则的不同介入时机,iptables 共涉及5种默认规则链,其应用时间点分别对应如下:

INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则。PREROUTING链:当数据包需要进入到 iptables 身后的内网时,应用此链中的规则。POSTROUTING链:当数据包需要经由 iptables 从内网出去时,应用此链中的规则。

INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对运行 iptables 的服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火墙”中,特别是运行 iptables 的服务器作为网关使用时的情况。

*****在 Linux 2.6.14 版内核以后,

对 netfilter 的显式扩展提供支持的内核模块,这些模块统一存放在目录

/lib/modules/2.6.32-431.el6.i686/kernel/net/netfilter

下,这些以 .ko 为后缀的内核模块,是 netfilter 执行显式扩展的匹配任务时,需要用到的模块,例如 xt_string.ko

该目录中的模块可以同时操作基于 IPv4 和 IPv6 网络层协议的数据包,

而在 Linux 2.6.14 版内核以前,只能操作基于 IPv4 数据包的模块,存放在

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv4/netfilter 目录下

只能操作基于 IPv6 数据包的模块,存放在

/lib/modules/2.6.32-431.el6.i686/kernel/net/ipv6/netfilter

目录下,当然 Linux 2.6.14 版以后的内核也包括了这2个目录

*****对 iptables 的显式扩展用户接口提供支持的“库模块”,这些模块统一存放在目录

/lib/xtables

下,这些以 .so 为后缀的库模块,被 iptables 用来检查用户输入的规则是否正确,并将其写入内存中,供 netfilter 在执行包过滤时的参考依据,例如和前面模块相对应的libxt_string.so

“人”的结构就是相互支撑,“众”人的事业需要每个人的参与。

RedHat / Centos Linux 系统运维与管理实践技巧荟萃,持续更新

相关文章:

你感兴趣的文章:

标签云: