RHCSA 系列(十一): 使用 firewalld 和 iptables 来控制网络流量

简介:

简单来说,防火墙就是一个基于一系列预先定义的规则(例如流量包的目的地或来源,流量的类型等)的安全系统,它控制着一个网络中的流入和流出流量。

RHCSA: 使用 FirewallD 和 Iptables 来控制网络流量  Part 11

RHCSA: 使用 FirewallD 和 Iptables 来控制网络流量 – Part 11

在本文中,我们将回顾 firewalld 和 iptables 的基础知识。前者是 RHEL 7 中的默认动态防火墙守护进程,而后者则是针对 Linux 的传统的防火墙服务,大多数的系统和网络管理员都非常熟悉它,并且在 RHEL 7 中也可以用。

FirewallD 和 Iptables 的一个比较

在后台, firewalld 和 iptables 服务都通过相同的接口来与内核中的 netfilter 框架相交流,这不足为奇,即它们都通过 iptables 命令来与 netfilter 交互。然而,与 iptables 服务相反, firewalld 可以在不丢失现有连接的情况下,在正常的系统操作期间更改设定。

在默认情况下, firewalld 应该已经安装在你的 RHEL 系统中了,尽管它可能没有在运行。你可以使用下面的命令来确认(firewall-config 是用户界面配置工具):

 
  1. # yum info firewalld firewall-config

检查 FirewallD 的信息

检查 FirewallD 的信息

以及,

 
  1. # systemctl status -l firewalld.service

检查 FirewallD 的状态

检查 FirewallD 的状态

另一方面, iptables 服务在默认情况下没有被包含在 RHEL 系统中,但可以被安装上。

 
  1. # yum update && yum install iptables-services

这两个守护进程都可以使用常规的 systemd 命令来在开机时被启动和开启:

 
  1. # systemctl start firewalld.service | iptables-service.service
  2. # systemctl enable firewalld.service | iptables-service.service

另外,请阅读:管理 Systemd 服务的实用命令

至于配置文件, iptables 服务使用 /etc/sysconfig/iptables 文件(假如这个软件包在你的系统中没有被安装,则这个文件将不存在)。在一个被用作集群节点的 RHEL 7 机子上,这个文件看起来是这样:

Iptables 防火墙配置文件

Iptables 防火墙配置文件

而 firewalld 则在两个目录中存储它的配置文件,即 /usr/lib/firewalld 和 /etc/firewalld

 
  1. # ls /usr/lib/firewalld /etc/firewalld

FirewallD 的配置文件

FirewallD 的配置文件

在这篇文章中后面,我们将进一步查看这些配置文件,在那之后,我们将在这两个地方添加一些规则。现在,是时候提醒你了,你总可以使用下面的命令来找到更多有关这两个工具的信息。

 
  1. # man firewalld.conf
  2. # man firewall-cmd
  3. # man iptables

除了这些,记得查看一下当前系列的第一篇 RHCSA 系列(一): 回顾基础命令及系统文档,在其中我描述了几种渠道来得到安装在你的 RHEL 7 系统上的软件包的信息。

使用 Iptables 来控制网络流量

在进一步深入之前,或许你需要参考 Linux 基金会认证工程师(Linux Foundation Certified Engineer,LFCE) 系列中的 配置 Iptables 防火墙 – Part 8 来复习你脑中有关 iptables 的知识。

例 1:同时允许流入和流出的网络流量

TCP 端口 80 和 443 是 Apache web 服务器使用的用来处理常规(HTTP)和安全(HTTPS)网络流量的默认端口。你可以像下面这样在 enp0s3 接口上允许流入和流出网络流量通过这两个端口:

 
  1. # iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. # iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
  3. # iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
  4. # iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

例 2:从某个特定网络中阻挡所有(或某些)流入连接

或许有时你需要阻挡来自于某个特定网络的所有(或某些)类型的来源流量,比方说 192.168.1.0/24:

 
  1. # iptables -I INPUT -s 192.168.1.0/24 -j DROP

上面的命令将丢掉所有来自 192.168.1.0/24 网络的网络包,而

 
  1. # iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

将只允许通过端口 22 的流入流量。

例 3:将流入流量重定向到另一个目的地

假如你不仅使用你的 RHEL 7 机子来作为一个软件防火墙,而且还将它作为一个硬件防火墙,使得它位于两个不同的网络之间,那么在你的系统上 IP 转发一定已经被开启了。假如没有开启,你需要编辑 /etc/sysctl.conf文件并将 net.ipv4.ip_forward 的值设为 1,即:

 
  1. net.ipv4.ip_forward = 1

接着保存更改,关闭你的文本编辑器,并最终运行下面的命令来应用更改:

 
  1. # sysctl -p /etc/sysctl.conf

