firewalld防火墙的基本使用
firewalld和iptables的区别:
在Centos7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
firewalld跟iptables比起来优点:
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
缺点:
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。
而iptables里默认是每个服务是允许,需要拒绝的才去限制。
区别可如图大概看出:
注意:
iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。
iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。
换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。
虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。
firewall的一个重要的概念:区域管理
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。
例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。
该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。有如下几种不同的初始化区域:
阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
注:FirewallD的默认区域是public,也是常用的一个区域。
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,
他们都保存在“/usr/lib /firewalld/zones/”目录下。
配置方法
firewalld的配置方法主要有三种:
firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具。
而对于linux来说大家应该更习惯使用命令行方式(firewall-cmd)的操作。
1、安装firewalld
yum install firewalld firewall-config
3.配置firewalld-cmd
将接口添加到区域,默认接口都在public
firewall-cmd --zone=public --add-interface=eth0
让内网网卡eth1不受防火墙限制
firewall-cmd --zone=trusted --add-interface=eth1
永久生效再加上 --permanent 然后reload防火墙
设置默认接口区域
firewall-cmd --set-default-zone=public
立即生效无需重启
查看所有打开的端口:
firewall-cmd --zone=dmz --list-ports
firewall-cmd --zone=public --add-port=80/tcp --permanent #(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=5060-5059/udp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=80/tcp
firewall-cmd --zone=public --remove-port=80/tcp --permanent
禁ping
firewall-cmd --zone=external --add-icmp-block=echo-request --permanent
管理服务
添加 smtp 服务至 work zone
firewall-cmd --zone=work --add-service=smtp
移除 work zone 中的 smtp 服务
firewall-cmd --zone=work --remove-service=smtp
配置 external zone 中的 ip 地址伪装
查看
firewall-cmd --zone=external --query-masquerade
打开伪装
firewall-cmd --zone=external --add-masquerade
关闭伪装
firewall-cmd --zone=external --remove-masquerade
配置 public zone 的端口转发
要打开端口转发,则需要先
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
IP 封禁
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' reject"
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.101" port port="22" protocol="tcp" accept"
#该IP只能访问22端口
(reject 拒绝 accept 允许 删除该规则把 --add-rich-rule 改成 --remove-rich-rule即可)
补充:
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了