防火墙是一种防火墙管理解决方案,可用于许多 Linux 发行版,它充当 Linux 内核提供的 iptables 数据包筛选系统的前端。在本指南中,将介绍如何为服务器设置防火墙,并向你展示使用管理工具管理防火墙的基础知识

注:你可能正在使用比本指南发布时可用的较新版本的防火墙,或者你的服务器设置与本指南中使用的示例服务器略有不同。因此,本指南中解释的一些命令的行为可能因你的特定配置而异。

防火墙中的基本概念

在我们开始介绍如何实际使用实用程序来管理防火墙配置之前,我们应该熟悉该工具介绍的一些基本概念。firewall-cmd

区域

守护进程使用称为"区域"的实体管理规则组。区域基本上是一组规则,根据计算机连接到的网络的信任级别,规定应允许哪些流量。网络接口被分配一个区域,以指示防火墙应允许的行为。

无论你所处的网络环境有多动态,熟悉每个预定义区域仍然很有用。从最不信任  最受信任的顺序,中的预定义区域是

  • drop(丢弃):最低信任级别。所有传入连接在没有回复的情况下丢弃,并且只能进行传出连接。
  • block(限制):与上述类似,但传入请求不是简单地丢弃连接,而是使用 或 消息被拒绝。icmp-host-prohibited icmp6-adm-prohibited
  • public(公共):表示公共、不受信任的网络。您不信任其他计算机,但可能会根据情况允许选定的传入连接。
  • external(外部):使用防火墙作为网关时的外部网络。它配置为 NAT 伪装,以便你的内部网络保持私有但可访问。
  • internal(内部):外部区域的另一侧,用于网关的内部部分。计算机是相当值得信赖的,一些额外的服务是可用的。
  • dmz: 用于位于 DMZ 中的计算机(无法访问网络其余部分的隔离计算机)。仅允许某些传入连接。
  • work(工作):用于工作机器。信任网络中的大多数计算机。可能允许使用更多服务。
  • home(家):家庭环境。它通常意味着你信任大多数其他计算机,并且将接受更多服务。
  • trusted(受信任) :信任网络中的所有计算机。最开放的可用选项,应谨慎使用。

要使用防火墙,我们可以创建规则并更改区域的属性,然后将网络接口分配给最合适的区域。

永久性规则

在防火墙中,规则可以指定为永久规则或即时规则。如果添加或修改了规则,默认情况下,将修改当前运行的防火墙的行为。在下次启动时,将恢复旧规则。

大多数操作都可以采取该标志来指示非临时防火墙应作为目标。这将影响启动时重新加载的规则集。这种分离意味着您可以在活动防火墙实例中测试规则,然后在出现问题时重新加载。还可以使用标志来构建一整组规则,这些规则将在发出重载命令时同时应用。firewall-cmd --permanent --permanent

安装并启用防火墙启动

firewalld默认情况下安装在某些 Linux 发行版上,包括 openEuler/CentOS 7 的许多映像。但是,您可能有必要自行安装防火墙:

sudo yum install firewalldsudo systemctl enable firewalldsudo reboot

验证防火墙服务是否正在运行:

sudo firewall-cmd --state

修改防火墙规则

在开始修改之前,我们应该熟悉守护进程提供的默认环境和规则。

浏览默认值

通过键入以下类型,我们可以看到当前选择哪个区域为默认值:

firewall-cmd --get-default-zone

由于我们没有给出任何指定区域的命令,并且我们的接口都没有配置为绑定到另一个区域,因此该区域也将是唯一的"活动"区域(控制我们接口的流量的区域)。我们可以通过键入以下类型来验证这一点:

firewall-cmd --get-active-zones输出:interfaces: eth0 eth1

我们可以看到,我们的示例服务器有两个网络接口由防火墙控制。它们目前都按照为公共区域定义的规则进行管理。

我们怎么知道哪些规则与公共区域相关?我们可以通过键入以下类型打印出默认区域的配置:

sudo firewall-cmd --list-all输出:public (default, active)target: defaulticmp-block-inversion: nointerfaces: eth0 eth1sources:services: ssh dhcpv6-clientports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:

我们可以从输出中判断此区域是默认的和活跃的,并且和接口与此区域关联,我们也可以看到,此区域允许与 DHCP 客户端(用于 IP 地址分配)和 SSH(用于远程管理)关联的正常操作。

为你的接口选择区域