例如,你可能在一个内部的机子上安装了一个打印机,它的 IP 地址为 192.168.0.10,CUPS 服务在端口 631 上进行监听(同时在你的打印服务器和你的防火墙上)。为了从防火墙另一边的客户端传递打印请求,你应该添加下面的 iptables 规则:

 
  1. # iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

请记住 iptables 会逐条地读取它的规则,所以请确保默认的策略或后面的规则不会重载上面例子中那些规则。

FirewallD 入门

firewalld 引入的一个变化是区域(zone) (注:翻译参考了 https://fedoraproject.org/wiki/FirewallD/zh-cn )。这个概念允许将网路划分为拥有不同信任级别的区域,由用户决定将设备和流量放置到哪个区域。

要获取活动的区域,使用:

 
  1. # firewall-cmd --get-active-zones

在下面的例子中,public 区域是激活的,并且 enp0s3 接口被自动地分配到了这个区域。要查看有关一个特定区域的所有信息,可使用:

 
  1. # firewall-cmd --zone=public --list-all

列出所有的 Firewalld 区域

列出所有的 Firewalld 区域

由于你可以在 RHEL 7 安全指南 中阅读到更多有关区域的知识,这里我们将仅列出一些特别的例子。

例 4:允许服务通过防火墙

要获取受支持的服务的列表,可以使用:

 
  1. # firewall-cmd --get-services

列出所有受支持的服务

列出所有受支持的服务

要立刻生效且在随后重启后都可以让 http 和 https 网络流量通过防火墙,可以这样:

 
  1. # firewall-cmd --zone=MyZone --add-service=http
  2. # firewall-cmd --zone=MyZone --permanent --add-service=http
  3. # firewall-cmd --zone=MyZone --add-service=https
  4. # firewall-cmd --zone=MyZone --permanent --add-service=https
  5. # firewall-cmd --reload

假如 -–zone 被忽略,则使用默认的区域(你可以使用 firewall-cmd –get-default-zone来查看)。

若要移除这些规则,可以在上面的命令中将 add 替换为 remove

例 5:IP 转发或端口转发

首先,你需要查看在目标区域中,伪装(masquerading)是否被开启:

 
  1. # firewall-cmd --zone=MyZone --query-masquerade

在下面的图片中,我们可以看到对于外部区域,伪装已被开启,但对于公用区域则没有:

查看伪装状态

查看伪装状态

你可以为公共区域开启伪装:

 
  1. # firewall-cmd --zone=public --add-masquerade

或者在外部区域中使用伪装。下面是使用 firewalld 来重复例 3 中的任务所需的命令:

 
  1. # firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

不要忘了重新加载防火墙。

在 RHCSA 系列的 第九部分 你可以找到更深入的例子,在那篇文章中我们解释了如何允许或禁用通常被 web 服务器和 ftp 服务器使用的端口,以及在针对这两个服务所使用的默认端口被改变时,如何更改相应的规则。另外,你或许想参考 firewalld 的 wiki 来查看更深入的例子。

总结

在这篇文章中,我们已经解释了防火墙是什么,介绍了在 RHEL 7 中用来实现防火墙的几个可用的服务,并提供了可以帮助你入门防火墙的几个例子。假如你有任何的评论,建议或问题,请随意使用下面的评论框来让我们知晓。这里就事先感谢了!

本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-09-29 

目录
相关文章
|
3月前
|
Linux 网络安全 网络架构
百度搜索:蓝易云【强大的iptables:解锁Linux网络安全的神器】
总结: iptables是Linux系统中的强大防火墙工具,通过管理网络流量和实施安全策略来保护系统的网络安全。通过配置iptables规则,可以防止未经授权的访问、过滤恶意流量、实现端口转发和网络地址转换等功能。合理使用iptables,可以加强系统的网络安全性和灵活性。
32 0
|
9月前
|
关系型数据库 MySQL 网络安全
如何设置iptables,让网络流量转发给内部容器mysql
如何设置iptables,让网络流量转发给内部容器mysql
346 1
|
Linux 网络安全
linux服务器将iptables卸掉了,导致服务器网络问题
如果是阿里云服务器,可以通过控制台登录服务器,参考一下步骤进行修复 通过ifconfig 配置IP信息ifconfig <网卡> < IP > netmask <掩码>内网和外网网卡都是配置上。然后添加路由:route add -net 0.0.0.0/0 gw <公网网关>route add -net 10.0.0.0/8 gw <内网网关>route add -net 100.64.0.0/10 gw <内网网关>这样网络就通了,然后使用 yum install initscripts ,并重启网络服务即可。
1190 0