firewalld 是一种动态防火墙管理解决方案。Centos 7 默认使用 firewalld。firewalld 是对 iptables 的一个封装,可以让你更容易地管理 iptables 规则。它并不是 iptables 的替代品,虽然 iptables 命令仍可用于 firewalld,但建议 firewalld 时仅使用 firewalld 命令。 与 iptables 相比,我觉得 firewalld 更好用

用一个例子说明下。比如要开放 8080 端口。

  • firewalld
firewalld-cmd  --zone=public --add-port=5000/tcp --permanent
firewalld-cmd --reload
  • iptables
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
service iptables save
systemctl iptables restart

相比之下 firewalld 更容易看懂,且步骤更少,又不用重启服务。 另外 firewalld 还有分区的概念容易整理一系列的端口。Centos 7 默认防火墙使用 Firewalld 还觉得挺好的。

安装 firewalld

Centos 7 会默认安装 firewalld,若卸载了要重新安装

yum -y install firewalld

基本管理

  • 启动 systemctl start firewalld
  • 设置开机启动 systemctl enable firewalld
  • 重启 systemctl restart firewalld
  • 关闭开机启动 systemctl disable firewalld
  • 查看状态 systemctl status firewalld 或者 firewall-cmd --state

区域(zones)

Firewalld 有区域(zones)的概念。这有什么用呢?比如说,公共 WIFI 是不可信任的网络类型,而家庭网络几乎是完全可信任。如果这两者都采取相同的安全策略,就会有很多策略是冗余的。根据网络的类型,将防火墙分成不同的区域有它存在的价值。而在firewalld中会,会预先为你设定了很多个区域。 用下面的语句可以看到所有的区域

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

其中从不信任到信任的排序是:

  • drop(丢弃):最低级别的信任。任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
  • block(限制):和上面相似,任何接收的网络连接都被 IPv4 的 icmp-host-prohibited (ping 不到) 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝
  • public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
  • external(外部):特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
  • dmz(非军事区用):于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
  • work(工作):用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
  • home(家庭):用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
  • internal(内部):用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
  • trusted(信任):可接受所有的网络连接

区域命令

获取默认区域

sudo firewall-cmd --get-default-zone
public

查看所有区域的信息

sudo firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: dmz
target: default
...

获取与 public 区域相关的信息

sudo firewall-cmd --list-all

sudo firewall-cmd --zone=public --list-all
  public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

当前活动区域

sudo firewall-cmd --get-active-zones

默认是没有活动区域的,主要原因是没有为该区域设置网络接口,设置了网络接口后就可以了

为区域设置网络接口

sudo firewall-cmd  --change-interface=eth0 --zone=public --permanent
sudo firewall-cmd --reload

其中 firewall-cmd --reload 可以在不用重启的情况重新加载配置 而 --permanent 的意思是持久化的配置, 机器重启后规则依然能生效 至于如果看网络接口,可以用 ip addr 命令去看,其中lo是本地回环接口,其余的不是。 提示:要注意切换接口的区域,如果网络接口切入到一个drop区域什么的,会马上连 ssh 都连不上,谨慎切换 然后再

sudo firewall-cmd --get-active-zones
    public
interfaces: eth0

设置默认区域

如果你所有接口都用单区域去处理,那么只需选择默认区域就可以,而设置默认区域的命令是

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

通过网络接口找区域

firewall-cmd --get-zone-of-interface=eth0
public

通过区域找接口

firewall-cmd --zone=public --list-interfaces
    eth0

区域的服务

获取能添加的所有服务

服务挺多的

sudo 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 ...

对应的文件在 /usr/lib/firewalld/services/ 的文件夹中,每个服务都有一个 xml 文件来定义。比如 :https.xml 的文件

    <?xml version="1.0" encoding="utf-8"?>
<service>
<short>Secure WWW (HTTPS)</short>
<description>HTTPS is a modified HTTP used to serve Web pages when security is important. Examples are sites that require logins like stores or web mail. This option is not required for viewing pages locally or developing Web pages. You need the httpd package installed for this option to be useful.</description>
<port protocol="tcp" port="443"/>
</service>

添加服务

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

查看区域服务

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

移除服务

sudo firewall-cmd  --permanent --zone=public --remove-service=http
sudo firewall-cmd --reload

区域的端口

添加端口

sudo firewall-cmd --zone=public  --permanent --add-port=80/tcp
sudo firewall-cmd --reload

端口后的协议可以是tcp或者udp

添一段端口

sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp

查看端口

sudo firewall-cmd --zone=public --list-port
80/tcp

移除端口

sudo firewall-cmd --permanent  --zone=public --remove-port=80/tcp
sudo firewall-cmd --reload

最后

