目录
Firewalld是Linux系统上的一种动态防火墙管理工具,它是Red Hat公司开发的,并在许多现代的Linux发行版中被采用。相比较于传统的静态防火墙规则,Firewalld使用动态的方式来管理防火墙规则,可以更加灵活地适应不同的网络环境和应用场景。
Firewalld的主要功能是管理网络连接和防止未经授权的访问。它可以对入站和出站流量进行管理,可以控制端口、服务和网络协议的访问权限,也支持NAT(网络地址转换)和端口转发等高级功能。
Firewalld采用了D-Bus接口来与网络管理器和其他应用程序进行通信,这使得它可以更加灵活地适应不同的网络环境和应用场景。例如,当一个新的网络接口被添加到系统中时,Firewalld可以接收到相关的通知,并自动更新防火墙规则以适应新的网络环境。
Firewalld使用底层工具iptables、ip6tables等来控制网络流量。这些工具是Linux系统中的标准防火墙工具,可以对网络流量进行过滤、转发和修改等操作。Firewalld在这些工具的基础上提供了更加易于使用的命令行界面和图形用户界面,可以方便地设置和管理防火墙规则。
1、firewalld的基本使用
启动:systemct1 start firewalld
查看状态:systemct1 status firewa11d
停止:systemct1 disable firewalld
禁用:systemct1 stop firewalld
重启: systemct1 restart firewa11d
iptables的功能总结
常用的两张表:filter、nat、filter用于过滤数据包,nat用于路由转发功能
常用的两条链:INPUT、OUTPUT
常见的三个行为:ACCEPT、DROP、REJECT
限制流量的三个特征:端口、协议、IP,对应的五元组: -d -s--dport --sport -p
端口转发:本机端口、远程端口
2、分组
drop:丢弃
任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。
block:阻止
任何传入的网络连接被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接。
public:公共(默认>
用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
externa7 :外部网络
用于特别为路由器启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
dmz:管制区
适用于非军事区中的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接。
work :工作
用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
home:家庭
适用于家庭领域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
internal:内部
用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
trusted :受信任
接受所有网络连接。
可以将这些区域中的一个指定为默认区域。将接口连接添加到NetworkManager时,会将它们分配给默认区域。安装时,firewalld中的影认区域将设置为公共区域。
3、配置firewalld-cmd
运行firewall-cmd --list-all查看基础配置信息:
[root@localhost ~]# firewall-md --list-all
public
target : default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports : 3128/tcp 5432/tcpprotocols:
masquerade: no
forward-ports :
source-ports :
icmp-blocks :
rich rules:
public (default,active):表示 public区域是默认区域(当接口启动时会自动黑认〉,并且它是活动的。
interfaces : ens33列出了这个区域上关联的接口。
sources :列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式xxx.xXX.XX×.xXx/xx。
services: dhcpv6-client ssh 列出了允许通过这个防火墙的服务。可以通过运行firewal7-cmd --get-services得到一个防火墙预定义服务的详细列表。
ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。
masquerade: no表示这个区域是否允许 IP伪装。如果允许,它将允许工P转发,它可以让你的计算机作为一个路由器。
forward-ports:列出转发的端口。
icmp-blocks:阻塞的icmp流量的黑名单。
rich rules:在一个区域中优先处理的高级配置。
default:是目标区域,它决定了与该区域匹配而没有由上面设置中显式处理的包的动作。
运行以下命令理解firewall规则用法:
查看所有打开的端口: firewall-cmd --zone=public --list-port
更新防火墙规则: firewa11-cmd --reload
列出所有区域: firewa11-cmd --get-zones
查看区域信息:firewall-cmd --get-active-zones
设定默认区域,立即生效:firewa11-cmd --set-default-zone=public
查看指定接口所属区域: firewa11-cmd --get-zone-of-interface=ens33
查看所有规则: firewall-cmd --list-all
通过以下两种手段可以进行永久修改:
firewa11-cmd --permanent <some modification>
firewa11-cmd --reload
4、常见使用场景
拒绝所有包:firewa11-cmd --panic-on
取消拒绝状态:firewa11-cmd --panic-off
查看是否拒绝: firewa11-cmd --query-panic
暂时开放ftp服务:firewall-cmd --add-service=ftp
永久开放ftp 服务:firewall-cmd --add-service=ftp --permanent
查询服务的启用状态:firewall-cmd --query-service ftp
开放mysq1端口:firewa11-cmd --add-service=mysq1
阻止http端口:firewa11-cmd --remove-service=http
查看开放的服务:firewa1 1-cmd --list-services
查看对应规则库文件: cd /usr/lib/firewa7ld/services
开放通过tcp访问3306: firewa11-cmd --add-port=3306/tcp
阻止通过tcp访问3306: firewa1 1-cmd --remove-port=80tcp
永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
查看80端口: firewa11-cmd --zone=public --query-port=80/tcp
查看所有开放端口: firewa11-cmd --zone=public --list-ports
删除80端口: firewall-cmd --zone=public --remove-port=80/tcp --permanent
开放postgresq1服务: firewall-cmd --add-service=postgresq1 --permanent
允许http服务通过1分钟: firewall-cmd --zone=public --add-service=http --timeout=1m,这个 timeout选项是一个以秒(s)、分(m)或小时(h)为单位的时间值。
重载防火墙: firewa11-cmd --reload
检查防火墙状态: firewa11-cmd --state
让设定生效:systemct1 restart firewa1ld
检查设定是否生效: iptables -L -n l grep 21或 firewa11-cmd --list-a11
5、富规则
添加指定ip访问特定端口规则:
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.112.1 port port=80 protocol=tcp accept'
删除指定某个ip访问特定端口规则:
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.112.1" port protocol="tcp" port="80" accept"
禁止某个ip访问:
iptables -I INPUT -s 138.138.138.138 -j DROP
firewall -cmd --add-rich-rule='rule family=ipv4 source address="192.168.112.1" drop'
允许Ping:
firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="icmp" source address="192.168.112.1" accept'
与iptab1es一致:富规则中的动作可以设置为: accept,drop,reject (注意是小写)
端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
接受192.168.112.0网段所有IP访问sSH服务:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.112.0/24" service name=ssh accept'
直接模式:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.112.1 -j ACCEPT
注意:INPUT后面的数字1代表规则的优先级,数字越小,优先级越高,建议优先级从1开始。
查看直接模式下的规则: firewall-cmd --direct --get-all-rules
删除直接模式下的规则: firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -5192.168.112.1 -j ACCEPT
6、端口转发
端口转发可以将指定地址访问指定的端口时,将流星转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。 如果配置好端口转发之后不能用,可以检查下面两个问题:
-
比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
-
其次检查是否允许伪装IP,没允许的话要开启伪装lP
#将8888端口的流里转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8888:proto=tcp:toport=80
#开启伪装IP
firewall-cmd --query-masquerade #检查是否允许伪装IP
firewall-cmd --add-masquerade #允许防火墙伪装IP
firewall-cmd --remove-masquerade #禁止防火墙伪装IP
#将8888端口的流量转发至101.37.65.91的80端口
firewal-cmd --add-forward-port=port=8888: proto=tcp:toaddr=101.37.65.91:toport=80
-
当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
-
端口转发还可以做流星分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。