防火墙管理 - 01
一、防火墙基本概述 (firewalld)
在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及GUI(图形)的两种管理方式。
对于接触Linux较早的人员对Iptables比较熟悉,但由于Iptables的规则比较的麻烦,并且对网络有一定要求,所以学习成本较高。
但firewalld的学习对网络并没有那么高的要求,相对iptables来说要简单不少,所以建议刚接触CentOS7系统的人员直接学习Firewalld。
# 注:如果开启防火墙工具,是防止外部访问进入,而不是内部流量流出!
firewalld 只能做和IP/Port相关的限制,而web不受限制。
二、防火墙区域管理
那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念。
firewalld预防火墙提前准备了多套防火墙策略集合(策略模板),根据不同用户可以在不同的场景选择不同的策略模板,从而实现防火墙策略之间的快速切换。 ##w10里面的私有、专有网络
1.区域
# 必须记住的三个区域,其他区域了解
trusted:白名单
public:默认区域
drop:黑名单
三、防火墙基本指令参数
1.firewall-cmd命令分类列表(添加服务server=http 而不是httpd/nginx )
# 先启动防火墙 systemctl restat firewalld
# 查看 firewall-cmd --get-default-zone
public
#更改防火墙 firewall-cmd --get-default-zone=public
[root@web01 zones]# cd /usr/lib/firewalld/
[root@web01 services]# cp http
https.xml http.xml
[root@web01 services]# cp http.xml nginx.xml
[root@web01 services]# firewall-cmd --reload
success
[root@web01 services]# firewall-cmd --add-service=nginx
success
[root@web01 zones]# cp work.xml newzone.xml #复制一个nginx服务文件,添加nginx服务文件
[root@web01 ~]#firewall-cmd --add-service=nginx #添加了nginx服务文件后,才可以添加nginx服务
四、防火墙区域配置策略
如果要用firewalld服务和相关工具去管理防火墙,必须启动firewalld服务,同时关闭以前旧的防火墙相关服务,需要注意firewalld的规则分为两种状态:
runtime运行时:修改规则马上生效,但如果重启服务则马上失效,测试建议。
permanent持久设置:修改规则后需要reload重载服务才会生效,生产建议。
1.禁用与取消禁用防火墙
#禁用防火墙
[root@web01 ~]# systemctl mask iptables
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
#取消禁用防火墙
[root@web01 services]# systemctl unmask iptables
Removed symlink /etc/systemd/system/iptables.service
2.操作防火墙
[root@web01 ~]# systemctl restart firewalld
[root@web01 ~]# systemctl enable firewalld
[root@web01 ~]# systemctl stop firewalld
#重载防火墙配种或清理临时的防火墙配置
[root@web01 ~]# firewall-cmd --reload
3.firewalld防火墙常用命令
1、查看默认使用的区域
[root@web01 ~]# firewall-cmd --get-default-zone
public
2、查看默认区域的规则
[root@web01 services]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
3、查看指定区域的默认规则
[root@web01 ~]# firewall-cmd --list-all --zone=trusted
trusted #区域的名字
target: ACCEPT #状态:允许
icmp-block-inversion: no #icmp块设置
interfaces: #区域绑定的网卡
sources: #允许流量通过的网段
services: #允许流量通过的服务
ports: #允许流量通过的端口
protocols: #允许流量通过的协议
masquerade: no #IP伪装
forward-ports: #端口转发
source-ports: #端口转发的来源端口
icmp-blocks: #icmp块设置
rich rules: #富规则
[root@web01 services]# firewall-cmd --list-all --zone=drop
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4、查看区域是否允许某服务
[root@m01 ~]# firewall-cmd --zone=public --query-service=ssh
yesss
[root@m01 ~]# firewall-cmd --zone=public --query-service=https
Error: INVALID_SERVICE: htpps
五、防火墙配置
1.firewalld防火墙放行服务
1、firewalld防火墙放行一个服务
[root@web01 ~]# firewall-cmd --add-service=http
success
2、firewalld防火墙放行多个服务
[root@web01 ~]# firewall-cmd --add-service={http,nginx}
success
# 如果nginx 报错 Warning: INVALID_SERVICE: nginx
[root@web01 services]# cp http.xml nginx.xml
[root@web01 ~]# vim /etc/firewalld/services/nginx.xml
<service>
<short>Nginx</short>
<description>nginx</description>
<port protocol="tcp" port="80"/>
</service>
3、自己添加服务,配置规则
[root@web01 ~]# cp /usr/lib/firewalld/services/{http.xml,suibian.xml}
[root@web01 ~]# firewall-cmd --reload
success
[root@web01 ~]# firewall-cmd --add-service=suibian
success
2.firewalld防火墙放行端口
1、firewalld防火墙放行一个端口
[root@web01 ~]# firewall-cmd --add-port=80/tcp
success
## 不放行端口
[root@web01 ~]# firewall-cmd --remove-port=80/tcp
success
2、firewalld防火墙放行多个端口
[root@web01 ~]# firewall-cmd --add-port={81/tcp,82/tcp}
success
3.firewalld防火墙放行网段
[root@web01 ~]# firewall-cmd --add-source=10.10.0.0/24 --zone=trusted(drop)(public)
success
4.配置测试
#要求:使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是10.10.0.0/24网段则允许
1.去除配置中的规则
[root@web01 ~]# firewall-cmd --remove-service=ssh
success
## 然后连接web01就连接不上了
2.配置允许10.10.0.0/24网段
[root@web01 ~]# firewall-cmd --add-source=10.10.0.0/24 --zone=trusted
success
六、防火墙配置端口转发
端口转发是指传统的目标地址映射,实现外网访问内网资源
流量转发命令语法为:
firewalld-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
1.端口转发实践
# 实例:需要将本地的10.10.0.7:6666端口转发至172.16.1.5:22端口
firewalld-cmd --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=172.16.1.5
#1.添加端口转发
[root@web01 ~]#firewall-cmd --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=172.16.1.5
success
#2.开启ip伪装
[root@web01 ~]# firewall-cmd --add-masquerade
success
#3.查看防火墙配置
[root@web01 services]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: yes
forward-ports: port=6666:proto=tcp:toport=22:toaddr=172.16.1.5
source-ports:
icmp-blocks:
rich rules:
#4.测试连接 # 通过web01的6666的端口连接lb01的机器
[D:\~]$ ssh 10.10.0.7:6666
Connecting to 10.10.0.7:6666...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Mon Apr 12 14:26:36 2021 from 10.10.0.1
[root@lb01 ~]#
2、端口转发原理图: