当前位置:   article > 正文

Linux中的firewalld防火墙_firewalld public.xml

firewalld public.xml

Firewalld 概述

  • 动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙, 用以支持网络 “ zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4 和 IPv6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
  • 系统提供了图像化的配置工具 firewall-config 、 system-config-firewall,提供命令行客户端 firewall-cmd,,用于配置 firewalld 永久性或非永久性运行时间的改变:它依次用iptables 工具与执行数据包筛选的内核中的 Netfilter 通信。

firewalld 和 iptables service

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

  • iptables service 在 /etc/sysconfig/iptables 中储存配置;
  • firewalld 将配置储存在 /usr/lib/firewalld/ 和/etc/firewalld/ 中的各种 XML 文件里。

firewalld 的域

在这里插入图片描述

启用 firewalld

yum install  firewalld firewall-config   -y
systemctl start firewalld
systemctl enable firewalld
systemctl mask iptables
systemctl stop iptables
  • 1
  • 2
  • 3
  • 4
  • 5

使用命令行接口配置防火墙

firewall-cmd --state   ##防火墙状态
firewall-cmd --get-active-zones   ##正在生效的域
firewall-cmd --get-default-zone   ##默认的域
firewall-cmd --zone=public --list-all     ##指定列出的域是public,查看public域里的设置
firewall-cmd --list-all    ##列出默认的域
firewall-cmd --set-default-zone=public  ##把默认的域设为public
firewall-cmd --get-zones   ##查看所有的域
firewall-cmd --get-services   ##查看所有可以添加到火墙里的服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述在这里插入图片描述在这里插入图片描述

firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24    ##sources:数据包的属性 从这个网段的所有ip,走internal域
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24    ##remove 删除 删除设定
firewall-cmd --permanent --zone=internal --add-interface=eth0   ##给internal域添加网卡接口eth0
firewall-cmd --permanent --zone=internal --change-interface=eth0   ##把eth0移到internal域
firewall-cmd --permanent --zone=internal --remove-interface=eth0   ##删除internal域里的eth0

firewall-cmd --permanent --zone=public --add-service=smtp    ##向public域里永久添加服务smtp
firewall-cmd --permanent --zone=public --remove-service=smtp    ##永久删除
firewall-cmd --zone=public --list-ports    ##列出所有开启的端口,ssh和22绑定
firewall-cmd --permanent --zone=public --add-port=8080/tcp    ##用久添加tcp的8080端口到public域
firewall-cmd --permanent --zone=public --remove-port=8080/tcp    ##永久删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
实验1
  • 两台虚拟机配置网络,搭建yum源,更改主机名,在server端安装httpd服务并开启服务,编写默认的发布文件。
两台虚拟机的ip:
server:172.25.254.224
client:172.25.254.124
  • 1
  • 2
  • 3

在这里插入图片描述

  • 此时server端的域是public,在client端浏览器中输入172.25.254.224访问,因为此时在server端并没有将httpd服务加到防火墙列表中,所以访问不到。
    在这里插入图片描述
    在这里插入图片描述
  • 在server端输入命令firewall-cmd --add-source=172.25.254.124 --zone=trusted,即让client端的ip走trusted域,让client可以访问默认发布文件,除client之外的其他主机都不能访问。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    做完实验将刚刚的设定删除:
firewall-cmd --permanent --remove-source=172.25.254.124
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all
  • 1
  • 2
  • 3
实验2
  • 首先修改两台主机的网络配置:
client:1.1.1.124 eth0
server:172.25.254.224  eth0
1.1.1.224 eth1 双网卡
  • 1
  • 2
  • 3
  • 在server端查看此时的域和网卡interface:
firewall-cmd --list-all
  • 1

在这里插入图片描述

firewall-cmd --remove-interface=eth1 --zone=public   从此时默认的public域删除eth1网卡
firewall-cmd --list-all  查看是否删除成功
  • 1
  • 2

在这里插入图片描述

