• Linux操作系统:Firewalld


    Linux防火墙是通过netfilter来处理的,它是内核级别的框架。iptables被作为netfilter的用户态抽象层,iptables将包通过一系列的规则进行检查,如果包与特定的IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是被通过、拒绝或丢弃。firewalld是最新的netfilter用户态抽象层。firewalld可以通过定义的源IP和/或网络接口将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于iptables进行语法简化。firewalld通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用samba而不是使用UDP端口137和138和TCP端口139和445。它进一步简化语法,消除了iptables中对语句顺序的依赖。

    🌹一、firewalld的基本使用

    🌱1、iptables的功能总结:

    1、常用的两张表:filter、nat,filter用于过滤数据包,nat用于路由转发功能
    2、常用的两条链:INPUT、OUTPUT
    3、常见的三个行为:ACCEPT、DROP、REJECT
    4、限制流量的三个特征:端口、协议、IP,对应的五元组: -d -s --dport --sport -p
    5、端口转发:本机端口、远程端口
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🌱2、firewalld的基本命令

    启动: systemctl start firewa11d
    查看状态:systemctl status firewal1d
    停止:systemct1 disable firewa11d
    禁用:systemct1 stop firewa1ld
    重启:systemct1 restart firewalld
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    🌹二、区域

    🌱1、各区域信息

    drop:丢弃
    任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。
    
    b1ock:阻止
    任何传入的网络连接被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接。
    
    public:公共(默认)
    用于公共场所。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
    
    external :外部网络
    用于特别为路由器启用伪装的外部网络。您不相信网络上的其他计算机不会损害您的计算机。仅接受选定的传入连接。
    
    dmz:管制区
    适用于非军事区中的计算机,这些计算机可公开访问,并且对内部网络的访问权限有限。仅接受选定的传入连接。
    
    work:工作
    用于工作区域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
    
    home:家庭
    适用于家庭领域。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
    
    internal:内部
    用于内部网络。您最常信任网络上的其他计算机,以免损害您的计算机。仅接受选定的传入连接。
    
    trusted:受信任
    接受所有网络连接。
    可以将这些区域中的一个指定为默认区域。将接口连接添加到NetworkManager时,会将它们分配给默i认区域。安装时,firewa1ld中的认区域将设置为公共区域。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    🌱2、配置firewalld-cmd

    运行firewall-cmd --list-all查看基础配置信息:
    在这里插入图片描述
    public (default,active):表示 public 区域是默认区域(当接口启动时会自动默认),并且它是活动的。
    interfaces: ens 33 列出了这个区域上关联的接口。
    sources :列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式XXX.XXX.XXX.XXX/XX
    services: dhcpv6-client ssh列出了允许通过这个防火墙的服务。可以通过运行 firewall-cmd --get-services得到一个防火墙预定义服务的详细列表。
    ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。masquerade: no 表示这个区域是否允许IР 伪装。如果允许,它将允许IP转发,它可以让你的计算机作为一个路由器。
    forward-ports:列出转发的端口。
    icmp-blocks:阻塞的 icmp流量的黑名单。rich rules:在一个区域中优先处理的高级配置。
    default:是目标区域,它决定了与该区域[匹配而没有由上面设置中显式处理的包的动作。

    运行以下命令理解firewall规则用法:

    查看所有打开的端口:firewall-cmd --zone=public --list-port
    更新防火墙规则:firewall-cmd --reload
    列出所有区域: firewall-cmd --get-zones
    查看区域信息:firewall-cmd --get-active-zones
    设定默认区域,立即生效:firewall-cmd --set-default-zone=public
    查看指定接口所属区域: firewall-cmd --get-zone-of-interface=ens33
    查看所有规则: firewall-cmd --list-a11
    通过以下两种手段可以进行永久修改:
    firewall-cmd --permanent <some modification>
    firewall-cmd --reload
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    🌹三、常用使用场景

    拒绝所有包:firewall-cmd --panic-on
    取消拒绝状态: firewall-cmd --panic-off
    查看是否拒绝: firewall-cmd --query-panic
    
    暂时开放 ftp 服务:firewall-cmd --add-service=ftp
    永久开放 ftp 服务:firewall-cmd --add-service=ftp --permanent
    查询服务的启用状态:firewall-cmd --query-service ftp
    开放mysql端口:firewall-cmd --add-service=mysq1
    阻止http端口:firewall-cmd --remove-service=http
    查看开放的服务:firewall-cmd --list-services
    查看对应规则库文件:cd /usr/lib/firewalld/services
    
    开放通过tcp访问3306:firewall-cmd --add-port=3306/tcp
    阻止通过tcp访问3306: firewall-cmd --remove-port=80/tcp
    永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp permanent
    查看80端口:firewall-cmd --zone=public --query-port=80/tcp
    查看所有开放端口: firewall-cmd --zone=public --list-ports
    删除80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
    开放postgresql服务:firewall-cmd --add-service=postgresql --permanent
    
    允许http服务通过1分钟: firewall-cmd --zone=public --add-service=http --timeout=1m,这个timeout 选项是一个以秒(s)、分(m)或小时(h)为单位的时间值。
    
    重载防火墙:firewall-cmd --reload
    检查防火墙状态:firewall-cmd --state
    让设定生效:systemctl restart firewalld
    检查设定是否生效: iptab1es -L -n | grep 21或 firewall-cmd --list-al1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    🌹四、富规则

    添加指定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 protoco1="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'
    与iptables一致:富规则中的动作可以设置为: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=sshaccept '
    
    直接模式:
    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-al1-rules
    删除直接模式下的规则: firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s192.168.112.1 -j ACCEPT
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    🌹五、端口转发

    端口转发可以将指定地址访问指定的端口时,将流星转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。

    如果配置好端口转发之后不能用,可以检查下面两个问题:

    • 比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
    • 其次检查是否允许伪装IP,没允许的话要开启伪装IP
    #将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.9180端口
    firewall-cmd --add-forward-port=port=8888:proto=tcp:toaddr=101.37.65.91:toport=80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 当我们想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
    • 端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。

    1、检查IP tables处于关闭状态,firewalld处于开启状态
    [root@numberone ~]# systemctl status iptables
    [root@numberone ~]# systemctl status firewalld
    在这里插入图片描述
    2、[root@numberone ~]# firewall-cmd --list-all
    现在活动区域是public
    在这里插入图片描述
    物理机去ping该虚拟机的IP地址,可以ping得通
    在这里插入图片描述
    [root@numberone ~]# /opt/lampp/lampp start开启服务。
    物理机去访问192.168.88.131,默认情况下80端口是不能访问的。因为防火墙没有没有开启80端口。
    在这里插入图片描述
    3、设置默认区域:[root@numberone ~]# firewall-cmd --set-default-zone=trusted。之后就发现可以访问80端口了。这是一个全开放的区域
    在这里插入图片描述
    在这里插入图片描述
    4、设置默认区域为drop:[root@numberone ~]# firewall-cmd --set-default-zone=drop
    在这里插入图片描述
    发现不仅ping不通,也访问不了80端口
    在这里插入图片描述
    在这里插入图片描述
    5、设置默认区域为block:[root@numberone ~]# firewall-cmd --set-default-zone=block
    在这里插入图片描述
    物理机ping服务器,是服务器发信息回来了,告诉物理机不能访问自己。
    在这里插入图片描述
    6、切换回public区域
    在这里插入图片描述
    添加80端口:[root@numberone ~]# firewall-cmd --add-port=80/tcp
    在这里插入图片描述
    物理机可以访问网页了:
    在这里插入图片描述

    再删掉80端口:[root@numberone ~]# firewall-cmd --remove-port=80/tcp
    在这里插入图片描述
    再添加http服务:[root@numberone ~]# firewall-cmd --add-service=http
    在这里插入图片描述
    物理机可以也访问网页了:在这里插入图片描述
    IP tables也可以看到相关信息:[root@numberone ~]# iptables -nL|grep 80
    在这里插入图片描述
    7、不知道可以添加什么服务时,可以查看:[root@numberone ~]# firewall-cmd --get-service
    在这里插入图片描述
    8、重启防火墙,发现之前配置的东西全部重置了:[root@numberone ~]# firewall-cmd --get-service
    在这里插入图片描述
    9、想永久配置东西,就得在命令后面添加个小单词,是永久的意思:[root@numberone ~]# firewall-cmd --add-service=http --permanent
    之后要重新加载配置文件:[root@numberone ~]# firewall-cmd --reload
    在这里插入图片描述
    10、查看现在开启的端口:[root@numberone ~]# firewall-cmd --list-port
    查看现在活跃的区域:[root@numberone ~]# firewall-cmd --get-active-zone
    查看有哪些区域:[root@numberone ~]# firewall-cmd --get-zones
    在这里插入图片描述
    11、拒绝所有包:[root@numberone ~]# firewall-cmd --panic-on
    Xshell已经连接不上了:在这里插入图片描述
    回虚拟机取消拒绝状态,Xshell才自动重新连接:firewall-cmd --panic-off
    在这里插入图片描述

  • 相关阅读:
    传感器的基本特性
    【服务器搭建】教程一:没钱买服务器怎么玩 进来看
    力扣-----链表
    169.多数元素
    maven入门
    区块链应用:椭圆曲线数字签名算法ECDSA
    《最新出炉》系列入门篇-Python+Playwright自动化测试-43-分页测试
    基于Android studio英语背单词系统java
    Push和Pull两种类型的消费者
    技术学习群-第二周内容共享
  • 原文地址:https://blog.csdn.net/m0_51456787/article/details/126222525