防火墙策略管理(firewall)
作用:隔离,隔离内网和外网。比较安全的和风险的区域,中间树立一道墙。
这道墙,在正常情况下,会有密密麻麻的规则。
lan局域网 | wan互联网
wan--->lan 入站 ,需要遵循规则,比较严格。层层筛选。
lan--->wan 出站,放行。
组织入站,允许出站
不管是互联网的硬件防火墙,还是软件防火墙,基本上都会阻止入站,允许出站。
硬件防火墙:思科、华为有硬件设备就直接是防火墙,相当于路由器,直接戳到核心网络里,掌管内外网的出入,允许或拒绝就看硬件防火墙怎么去配。
硬件防火墙没有任何的命令,打开是一个浏览器,直接打勾打叉,价格昂贵。
常见的是软件防火墙,Windows见到的是360防火墙。金山防火墙等。
今天讲的是属于软件防火墙的范畴,也是安装一个软件才能有的功能,这个软件不需要去装,因为其默认就装了。也是系统级的服务:firewalld(d:daemon超级守护进程),服务一旦开启的话,会非常忠诚的守护在内存当中,为你去过滤所有的入站出站什么的。防火墙怎么去过滤?就是规则。符合规则否?
有两种:①firewall-cmd(Linux专业人士用,命令工具)---7当中的命令,6中又不是此命令,6比7当中的防火墙更加复杂
②firewall-config(初学者用开发用,图形工具)Linux中的firewall可以检测“三次握手的标记位”:tcp有syn、ack、fin。
链接直接进入到block,再直接到drop。
还可以建立流量访问,优先级别。防火墙的功能很多。
-------------------------------------------------------------------------------------------------------------------------
RHEL7的防火墙体系
系统服务:firewalld
管理工具:firewall-cmd(命令的,专业人士^_^)、firewall-config(图形的)
[root@server0~]# systemctl restart firewalld
[root@server0~]# firewall-config &
查看防火墙服务状态
[root@server0~]# systemctl status firewalld.service (.service按的是tab键,属于正常)
----------------------------------------------------------------------------------------------------------------------------------
查看防火墙规则列表 (可看可不看)
列表查看操作
- firewall-cmd --list-all [--zone=区域名]
- firewall-cmd --list-all-zones
- firewall-cmd --get-zones
- firewall-cmd --get-services
- firewall-cmd --get-default-zone
----------------------------------------------------------------------------------------------------------------------------------
指定默认的安全区域
使用 --set-default-zone=区域名
--- 默认为public,限制较严格
--- 对于开放式环境,建议将默认区域修改为 trusted
--- 针对“运行时/永久配置”均有效
[root@server0~]# firewall-cmd --get-default-zone //修改前
public
[root@server0~]# firewall-cmd --set-default-zone=trusted
[root@server0~]# firewall-cmd --get-default-zone //修改后
trusted
----------------------------------------------------------------------------------------------------------------------------------
6当中的防火墙驳杂,是通过表格的形式来管理。7中,采取区域的方式来管理规则,去方便设置改变规则。默认规则已经设置好了,只需要背下来即可。拒绝一个人,就把它放到相应的区域,就可以了。(最常用的四个区域)
预设安全区域
根据所有的网络场所区分,预设保护规则集
- public:仅允许访问本机的sshd等少数几个服务
- trusted:允许任何访问
- block:阻塞任何来访请求
- drop :丢弃任何来访的数据包
- ... ...
配置规则的位置
- 运行时(runtime)
- 永久 (permanent)
public:是默认的区域,防火墙来了一个链接,默认会把它扔到public区域。
[root@server0~]# firewall-cmd -- get-default-zone
public
[root@server0 ~]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eth0 eth1 eth2 team0
sources:
services: dhcpv6-client ssh ---->只允许者两个服务,这里没有web服务http
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
再开一个终端,在desktop下:
[root@desktop0 ~]# firefox http://172.25.0.11
(process:1895): GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0' failed
此时防火墙已经把其干掉了,因为没有web和ftp。Server0自己访问自己是可以的。
Trusted:允许任何访问,相当于回到自己家一样。
Block:阻止任何来访请求(拒绝,后有回应)
Drop:丢弃任何来访的数据包(pc端不知道发生了什么,就是不能访问,再问一遍还是不行,生产环境中用的比较多,节省服务器的资源。没有回应,直接扔掉)用的较多。
防火墙判断的规则:匹配及停止
1、首先会看请求(客户端)当中的源IP地址,所有区域中是否有对于该IP地址的策略,如果有则该请求进入该区域。
2、进入默认区域
先在虚拟机desktop0,上访问http和ftp都失败。
[root@desktop0 ~]# firefox http://172.25.0.11 //访问失败
[root@desktop0 ~]# firefox ftp://172.25.0.11 //访问失败
再到虚拟机server0,上写规则。先查看规则,再写规则。
[root@server0~]# firewall-cmd -- get-default-zone //查看默认区域
[root@server0 ~]# firewall-cmd --zone=public --list-all // 查看区域规则信息
[root@desktop0 ~]# ifconfig| head -2 ---->ip:172.25.0.10
[root@server0~] # firewall-cmd --zone=public --add-service=http //增加服务
[root@server0~] # firewall-cmd --zone=public --add-service=ftp
[root@server0 ~]# firewall-cmd --zone=public --list-all // services: dhcpv6-client ftp http ssh ---->此时这里有web服务http、ftp了。
再到虚拟机desktop0~
[root@desktop0 ~]# firefox http://172.25.0.11 //访问成功
[root@desktop0 ~]# firefox ftp://172.25.0.11 //访问成功
此时就可以访问了。
[root@desktop0 ~]# ping 172.25.0.11 //可以ping通
rhel7防火墙能够识别7层的信息,一般的防火墙只能读取3层(网络层)、4层(传输层)的信息。
网络层有源IP、目标IP。
传输层有tcp、udp、端口号。
防火墙允许web服务,允许tcp的80,用端口号去标识。
-----------------------------------------------------------------------------------------------------------------------------
加上-- permanent选项:实现永久设置
封网段、开服务
若针对“永久配置”,需添加 --permanent
- 使用 --add-source =网段地址
- 使用 --add-service =服务名
[root@server0~]# firewall-cmd --permanent --zone=block --add-source=172.34.0.0/24
[root@server0~]# firewall-cmd --permanent --zone=public --add-service=http
[root@server0~]# firewall-cmd --permanent --zone=public --add-service=ftp
------------------------------------------------------------------------------------------------------------------------
[root@server0~]# firewall-cmd --reload //重新加载防火墙所有的配置
[root@server0 ~]# firewall-cmd --zone=public --list-all // services: dhcpv6-client ssh ---->此时这里没有web服务http、ftp了
firewall-cmd --zone=public --add-service=http/ftp #添加服务,并不是永久生效的命令。
firewall-cmd --permanent--zone=public --add-service=http/ftp #想要永久生效
注意:iptables –F 清空防火墙规则
[root@server0~]# firewall-cmd --permanent --zone=public --add-service=http
[root@server0~]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@server0~]# firewall-cmd --reload //需要再重新加载一遍
[root@server0 ~]# firewall-cmd --zone=public --list-all // services: dhcpv6-client http ftp ssh ---->此时这里有web服务http、ftp了
----------------------------------------------------------------------------------------------------
防火墙判断的规则:匹配及停止
1、首先会看请求(客户端)当中的源IP地址,所有区域中是否有对于该IP地址的策略,如果有则该请求进入该区域。
2、进入默认区域
desktop在访问server0时,都进入的默认区域。
修改默认的区域,不需要加上--permanent。修改直接就是永久的。
[root@desktop0 ~]# ping 172.25.0.11 //ping通
[root@server0~]# firewall-cmd --set-default-zone=block //设置set,教学环境中用block。因为明显的知道是防火墙拒绝的。
[root@server0~]# firewall-cmd --get-default-zone //block //查看get
[root@desktop0 ~]# ping 172.25.0.11 //ping不通 ,通信无反馈
[root@desktop0 ~]# firefox http://172.25.0.11
[root@desktop0 ~]# firefox ftp://172.25.0.11
此时就ping不通,目标不可达。
----------------------------------------------------------------
[root@server0~]# firewall-cmd --set-default-zone=drop //直接拒绝,生产环境中用drop
Ping的时候,没有反应。都是正在链接... ... (直接就丢了)
ping不通,fttp
desktop什么都访问不了。(是服务没搭对?还是防火墙拒绝?)
--------------------------------------------------------------------
以上的小案例:
虚拟机desktop0:
# ping 172.25.0.11 //可以通信
虚拟机server0:
# firewall-cmd --set-default-zone=block #修改默认区域
# firewall-cmd --get-default-zone #查看默认区域
虚拟机desktop0:
# ping 172.25.0.11 //不可以通信
虚拟机server0:
# firewall-cmd --set-default-zone=drop #修改默认区域
# firewall-cmd --get-default-zone
虚拟机desktop0:
# ping 172.25.0.11 //通信无反馈
--------------------------------------------------------------------
[root@server0~]# firewall-cmd --permanent --zone=public --add-source=172.25.0.10 //desktop的ip地址
[root@server0~]# firewall-cmd --zone=public --list-all //此时没有http、ftp,需要重载。
[root@server0~]# firewall-cmd --reload
[root@server0~]# firewall-cmd --zone=public --list-all
此时出现一个源IP地址。
在虚拟机desktop0此时http和ftp可以访问。但是,还是ping不通,可能与附规则有关。
ping不通的原因是什么???
-----------------------------------------------------------------------
实现本机的端口映射
本地应用的端口重定向(端口1--->端口2)
--从客户机访问 端口1 的请求,自动映射到本机 端口2
--比如,访问以下两个地址可以看到相同的页面:
http://server0.example.com:5423/
http://server0.example.com/
[root@server0~]# firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80
[root@server0~]# firewall-cmd --reload //重载配置,等于重启。
----------------------------------------------------------------------
端口转发
虚拟机desktop0:
# firefox http://172.25.0.11:5423 ---->172.25.0.11:80
做本机的地址转化:当有人用http协议去访问5423时,把此请求直接交给本机的80端口。
[root@desktop0~]# firefox http://172.25.0.11:5423 //不可以访问。连接没有办法。
[root@server0~]# firewall-cmd --permanent --zone=
public --add-forward-port=port=5423:proto=tcp:toport=80
Forward-port:转发(红字手写部分,就不能tab键了)
[root@server0~]# firewall-cmd --reload
[root@server0~]# firewall-cmd --zone=public --list-all
在虚拟机desktop0:
[root@desktop0~]# firefox http://172.25.0.11:5423 //完美的出现了动态的 my first web lover xdd 红色加粗字
[root@desktop0~]# firefox ftp://172.25.0.11:5423 //ftp不能访问了
课外知识:
[root@server0~]# firewall-cmd --permanent --zone=
public --remove-forward-port=port=5423:proto=tcp:toport=80
[root@server0~]# firewall-cmd --reload
[root@server0~]# firewall-cmd --zone=public --list-all
[root@server0~]# firewall-config //会来到一个图形。(详见下图)
在虚拟机desktop0:
[root@desktop0~]# firefox http://172.25.0.11:5423 //不可以了,remove移走了。
案例5:配置firewalld防火墙
为你的两个虚拟机配置防火墙策略
--允许从172.25.0.0/24网段的客户机访问server0、desktop0的任何服务
--禁止从my133t.org域(172.34.0.0/24网段)的客户机访问server0、desktop0的任何服务
--在172.25.0.0/24网络中的系统,访问server0的本地端口5423将转发到80
--上述设置必须永久有效