蚊章汇 - firewalld
type: channel
link: https://linuxcn.bwsl.wang/tag/firewalld/
items: 硬核观察 #1043 数百万 GitHub 项目易受依赖库劫持攻击
items: 使用 fail2ban 和 FirewallD 黑名单保护你的系统
items: FirewallD 防火墙使用概述
items: Linux 防火墙入门教程
items: Linux 防火墙：关于 iptables 和 firewalld 的那些事
items: 理解多区域配置中的 firewalld
items: CentOS 7 上的 FirewallD 简明指南
items: CentOS 上的 FirewallD 简明指南
items: 为你的 Linux 服务器加把锁
items: Linux有问必答：在CentOS或RHEL防火墙上开启端口

硬核观察 #1043 数百万 GitHub 项目易受依赖库劫持攻击
type: item
date: 2023-06-26T04:03:30+08:00
description: 数百万 GitHub 项目易受依赖库劫持攻击安全专家发现，数以百万计的 GitHub 项目易受依赖库劫持攻击，攻击者可以借此发动影响大量用户的供应链攻击。GitHub 上的用户名和项目或库的名字如果改变，为了避免破坏其它项目的依赖关系，GitHub 会创建一个重定向。但如果有人用旧的名字创建了账号，那么就会导致重定向无效。GitHub 可以防御部分此类攻击，但该防御方案可以被绕过。消息来源：Aqua Sec老王点评：我觉得 GitHub 应该更认真的解决这个问题，毕竟 GitHub 已经不仅仅是一个代码仓库，而是一个供应链的重要组成部分了。但从另外一个角度看，软件项目依赖这种不确定的供应链是不是也过于宽松了？美国新数据显示，在家工作成为新常态许多在大流行期间蜷缩在家里的白领工人已经回到办公室，但没有回到办公室的人特别多。对许多人来说，远程工作似乎是一种新常态。周四公布的美国经济数据显示，在家工作似乎已经成为一种趋势，特别是对女性和受过大学教育的人而言。2022 年的数据显示，34% 的 15 岁以上的人仍然在家里工作，54% 的人拥有学士或更高的学位。而美国旧金山市长已经 提议 将市中心荒废的购物中心改造为足球场，因为越来越多人不再回到市中心上班，旧金山的办公室空置率已达到 30 年来的最高水平。消息来源：MSN老王点评：不知道为什么美国人就不回去上班了，而我们似乎都赶紧回去了。Firewalld 2.0 发布开源防火墙守护程序 Firewalld 自 2011 年以来一直在开发，而两年前才达到 Firewalld 1.0 的里程碑。因此，发现 Firewalld 2.0 在今天发布有点令人惊讶。2.0 中最重要的变化解决了区域漂移的问题，即防火墙策略可能最终违反了 “数据包只进入一个区域” 的规则。此外，还增加了对 NFTables Flowtable 的支持，可以显著提高转发性能，将网络转发的 iperf 性能提高了约 59%。消息来源：Phoronix老王点评：看起来是 Firewalld 的开发在加速，不过我更觉得它是在飙版本号。看看 Firefox、Linux 内核等开源软件的版本号，看来开源软件对版本号的谦虚传统已经被丢弃了。

