Contents
  1. 1. 常用命令
    1. 1.1. iptables?
    2. 1.2. 启动firewall
    3. 1.3. 基本查看命令
    4. 1.4. 常用修改命令
  2. 2. bash-completion
  • 参考&致谢
  • 从 rhel7开始,系统推荐我们使用 firewall 来替代原先的 iptables,firewall 也是默认的 rhel 的防火墙配置。
    网上已经有很多文章介绍 firewall 和 iptables 的不同,这里就不再重复啰嗦。个人觉得firewall 有几个地方要更好一些:

    1. firewall 预设了9个 zone,每个 zone 可以有个性化的规则,这样当你的服务器/个人电脑 处于不同的环境下时,你就可以很方便的一键切换配置了。
    2. firewall 的配置项发生修改时,可以进行热生效;而 iptables 只能通过重启服务来实现。
    3. firewall 从命令行或从配置内容上,更加人性化。例如可以配置服务内容 ssh,http,https 等,这些就相当于开启了22端口、80端口和443端口的接入权限。
    4. 最重要的,firewall 是 linux 默认的防火墙配置工具了,我们有什么理由不跟上潮流呢?

    常用命令

    这里介绍几个常用的命令,如果想要更深入地研究firewall,请移步文章末尾的参考和致谢部分,里面有更详细地介绍。

    iptables?

    开篇已经提到了,其实 iptables 和 firewall 是两个工具,我们已经知道了 firewall 有几个默认的区域,从命令行我们也能看到,同时在文件夹/etc/firewalld/zones文件夹里面可以看到所有的区域。当然我们自定义的区域也会在该目录下产生一个 xml 文件,里面就记录了这个区域的所有配置信息,包括绑定的网卡、允许的服务、端口等信息。
    以下是一个典型的区域配置文件内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
    <short>Public</short>
    <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
    <interface name="eth0"/>
    <service name="ssh"/>
    <service name="dhcpv6-client"/>
    <service name="http"/>
    <service name="https"/>
    </zone>

    我们看到在/etc/firewalld目录中,除了有zones文件夹外,还有一个services文件夹。同zones 一样,services 定义了一些常见的 service 的端口、协议等内容,你可以自行查看,包括 ssh, http, https, mysql 等一些我们常用的熟悉的服务,都已经被预置进去了。

    如果你激活了 firewall,你依旧可以通过输入iptables -L命令来查看 iptables 的配置,你会发现,通过 firewall 配置的规则,在 iptables 中也一样出现了。

    启动firewall

    firewall 已经是 rhel/CentOS7中默认安装好的,所以我们只需要把他启动就好了。注意,在 rhel7的内核中,系统操作的命令已经变成了systemctl start/stop/restart xxx,当然,大家在rhel6内核中习惯用的 service xxx start/stop/restart依然是可以用的。但是建议大家还是尽量熟悉一下新系统的命令吧。

    1
    $ systemctl start firewalld

    基本查看命令

    1
    2
    3
    4
    5
    $ firewall-cmd --state                                              # 查看firewall状态
    $ firewall-cmd --get-default-zone # 查看默认的 zone
    $ firewall-cmd --set-default-zone=dmz # 修改默认的 zone 为 dmz
    $ firewall-cmd --get-active-zone # 查看目前激活的 zone
    $ firewall-cmd --zone=public --list-all # 查看指定 zone 的配置信息

    注:

    • default-zone指的是我们在输入命令时,可以省去--zone=xxx这个参数后,默认查看/修改的 zone 信息。默认的 default zone 是public,我们可以通过set-default-zone命令来修改默认的 zone
    • active-zone 指的是当前系统的网卡绑定在的zone,后面我们将介绍如果修改网卡所在 zone 实现防火墙配置的快速切换。

    常用修改命令

    1
    2
    3
    4
    5
    6
    $ firewall-cmd --zone=dmz --change-interface=eth0                   # 修改 dmz 区域的网卡为 eth0
    $ firewall-cmd --zone=public --add-service=http # 新增 public 区域允许 http 服务接入(立即生效)
    $ firewall-cmd --zone=internal --remove-service=https --permanent # 移除 internal 区域的 https 服务接入权限(永久生效)
    $ firewall-cmd --zone=dmz --add-port=8080/tcp --permanent # 在 dmz 区域新增8080端口允许 tcp 协议接入(永久生效)
    $ firewall-cmd --zone=dmz --remove-port=8080/tcp --permanent # 在 dmz 区域删除8080端口的接入权限(永久生效)
    $ firewall-cmd --reload # 热重载当前的配置方案(使permanent的配置生效)

    注:

    • permanent参数表示永久生效,但是加了该参数后,你需要reload才能使命令生效;如果不加该参数,则命令会立即生效,但是当 firewall 服务被完全重启时,该配置会失效。
    • chage-interface修改绑定网卡时,不需要加入参数 permanent;但是其他命令加入permanent参数可以让设置永久生效

    bash-completion

    我们发现其实 firewall 的相关命令参数都非常长,其实 linux7的内核已经提供了命令行参数补全的工具,只不过我们一般都是安装的最小版本的 rhel/CentOS,所以我们需要额外安装才能生效

    1
    yum install bash-completion

    记得要退出 bash 并重新进入才能生效呦 之后我们就可以通过 tab 来自动补全相关命令参数了。

    参考&致谢

    Contents
    1. 1. 常用命令
      1. 1.1. iptables?
      2. 1.2. 启动firewall
      3. 1.3. 基本查看命令
      4. 1.4. 常用修改命令
    2. 2. bash-completion
  • 参考&致谢