firewall-cmd --add-interface=eth1 --zone=trusted  把eth1加到trusted域
firewall-cmd --list-all --zone=trusted  查看是否添加成功
  • 1
  • 2

在这里插入图片描述

  • 在client端浏览器中输入1.1.1.224测试:

在这里插入图片描述

  • 此时server端默认的public域中只有eth0:
    在这里插入图片描述
  • 把eth1移到public域,client的浏览器中就又访问不到了
firewall-cmd --change-interface=eth1 --zone=public  把eth1移到public域
  • 1

在这里插入图片描述
在这里插入图片描述

  • 把eth0移到trusted域,测试:在真机浏览器中输入172.25.254.224可以访问
firewall-cmd --change-interface=eth0 --zone=trusted
  • 1

在这里插入图片描述
在这里插入图片描述
注意:所有操作加了permanent表示永久生效,不加重启主机后消失。
做完实验将eth0移回public域

firewall-cmd --change-interface=eth0 --zone=public
  • 1

reload与complete-reload

firewall-cmd --reload   ##重载防火墙列表
firefwall-cmd --complete-reload
  • 1
  • 2
实验3
  • 在真机中ssh root@172.25.254.224连接上server端,在server端把ssh服务从防火墙列表中删除,并重载防火墙列表:
firewall-cmd --permanent--remove-service=ssh --zone=public   ##永久删除,否则重载防火墙列表后又出现了
firewall-cmd --reload
firewall-cmd --list-all
  • 1
  • 2
  • 3

在这里插入图片描述

  • 此时真机连接着的ssh不会断开,还可以继续操作,命令:netstat -antlupe | grep ssh,可以看到建立了一个ESTABLISHED,端口是49614。此时,我们再打开一个shell连接会报错No route to host:
    在这里插入图片描述
    在这里插入图片描述
  • 在server端:–complete -reload,此时连着的ssh不能做任何操作,我们可以另外打开一个shell结束这个进程killall -9 ssh。
firewall-cmd --complete-reload  断开全部连接

killall -9 ssh
  • 1
  • 2
  • 3

如果没成功有可能是因为网卡eth0没有在默认的default域而在别的域比如trusted,需要移动eth0到default域里。
做完实验将ssh重新添加到default域中

firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-all
  • 1
  • 2
  • 3

注意:
1.关于/etc/firewalld/zones下public.xml和public.xml.old两个文件的说明:

删除了防火墙列表中的ssh服务时:
cd /etc/firewalld/zones  里面有public.xml  public.xml.old 两个文件
删除之后public.xml文件中没有ssh行,public.xml.old有ssh行
此时我们重新把ssh加入列表里,public.xml里有ssh,public.xml.old就没有ssh了
  • 1
  • 2
  • 3
  • 4

2.permanent和不加permanent的区别:
目录cd /lib/firewalld/services 下有具体防火墙允许的所有服务以及服务对应的端口:

cd /lib/firewalld/services
vim ssh.xml更改端口号为23,重启防火墙服务systemctl restart firewalld,此时ssh就不能连接

如果此时默认的域时public
firewall-cmd --remove-service=ssh   删除ssh,不是永久的,重启后不生效
firewall-cmd --list-all   ssh不在了
vim  /etc/firewalld/zones/public.xml   ssh行还在
firewall-cmd --reload   
firewall-cmd --list-all  ssh还在

但是firewall-cmd --permanent --remove-service=ssh 
firewall-cmd --reload
firewall-cmd --list-all   ssh就被永久删除了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

Direct Rules

  • 通过 firewall-cmd 工具,可以使用 --direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 10 -p tcp --dport 80 -j ACCEPT
firewall-cmd --direct --get-all-rules   ##查看所有规则
  • 1
  • 2
  • 3
参数描述

source 指定源地址,可以是一个 ipv4/ipv6 的地址或网段,不支持使用主机名。
destination 指定目的地址,用法和 source 相同。
service服务名称 是 firewalld 提供的其中一种服务。
port端口 既可以是一个独立端口数字 ,又或者端口范围
协议可以指定为 tcp 或udp 。
协议值可以是一个协议 ID 数字,或者一个协议名。

