1.什么是firewalld?
防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)1993-12-15)
防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
防火墙是系统的第一道防线,其作用是防止非法用户的进入
centos 7中防火墙FirewallD是一个非常的强大的功能了, FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接
以及接口安全等级的动态防火墙管理工具,它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项
它也支持允许服务或者应用程序直接添加防火墙规则的接口
以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启
这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等,而模块的卸载将会破坏状态防火墙和确立的连接
centos 7中防火墙FirewallD是一个非常的强大的功能了, FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接
以及接口安全等级的动态防火墙管理工具,它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项
它也支持允许服务或者应用程序直接添加防火墙规则的接口
以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启
这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等,而模块的卸载将会破坏状态防火墙和确立的连接
2.搭建实验环境
重置desktop 虚拟机并配置网络(ip=172.25.72.100),yum源,安装firewall服务,apache服务
systemctl stop iptables关闭这个火墙,为了不影响firewalld的实验效果
systemctl mask iptables锁住这个服务
systemctl start firewalld开启firewalld服务器
systemctl enable firewalld设置开机启动
查看防火墙状态 systemctl status firewalld
在desktop主机上面安装apache服务
3.firewalld中的区域管理
(1)网络区域简介
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流
例如,互联网是不可信任的区域,而内部网络是高度信任的区域
网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化
该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式
(2)有如下几种不同的初始化区域
阻塞区域(block) | 任何传入的网络数据包都将被阻止 |
工作区域(work) | 相信网络上的其他计算机,不会损害你的计算机 |
家庭区域(home) | 相信网络上的其他计算机,不会损害你的计算机 |
公共区域(public) | 不相信网络上的任何计算机,只有选择接受传入的网络连接 |
隔离区域(DMZ) | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接 |
信任区域(trusted) | 所有的网络连接都可以接受 |
丢弃区域(drop) | 任何传入的网络连接都被拒绝 |
内部区域(internal) | 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接 |
外部区域(external) | 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接 |
注:Firewalld的默认区域是public
4.使用图形界面管理firewalld防火墙
firewall-config 输入这个命令,firewalld图形化管理,在里面进行一系列设置
可以看出此时desktop的firewalld的网络域是public(字体最粗)
在真机的浏览器里面访问desktop的apache应该访问不到
现在更改desktop的火墙的网络域
改为trusted
再次在真机的浏览器里面访问desktop的apache应该可以访问到了
在真机里面ssh连接desktop应该可以,因为此时是trusted
在desktop里面将网络域由trusted改为block
5.使用命令管理firewalld防火墙
(1)基本命令的用法
使用命令行接口配置防火墙
查看防火墙现在正在使用的网络域,可以看出是block域
列出block域的信息
firewall-cmd --state 查看防火墙的状态
firewall-cmd --get-active-zones 查看正在使用的域
firewall-cmd --get-default-zone 查看系统默认使用的域(本来是public,被我在图形界面改了)
firewall-cmd --get-zones 查看域
firewall-cmd --zone=public --list-all 列出公共域里面所有可以支持添加的服务
firewall-cmd --get-services 列出所有的服务
firewall-cmd --list-all-zones 列出所有的域
firewall-cmd --set-defaults-zone=dmz 更改默认的域
能列出来的服务和端口是集成在一块的
火墙是内核上的插件
firewall-cmd --state | 防火墙状态 |
firewall-cmd --get-active-zones | 正在生效的域 |
firewall-cmd --get-default-zone | 默认的域 |
firewall-cmd --zone=public --list-all | Public域里的设置,指定的域 |
firewall-cmd --list-all | 默认的域的服务设置 |
firewall-cmd --set-default-zone=public | 把默认的域改为public |
firewall-cmd --get-zones | 查看所有的域 |
firewall-cmd --get-services | 查看所有可以添加到火墙里的服务 |
firewall-config ##开启火墙的图形管理
firewall-cmd --state ##查看火墙的当前状态
firewall-cmd --get-active-zones ##查看正在工作的域,用的是哪个就是哪个
firewall-cmd --get-default-zone ##查看默认使用的域,与正在工作的域可以不同
firewall-cmd --get-zones ##查看所有的域
firewall-cmd --zone=public --list-all ##public域里的设置
firewall-cmd --list-all-zones ##查看所有域的所有设置
firewall-cmd --get-services ##所有支持可以直接添加使用的服务名称
firewall-cmd --set-default-zone=public ##改变默认域
(3)本来public域不允许访问apache,现在做特殊指定
本来desktop的火墙策略是public,不允许httpd服务,因此真机里面访问不到172.25.72.100的apache,现在做一些改变
先搭建基本环境
给Desktop重新配置网络(172.25.72.100),yum源
在desktop上面
firewall-cmd --list-all 发现是public域
此时的火墙区域是public,不允许httpd服务
yum install httpd
systemctl start httpd
systemctl status firewall
在真机上面:
firefox输入 172.25.72.100此时访问不到,因为desktop的火墙策略里面没有添加这个服务
在desktop上面
在desktop上面添加数据包的属性:(也就是指定外来的主机走自己的trusted域)
firewall-cmd --add-sources=172.25.72.100 --zone=trusted
将真机的访问设置改为trusted域,此时依然是public域,并且没有httpd服务
在真机上面
firefox输入 172.25.72.100此时可以访问
此时真机可以访问到desktop的apache了
在server虚拟机上
firefox输入 172.25.72.100此时访问不到,因为desktop的火墙策略里面没有添加这个服务
数据包属性:就是当desktop主机处于public域的时候,指定外来ip走自己的trusted域
(3)接下来指定什么样的人可以访问服务端的什么服务
搭建实验环境:
desktop虚拟机两块网卡:
eth0 172.25.72.100
eht1 1.1.1.100
server虚拟机一块网卡:
eth0 1.1.1.200
给server配置网络
在serevr上面:
ping 1.1.1.100可以
输入1.1.1.100想访问desktop的apache,访问不到
因为此时desktop的eth0(1.1.1.100)在public里面
在desktop上面
firewall-cmd --list-all eth0和eth1均在public域里面,不允许外来主机访问apache
firewall-cmd --remove-interface=eth1 --zone=public将eth0从public域上面移走
firewall-cmd --list-all
firewall-cmd --add-interface=eth0 --zone=trusted
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted
此时desktop的eth0在trusted
在server上面:
输入1.1.1.111想访问desktop的apache,可以访问
在desktop上面:
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted
firewall-cmd --change-interface=eth1 --zone=public将eth0重新放回public域
在serevr上面:
firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24指定服务
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24移走服务
firewall-cmd --permanent --zone=internal --add-interface=eth0添加网卡所在的域
firewall-cmd --permanent --zone=internal --change-interface=eth0改变网卡所在的域
firewall-cmd --permanent --zone-internal --remove-interface=eth0将eth0网卡从internal域上面移走
firewall-cmd --permanent --zone=public --add-service=smtp永久添加服务
firewall-cmd --permanent --zone=public --remove-service=smtp永久移走服务
firewall-cmd --zone=public --list-ports列出允许的端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp永久添加,开机依然生效
firewall-cmd --permanent --zone=public --remove-port=8080/tcp永久移走,开机依然生效
如果改域里面的服务不加permanent的话,直接改,直接查就会生效
reload后,就会返回原来的状态