Last Updated on

前言

centos7 上默认防火墙已经从centos6的iptables改成了firewalld,防火墙作为非常重要的工具,其能实现很多常用的功能。下面就详细列举一些firewalld防火墙的常用命令,用好防火墙也是用好centos7的基础。

正文

1. 基础命令

firewalld 默认是作为系统服务,使用systemctl命令可进行状态管理:

# 开启服务
$ systemctl start firewalld

# 关闭服务
$ systemctl stop firewalld

# 重启服务
$ systemctl restart firewalld

# 设为开机启动
$ systemctl enable firewalld

# 关闭开机启动
$ systemctl disable firewalld

# 查看服务状态
$ systemctl status firewalld

2. 区域概念

firewalld 防火墙的命令为 firewall-cmd,防火墙将网络分为几个区域,可以将网卡指定添加到这些区域中,就能适用这些区域的规则,所有的配置规则都需要指定一个区域,共分为9个区域:

  • drop 丢弃区域,使用此区域,任何进入的数据包都直接丢弃。
  • block 阻塞区域,阻塞区域会拒绝进入的网络连接,返回 icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接
  • dmz 隔离区域,如果想要只允许给部分服务能被外部访问,可以在 DMZ 区域中定义。它只通过被选中连接,即 ssh。
  • external 外部区域,这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即 ssh,而其它的连接将被丢弃或者不被接受。
  • work 工作区域,在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许 ssh,ipp-client 和 dhcpv6-client。
  • Home 家庭区域,这个区域专门用于家庭环境。它同样只允许被选中的连接,即 ssh,ipp-client,mdns,samba-client 和 dhcpv6-client。
  • internal 内部区域,这个区域和工作区域(Work)类似,只能通过被选中的连接,和 home 区域一样
  • trusted 信任区域,信任区域允许所有网络通信通过。
  • public 公共区域,只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。

虽然firewall有这9个区域,但是只有活跃的区域才有用,默认活跃的区域为Public 区域。若区域要活跃,必须为该区域设置一个网卡或者source源。当然这些区域是可以通过命令进行设置的,配置区域的常用命令如下:

# 列出所有区域信息
$ firewall-cmd --list-all-zones

# 设置默认区域,如示例设置默认区域为信任区域
$ firewall-cmd --set-default-zone=trusted

# 显示默认区域
$ firewall-cmd --get-default-zone

# 给指定区域添加一个网卡,示例给公共区域添加一个eth0的网卡
# 如果不指定zone区域,则默认操作默认区域,一个网卡只能绑定到一个区域
$ firewall-cmd --zone=public --add-interface=eth0

# 删除区域中绑定的网卡,示例删除公共区域eth0的网卡
$ firewall-cmd --zone=public --remove-interface=eth0

# 获取活跃的区域。
$ firewall-cmd --get-active

好了。以上为常用的关于区域的命令,那么下面我们来记录说明以下这些区域的信息所表示的意思:

# 列出默认区域的所有信息
$ firewall-cmd --list-all
# 以下为输出信息:
public (default, active)               # 默认并活跃的区域名
  interfaces: eno16777736              # 绑定的网卡名
  sources:                             # 访问入站的源ip地址范围,即满足此ip范围的ip访问则会被归为此区域,相同的source设置跟网卡一样,不能同时配置在多个区域中
  services: dhcpv6-client ssh          # 允许通过这个防火墙的服务
  ports: 8080/tcp                      # 允许通过这个防火墙的端口
  masquerade: no                       # 是否允许IP转发,伪装。
  forward-ports:                       # 列出转发的端口
  icmp-blocks:                         # 阻塞的icmp流量的黑名单
  rich rules:                          # 优先处理的高级规则配置

3. 常用规则配置命令

上面介绍了区域的概念和信息,一般我们直接使用默认的public区域即可,所以下面我们就在此默认区域设置我们平时最常用的规则:

以下所有命令都不显示指定zone区域,则是操作默认的public区域。

# --permanent 为永久修改,不加则为临时,重启服务后消失。
# 所有下面的操作,如果要生效,就需要执行以下重载的命令:
$ firewall-cmd --reload


# 永久开放端口,示例 8080/tcp端口
$ firewall-cmd --add-port=8080/tcp --permanent

# 永久关闭端口,示例 8080/udp端口
$ firewall-cmd --remove-port=8080/udp --permanent

# 永久开机一段端口,示例 开启10000到20000的所有tcp的端口。
$ firewall-cmd --add-port=10000-20000/tcp --permanent


# 列出所有防火墙中定义的服务
$ firewall-cmd --get-services

# 永久开放服务的访问
$ firewall-cmd --add-service=http --permanent

# 永久删除服务的访问
$ firewall-cmd --remove-service=http --permanent



# 防火墙端口转发
# 示例将80端口转发到8080端口
$ firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 

# 示例将80端口转发到192.168.0.2的8080端口
$ firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.2:toport=8080


# 添加源ip
# 示例可以直接添加ip
$ firewall-cmd --add-source=192.168.0.2

# 示例添加ip网段
$ firewall-cmd --add-source=192.168.0.0/24


# 开启ip转发功能
$ firewall-cmd --add-masquerade

# 关闭ip转发功能
$ firewall-cmd --remove-masquerade

ok,以上就是firewalld防火墙的一些最常用的命令,其中service是需要在防火墙的配置文件中定义的,定义后才能添加service,而实际service的配置也是一些端口或规则的集合而已。

firewall的配置文件路径为:/etc/firewalld/ ,其中包括所有zones的配置。

系统内置的services的配置路径为: /usr/lib/firewalld/ 目录的services下。

结束

ok,以上就简单的介绍了firewall防火墙的常用命令和一些概念,已经足够平时的普通使用了,至于别的日后有机会会再补充更新。

有任何问题,欢迎留言