使用 fail2ban 和 FirewallD 黑名单保护你的系统
type: item
date: 2020-07-15T20:46:00+08:00
description: 如果你运行的服务器有面向公众的 SSH 访问，你可能遇到过恶意登录尝试。本文介绍了如何使用两个实用程序来防止入侵者进入我们的系统。为了防止反复的 ssh 登录尝试，我们来看看 fail2ban。而且，如果你不经常旅行，基本上停留在一两个国家，你可以将 FirewallD 配置为只允许从你选择的国家访问。首先，让我们为不熟悉这些应用程序的人员介绍一些术语，以完成这项工作：fail2ban：一个守护进程，用于禁止发生多次认证错误的主机。fail2ban 将监控 SystemD 日志，以查找对任何已启用的“ 监狱 jail ”的失败的验证尝试。在达到指定失败次数后，它将添加一个防火墙规则，在配置的时间内阻止该特定 IP 地址。FirewallD：一个带有 D-Bus 接口的防火墙守护进程，提供动态防火墙。除非你另行决定使用传统的 iptables，否则你已经在所有支持的 Fedora 和 CentOS 上安装了 FirewallD。假定前提主机系统有一个互联网连接，并且要么是直接暴露在互联网上，要么是通过 DMZ（这两个都是非常糟糕的想法，除非你知道你在做什么），要么是有一个端口从路由器转发过来。虽然大部分的内容可能适用于其他系统，但本文假设当前系统是 Fedora（31 及以上）或 RHEL/CentOS 8 版本。在 CentOS 上，你必须用 sudo dnf install epel-release 启用 Fedora EPEL 仓库。安装与配置Fail2Ban很有可能已经有某个 Firewalld 区已经允许 SSH 访问，但 sshd 服务本身默认没有启用。要手动启动它，并且不在启动时永久启用它：$ sudo systemctl start sshd 或者在系统启动时启用，并同时启动它：$ sudo systemctl enable --now sshd 下一步就是安装、配置、启用 fail2ban。和往常一样，安装可以通过命令行完成：$ sudo dnf install fail2ban 安装完毕后，下一步就是配置“监狱”（你要以设置的任何阈值监视并禁止的服务）。默认情况下，IP 会被禁止 1 小时（这其实不够长）。最好的做法是使用 *.local 文件覆盖系统默认值，而不是直接修改 *.config 文件。如果我们查看我的 jail.local，我们可以看到：# cat /etc/fail2ban/jail.local [DEFAULT] # "bantime" is the number of seconds that a host is banned. bantime = 1d # A host is banned if it has generated "maxretry" during the last "findtime" findtime = 1h # "maxretry" is the number of failures before a host get banned. maxretry = 5 换成通俗的语言讲，就是在过去一小时内尝试 5 次后，该 IP 将被封禁 1 天。对于多次被封的 IP，也可以选择增加封禁时间，但这是另一篇文章的主题。下一步是配置“监狱”。在本教程中显示的是 sshd，但其他服务的步骤大致相同。在 /etc/fail2ban/jail.d 中创建一个配置文件。这是我的文件：# cat /etc/fail2ban/jail.d/sshd.local [sshd] enabled = true 就这么简单! 很多配置已经在为 Fedora 构建的软件包中处理了（提示：我是当前的维护者）。接下来启用并启动 fail2ban 服务：$ sudo systemctl enable --now fail2ban 希望没有立即出错，如果没有，请使用下面的命令检查 fail2ban 的状态：$ sudo systemctl status fail2ban 如果它没有错误地启动，应该是这样的：$ systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2020-06-16 07:57:40 CDT; 5s ago Docs: man:fail2ban(1) Process: 11230 ExecStartPre=/bin/mkdir -p /run/fail2ban (…

