努力挣扎的生活 努力挣扎的生活
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • 安全记录
  • 分布式存储
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • ELK(EFK)
  • 虚拟化
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)

yangfk

瑟瑟发抖的小运维
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • 安全记录
  • 分布式存储
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • ELK(EFK)
  • 虚拟化
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)
  • 运维基础

    • nginx 安装
    • nginx-conf常用示例
    • rsync 服务pull与push
    • linux时间同步
    • 系统参数优化
    • ruby版本升级
    • fpm定制rpm
    • php7_X安装
    • iptables规则
    • tcpdump抓包
    • 公司部署Pritunl-VPN
    • 需求shell脚本记录
    • openldap安装配置
    • Ldap集成常用开源服务示例图
    • ansible基础
    • ansible进阶playbook与Roles
    • centos安装python3
    • Firewalld防火墙
      • firewall-cmd命令
        • 防火墙的端口访问策略
        • 防火墙服务访问策略
        • 防火墙端口转发策略
        • 防火墙富规则
        • 防火墙开启内部上网
        • 区域参数说明
        • 添加自定义minio server
    • Linux配置jdk
    • ubuntu安装ftp
    • windows安装openssh
    • centos7安装系统检测不到网卡
    • docker运行一个bind9和常用的网络命令
    • nginx禁用真实IP
    • nginx之resolver解析
  • 监控

  • 日志系统

  • 安全记录

  • 分布式存储

//
  • 运维
  • 运维基础
yangfk
2021-12-30

Firewalld防火墙

//
  • 基础概述

1.RHEL/Centos 7系统集成了许多防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems, Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式.

2.我们都知道iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。相对于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念,firewalld防火墙取代了iptables防火墙。

3.Firewalld规则配置,从外访问服务器内部-如果没有添加规则默认是阻止,从服务器内部访问服务器外部默认是允许的。

4.一个网卡仅能绑定一个区域,但一个区域可以绑定多个网卡,但一个区域可以绑定多个网卡。还可以根据来源的地址设定不同的规则。

  • 启firewalld,停iptables
#停止iptables
systemctl stop iptables.service #centos 7 默认未安装
systemctl disable iptables.service

#开启firewalld
systemctl start firewalld
systemctl enable firewalld
1
2
3
4
5
6
7

# firewall-cmd命令

划分不同的区域,制定出不同区域之间的访问规则策略来控制不同程序区域间传送数据

firewalld1

  • 查看有哪些规则

firewall-cmd --list-all

  • 查看当前zone,默认public

firewall-cmd --get-default-zone

firewall-cmd --list-services 协议

  • 添加来源是192.168.5.0/24的网段,将其加入白名单

firewall-cmd --add-source=192.168.5.0/24 --zone=trusted

  • 查看当前活动的区域

firewall-cmd --get-active-zones

  • 临时移除策略,临时

firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client

  • 查询public区域是否允许请求SSH HTTPS协议的流量

firewall-cmd --zone=public --query-service=ssh

firewall-cmd --zone=public --query-service=https

firewalld1

  • 加载永久区域的规则

firewall-cmd --reload

# 防火墙的端口访问策略

  • 允许客户端请求服务器的80/tcp端口,临时

firewall-cmd --add-port=80/tcp

firewall-cmd --add-port={80/tcp,443/tcp}

  • 永久添加多个端口,需要添加--permanent,并且需要重载firewalld

firewall-cmd --add-port={80/tcp,443/tcp} --permanent

firewall-cmd --reload 如果没有执行临时的,就需要重装一下

  • 查看放行的情况

firewall-cmd --list-ports 端口

  • 临时移除端口策略

firewall-cmd --remove-port={80/tcp,8080/tcp}

# 防火墙服务访问策略

  • 临时允许放行端口,如果是自定义服务需要添加xml 配置到改目录下:/usr/lib/firewalld/services

firewall-cmd --get-services 查看有哪些服务

firewall-cmd --add-service=http

firewall-cmd --add-service={http,htps}

  • 永久添加多个端口,需要添加--permanent,并且需要重载firewalld

firewall-cmd --add-service={http,htps} --permanet

firewall-cmd --reload

  • 通过--list-services检查端口放行情况

firewall-cmd --list-services

  • 移除临时添加的http https协议