我常用的命令就是以上几种、另外 firewall 也有端口转发、白名单、黑名单的功能,只是这些功能都有更好的替代品了,nginx 之类的。如果你想了解更多你可以看 firewall的官方文档_firewalld)

Linux 中使用 firewalld的更多相关文章

  1. linux中的虚拟化网络模型及各种模型实现

    第一种隔离模型: Guest1和Guest2都为虚拟机. 首先要了解在linux中的虚拟机的网卡都包含前半段和后半段,前半段在虚拟机上,后半段在宿主机上,这里以centos6为例,上图 eth0为Gu ...

  2. Linux中redis安装配置及使用详解

    Linux中redis安装配置及使用详解 一. Redis基本知识 1.Redis 的数据类型 字符串 , 列表 (lists) , 集合 (sets) , 有序集合 (sorts sets) , 哈 ...

  3. Linux中安装python3

    [centos7中安装python3]http://blog.csdn.net/wjqwinn/article/details/75633714 (一)安装python3前的准备工作1.修改文件中第一 ...

  4. centos7 firewall-cmd 理解多区域配置中的 firewalld 防火墙

    原文:https://www.linuxidc.com/Linux/2017-11/148795.htm 现在的新闻里充斥着服务器被攻击和数据失窃事件.对于一个阅读过安全公告博客的人来说,通过访问错误 ...

  5. 转:Linux中tomcat服务成功发布但局域网浏览器无法访问

    转自:http://blog.csdn.net/mooncom/article/details/53168143 昨天,我在搭建Linux中服务器环境时,碰见一个问题,这里和大家分享一下. 问题描述: ...

  6. Linux中iptables学习

    防火墙:是一种位于内部网络与外部网络之间安全的防护系统,依照特定的规则,允许或是限制传输的数据通过.iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfi ...

  7. 全新linux中通过编译方式安装nginx

    先去官网下载linux.tar.gz包 http://nginx.org/en/download.html   传到linxu中 解压tar包 在软件包nginx-1.15.9目录下对NGINX进行配 ...

  8. linux中安装gitlab和cicd(断网版)

    1:先介绍一下怎么查找所需要的依赖包 #yum install rpmname--downloadonly --downloaddir=/rpmpath 例如:yum install gitlab-r ...

  9. Linux中Tomcat和Jboss的安装和部署

    目录 JDK环境 yum源安装JDK 源码包安装JDK Tomcat的安装 yum源安装 目录结构: 源码包安装 目录结构: 目录中主要的文件: JBoss的安装 目录结构: Tomcat是Apach ...

随机推荐

  1. 微软跨平台ORM框架之EFCore

    EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级.EFCore目前已经更新到2.x. 接下来用CodeFirst的方式来使用EFCore. 1.创建控制台程序 2.引入EFC ...

  2. 发布core到linux

    1.安装虚拟机之后,发现可以ping通但是telnet提示失败 CentOS 7.0默认使用的是firewall作为防火墙(我们需要把防火墙关掉) 查看防火墙状态 firewall-cmd --sta ...

  3. java中this和super关键字的使用

    这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...

  4. Android开发:Android虚拟机启动错误Can't find 'Linux version ' string in kernel image file

    Android启动出错,虚拟机报错信息如下: Starting emulator for AVD 'test' emulator: ERROR: Can't find 'Linux version ' ...

  5. 微信小程序自动化测试实践

    由于腾讯系QQ.微信等都是基于腾讯自研X5内核,不是google原生webview(其实就是进行了二次定制).实质上也是混合应用的一种,现在很多app产品也开始流行采用X5内核作为其内嵌web浏览服务 ...

  6. Oracle synonym 同义词

    Oracle synonym 同义词 1.Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象. 2. ...

  7. Netty(三) 什么是 TCP 拆、粘包?如何解决?

    前言 记得前段时间我们生产上的一个网关出现了故障. 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信. 但这个请求并不是常见的 HTTP ,而是利用 Netty 自定义的协议. 有个 ...

  8. MacPro4,1升级到MacPro5,1

    收了一台老MacPro,2009年版本,准确型号是"MacPro4,1".机器很好,美中不足的是,太老了.硬件还好说,很多部件都可以单独采购升级,特别是有了淘宝,几乎只要有的东西, ...

  9. [linux]CentOS 7 下安装 RabbitMQ

    简介 RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件.RabbitMQ 服务器是用 Erlang 语言编写的,所以下面要安装 RabbitMQ 需要安装 Erlang. 一. ...

  10. 前端笔记之JavaScript(六)让人头疼的正则表达式

    一.正则表达式 1.1正则概述和体验 正则表达式是被用来匹配字符串中的字符组合的模式,常用来做表单验证.在JavaScript中,正则表达式也是对象,是一种引用类型. 案例:正确输入一个电话号码,01 ...