Firewalld
安全
- 按照OSI参考模型
- 物理安全: 防火、防水、防雷、防鼠、防盗、防静电。
- 网络安全:IP、端口、协议、网络层、传输层
- 应用层安全:http协议 按照功能分类: 主机防火墙 网络防火墙
- 防火墙
软件防火墙: 在当前软件系统上安装实现
硬件防火墙:软件和硬件捆绑
centos 6 :iptables
centos 7 : iptables、firewalld(默认)
目录
1.防火墙基本概念
Centos 7系统继承了多款防火墙管理工具,其中firewalld(Dynamic Firewalld Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
1.1 firewalld与iptables的不同点
1、firewalld可以动态修改单条规则,不需要像iptables那样,在修改了规则后必须全部刷新猜可以生效。
2、firewalld在使用上比iptables人性化很多,即使不明白五表五链而且对TCP/IP协议不理解也可以实现大部分功能。
3、firewalld跟iptables比起来,不好的地方是每个服务都需要设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制
2.firewall区域概述
简单来说,区域就是Firewalld预先准备的几套防火墙策略集合(策略模板),用户可以根据不同场景限制核实的策略集合,从而实现防火墙策略之间的快速切换
2.1 Firewall区域规则
2.2 注意:
-
一个zone区域只能绑定一个网卡,设定不同的匹配规则
-
一个zone区域又可以针对不同的源地址设置不同的规则
3.Firewalld相关配置文件
默认定义的区域模板配置文件/usr/lib/firewalld/
存储规则配置文件/etc/firewalld
4.防火墙基本指定参数
firewalld的规则分两种状态
runtime(运行时):修改规则马上生效,但是临时生效[不建议]
permanent(持久):修改后需要重启reload重载服务[强烈推荐]
firewall-cmd命令分类
参数 | 作用 |
---|---|
Zone区域相关指令 | |
–get-default-zone | 查询默认的区名称 |
–set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
–get-active-zones | 显示正当前正在使用的区域与网络名称 |
–get-zones | 显示总共可用的区域 |
–new-zone=<区域名称> | 新增区域 |
Service服务相关指令 | |
–get-service | 显示预先定义的服务 |
–add-service=<服务名> | 设置默认区域允许该服务的流量 |
–remove-service=<服务明> | 设置默认区域不再允许该服务的流量 |
Port端口相关指令 | |
–add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
–remove-port<端口号/协议> | 设置默认区域不在允许该端口流量 |
Interface网卡相关指令 | |
–add-interface=<网卡名称> | 设置默认区域允许改网卡 |
–change-interface=<网卡名称> | |
其他相关命令 | |
–list-all | |
–reload | 重新加载firewalld |
5.防火墙区域配置策略
5.1.未来能正常使用firewalld服务和相关工具去管理防火墙
//禁用传统防火墙服务
[root@zabbix ~]# systemctl mask iptables //将服务关联到黑洞 关联后服务将无法启动
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
[root@zabbix ~]# systemctl unmask iptables //关闭服务关联到黑洞
Removed symlink /etc/systemd/system/iptables.service.
//启动firewalld防火墙,并加入开机启动服务
[root@zabbix ~]# systemctl start firewalld
[root@zabbix ~]# systemctl enable firewalld
//备份firewalld相关配置文件(重要)
5.1 案例:
要求:
1.设定默认区域为drop(拒绝所有)
2.设置白名单IP访问,将源192.168.101.0/24网段加入trusted区域
//将当前默认区域修改为drop
[root@zabbix ~]# firewall-cmd --permanent --set-default-zone=drop
//将网络接口关联之drop区域
[root@zabbix ~]# firewall-cmd --permanent --change-interface=ens192 --zone=drop
//将192.168.0.0/16加入到trusted白名单
[root@zabbix ~]# firewall-cmd --permanent --add-source=192.168.0.0/16 --zone=trusted
[root@zabbix ~]# firewall-cmd --reload
[root@zabbix ~]# firewall-cmd --get-active-zone
drop
interfaces: ens33 ens192
public
interfaces: ens224
trusted
sources: 192.168.0.0/16
6.firewall端口转发策略
端口转发是指传统的目标地址映射,实现外网访问内网资源
6.1 流量转发命令格式为
//创建
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标ip地址>
//删除
firewall-cmd --permanent --zone=<区域> --remove-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标ip地址>
端口转发是指内网的目标地址,实现外网访问资源
6.2 案例
1.添加本机端口转发将555/tcp端口转发到22策略,要求当前和长期有效
[root@nginx-web01 ~]# firewall-cmd --permanent --add-forward-port=port=555:proto=tcp:toport=22
success
[root@nginx-web01 ~]# firewall-cmd --reload
success
2.如果需要将本地的192.168.101.82:6666端口转发至后端172.16.20.105:22端口
#1.开启ip伪装
[root@nginx-web01 ~]# firewall-cmd --add-masquerade --permanent
success
#2.配置转发
[root@nginx-web01 ~]# firewall-cmd --permanent --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=172.16.20.90
success[root@nginx-web01 ~]# firewall-cmd --reload
success
[root@nginx-web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192 ens224
sources:
services: dhcpv6-client http https ssh zabbix-agent
ports:
protocols:
masquerade: yes //yes开启ip伪装模式
forward-ports: port=6666:proto=tcp:toport=22:toaddr=172.16.20.90
source-ports:
icmp-blocks:
rich rules:
7.firewall富贵则策略
firewalld中的富贵则表示更细致、更详细的防火墙策略,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置,优先级在所有的防火墙略中也是最高的。
[root@zabbix ~]# man firewall-cmd
[root@zabbix ~]# man firewalld.richlanguage
rule
[source]
[destination]
[service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="true"]
destination address="address[/mask]" invert="true"
server name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
accept | reject [type="reject type "] | drop
1.允许192.168.101.0/24网段中192.168.101.176主机访问http服务。其他同网段主机无法访问,当前和永久生效
[root@zabbix ~]# firewall-cmd --permanent --add-source=192.168.101.0/24 --zone=public
success
[root@zabbix ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.101.176/32 service name=http accept'
success
[root@zabbix ~]# firewall-cmd --reload
success
2.拒绝192.168.101.82主机发起ssh请求,当前和永久生效
[root@zabbix ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.101.82/32 service name=ssh drop'
success
[root@zabbix ~]# firewall-cmd --reload
success
3.将远程192.168.101.176主机请求firewalld的5551端口,转发至firewalld防火墙22端口
[root@zabbix ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.101.176/32 forward-port port=5551 protocol=tcp to-port=22' --permanent
success
[root@zabbix ~]# firewall-cmd --reload
success
4.将远程192.168.101.176主机的请求firewall的6661端口,转发至后端主机172.16.20.102的22端口
[root@zabbix ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.101.176/32 forward-port port=6661 protocol=tcp to-port=22 to-addr=172.16.20.102'
success
[root@zabbix ~]# firewall-cmd --reload
success
8.firewall开启内部上网
环境
firewalld 192.168.101.85 172.16.20.105
web01 182.168.101.102
8.1 firewall翻过墙开启ip伪装,实现地址转换。
#网卡默认始在public的zones内。也就是默认的zones。永久添加地址转换功能
[root@lb01 ~]# firewall-cmd --permanent --add-masquerade
success
[root@lb01 ~]# firewall-cmd --reload
success
#1.将客户端网关指向firewalld
#2. 客户端访问公网