firewall-cmd --remove-port={http,https}

  • 修改自定义端口,为对应的服务

服务文件目录存放于

cd /usr/lib/firewalld/services

cp http.xml java-app.xml

安装模板修改对应的名称,和端口

  • 防火墙添加规则

firewall-cmd --permanent --add-service=java-app

查看: firewall-cmd --list-services

# 防火墙端口转发策略

端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为:

firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

  • 开启masquerade,实现地址转换

firewall-cmd --add-masquerade --permanent

将本地的6666 转发到后端 192.168.5.147:22端口

firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=192.168.5.147

firewall-cmd --reload

# 防火墙富规则

firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的。

  • 查看手册

man firewall-cmd

man firewalld.richlanguage

参数 说明
--add-rich-rule=《RULE》 在指定的区添加一条富规则
--remove-rich-rule=《RULE》 在指定的区删除一条富规则
--query-rich-rule=《RULE》 找到规则返回0 ,找不到返回1
--list-rich-rules 列出指定区里的所有富规则
  • 查看设定的规则

firewall-cmd --list-rich-rules

  • 允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问8886端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 service name=http  accept'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port="8886" protocol="tcp" accept'
1
2
  • 默认public区域对外开放所有人能通过ssh服务连接,但拒绝192.16.1.0/24网段通过ssh连接服务器
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.16.1.0/24 service name="ssh" drop'
1
  • 允许所有人能访问http,https服务,只要192.0.0.2的主机
firewall-cmd --add-service={http,https}
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.0.0.2/32 service name=ssh accept'
1
2
  • 当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.9的22端口
firewall-cmd --add-masquerade
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"'
1
2

注意

如果没有添加--permanent参数则重启firewalld会失效。富规则按先后顺序匹配,按先匹配到的规则生效

# 防火墙开启内部上网

  • firewalld防火墙开启masquerade, 实现地址转换

firewall-cmd --add-masquerade --permanent

firewall-cmd --reload

设置别的主机,网关(GATEWAY=XXX.XXX.XXX.XXX)指向这台机器,重启网络

nmcli connection reload
nmcli connection down eth1 && nmcli connection up eth1
1
2

# 区域参数说明

  • 规则策略说明
策略名称 说明
trusted 允许所有的数据包流入与流出
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于home区域
work 拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关
  • firewall-cmd相关参数
指令参数 说明
zone区域相关指令
--get-default-zone 查询默认的区域名称
--set-default-zone=《区域名称》 设置默认的区域,使其永久生效
--get-active-zones 显示当前正在使用的区域与网卡名称
--get-zones 显示总共可用的区域
--new-zone=《zone》 新增区域
services服务相关指令
--get-services 显示预先定义的服务
--add-service=《服务名》 设置默认区域允许该服务的流量
--remove-service=《服务名》 设置默认区域不再允许该服务的流量
Port端口相关指令
--add-port=《端口号/协议》 设置默认区域允许该端口的流量
--remove-port=《端口号/协议》 设置默认区域不再允许该端口的流量
Interface网卡相关指令
--add-interface=《网卡名称》 将源自该网卡的所有流量都导向某个指定区域
--change-interface=《网卡名称》 将某个网卡与区域进行关联
其他相关指令
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

# 添加自定义minio server

#添加minio xml
[root@web01 ~]# cat /usr/lib/firewalld/services/minio.xml
<?xml version="RELEASE.2021-06-17T00-10-46Z" encoding="utf-8"?>
<service>
  <short>minio</short>
  <description>minio is file server .</description>
  <port protocol="tcp" port="29200"/>
</service>


#重载firewalld
systemctl reload firewalld
firewall-cmd --add-service=minio
1
2
3
4
5
6
7
8
9
10
11
12
13
//
如果此文章对您有帮助,点击 -->> 请博主喝咖啡 (opens new window)
上次更新: 2023/05/25, 16:16:09
centos安装python3
Linux配置jdk

← centos安装python3 Linux配置jdk→

最近更新
01
nginx之resolver解析
06-19
02
cephadm部署分布式存储
05-30
03
istio服务组件
04-23
更多文章>
Theme by Vdoing | Copyright © 2019-2025 yangfk | 湘ICP备2021014415号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
//