FirewallD 防火墙使用概述
type: item
date: 2020-05-14T23:27:00+08:00
description: FirewallD 是由红帽发起的提供了支持网络/防火墙 区域 （ zone ） 定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4、IPv6 防火墙设置以及以太网桥接，并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。由于 FirewallD 项目本身的自由软件特性，像 Debian Linux 社区发行版已经默认在软件仓库中收录了该防火墙组件软件包。随着各个新 GNU/Linux 发行版中防火墙引擎逐步从 iptables 向 nftables 迁移，FirewallD 是目前唯一能够支持该两种防火墙后端引擎的前端服务组件，用户掌握以后可以方便的进行防火墙配置并很好的规避了从 iptables 向 nftables 迁移带来的学习恐慌。笔者通过查阅 RedHat 8 发行版网络配置手册，并结合自己在 Debian Linux 10 社区版上进行 FirewallD 防火墙的实际配置使用，对该服务组件的功能和日常使用进行整理。希望通过该文能帮助其他 Linux 用户掌握该防火墙，并通过该防火墙提高主机测网络安全防御能力，打造可信的网络安全环境。一、安装在 Debian Linux 10 社区版中使用如下命令：apt-get install firewall-applet firewall-config firewalld就可以直接进行 FirewallD 防火墙软件组件包的安装，其中：firewall-applet 为 FirewallD 托盘小程序，firewall-config 为 FirewallD 图形化系统配置管理工具firewalld 为 FirewallD 防火墙软件组件的主组件包，其中包含 firewall-cmd、firewall-offline-cmd 等命令行系统配置管理工具。在 RedHat 8 下该防火墙组件默认已经进行了安装，如果用户进行特殊定制安装之后需要单独安装该软件组件可以使用命令yum install firewall-config直接进行安装即可。笔者在两个系统装进行过安装对比，发现该软件组件包在两个系统上除了安装命令稍有差异外，其它从配置文件到 systemd 服务配置并没有任何区别。随后的内容将不再强调操作系统。二、防火墙默认区域Block（阻塞） 任何对该区域的连接请求都会被以 IPv4 的 icmp-host-prohibited 信息或 IPv6 的 icmp6-adm-prohibited 信息所拒绝。只能从系统内部启动网络连接。Dmz（隔离） 用于你的隔离区内的电脑，此区域内可公开访问，可以有限地进入你的内部网络，仅仅接收经过选择的连接。Drop（丢弃） 对进入该区域的所有数据包丢弃，并且不进行任何回包，区域内主动发起连接的流入回程数据包允许通过，允许进行出方向的网络连接。External（外部） 用于在启用伪装的外部网络上使用，尤其路由器、防火墙认为在这个网络上的其它主机不可信。仅仅接收经过选择的连接。Home（家庭） 默认其他同区域内主机可信，仅仅接收经过选择的连接。同时默认放行 ssh、mdns、ipp-client、amba-client 与 dhcpv6-client 服务产生的连接。Internal（内部） 从描述中可以等同于家庭区域。Public（公开） 公共区域，也是防火墙配置的默认区域，防火墙认为该区域主机不可信。仅仅接收经过选择的连接。同时默认放行 ssh 与 dhcpv6-client 服务产生的连接。Trusted（可信） 可信区域，防火墙放行一切流量。等同于关闭防火墙功能。Work（工作） 工作区域，防火墙认为在这个网络上的其它主机不可信。仅仅接收经过选择的连接。同时默认放行 ssh、ipp-client 与 dhcpv6-client 服务产生的连接。这些区域的命名不言自明，用户可以很快选择一个合适的安全区域，从而简化和避开很多安全问题。当然用户也可以根据自己的需要或者安全评估来根据自己的实际需求对相应安全域进行更个性化的配置，以适应自己的安全管理规范。尽管有些安全域的安全规则是相同的，但之所以还要在名字上有所区别，主要是为了从习惯上让用户更好区分不同域的独特使用场景，对用户来说更好理解和便于区分。三、防火墙日常管理3.1、查看防火墙当前状态查询状态：firewall-cmd --state更多的防火墙系统服务状态信息可以使用systemctl status firewalld在你配置新的防火墙规则之前，你需要了解如何通过命令查看当前防火墙配置。查看防火墙当前配置可以通过图形界面或者在终端模式下使用命令进行。在图形界面下可以直接通过点击应用程序“firewall-config”图标或者在终端窗…

Linux 防火墙入门教程
type: item
date: 2020-04-20T18:42:00+08:00
description: 防火墙是你的计算机防止网络入侵的第一道屏障。为确保你的安全，请下载我们的备忘单。合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网，通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时，那么你计算机上的那层防火墙就是仅有的一层，所以配置和控制好你 Linux 电脑上的防火墙很重要。如果你维护一台 Linux 服务器，那么知道怎么去管理你的防火墙同样重要，只要掌握了这些知识你才能保护你的服务器免于本地或远程非法流量的入侵。安装防火墙很多 Linux 发行版本已经自带了防火墙，通常是 iptables。它很强大并可以自定义，但配置起来有点复杂。幸运的是，有开发者写出了一些前端程序来帮助用户控制防火墙，而不需要写冗长的 iptables 规则。在 Fedora、CentOS、Red Hat 和一些类似的发行版本上，默认安装的防火墙软件是 firewalld，通过 firewall-cmd 命令来配置和控制。在 Debian 和大部分其他发行版上，可以从你的软件仓库安装 firewalld。Ubuntu 自带的是 简单防火墙 Uncomplicated Firewall （ufw），所以要使用 firewalld，你必须启用 universe 软件仓库：$ sudo add-apt-repository universe $ sudo apt install firewalld你还需要停用 ufw：$ sudo systemctl disable ufw没有理由不用 ufw。它是一个强大的防火墙前端。然而，本文重点讲 firewalld，因为大部分发行版都支持它而且它集成到了 systemd，systemd 是几乎所有发行版都自带的。不管你的发行版是哪个，都要先激活防火墙才能让它生效，而且需要在启动时加载：$ sudo systemctl enable --now firewalld理解防火墙的域Firewalld 旨在让防火墙的配置工作尽可能简单。它通过建立 域 zone 来实现这个目标。一个域是一组的合理、通用的规则，这些规则适配大部分用户的日常需求。默认情况下有九个域。trusted：接受所有的连接。这是最不偏执的防火墙设置，只能用在一个完全信任的环境中，如测试实验室或网络中相互都认识的家庭网络中。home、work、internal：在这三个域中，接受大部分进来的连接。它们各自排除了预期不活跃的端口进来的流量。这三个都适合用于家庭环境中，因为在家庭环境中不会出现端口不确定的网络流量，在家庭网络中你一般可以信任其他的用户。public：用于公共区域内。这是个偏执的设置，当你不信任网络中的其他计算机时使用。只能接收选定的常见和最安全的进入连接。dmz：DMZ 表示隔离区。这个域多用于可公开访问的、位于机构的外部网络、对内网访问受限的计算机。对于个人计算机，它没什么用，但是对某类服务器来说它是个很重要的选项。external：用于外部网络，会开启伪装（你的私有网络的地址被映射到一个外网 IP 地址，并隐藏起来）。跟 DMZ 类似，仅接受经过选择的传入连接，包括 SSH。block：仅接收在本系统中初始化的网络连接。接收到的任何网络连接都会被 icmp-host-prohibited 信息拒绝。这个一个极度偏执的设置，对于某类服务器或处于不信任或不安全的环境中的个人计算机来说很重要。drop：接收的所有网络包都被丢弃，没有任何回复。仅能有发送出去的网络连接。比这个设置更极端的办法，唯有关闭 WiFi 和拔掉网线。你可以查看你发行版本的所有域，或通过配置文件 /usr/lib/firewalld/zones 来查看管理员设置。举个例子：下面是 Fefora 31 自带的 FedoraWorkstation 域：$ cat /usr/lib/firewalld/zones/FedoraWorkstation.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Fedora Workstation</short> <description>Unsolicited incoming network packets are rejected from port 1 to 1024, except for select network services. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description> <service name="dhcpv6-cl…

