动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则
的接口系统提供了图像化的配置工具 firewall-config 、 system-config-firewall, 提供命令行客户端 firewall-cmd, 用于配置 firewalld 永久性或非永久性运行时间的改变 : 它依次用iptables 工具与执行数据包筛选的内核中的 Netfilter 通信。
firewalld-cmd --state ##查看火墙当前状态
firewalld-cmd --get-active-zone ##查看火墙默认生效(已激活)的域
firewalld-cmd --get-default-zone ##显示默认区域
firewalld-cmd --get-zones ##列出所有域
firewalld-cmd --zone=public --list-all ##列出pubulic域所有的策略
firewalld-cmd --get-services ##查看火墙管控的所有服务
firewalld-cmd --list-all-zones ##列出所有的域
firewalld-cmd --set-default-zone=dmz ##设置默认域为dmz
firewall-cmd --add-source=172.25.254.68 --zone=trusted ##将172.25.254.68加入trusted域
firewall-cmd --list-all --zone=trusted ##列出所有域为trusted的信息
firewall-cmd --list-interfaces ##列出所有接口
firewall-cmd --get-zone-of-interface=eth0 ##显示eth0的域
firewall-cmd --change-interface=eth0 --zone=trusted ##修改eth0的域为trusted
firewall-cmd --remove-interface=eth0 --zone=trusted ##移除eth0的域
firewall-cmd --permanent --add-source=172.25.254.68 ##将该ip永久加入
firewall-cmd --add-port=8080/tcp --zone=public ##将8080端口加入public域
firewall-cmd --permanebt --remove-service=ssh
firewall-cmd --reload ##对移除之后的访问有影响
firewall-cmd --complete-reload ##对移除之后和之前的访问都有影响
[root@client ~]# yum install firewalld firewalld-config ##安装火墙
[root@client ~]# systemctl stop iptables ##关闭iptables
[root@client ~]# systemctl disable iptables ##开机自动启动服务
[root@client ~]# systemctl start firewalld ##开启火墙
[root@client ~]# systemctl enable firewalld ##开机自动开启
[root@client ~]# yum search iptables ##寻找iptables安装包
[root@client ~]# yum install iptables-services.x86_64
[root@client ~]# firewall-cmd --state ##查看火墙状态
[root@client ~]# firewall-cmd --get-active-zones ##列出当前被系统使用的域
[root@client ~]# firewall-cmd --get-default-zone ##查看火墙默认生效的域
[root@client ~]# firewall-cmd --get-zones ##查看默认的规则
[root@client ~]# firewall-cmd --zone=public --list-all ##查看public域的信息
[root@client ~]# firewall-cmd --get-services ##查看可以再火墙中用名称表示的服务名称
[root@client ~]# firewall-cmd --list-all-zones ##查看所有的域
[root@client Desktop]# yum install httpd -y
[root@client Desktop]# systemctl start httpd
[root@client Desktop]# echo westos > /var/www/html/index.html
[root@client Desktop]# firewall-cmd --set-default-zone=trusted
success
[root@client Desktop]# systemctl restart firewalld
[root@client Desktop]# firewall-cmd --add-source=172.25.254.28 --zone=trusted
success
再次网页浏览172.25.254.128,更改过域后就可以看到在里面写进的内容了
在真机上:
[root@foundation68 ~]# virt-manager
[root@client Desktop]# nm-connection-editor ##添加两个IP
[root@client ~]# systemctl restart network ##重启网络
[root@client ~]# ifconfig ##查看IP
[root@client ~]# firewall-cmd --set-default-zone=public ##设置默认域为public
[root@client ~]# firewall-cmd --get-zone-of-interface=eth1 ##显示eth1的域
[root@client ~]# firewall-cmd --get-zone-of-interface=eth0 ##显示eth0的域
[root@client ~]# firewall-cmd --change-interface=eth0 --zone=trusted ##修改eth0的域为trusted
[root@client ~]# firewall-cmd --get-zone-of-interface=eth0
[root@client ~]# firewall-cmd --get-zone-of-interface=eth1
[root@client ~]# firewall-cmd --remove-interface=eth0 --zone=trusted ##移除eth0的域
[root@client ~]# firewall-cmd --list-all
[root@client ~]# systemctl restart firewalld
[root@client ~]# firewall-cmd --add-source=172.25.254.68
[root@client ~]# firewall-cmd --list-all
[root@client ~]# firewall-cmd --remove-source=172.25.254.68 ##移除IP
[root@client ~]# firewall-cmd --permanent --add-source=172.25.254.123 ##将该ip永久加入
[root@client ~]# firewall-cmd --reload ##生效
[root@client ~]# firewall-cmd --list-all
[root@client ~]# cd /etc/firewalld
[root@client firewalld]# ls
[root@client firewalld]# cd zones
[root@client zones]# ls
[root@client zones]# vim public.xml
添加: "http"/>
[root@client zones]# systemctl restart firewalld
[root@client zones]# firewall-cmd --list-all
在文件里添加http服务
可以看到services里面有http服务
[root@client ~]# vim /usr/lib/firewalld/services/http.xml
"tcp" port="8080"/>
[root@client ~]# firewall-cmd --add-port=8080/tcp --zone=public ##将8080端口加入public域
[root@client ~]# firewall-cmd --list-all
[root@client ~]# firewall-cmd --remove-service=ssh
success
[root@client ~]# firewall-cmd --list-all
[root@client ~]# firewall-cmd --reload
success
[root@client ~]# firewall-cmd --list-all
用firewall-cmd –remove-service=ssh移除ssh服务后再次刷新,ssh服务会恢复到原来的services里
[root@client ~]# firewall-cmd --complete-reload ##对移除之后和之前的访问都有影响
再次看真机上已经连接的虚拟机就不能做任何动作了,并且真机也连接不到虚拟机。已经完全中断ssh服务。
reload刷新之后不会中断连接,complete-reload刷新之后会中断连接
通过 firewall-cmd工具,可以使用–direct选项在运行时间里增加或者移除链。如果不熟悉iptables,使用直接接口非常危险,因为您可能无意间导致防火墙被*。直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用。
在desktop虚拟机上:
[root@localhost Desktop]# systemctl start firewalld
[root@localhost Desktop]# yum install httpd
[root@localhost Desktop]# systemctl start httpd
[root@localhost Desktop]# firewall-cmd --list-all
在真机和server虚拟机上网页浏览:172.25.254.128
此时是unable to connect,是因为httpd默认域为public.
[root@localhost Desktop]# firewall-cmd --permanent --add-service=http ##添加服务
[root@localhost Desktop]# firewall-cmd --reload ##重新加载
[root@localhost Desktop]# firewall-cmd --list-all
在真机和server虚拟机上网页浏览:172.25.254.128
[root@localhost Desktop]# firewall-cmd --permanent --remove-service=http ##删除服务
[root@localhost Desktop]# firewall-cmd --reload ##重新加载策略
[root@localhost Desktop]# iptables -nL ##查看策略
[root@localhost Desktop]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.28 -j ACCEPT
##添加规则(filter 本地数据限制;-s 目的地址;-p 协议;--direct 端口;-j 行为;/REJECT拒绝/ACCEPT同意/DROP丢弃)
[root@localhost Desktop]# firewall-cmd --direct --get-all-rules ##列出规则
在真机上网页浏览:172.25.254.128
在server虚拟机网页浏览:172.25.254.128
通过该地址,可以用比直接接口方式更易理解的方式建立复杂防火墙的规则。此外。还能永久保留保留设置,这种语法使用关键词值。
[root@localhost Desktop]# firewall-cmd --list-all
[root@localhost Desktop]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.68 ##设定端口转发
[root@localhost Desktop]# firewall-cmd --permanent --add-masquerade ##开启地址伪装
[root@localhost Desktop]# firewall-cmd --reload ##重新加载策略
[root@localhost Desktop]# firewall-cmd --list-all
[kiosk@foundation68 Desktop]$ ssh root@172.25.254.128
[kiosk@foundation68 Desktop]$ rm -fr ~/.ssh/known_hosts
[kiosk@foundation68 Desktop]$ ssh root@172.25.254.128
连接128主机时,IP为128主机成功将连接请求转到了68主机上
以上实验操作为了实验方便我将设定端口转发IP设定为了我自己的真机IP,如果大家有需要可以设置为其他主机IP。
在desktop虚拟机上:(作为路由)
添加网卡,设置两个IP在不同网段
[root@localhost Desktop]# firewall-cmd --permanent --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.20
[root@localhost Desktop]# firewall-cmd --reload
[root@localhost Desktop]# sysctl -a | grep ip_forward
(如果net.ipv4.ip_forward = 0时
vim /etc/sysctl.conf 加入:net.ipv4.ip_forward = 1
再用sysctl -p 刷新执行 )
在desktop虚拟机上:
[root@localhost Desktop]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.25.254.128 masquerade' ##设定伪装的地址策略
[root@localhost Desktop]# firewall-cmd --reload
[root@localhost Desktop]# firewall-cmd --list-all
在server虚拟机上:
可以ping的通说明伪装地址成功
“0”网段的server主机可以成功连接“254”网段的“172.25.254.68”主机。