用direct定位精准,限制哪个来源,到哪个端口
filter表 经过内核的 ssh
-s 来源
-p 协议
-dport目的端口
-j动作 accept reject拒绝,有响应的不能访问,客户端接受这个,不会继续访问。 drop丢弃,无响应的不能访问。但会一直给你发数据包,增加服务器的负载。
1 从1开始读,匹配了就读取了,不再往下读了
不匹配就继续往下找
1就是置顶,让他都执行

  • 首先移走防火墙列表中的ssh服务,重载防火墙策略:
firewall-cmd  --permanent --remove-service=ssh
firewall-cmd  --reload
firewall-cmd  --list-all 移走ssh,除指定的外,默认情况下都走的是这个
  • 1
  • 2
  • 3

在这里插入图片描述

  • 然后添加规则,并查看规则有没有添加成功:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT   这个ip可以ssh连接,相当于白名单
filter表 连接ssh要经过内核 -s 来源 -p  协议 -dport目的端口  -j动作
firewall-cmd --direct --get-all-rules  查看添加的规则
  • 1
  • 2
  • 3

在这里插入图片描述

  • 在真机(172.25.254.10),其他主机分别连接server测试:
    在这里插入图片描述
    在这里插入图片描述
  • 删除我们刚刚添加的规则,重新添加,继续测试:
firewall-cmd--direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT  删除这条规则
firewall-cmd --direct --get-all-rules  查看有没有删成功
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.10 -p tcp --dport 22 -j ACCEPT
这条规则不包括10,10走默认的
firewall-cmd --direct --get-all-rules  查看
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 丢弃(Drop)和拒绝(Reject)的设定及测试:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.24 -p tcp --dport 22 -j REJECT
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.24 -p tcp --dport 22 -j DROP
firewall-cmd --direct --get-all-rules
  • 1
  • 2
  • 3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验结束将刚刚设置的两条规则删除。

firewall-cmd --direct --get-all-rules
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.10 -p tcp --dport 22 -j DROP
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.134 -p tcp --dport 134 -j REJECT
firewall-cmd --direct --get-all-rules
  • 1
  • 2
  • 3
  • 4

firewalld的路由伪装和端口转发

路由伪装

主要思想就是把双网卡主机server模拟为一个路由器,与我们之前学习的一样,给单网卡主机client设置网关,双网卡主机server开启防火墙伪装,路由转发功能。

  • 在server端:
firewall-cmd --permanent --add-masquerade  开启防火墙永久伪装
firewall-cmd --reload

sysctl -a | grep ip_forward  路由转发
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 在client端:
    在这里插入图片描述
    此时,client端可以ping通172.25.254.0/24这个网端的主机,默认情况下也可以ssh这些主机,当连接真机时ssh172.25.254.10,在真机w -i查看,显示当前登陆系统的ip,单网卡1.1.1. 124伪装成172.25.254.224了。
    在这里插入图片描述
端口转发

最后连的是1.1.1.124,所以输124密码,最后连的是哪个主机就输哪个主机的密码。
路由之前 prerouting 端口转发
路由之后 postrouting 地址伪装

  • 在双网卡主机server端添加端口转发,前提是防火墙伪装打开了:
 firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.124
 firewall-cmd --list-all 查看有没有设置成功
  • 1
  • 2

注意:因为没有加- -permanent不是永久设置,此时要是执行firewall-cmd --reload我们刚刚添加的端口转发就没有了。
在这里插入图片描述

  • 测试:在真机ssh 172.25.254.224测试,我们连接的是server,但是端口转发之后最终连上的是client,而且连接的时候要输入的密码就是client的密码。
    在这里插入图片描述

注意:如果ssh连接失败,显示的是no route,可能的原因有:
1.client端的此时生效的域不是public域,而是block或其他。
2.server端的ssh服务没添加到防火墙列表里。
3.上个实验做的direct没有删除remove。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/703184
推荐阅读
相关标签
  

闽ICP备14008679号