Linux 防火墙：关于 iptables 和 firewalld 的那些事
type: item
date: 2018-10-04T01:18:01+08:00
description: 以下是如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则。这篇文章摘自我的书《Linux in Action》，尚未发布的第二个曼宁出版项目。防火墙防火墙是一组规则。当数据包进出受保护的网络区域时，进出内容（特别是关于其来源、目标和使用的协议等信息）会根据防火墙规则进行检测，以确定是否允许其通过。下面是一个简单的例子:防火墙可以根据协议或基于目标的规则过滤请求。一方面， iptables 是 Linux 机器上管理防火墙规则的工具。另一方面，firewalld 也是 Linux 机器上管理防火墙规则的工具。你有什么问题吗？如果我告诉你还有另外一种工具，叫做 nftables，这会不会糟蹋你的美好一天呢？好吧，我承认整件事确实有点好笑，所以让我来解释一下。这一切都从 Netfilter 开始，它在 Linux 内核模块级别控制访问网络栈。几十年来，管理 Netfilter 钩子的主要命令行工具是 iptables 规则集。因为调用这些规则所需的语法看起来有点晦涩难懂，所以各种用户友好的实现方式，如 ufw 和 firewalld 被引入，作为更高级别的 Netfilter 解释器。然而，ufw 和 firewalld 主要是为解决单独的计算机所面临的各种问题而设计的。构建全方面的网络解决方案通常需要 iptables，或者从 2014 年起，它的替代品 nftables (nft 命令行工具)。iptables 没有消失，仍然被广泛使用着。事实上，在未来的许多年里，作为一名管理员，你应该会使用 iptables 来保护的网络。但是 nftables 通过操作经典的 Netfilter 工具集带来了一些重要的崭新的功能。从现在开始，我将通过示例展示 firewalld 和 iptables 如何解决简单的连接问题。使用 firewalld 配置 HTTP 访问正如你能从它的名字中猜到的，firewalld 是 systemd 家族的一部分。firewalld 可以安装在 Debian/Ubuntu 机器上，不过，它默认安装在 RedHat 和 CentOS 上。如果您的计算机上运行着像 Apache 这样的 web 服务器，您可以通过浏览服务器的 web 根目录来确认防火墙是否正在工作。如果网站不可访问，那么 firewalld 正在工作。你可以使用 firewall-cmd 工具从命令行管理 firewalld 设置。添加 –state 参数将返回当前防火墙的状态:# firewall-cmd --state running默认情况下，firewalld 处于运行状态，并拒绝所有传入流量，但有几个例外，如 SSH。这意味着你的网站不会有太多的访问者，这无疑会为你节省大量的数据传输成本。然而，这不是你对 web 服务器的要求，你希望打开 HTTP 和 HTTPS 端口，按照惯例，这两个端口分别被指定为 80 和 443。firewalld 提供了两种方法来实现这个功能。一个是通过 –add-port 参数，该参数直接引用端口号及其将使用的网络协议（在本例中为TCP）。 另外一个是通过 –permanent 参数，它告诉 firewalld 在每次服务器启动时加载此规则：# firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --permanent --add-port=443/tcp–reload 参数将这些规则应用于当前会话：# firewall-cmd --reload查看当前防火墙上的设置，运行 –list-services：# firewall-cmd --list-services dhcpv6-client http https ssh假设您已经如前所述添加了浏览器访问，那么 HTTP、HTTPS 和 SSH 端口现在都应该是和 dhcpv6-client 一样开放的 —— 它允许 Linux 从本地 DHCP 服务器请求 IPv6 IP 地址。使用 iptables 配置锁定的客户信息亭我相信你已经看到了信息亭——它们是放在机场、图书馆和商务场所的盒子里的平板电脑、触摸屏和 ATM 类电脑，邀请顾客和路人浏览内容。大多数信息亭的问题是，你通常不希望用户像在自己家一样，把他们当成自己的设备。它们通常不是用来浏览、观看 YouTube 视频或对五角大楼发起拒绝服务攻击的。因此，为了确保它们没有被滥用，你需要锁定它们。一种方法是应用某种信息亭模式，无论是通过巧妙使用 Linux 显示管理器还是控制在浏览器级别。但是为了确保你已经堵塞了所有的漏洞，你可能还想通过防火墙添加一些硬性的网络控制。在下一节中，我将讲解如何使用ipta…

