firewalld 常见命令
    image.png systemctl
    systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
    systemctl mask firewalld # 下次需要锁定该服务时执行
    systemctl start firewalld.service #启动防火墙
    systemctl stop firewalld.service #停止防火墙
    systemctl reloadt firewalld.service #重载配置
    systemctl restart firewalld.service #重启服务
    systemctl status firewalld.service #显示服务的状态
    systemctl enable firewalld.service #在开机时启用服务
    systemctl disable firewalld.service #在开机时禁用服务
    systemctl is-enabled firewalld.service #查看服务是否开机启动
    systemctl list-unit-files|grep enabled #查看已启动的服务列表
    systemctl —failed #查看启动失败的服务列表
    image.png firewall-cmd
    firewall-cmd —state #查看防火墙状态
    firewall-cmd —reload #更新防火墙规则
    firewall-cmd —state #查看防火墙状态
    firewall-cmd —reload #重载防火墙规则
    firewall-cmd —list-ports #查看所有打开的端口
    firewall-cmd —list-services #查看所有允许的服务
    firewall-cmd —get-services #获取所有支持的服务
    image.png #区域相关

    firewall-cmd —list-all-zones #查看所有区域信息
    firewall-cmd —get-active-zones #查看活动区域信息
    firewall-cmd —set-default-zone=public #设置public为默认区域
    firewall-cmd —get-default-zone #查看默认区域信息
    firewall-cmd —zone=public —add-interface=eth0 #将接口eth0加入区域public

    image.png #接口相关
    firewall-cmd —zone=public —remove-interface=eth0 #从区域public中删除接口eth0
    firewall-cmd —zone=default —change-interface=eth0 #修改接口eth0所属区域为default
    firewall-cmd —get-zone-of-interface=eth0 #查看接口eth0所属区域

    firewall-cmd —zone=public —list-interfaces 查看指定区域的所有接口
    eth0

    image.png #端口控制
    firewall-cmd —add-port=80/tcp —permanent #永久添加80端口例外(全局)
    firewall-cmd —remove-port=80/tcp —permanent #永久删除80端口例外(全局)
    firewall-cmd —add-port=65001-65010/tcp —permanent #永久增加65001-65010例外(全局)
    firewall-cmd —zone=public —add-port=80/tcp —permanent #永久添加80端口例外(区域public)
    firewall-cmd —zone=public —remove-port=80/tcp —permanent #永久删除80端口例外(区域public)
    firewall-cmd —zone=public —add-port=65001-65010/tcp —permanent #永久增加65001-65010例外(区域public)
    firewall-cmd —query-port=8080/tcp # 查询端口是否开放
    firewall-cmd —permanent —add-port=80/tcp # 开放80端口
    firewall-cmd —permanent —remove-port=8080/tcp # 移除端口
    firewall-cmd —reload #重启防火墙(修改配置后要重启防火墙)

    1. 管理规则
      # firewall-cmd —panic-on # 丢弃
      # firewall-cmd —panic-off # 取消丢弃
      # firewall-cmd —query-panic # 查看丢弃状态
      # firewall-cmd —reload # 更新规则,不重启服务
      # firewall-cmd —complete-reload # 更新规则,重启服务
      添加某接口至某信任等级,譬如添加 eth0 至 public,永久修改
      # firewall-cmd —zone=public —add-interface=eth0 —permanent
      设置 public 为默认的信任级别
      # firewall-cmd —set-default-zone=public
      a. 管理端口
      列出 dmz 级别的被允许的进入端口
      # firewall-cmd —zone=dmz —list-ports
      允许 tcp 端口 8080 至 dmz 级别
      # firewall-cmd —zone=dmz —add-port=8080/tcp
      允许某范围的 udp 端口至 public 级别,并永久生效
      # firewall-cmd —zone=public —add-port=5060-5059/udp —permanent
      b. 网卡接口
      列出 public zone 所有网卡
      # firewall-cmd —zone=public —list-interfaces
      将 eth0 添加至 public zone,永久
      # firewall-cmd —zone=public —permanent —add-interface=eth0
      eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
      # firewall-cmd —zone=work —permanent —change-interface=eth0
      删除 public zone 中的 eth0,永久
      # firewall-cmd —zone=public —permanent —remove-interface=eth0
      c. 管理服务
      添加 smtp 服务至 work zone
      # firewall-cmd —zone=work —add-service=smtp
      移除 work zone 中的 smtp 服务
      # firewall-cmd —zone=work —remove-service=smtp
      image.png d. 配置 external zone 中的 ip 地址伪装
      查看
      # firewall-cmd —zone=external —query-masquerade
      打开伪装
      # firewall-cmd —zone=external —add-masquerade
      关闭伪装
      # firewall-cmd —zone=external —remove-masquerade
      image.png e. 配置 public zone 的端口转发
      端口转发是指传统的目标地址映射,实现外网访问内网资源
      流量转发命令格式为:
      firewalld-cmd —permanent —zone=<区域> —add-forward-port= port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

    要打开端口转发,则需要先
    # firewall-cmd —zone=public —add-masquerade
    然后转发 tcp 22 端口至 3753
    # firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toport=3753
    转发 22 端口数据至另一个 ip 的相同端口上
    # firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
    转发 22 端口数据至另一 ip 的 2055 端口上
    # firewall-cmd —zone=public —add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
    image.png 1 服务器内端口转发.
    在服务器A上,将发送到A服务器的5423端口的数据转发到A服务器的80端口.
    服务器A上执行一条指令:
    firewall-cmd —permanent —add-forward-port=port=5423:proto=tcp:toport=80 ,很简单。

    注意如果不加zone信息,默认是default-zone 内配置这条规则(通过firewall-cmd —get-default-zone查看).

    image.png 2 服务器之间端口转发.—必须要开启ip伪装
    在服务器A上,将发送到A服务器(192.168.37.3)的8080端口的数据转发到B(192.168.37.2)服务器的8080端口.

    在服务器A上执行:
    firewall-cmd —zone=trusted —add-masquerade —permanent
    (如果不指定zone则默认default-zone),开启IP伪装,不开启的话,服务器间端口转发不会成功.
    firewall-cmd —permanent —add-forward-port=port=8080:proto=tcp:toport=8080:toaddr=192.168.37.2

    测试: 浏览器访问A服务器的8080端口,能正常访问网页

    f. 配置 public zone 的 icmp
    查看所有支持的 icmp 类型
    # firewall-cmd —get-icmptypes
    destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
    列出
    # firewall-cmd —zone=public —list-icmp-blocks
    添加 echo-request 屏蔽
    # firewall-cmd —zone=public —add-icmp-block=echo-request [—timeout=seconds]
    移除 echo-reply 屏蔽
    # firewall-cmd —zone=public —remove-icmp-block=echo-reply
    g. IP 封禁
    # firewall-cmd —permanent —add-rich-rule=”rule family=’ipv4’ source address=’222.222.222.222’ reject”
    当然,我们仍然可以通过 ipset 来封禁 ip
    封禁 ip
    # firewall-cmd —permanent —zone=public —new-ipset=blacklist —type=hash:ip
    # firewall-cmd —permanent —zone=public —ipset=blacklist —add-entry=222.222.222.222
    封禁网段
    # firewall-cmd —permanent —zone=public —new-ipset=blacklist —type=hash:net
    # firewall-cmd —permanent —zone=public —ipset=blacklist —add-entry=222.222.222.0/24
    导入 ipset 的 blacklist 规则
    # firewall-cmd —permanent —zone=public —new-ipset-from-file=/path/blacklist.xml
    如果已经存 blacklist,则需要先删除
    # firewall-cmd —get-ipsets
    blacklist
    # firewall-cmd —permanent —zone=public —delete-ipset=blacklist
    然后封禁 blacklist
    # firewall-cmd —permanent —zone=public —add-rich-rule=’rule source ipset=blacklist drop’
    重新载入以生效
    # firewall-cmd —reload
    查看 blacklist
    # firewall-cmd —ipset=blacklist —get-entries