暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从iptables到firewalld:Linux防火墙的进化之路

110

系统防火墙原理-Firewalld

1. 静态防火墙与动态防火墙

1.1 静态防火墙

  • 描述: 需要修改规则并进行所有规则的重新加载。例如:iptables service
  • 示例: 在CentOS中,如果我们使用iptables
    服务来配置防火墙规则,当添加或修改规则后,需要使用以下命令重新加载所有规则:
    systemctl restart iptables

1.2 动态防火墙

  • 描述: 规则的更改不需要对整个防火墙规则列表进行重新加载,只需将变更部分保存并更新到运行中的iptables即可。例如:firewalld
  • 示例: 在CentOS中,使用firewalld
    进行配置,当添加或修改规则时,只需使用以下命令更新运行中的规则:
    firewall-cmd --reload

2. firewalld简介

firewalld
提供了一个daemon和service,还有命令行和图形界面配置工具,它仅仅是替代了iptables service
部分,其底层还是使用iptables
作为防火墙规则管理入口。真正利用规则进行数据包过滤是由内核中的netfilter子系统负责。

2.1 firewalld结构图

  • system-config-firewall: 图形界面配置工具。
  • firewall-config: 图形界面配置工具。
  • firewall-cmd: 命令行配置工具。
  • iptables service: 基于iptables
    的服务。
  • firewalld daemon & service: 基于firewalld
    的服务。

3. Firewalld区域(Zone)

Firewalld
将网卡对应到不同的区域(zone),默认共有9个:

  • block
  • dmz
  • drop
  • external
  • home
  • internal
  • public
  • trusted
  • work

3.1 区域差异

不同区域之间的差异在于其对待数据包的默认行为不同。firewalld默认每个服务是拒绝的,需要手动设置才能放行。

4. Firewalld区域默认策略规则

以下是不同区域及其默认策略规则的详细解释:

区域 (Zone)默认策略规则
trusted (信任)可接受所有的网络连接,允许所有的数据包进入。
home (家庭)用于家庭网络,基本信任网络内的其他主机,允许进入的服务有ssh、mdns、ipp-client、amba-client和dhcpv6-client。
internal (内部)用于内部网络,等同于home区域。
work (工作)用于工作区,基本信任网络内的其他主机,允许进入的服务有ssh、ipp-client和dhcpv6-client。
public (公共)在公共区域内使用,不信任网络内的其他主机,只能接受经过选择的连接,允许进入的服务有ssh、dhcpv6-client。
external (外部)为路由器启用了伪装功能的外部区,不信任网络内的其他主机,只允许ssh服务的连接。
dmz (非军事区)此区域内可公开访问,可以有限地进入内部网络,允许进入的服务有ssh。
block (限制)任何接收的网络连接都被拒绝。
drop (丢弃)任何接收的网络数据包都被丢弃,仅允许发出的网络连接。

5. Firewalld基本命令

以下是一些常用的firewalld
命令及其功能:

命令功能
systemctl start firewalld
启动防火墙
systemctl enable firewalld
开机自启动防火墙
systemctl stop firewalld
关闭防火墙
systemctl disable firewalld
开机自动关闭防火墙
firewall-cmd --state
查看防火墙状态
firewall-cmd --get-active-zones
查看防火墙管理的设备
firewall-cmd --get-default-zone
查看防火墙生效的区域
firewall-cmd --get-zones
查看防火墙所有的区域
firewall-cmd --zone=public --list-all
列出关于public区域的服务设置
firewall-cmd --get-services
列出可使用的服务
firewall-cmd --set-default-zone=trusted
修改默认区域为trusted
firewall-cmd --list-all-zones
列出所有的区域
firewall-cmd --set-default-zone=dmz
设置防火墙的区域为dmz

6. Firewalld查看状态

可以使用以下两种方法之一来查看firewalld
状态:

firewall-cmd --state
systemctl status firewalld

7. Firewalld管理命令

以下是一些firewalld
的管理命令示例:

  • 关闭firewalld:
    systemctl stop firewalld.service

  • 启动firewalld:
    systemctl start firewalld.service

  • 把firewalld加入到系统服务:
    systemctl enable firewalld.service

  • 从系统服务移除firewalld:
    systemctl disable firewalld.service

8. Firewalld区域(zone)

列出所有支持的zone和查看当前的默认zone:

firewall-cmd --get-zones
firewall-cmd --get-default-zone

9. 修改安全策略

以下是一些常见的firewall-cmd命令用于修改防火墙策略:

  • 临时添加服务:
    firewall-cmd --add-service=https

  • 永久删除服务:
    firewall-cmd --remove-service=https --permanent

  • 临时添加端口:
    firewall-cmd --add-port=80/tcp

  • 删除接口:
    firewall-cmd --remove-interface=eth0

  • 永久更改接口区域:
    firewall-cmd --permanent --change-interface=eth1 --zone=trusted

  • 临时拒绝特定主机的所有网络连接:
    firewall-cmd --add-source=172.25.254.100 --zone=block

  • 永久移除限制:
    firewall-cmd --remove-source=172.25.254.100 --zone=block --permanent

  • 中断连接,重启防火墙策略:
    firewall-cmd --complete-reload

  • 不中断连接,重启防火墙策略:
    firewall-cmd --reload

  • 查看设置的规则:
    firewall-cmd --direct --get-all-rules

10. Firewalld配置文件手动修改

防火墙配置文件也可以手动修改,修改后需重启防火墙或reload才能生效:

firewall-cmd --reload

配置文件示例:

<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>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <port protocol="tcp" port="12222"/>
</zone>

    非常感谢您读到这里!如果您觉得这篇文章对您有帮助,请不要忘记关注公众号。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。

    点击页面右上角的“关注”按钮,不错过任何精彩内容!

    扫码获取联系方式



文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论