Linux下轻松理解防火墙的工作原理及相关设置(三)firewalld服务、包括Direct Rules 和Rich Rules (地址伪装和转发)
文章目录firewalld概述firewall和iptables的不同firewalld常用命令firewalld基本操作firewalld概述现在的RedHat/CentOS7版本默认都使用firewall防火墙了,firewall的配置方法大致可以分为图形化和命令行。firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默..
文章目录
firewalld概述
现在的RedHat/CentOS7版本默认都使用firewall防火墙了,firewall的配置方法大致可以分为图形化和命令行以及编辑配置文件三种。firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。
1.firewalld 管理防火墙规则的模式(动态): 任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables
2.区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合
从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。
按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。
我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;
在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。
在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,
然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。
firewalld中常见的区域名称(默认为public);
firewall和iptables的不同
/usr/lib/firewalld/services:firewalld服务默认在此目录下定义了70+种服务供我们使用,格式:服务名.xml;
/etc/firewalld/zones: 默认区域配置文件,配置文件中指定了编写完成的规则(规则中的服务名必须与上述文件名一致);
==分为多个文件的优点: ==
第一 通过服务名字来管理规则更加人性化
第二 通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式
firewalld常用命令
命令语法:firewall-cmd [–zone=zone] 动作 [–permanent]
注:如果不指定–zone选项,则为当前所在的默认区域,–permanent选项为是否将改动写入到区域配置文件中
firewall的状态:
--state ##查看防火墙的状态
--reload ##重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
--complete-reload ##重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
--panic-on ##紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式
动作中查看操作:
--get-icmptypes ##查看支持的所有ICMP类型
--get-zones ##查看所有区域
--get-default-zone ##查看当前的默认区域
--get-active-zones ##查看当前正在使用的区域
--get-services ##查看当前区域支持的服务
--list-services ##查看当前区域开放的服务列表
--list-all ##查看此区域内的所有配置,类似与iptables -n
更改区域操作:
--set-default-zone=work ##更改默认的区域
新建–add或删除–remove规则:
--add-interface=eth0 ##将网络接口添加到默认的区域内
--add-port=12222/tcp --permanent ##添加端口到区域开放列表中
--add-port=5000-10000/tcp --permanent ##将端口范围添加到开放列表中;
--add-service=ftp --permanent ##添加服务到区域开放列表中(注意服务的名称
需要与此区域支持的服务列表中的名称一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定区域
--remove-source=192.168.1.1 ##删除源地址的流量到指定区域
--change-interface=eth1 ##改变指定的接口到其他区域
--remove-service=http ##在home区域内将http服务删除在开放列表中删除
--add-masquerade ##开启SNAT(源地址转换)
--query-masquerade ##查询SNAT的状态
--remove-interface=eth0 ##将网络接口在默认的区域内删除
--query-interface=eth0 ##确定该网卡接口是否存在于此区域
--add-forward-port=port=513:proto=tcp:toport=22:toaddr=192.168.100.101 ##端口转发
firewalld基本管理
在双网卡主机中
开启firewalld
systemctl stop iptables.service
systemctl disable iptables.service
systemctl mask iptables.service
systemctl unmask firewalld
systemctl start firewalld
systemctl enable firewalld
对firewalld的操作
1.图形化操作 firewall-config
默认设置
2.更改设置
34.5.
2.命令化操作
在双网卡主机中
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --list-all #查看此区域内的所有配置,类似与iptables -Ln
firewall-cmd --set-default-zone=block #更改默认的区域
测试:
真机中 ssh 172.25.254.110失败
firewall-cmd --set-default-zone=trusted#更改默认的区域为trusted
测试:
真机中 ssh 172.25.254.110
![在这里插入
firewall-cmd --state #查看防火墙的状态
firewall-cmd --get -active-zones 查看当前正在使用的区域
firewall-cmd --get-zones #查看所有区域
firewall-cmd --list-all --zone=work #查看指定区域的所有
firewall-cmd --get-services #查看当前区域支持的服务
2.
firewall-cmd --list-all
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --add-source=172.25.254.2 添加源地址的流量到指定区域#
firewall-cmd --reload #重新加载防火墙
firewall-cmd --list-all
firewall-cmd --permanent --remove-service=http #将http服务删除在开放列表中删除
firewall-cmd --reload
原来没有,先添加
firewall-cmd --permanent --remove-source=172.25.254.2 #删除源地址的流量到指定区域
firewall-cmd --permanent --add-source=172.25.254.2 --zone=trusted
firewall-cmd --reload
1.
firewall-cmd --get-active-zones --public 和trusted
测试
在真机
浏览器中输入 172.25.254.110 应该是成功的
在单网卡主机
测试 1.1.1.110应该是失败的
怎样让单网卡主机也测试成功呢
firewall-cmd --remove-interface=eth1 #将网络接口在默认的区域内删除
firewall-cmd --get-active-zones
firewall-cmd --add-interface=eth1 --zone=trusted
firewall-cmd --get-active-zones
测试:
在单网卡主机
浏览器测试 1.1.1.110应该是成功的
firewall-cmd --reload 和firewall-cmd --complete reload 的区别
complete reload 刷新时会中断正在链接的连接
reload重新加载时不会
火墙的高级管理策略
Direct Rules
1.只允许172.25.254.2访问ssh
在双网卡主机中
firewall-cmd ----remove-service=ssh
firewall-cmd --list-all
firewall-cmd --direct --get-all-rules#查看规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.2 -p tcp --dport 22 -j ACCEPT
1.
测试:
在单网卡主机 ssh 1.1.1.110 拒绝
测试:
在真机 ssh 172.25.254.110连接成功
Rich Rules(富集)
地址伪装
==1.单网卡1.1.1.210访问172.25.254.110 ==
在双网卡主机中
firewall-cmd --list-all
firewall-cmd --permanent --add-masquerade开启SNAT(源地址转换)
firewall-cmd --list-all
在单网卡主机中 设置网关为1.1.1.110
1.1.1.1.210中
2.在双网卡主机
测试:
在单网卡主机 1.1.1.210访问172.25.254.110成功(原来应该不成功,因为它们不在一个网段)
地址转发
1.(外网访问内网):真机访问172.25.254.110时实际访问1.1.1.210
(单词forward不仅有前进的意思,还有转发,转寄新地址的意思。)
在双网卡主机
firewall-cmd --add-forward-port=proto=tcp:port=22:toprt=22:toaddr=1.1.1.210
firewall-cmd --list-all
1.
测试:
在真机
ssh 172.25.254.110
ifconfig 实际是1.1.1.210
3.xml文件模块化管理
cd /usr/lib/firewalld/
ls
cd zones/
ls
vim public.xml 编辑public域的文件
添加http服务
firewall-cmd --reload
firewall-cmd --list-all #发现http添加成功
注意:
- firewall设置中的direct rules
这个指令可以设置火墙的默认设置是接受还是拒绝
例如:
虚拟机安装了httpd服务,但是火墙设置中没有添加httpd服务,所以默认情况下所有的计算机都不能使用虚拟机的httpd服务
那么我们如何使虚拟机默认接受我真机172.25.254.1的所有要求呢
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.1 -j ACCEPT ##设置默认接受172.25.254.1端口为80的tcp服务访问
再次测试,真机就可以访问虚拟机了。
与上文提到的只允许某个ip ssh 原理一样.
2.在firewalld 中,执行了firewall-cmd --permanent… 时 必须reload 重新加载,否则不生效。
更多推荐
所有评论(0)