理解多区域配置中的 firewalld
type: item
date: 2017-11-22T07:39:52+08:00
description: 现在的新闻里充斥着服务器被攻击和数据失窃事件。对于一个阅读过安全公告博客的人来说，通过访问错误配置的服务器，利用最新暴露的安全漏洞或通过窃取的密码来获得系统控制权，并不是件多困难的事情。在一个典型的 Linux 服务器上的任何互联网服务都可能存在漏洞，允许未经授权的系统访问。因为在应用程序层面上强化系统以防范任何可能的威胁是不可能做到的事情，而防火墙可以通过限制对系统的访问提供了安全保证。防火墙基于源 IP、目标端口和协议来过滤入站包。因为这种方式中，仅有几个 IP/端口/协议的组合与系统交互，而其它的方式做不到过滤。Linux 防火墙是通过 netfilter 来处理的，它是内核级别的框架。这十几年来，iptables 被作为 netfilter 的用户态抽象层（LCTT 译注： userland，一个基本的 UNIX 系统是由 kernel 和 userland 两部分构成，除 kernel 以外的称为 userland）。iptables 将包通过一系列的规则进行检查，如果包与特定的 IP/端口/协议的组合匹配，规则就会被应用到这个包上，以决定包是被通过、拒绝或丢弃。Firewalld 是最新的 netfilter 用户态抽象层。遗憾的是，由于缺乏描述多区域配置的文档，它强大而灵活的功能被低估了。这篇文章提供了一个示例去改变这种情况。Firewalld 的设计目标firewalld 的设计者认识到大多数的 iptables 使用案例仅涉及到几个单播源 IP，仅让每个符合白名单的服务通过，而其它的会被拒绝。这种模式的好处是，firewalld 可以通过定义的源 IP 和/或网络接口将入站流量分类到不同 区域 zone 。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于 iptables 进行语法简化。firewalld 通过使用服务名而不是它的端口和协议去指定服务，使它更易于使用，例如，是使用 samba 而不是使用 UDP 端口 137 和 138 和 TCP 端口 139 和 445。它进一步简化语法，消除了 iptables 中对语句顺序的依赖。最后，firewalld 允许交互式修改 netfilter，允许防火墙独立于存储在 XML 中的永久配置而进行改变。因此，下面的的临时修改将在下次重新加载时被覆盖：# firewall-cmd <some modification> 而，以下的改变在重加载后会永久保存：# firewall-cmd --permanent <some modification> # firewall-cmd --reload 区域在 firewalld 中最上层的组织是区域。如果一个包匹配区域相关联的网络接口或源 IP/掩码 ，它就是区域的一部分。可用的几个预定义区域：# firewall-cmd --get-zones block dmz drop external home internal public trusted work 任何配置了一个网络接口和/或一个源的区域就是一个 活动区域 active zone 。列出活动的区域：# firewall-cmd --get-active-zones public interfaces: eno1 eno2 Interfaces （接口）是系统中的硬件和虚拟的网络适配器的名字，正如你在上面的示例中所看到的那样。所有的活动的接口都将被分配到区域，要么是默认的区域，要么是用户指定的一个区域。但是，一个接口不能被分配给多于一个的区域。在缺省配置中，firewalld 设置所有接口为 public 区域，并且不对任何区域设置源。其结果是，public 区域是唯一的活动区域。Sources （源）是入站 IP 地址的范围，它也可以被分配到区域。一个源（或重叠的源）不能被分配到多个区域。这样做的结果是产生一个未定义的行为，因为不清楚应该将哪些规则应用于该源。因为指定一个源不是必需的，任何包都可以通过接口匹配而归属于一个区域，而不需要通过源匹配来归属一个区域。这表示通过使用优先级方式，优先到达多个指定的源区域，稍后将详细说明这种情况。首先，我们来检查 public 区域的配置：# firewall-cmd --zone=public --list-all public (default, active) interfaces: eno1 eno2 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: # firewall-cmd --permanent --zone=public --get-ta…