除非已配置网络接口,否则在启动防火墙时,每个接口都将置于默认区域。

更改接口区域

可以在会话期间将接口与参数结合使用,在会话期间在区域之间转换接口。与修改防火墙的所有命令一样,您需要使用 。

例如,可以通过键入以下内容将接口转换为"主"区域:eth0

sudo firewall-cmd --zone=home --change-interface=eth0输出:success

可以通过再次请求活动区域来验证这是否成功:

firewall-cmd --get-active-zones输出:homeinterfaces: eth0publicinterfaces: eth1

调整默认区域

如果所有接口由单个区域处理,则只需选择最佳默认区域,然后将它用于配置可能更容易。

可以使用参数更改默认区域。这将立即更改已返回默认到新区域的任何接口:--set-default-zone=

sudo firewall-cmd --set-default-zone=home输出:success

为应用程序设置规则

向区域添加服务

最简单的方法是将所需的服务或端口添加到您使用的区域。同样,您可以使用以下选项获取可用服务的列表:--get-services

firewall-cmd --get-services输出:RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync 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

例如,如果我们运行一个为常规 HTTP 流量服务的 Web 服务器,我们可以通过键入以下方式,为此会话的"公共"区域中的接口允许此流量:

sudo firewall-cmd --zone=public --add-service=http

可以通过使用 或 操作验证操作是否成功:--zone= --list-all --list-services

sudo firewall-cmd --zone=public --list-services输出:dhcpv6-client http ssh

测试到所有内容都正常工作后,如果想要修改永久防火墙规则,以便重新启动后服务仍然可用。我们可以通过键入:

sudo firewall-cmd --zone=public --permanent --add-service=http输出:success

可以通过向操作添加标志来验证这是否成功。需要用于任何操作:--permanent--list-servicessudo``--permanent

sudo firewall-cmd --zone=public --permanent --list-services输出:dhcpv6-client http ssh

现在你的"公共"区域现在将允许端口 80 上的 HTTP Web 流量。如果你的 Web 服务器配置为使用 SSL/TLS,还需要添加该服务。我们可以通过键入以下类型将其添加到当前会话和永久规则集中:https

sudo firewall-cmd --zone=public --add-service=httpssudo firewall-cmd --zone=public --permanent --add-service=https

创建属于自己的区域

虽然预定义区域对于大多数用户来说可能已经足够了,但定义自己的区域可以更描述其功能会很有帮助。

例如,你可能希望为 Web 服务器创建一个区域,称为"公共网站"。但是,你可能希望为专用网络上提供 DNS 服务配置其他区域。为此,需要建一个名为"私有 DNS"的区域。

添加区域时,必须将其添加到永久防火墙配置中。然后可以重新加载以将配置引入正在运行的会话中。例如,我们可以通过键入以下两个区域来创建上面讨论的两个区域:

sudo firewall-cmd --permanent --new-zone=publicwebsudo firewall-cmd --permanent --new-zone=privateDNS

可以通过键入以下类型来验证这些配置是否存在于永久配置中:

sudo firewall-cmd --permanent --get-zones输出:block dmz drop external home internal privateDNS public publicweb trusted work

如之前所述,这些在防火墙的当前实例中尚不可用:

firewall-cmd --get-zones输出:block dmz drop external home internal public trusted work

需要重新加载防火墙以将这些新区域引入活动配置:

sudo firewall-cmd --reload
firewall-cmd --get-zones
输出:block dmz drop external home internal privateDNS public publicweb trusted work

现在,你可以开始为区域分配适当的服务和端口。通过调整活动实例,然后在测试后将这些更改传输到永久配置。例如,对于"公共 web"区域,如果你需要添加 SSH、HTTP 和 HTTPS 服务:

sudo firewall-cmd --zone=publicweb --add-service=ssh
sudo firewall-cmd --zone=publicweb --add-service=http
sudo firewall-cmd --zone=publicweb --add-service=https
sudo firewall-cmd --zone=publicweb --list-all
输出:
publicwebtarget: defaulticmp-block-inversion: nointerfaces:sources:services: ssh http httpsports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:

同样,我们可以将 DNS 服务添加到我们的"私有 DNS"区域:

sudo firewall-cmd --zone=privateDNS --add-service=dns
sudo firewall-cmd --zone=privateDNS --list-all
输出:
privateDNSinterfaces:sources:services: dnsports:masquerade: noforward-ports:icmp-blocks:rich rules:

然后,我们可以将接口更改为这些新区域以测试它们:

sudo firewall-cmd --zone=publicweb --change-interface=eth0
sudo firewall-cmd --zone=privateDNS --change-interface=eth1

来测试运行配置。调试完成后(即符合自己的要求)需要向永久配置添加相同的规则。可以通过使用标志重新应用规则来做到这一点:--permanent

sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
sudo firewall-cmd --zone=publicweb --permanent --add-service=http
sudo firewall-cmd --zone=publicweb --permanent --add-service=https
sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns

永久应用这些规则后,重启防火墙服务:

sudo systemctl restart network
sudo systemctl reload firewalld

验证是否分配了正确的区域:

firewall-cmd --get-active-zones
输出:
privateDNSinterfaces: eth1
publicwebinterfaces: eth0

并验证两个区域都提供相应的服务:

sudo firewall-cmd --zone=publicweb --list-services
输出:http https ssh
sudo firewall-cmd --zone=privateDNS --list-services
输出:dns

这是就成功地设置了自己的区域,如果要使这些区域之一成为其他接口的默认区域之一,请记住使用这个参数配置该行为:--set-default-zone=

sudo firewall-cmd --set-default-zone=publicweb

总结

防火墙服务允许你配置可维护的规则和规则集,这些规则和规则集可以考虑你的网络环境。你可以通过使用区域在不同防火墙策略之间无缝切换,并允许管理员将端口管理抽象为更友好的服务。

点击这里→了解更多精彩内容

5招详解linux之openEuler /centos7防火墙基本使用指南相关推荐

  1. linux中which命令详解,Linux下which命令使用详解(转)

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. locate 配合数据库查看文件位置. f ...

  2. 网络安全nmap扫描端口命令详解linux网络探测

    简介: nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting).它是网络管理员必用的 ...

  3. 详解linux下auto工具制作Makefile源码包(制作篇)

    2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一.     概述 为了更好的制作configure ...

  4. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  5. linux 服务器拦截http请求,详解Linux屏蔽浏览器上http请求警报的方法

    众所周知,在Linux系统中浏览器的页面上是不允许出现http请求的,如果出现了http请求就会发生错误,并且Linux系统会向用户发出警报.下面,U大侠小编就给大家详解Linux屏蔽浏览器上http ...

  6. 详解Linux运维工程师打怪升级篇

    详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...

  7. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  8. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  9. linux rm命令参数及用法详解---linux删除文件或目录命令

    http://www.linuxso.com/command/rm.html linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个 ...

最新文章

  1. EF Code First执行SQL语句及存储过程
  2. HTML5 叠加布局
  3. Apache与Tomcat 区别联系​
  4. 成功解决graphviz\backend.py, line 162, in pipe raise ExecutableNotFound(args) graphviz.backend.Executab
  5. Deeplearning入门篇(2)
  6. nodejs中Buffer的创建和转换
  7. mysql去除空格的函数_MySQL字符串尾部空格匹配的问题
  8. php无限极菜单,无限极菜单的实现
  9. STM32F1笔记(七)WWDG窗口看门狗
  10. C++的对象数组、对象指针是什么?【案例解析】
  11. php发卡平台源码免费,php源码 免费开源的云尚发卡V1.5.7 个人发卡平台源码 免费源码分享...
  12. 构建基于流程的多维度企业管理体系
  13. 输出排列 递归、回溯法
  14. KnockoutJS 3.X API 第七章 其他技术(3) 延迟更新
  15. opencv的lena项目,用android studio 3.6可以运行——drawable如何引入lena图片
  16. d3.drag使用指南
  17. 金洪林:红邦创衣止于至善_品牌-生活时尚_品牌_YOKA时尚网
  18. 移动硬盘参数错误要怎么办啊
  19. 下厨房某词条下的所有图片爬取
  20. 从一维cutting问题看列生成算法

热门文章

  1. linux usb无法识别,求助:USB无法识别
  2. 腾讯python面试题_面试题 | 腾讯数据分析面试题分享
  3. 如何复制服务器数据库文件大小,如何复制服务器数据库文件夹
  4. 通过常用监控命令快速发现性能问题
  5. neo4jcypher基本语句
  6. django的form常用字段和参数
  7. MYSQL 自定义排序
  8. 转载:jsonp详解
  9. 十六进制报文用wireshark打开
  10. 暴力 Codeforces Round #183 (Div. 2) A. Pythagorean Theorem II