firewall简介

linux firewall有source、网卡、zone等概念,source就是源ip;网卡就是流量源网卡;zone就是规则的集合,分为家庭网络、工作网络、公共网络,不同的zone对应的rule不一样,默认zone是public;在zone内除了源ip、端口外还有较复杂的rich-rule复杂规则,比如可以限制只有某网段访问某接口;firewall在系统中体现为firewalld服务、firewall-cmd是firewall的命令入口,就像systemctl就是systemd的命令入口。

firewalld vs iptables

根据细说firewalld和iptables

firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。

firewalld跟iptables比起来至少有两大好处:

1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;

2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能

根据firewalld防火墙简单理解总结(一)

firewalld和iptables service 之间最本质的不同是:

1、FirewallD 使用区域和服务而不是链式规则。 2、它动态管理规则集,允许更新规则而不破坏现有会话和连接。 iptables在
/etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在
/usr/lib/firewalld/(不建议修改,后续升级会覆盖该区域) 和 /etc/firewalld/
(这些文件将会覆盖默认配置)中的各种XML文件里.
iptables每一个单独更改意味着清除所有旧有的规则并/etc/sysconfig/iptables里读取所有新的规则,然而使用
firewalld却不会再创建任何新的规 则;仅仅运行规则中的不同之处。

因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。

优先级

  • 源ip
  • 网卡
  • zone

优先级从上往下依次降低,源ip需要配置在zone中,同一个源ip只能分配在一个zone中,配置在多个zone,后边的配置会覆盖前边的配置;如果未给网卡绑定zone,则使用默认zone,否则使用指定zone;zone中有开放端口、ip、rich rules。比如一个源ip请求来了,匹配到源ip,则使用匹配到源ip的zone;否则,使用网卡绑定的zone,如果未绑定zone,则使用默认zone;

firewall-cmd命令介绍

firewall-cmd [选项] [子命令] [参数]
  • 选项:如 --permanent、–zone 等,用于指定作用范围或模式。
  • 子命令:如 --add-port、–list-all 等,表示具体的操作。
  • 参数:如端口号、协议、服务名等,用于指定子命令的具体参数。

firewall-cmd是firewalld服务的命令入口。

查看防火墙状态

  • 查看firewalld服务状态,systemctl status firewalld
  • 查看防火墙状态,firewall-cmd --state

源ip

源ip,也就是通常意义上的白名单,比如,信任某网段或者某ip,

  • firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24 (允许某网段)
  • firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32 (允许来源某ip)

网卡

  • 设置默认zone,firewall-cmd --set-default-zone=public
  • 查看网卡,firewall-cmd --get-zone-of-interface=en7s0
  • 给指定网卡设置zone, firewall-cmd --zone=public --add-interface=en7s0
  • 针对网卡更改zone,firewall-cmd --zone=public --change-interface=en7s0
  • 针对网卡删除zone, firewall-cmd --zone=public --remove-interface=en7s0
  • 查看系统所有网卡所在的zone,firewall-cmd --get-active-zones

开放端口

  • 查看开放的端口 firewall-cmd --list-ports
  • 开放端口,开放某端口是普通的规则
    • 新增开放端口
      • sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
    • 删除,必须要与新增规则一样

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

rich rules

  • 查看开放的rich rule firewall-cmd --rich-rules
  • 查看开放的所有 firewall-cmd --list-all
  • rich rules,限制某网段可访问某端口是复杂规则
    • 限制只有某网段可访问某端口
      • firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port protocol="tcp" port="8080" accept'
    • 删除,必须要与新增规则一样
      • firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port protocol="tcp" port="8080" accept'

除了以上,还可以对某个service放行,也就是systemd中的service,比如httpd、sshd

重新加载配置

只要更改了配置,都要重新加载方能生效

  • firewall-cmd --reload
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