CentOS 7 上的 FirewallD 简明指南
type: item
date: 2017-03-21T23:21:43+08:00
description: FirewallD 是 CentOS 7 服务器上默认可用的防火墙管理工具。基本上，它是 iptables 的封装，有图形配置工具 firewall-config 和命令行工具 firewall-cmd。使用 iptables 服务，每次改动都要求刷新旧规则，并且从 /etc/sysconfig/iptables 读取新规则，然而 firewalld 只应用改动了的不同部分。FirewallD 的 区域 （ zone ） FirewallD 使用 服务 （ service ） 和 区域 （ zone ） 来代替 iptables 的 规则 （ rule ） 和 链 （ chain ） 。默认情况下，有以下的 区域 （ zone ） 可用：drop – 丢弃所有传入的网络数据包并且无回应，只有传出网络连接可用。block — 拒绝所有传入网络数据包并回应一条主机禁止的 ICMP 消息，只有传出网络连接可用。public — 只接受被选择的传入网络连接，用于公共区域。external — 用于启用了地址伪装的外部网络，只接受选定的传入网络连接。dmz — DMZ 隔离区，外部受限地访问内部网络，只接受选定的传入网络连接。work — 对于处在你工作区域内的计算机，只接受被选择的传入网络连接。home — 对于处在你家庭区域内的计算机，只接受被选择的传入网络连接。internal — 对于处在你内部网络的计算机，只接受被选择的传入网络连接。trusted — 所有网络连接都接受。要列出所有可用的区域，运行：# firewall-cmd --get-zones work drop internal external trusted home dmz public block 列出默认的区域 ：# firewall-cmd --get-default-zone public 改变默认的区域 ：# firewall-cmd --set-default-zone=dmz # firewall-cmd --get-default-zone dmz FirewallD 服务FirewallD 服务使用 XML 配置文件，记录了 firewalld 服务信息。列出所有可用的服务：# firewall-cmd --get-services amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server XML 配置文件存储在 /usr/lib/firewalld/services/ 和 /etc/firewalld/services/ 目录下。用 FirewallD 配置你的防火墙作为一个例子，假设你正在运行一个 web 服务器，SSH 服务端口为 7022 ，以及邮件服务，你可以利用 FirewallD 这样配置你的服务器:首先设置默认区为 dmz。# firewall-cmd --set-default-zone=dmz # firewall-cmd --get-default-zone dmz 为 dmz 区添加持久性的 HTTP 和 HTTPS 规则：# firewall-cmd --zone=dmz --add-service=http -…

CentOS 上的 FirewallD 简明指南
type: item
date: 2017-01-07T16:56:00+08:00
description: FirewallD 是 iptables 的前端控制器，用于实现持久的网络流量规则。它提供命令行和图形界面，在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比，使用 FirewallD 有两个主要区别：FirewallD 使用区域和服务而不是链式规则。它动态管理规则集，允许更新规则而不破坏现有会话和连接。FirewallD 是 iptables 的一个封装，可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD，但建议使用 FirewallD 时仅使用 FirewallD 命令。本指南将向您介绍 FirewallD 的区域和服务的概念，以及一些基本的配置步骤。安装与管理 FirewallDCentOS 7 和 Fedora 20+ 已经包含了 FirewallD，但是默认没有激活。可以像其它的 systemd 单元那样控制它。1、 启动服务，并在系统引导时启动该服务：sudo systemctl start firewalld sudo systemctl enable firewalld 要停止并禁用：sudo systemctl stop firewalld sudo systemctl disable firewalld 2、 检查防火墙状态。输出应该是 running 或者 not running。sudo firewall-cmd --state 3、 要查看 FirewallD 守护进程的状态：sudo systemctl status firewalld 示例输出firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago Main PID: 11954 (firewalld) CGroup: /system.slice/firewalld.service └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 4、 重新加载 FirewallD 配置：sudo firewall-cmd --reload 配置 FirewallDFirewallD 使用 XML 进行配置。除非是非常特殊的配置，你不必处理它们，而应该使用 firewall-cmd。配置文件位于两个目录中：/usr/lib/FirewallD 下保存默认配置，如默认区域和公用服务。 避免修改它们，因为每次 firewall 软件包更新时都会覆盖这些文件。/etc/firewalld 下保存系统配置文件。 这些文件将覆盖默认配置。配置集FirewallD 使用两个配置集：“运行时”和“持久”。 在系统重新启动或重新启动 FirewallD 时，不会保留运行时的配置更改，而对持久配置集的更改不会应用于正在运行的系统。默认情况下，firewall-cmd 命令适用于运行时配置，但使用 --permanent 标志将保存到持久配置中。要添加和激活持久性规则，你可以使用两种方法之一。1、 将规则同时添加到持久规则集和运行时规则集中。 sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=http 2、 将规则添加到持久规则集中并重新加载 FirewallD。 sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --reload reload 命令会删除所有运行时配置并应用永久配置。因为 firewalld 动态管理规则集，所以它不会破坏现有的连接和会话。防火墙的区域“区域”是针对给定位置或场景（例如家庭、公共、受信任等）可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型，而拒绝其他任何流量。 首次启用 FirewallD 后，public 将是默认区域。区域也可以用于不同的网络接口。例如，要分离内部网络和互联网的接口，你可以在 internal 区域上允许 DHCP，但在external 区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任…

为你的 Linux 服务器加把锁
type: item
date: 2016-12-25T22:49:15+08:00
description: 无论你使用的哪种 Linux 发行版，你都需要使用基于 iptables 的防火墙来保护它。啊哈！你已经设置好了你的第一台 Linux 服务器并且已经准备发车了！是么？嗯，慢着。默认情况下，你的 Linux 系统对攻击者来说并非是足够安全的。当然，它比 Windows XP 要安全多了，但这说明不了什么。想要使你的 Linux 系统真正稳固，你需要按照 Linode 的 服务器安全指南 来操作。总的来说，首先你必须关闭那些你不需要的服务。当然要这样做的话，你先要知道你正在使用哪些网络服务。你可以使用 shell 命令来找到是哪些服务：netstat -tulpn netstat 将会告诉你正在运行哪些服务和这些服务正在使用的端口是什么。如果你不需要其中的某项服务或端口，你就应该关闭它。例如，除非你正在运行一个网站，否则你是不需要运行中的 Apache 或 Nginx 服务器，也不需要开启 80 或 8080 端口。总之一句话，不确定的话，就关了它先。在一个最简单的，没有做过任何额外更改的 Linux 服务器上，你会看到 SSH、 RPC 和 NTPdate 运行在它们的公开端口上。不要添加像 telnet 这样陈旧而不安全的 shell 程序，否则老司机就会在你不经意间将你的 Linux 小跑车开走了。也许，在上世纪 80 年代的时候你喜欢把 telnet 当作你 SunOS 机器上的备份登录方式，但是那早已成为了过去。就 SSH 来说，你应该使用 RSA 密钥 和 Fail2Ban 来加固。除非你需要 RPC，否则就卸载它——如果你不知道需要不需要它的话，那就是不需要。关于如何关门已经说的够多了；让我们来聊聊利用 iptables 来锁定进来的流量吧。当你启动 Linux 服务器的时候它是没有任何规则的。这就意味着所有的流量都是被允许的。这当然是不好的。因此，你需要及时的设置你的防火墙。Iptables 是一种用来给 netfilter 设置网络策略规则的 shell 工具，netfilter 是Linux 系统下的默认防火墙，它利用一组规则来允许或禁止流量。当有人尝试连接上你的系统——有些人无时不刻地尝试这么干，而且从不气馁——iptables 就会检查这些请求是否与规则列表相匹配。如果没有匹配到任何的规则，它就会采取默认操作。这个默认操作应该是将连接“Drop”掉，即禁掉这些意图闯入者。而且这不会让他们知道这些网络探测行为发生了什么。（你也可以将链接“Reject”掉，但是这会同时让他们知道你有一个正在运行的 Linux 防火墙。就目前而言，让陌生人能获取到我们系统的信息越少越好。至少，我是这么认为的。）现在，你可以用 iptables 来设置你的防火墙了。我已经这么做了。就像以前，我骑着自行车去六英里外上班，并且两边都是上坡。而现在，我开车去。这其实比喻的是我使用 Fedora 发行版的 FirewallD 和 Debian 系发行版的 UFW（Uncomplicated Firewall）。这些都是易用的 iptables 的 shell 前端。你可以在以下的 Linode 指南中找到适合的使用方式：FirewallD 和 UFW。从本质上来说设置这些规则就是在你的服务器上放置“非请勿入”的告示牌。用起来吧。但是也别太兴奋地把所有的链接都关闭了。例如：sudo ufw default deny incoming 看起来是个好主意哦。别忘了，它禁止了所有链接，包括你自己哦！很好，它就是这么干的。这意味着它也同样禁止了 SSH 的登录。也就是说你再也不能登录你那新服务器了。哇哦！不过，如果你犯了错，错误的将更多的链接都禁止了。你看，老司机也同样被你挡在门外了。或者，更准确得说，这不是你或你的服务器所遇到的个别现象。当然，你也不是每天受到 3 亿多次攻击尝试的美国国家安全局（NSA）。但是攻击脚本根本不在乎你是谁。它只是不断的检查寻找网络中存在已知漏洞的服务器。在平常的一天中我自己的小服务器就会受到数以百计的攻击。都这样了，你还在等什么呢？去吧，加固你的网络服务吧。安装 FirewallD 或者 UFW 来加固你的服务器吧。你会愿意去做的。关于作者：Steven J. Vaughan-Nichols 是一位资深的 IT 专栏作家，他的作品出现在许多行业领袖媒体上，包括 ZDNet.com、PC Magazine、InfoWorld、ComputerWorld、Linux Today 和 eWEEK 等。Steven 在 IT 专业方面的见解犀利，虽然他的观点和云计算方面的认识，并不代表 Linode 观点，但是我们仍然非常感谢他的贡献。你可以在 Twitter 上关注他 （@sjvn）。via: https://mediu…

Linux有问必答：在CentOS或RHEL防火墙上开启端口
type: item
date: 2014-11-18T06:34:43+08:00
description: 问题：我在CentOS系统上运行一台网页或文件服务器，打算远程访问服务器。因此，我需要更改防火墙规则以允许访问系统上的某个TCP端口。那么，有什么好方法在CentOS或RHEL系统的防火墙上开启TCP/UDP端口？如果希望在服务器上提供服务，诸如CentOS或RHEL的企业级Linux发行版包含内置的强大防火墙，它们默认的防火墙规则十分严格。因此，如果你安装了任何定制的服务（比如web服务器、NFS和Samba），那么它们的流量很有可能被防火墙规则阻塞。所以需要在防火墙上开启必要的端口以允许流量通过。在CentOS/RHEL 6或更早的版本上，iptables服务允许用户与netfilter内核模块交互来在用户空间中配置防火墙规则。然而，从CentOS/RHEL 7开始，一个叫做firewalld新用户空间接口被引入以取代iptables服务。使用这个命令察看当前的防火墙规则：$ sudo iptables -L 现在，让我们看看如何在CentOS/RHEL上修改防火墙来开启一个端口。在CentOS/RHEL 7上开启端口启动CentOS/RHEL 7后，防火墙规则设置由firewalld服务进程默认管理。一个叫做firewall-cmd的命令行客户端支持和这个守护进程通信以永久修改防火墙规则。使用这些命令来永久打开一个新端口（如TCP/80）。$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent $ sudo firewall-cmd --reload 如果不使用“--permanent”标记，把么防火墙规则在重启后会失效。在CentOS/RHEL 6上开启端口在CentOS/RHEL 6甚至更早版本系统上，iptables服务负责维护防火墙规则。使用iptables的第一条命令可以通过防火墙开启一个新TCP/UDP端口。为了永久保存修改过的规则，还需要第二条命令。$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT $ sudo service iptables save 另一种方法是通过一个名为system-config-firewall-tui的命令行用户接口（TUI）的防火墙客户端。$ sudo system-config-firewall-tui 选择位于中间的“Customize”按钮，按下ENTER键即可。如果想要为任何已知的服务（如web服务器）修改防火墙，只需勾选该服务，然后关闭工具。如果想要开启任意一个TCP/UDP端口，选择“Forward”按钮，然后进入下一个界面。选择“Add”按钮添加一条新规则。指定一个端口（如80）或者端口范围（如3000-3030）和协议（如tcp或udp）。最后，保存修改过的配置，关闭工具。这样，防火墙就永久保存了。via: http://ask.xmodulo.com/open-port-firewall-centos-rhel.html译者：KayGuoWhu 校对：wxy本文由 LCTT 原创翻译，Linux中国 荣誉推出