翻译

  public (active)                     公共(防火墙)
target: default 目标: 默认
icmp-block-inversion: no ICMP块反演:NO
interfaces: eth0 eth1 接口
sources: 资料来源
services: ssh dhcpv6-client 服务 ssh dhcpv6 客户端
ports: 端口
protocols: 协议
masquerade: no 伪装 ip
forward-ports: 前向端口
source-ports: 源端口
icmp-blocks: ICMP块
rich rules: 丰富的规则
default 默认
trusted 可信的
drop 忘掉,停止,丢掉不管
rule 规则
source 来源
destination 目的地
service 服务
forward-port 前向端口
audit 审计
accept 接受
reject 拒绝
family 家庭
invert 使…前后倒置;使反转
protocol 协议
forward 向前;前进地
rich 富有的
  • [1.防火墙安全基本概述]
  • [2.防火墙使用区域管理]
  • [3.防火墙基本指令参数]
  • [4.防火墙区域配置策略]
  • [5.防火墙端口访问策略]
  • [6.防火墙服务访问策略]
  • [7.防火墙端口转发策略]
  • [8.防火墙富规则策略]
  • [9.防火墙开启内部上网]

1.防火墙安全基本概述

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

![img](day65 firewall.assets/15230185799633.png)

Firewalld规则配置

从外访问服务器内部如果没有添加规则默认是阻止

从服务器内部访问服务器外部默认是允许

![img](day65 firewall.assets/15319190627314.jpg)

那么相较于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念。

简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

![img](day65 firewall.assets/15230251111120.jpg)

注意:Firewalld中的区域与接口

一个zone区域仅能绑定一个网卡, 设定不同的匹配规则

一个zone区域又可以针对不同的源地址设定不同的规则

Firewalld相关配置文件

默认定义的模板配置文件/usr/lib/firewalld

存储规则配置文件 /etc/firewalld/

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 拒绝流入的流量,除非与流出的流量相关

3.防火墙基本指令参数

为了能够使用firwalld服务和相关工具去管理防火墙,必须启动firwalld服务,并且需要禁用以前旧防火墙相关服务, firewall-config(图形界面), firewall-cmd

firewalld的规则分两种状态:

runtime运行时: 修改规则马上生效,但是临时生效 [不建议]

permanent持久配置: 修改后需要reload重载才会生效 [强烈推荐]

firewall-cmd命令分类

参数 作用
zone区域相关指令
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-active-zones 显示当前正在使用的区域与网卡名称
--get-zones 显示总共可用的区域
--new-zone= 新增区域
services服务相关指令
--get-services 显示预先定义的服务
--add-service=<服务名> 设置默认区域允许该服务的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
Port端口相关指令
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
Interface网卡相关指令
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
其他相关指令
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

4.防火墙区域配置策略

1.为了能正常使用firwalld服务和相关工具去管理防火墙,必须启动firwalld服务, 同时关闭以前旧防火墙相关服务

# 禁用旧版防火墙服务
[root@Firewalld ~]# systemctl mask iptables
[root@Firewalld ~]# systemctl mask ip6tables # 启动firewalld防火墙, 并加入开机自启动服务
[root@Firewalld ~]# systemctl start firewalld
[root@Firewalld ~]# systemctl enable firewalld

2.zone区域相关指令

//查看当前默认区域
[root@Firewalld ~]# firewall-cmd --get-default-zone
public //查看当前活跃的区域
[root@Firewalld ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1

3.使用firewalld中各个区域规则结合

1.设定默认区域为drop(拒绝所有)

2.设置白名单IP访问,将源10.0.0.0/24网段加入trusted区域

//将当前默认区域修改为drop
[root@Firewalld ~]# firewall-cmd --set-default-zone=drop //将网络接口关联至drop区域
[root@Firewalld ~]# firewall-cmd --permanent --change-interface=eth0 --zone=drop //将10.0.0.0/24网段加入trusted白名单
[root@Firewalld ~]# firewall-cmd --permanent --add-source=10.0.0.0/24 --zone=trusted
[root@Firewalld ~]# firewall-cmd --reload
success //查看当前处于活动的区域
[root@Firewalld ~]# firewall-cmd --get-active-zones
drop # 默认区域, eth0接口流量都由drop区域过滤
interfaces: eth0
trusted # 数据包的源IP是10.0.0.0网段走trusted区域
sources: 10.0.0.0/24

4.使用firewalld中各个区域规则结合

1.设定来源IP是192.168.20.0/24网段允许访问http

2.设定来源IP是10.0.0.0/24 仅允许访问ssh服务

3.其他网段走默认区域

#1.允许10.0.0.1IP地址能访问ssh
[root@Firewalld ~]# firewall-cmd --add-source=10.0.0.0/24 --permanent --zone=public
[root@Firewalld ~]# firewall-cmd --reload #2.将192.168.20.0网段加入白名单
[root@Firewalld ~]# firewall-cmd --add-source=192.168.20.0/24 --permanent --zone=trusted
[root@Firewalld ~]# firewall-cmd --reload [root@Firewalld ~]# firewall-cmd --get-active-zone
drop
interfaces: eth0 eth1
public
sources: 10.0.0.1/32
trusted
sources: 192.168.20.0/24

5.查询firewald指定区域的明细

[root@Firewalld ~]# firewall-cmd  --list-all --zone=drop
drop (active)
target: DROP
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: [root@Firewalld ~]# firewall-cmd --list-all --zone=trusted
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 10.0.0.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

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

[root@Firewalld ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@Firewalld ~]# firewall-cmd --zone=public --query-service=https
no

7.最后将配置恢复至默认规则

[root@Firewalld ~]# firewall-cmd --set-default-zone=public
[root@Firewalld ~]# firewall-cmd --remove-source=10.0.0.0/24 --zone=public --permanent
[root@Firewalld ~]# firewall-cmd --remove-source=192.168.20.0/24 --zone=trusted --permanent
[root@Firewalld ~]# firewall-cmd --reload

5.防火墙端口访问策略

1.配置防火墙, 访问8080/tcp 8080/udp端口的流量策略设置为永久允许, 并立即生效

#1.添加运行规则
[root@Firewalld ~]# firewall-cmd --permanent --add-port=8080/udp --add-port=8080/tcp
#2.重载配置生效
[root@Firewalld ~]# firewall-cmd --reload
success
#3.检查开放的端口
[root@Firewalld ~]# firewall-cmd --list-ports
8080/tcp 8080/udp

2.配置防火墙, 访问8080/udp的端口流量设置为永久拒绝,并立即生效

[root@Firewalld ~]# firewall-cmd --permanent --remove-port=8080/udp
success
[root@Firewalld ~]# firewall-cmd --reload && firewall-cmd --list-ports
success
8080/tcp

6.防火墙服务访问策略

1.配置防火墙, 允许请求http https协议的流量设置为永久允许,并立即生效

[root@Firewalld ~]# firewall-cmd --permanent --add-service=http --add-service=https
success
# 重启加载生效
[root@Firewalld ~]# firewall-cmd --reload
success
# 检查相关配置
[root@Firewalld ~]# firewall-cmd --list-services
ssh dhcpv6-client 'http https'

2.配置防火墙, 允许请求php-fpm服务的流量设置为永久允许,并立即生效

#1.拷贝相应的xml文件
[root@Firewalld ~]# cd /usr/lib/firewalld/services/
[root@Firewalld services]# cp http.xml php-fpm.xml #2.修改端口为9000
[root@Firewalld services]# cat php-fpm.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>PHP-FPM</short>
<description> php-fpm </description>
<port protocol="tcp" port="9000"/>
</service> #3.防火墙增加规则
[root@Firewalld ~]# firewall-cmd --permanent --add-service=php-fpm
[root@Firewalld ~]# firewall-cmd --list-services
ssh dhcpv6-client 'http https php-fpm' #4.安装php-fpm, 并监听9000端口
[root@Firewalld ~]# yum install php-fpm -y
[root@Firewalld ~]# systemctl start php-fpm #5.测试验证
~ telnet 10.0.0.61 9000
Trying 10.0.0.61...
Connected to 10.0.0.61.
Escape character is '^]'.

3.配置防火墙, 请求https协议的流量设置为永久拒绝,并立即生效

[root@Firewalld ~]# firewall-cmd --permanent --remove-service=https --remove-service=php-fpm --zone=public
success
[root@Firewalld ~]# firewall-cmd --reload
success //检查当前活动服务
[root@Firewalld ~]# firewall-cmd --list-service
ssh dhcpv6-client http

7.防火墙端口转发策略

端口转发是指传统的目标地址映射,实现外网访问内网资源

流量转发命令格式为

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

1.转发本机555/tcp端口的流量至22/tcp端口,要求当前和长期有效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=555:proto=tcp:toport=22:toaddr=10.0.0.61
success
[root@Firewalld ~]# firewall-cmd --reload
success

2.移除本机转发的555/tcp端口策略, 要求当前和长期有效

[root@Firewalld ~]# firewall-cmd --remove-forward-port=port=555:proto=tcp:toport=22:toaddr=10.0.0.61
success
[root@Firewalld ~]# firewall-cmd --reload
success

3.如果需要将本地的10.0.0.61:6666端口转发至后端10.0.0.9:22端口

#1.开启IP伪装
[root@Firewalld ~]# firewall-cmd --add-masquerade --permanent #2.配置转发
[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=10.0.0.9
[root@Firewalld ~]# firewall-cmd --reload

8.防火墙富规则策略

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

1.富规则帮助手册

man firewall-cmd
man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop] rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
destination address="address[/mask]" invert="True"
service 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 //区里的富规则按先后顺序匹配,按先匹配到的规则生效。
--add-rich-rule='<RULE>' //在指定的区添加一条富规则
--remove-rich-rule='<RULE>' //在指定的区删除一条富规则
--query-rich-rule='<RULE>' //找到规则返回0 ,找不到返回1
--list-rich-rules //列出指定区里的所有富规则
--list-all 和 --list-all-zones 也能列出存在的富规则

1.允许10.0.0.0/24网段中10.0.0.1主机访问http服务, 其他同网段主机无法访问,当前和永久生效

#1.加入10.0.0.0/24所有主机至public区域 (可省略,只要public是当前活动active区域就行)
[root@m01 ~]# firewall-cmd --permanent --add-source=10.0.0.0/24 --zone=public #2.仅允许public中的10.0.0.1主机访问http
[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 port port=80 protocol=tcp accept' #3.重载firewalld防火墙
[root@m01 ~]# firewall-cmd --reload

2.拒绝10.0.0.0/24网段中的10.0.0.9主机发起的ssh请求, 当前和永久生效

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.9/32 service name=ssh drop'

[root@m01 ~]# firewall-cmd --reload
success

3.将远程10.0.0.1主机请求firewalld5551端口,转发至firewalld防火墙的22端口

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=5551 protocol=tcp to-port=22'
[root@m01 ~]# firewall-cmd --reload
success

4.将远程10.0.0.1主机请求firewalld6661端口,转发至后端主机10.0.0.922端口

[root@m01 ~]# firewall-cmd --add-masquerade --permanent
[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=6661 protocol=tcp to-port=22 to-addr=10.0.0.9'
success [root@m01 ~]# firewall-cmd --reload

9.防火墙开启内部上网

在指定的带有公网IP的实例上操作,启动NAT网关的SNAT源地址转换功能。

1.firewalld防火墙开启ip伪装, 实现地址转换

# 网卡默认是在public的zones内,也是默认zones。永久添加源地址转换功能
[root@m01 ~]# firewall-cmd --add-masquerade --permanent
[root@m01 ~]# firewall-cmd --reload

2.客户端配置共享上网

#1.修改网关指向firewalld
[root@web03 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61 #2.填写对应的dns服务器
[root@web03 ~]# cat /etc/resolv.conf
nameserver 223.5.5.5 #3.重启网络
[root@web03 ~]# nmcli connection reload
[root@web03 ~]# nmcli connection down eth1 && nmcli connection up eth1 #4.测试网络
[root@web03 ~]# ping baidu.com
PING baidu.com (123.125.115.110) 56(84) bytes of data.
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=1 ttl=127 time=9.

firewall的更多相关文章

  1. Linux学习之八--关闭firewall防火墙安装iptables并配置

    CentOS 7之后默认使用的是firewall作为防火墙,这里改为iptables防火墙,并开启80端口.3306端口. 1.关闭firewall: systemctl stop firewalld ...

  2. Neutron 理解 (9): OpenStack 是如何实现 Neutron 网络 和 Nova虚机 防火墙的 [How Nova Implements Security Group and How Neutron Implements Virtual Firewall]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. centos7 firewall 防火墙

    在部署dubbo-monitor 和dubbo-admin zookeeper时候,外部访问不了部署好的服务,因为端口问题 ,现在把端口操作总结一下 参考: http://www.cnblogs.co ...

  4. WAF(Web Appliction Firewall) Bypass Technology Research

    catalog . What is Firewall . Detecting the WAF . Different Types of Encoding Bypass . Bypass本质 1. Wh ...

  5. ModSecurity web application firewall (WAF) Research

    catalog . 引言 . OWASP ModSecurity Core Rule Set (CRS) Project . Installation mod_security for Apache ...

  6. centos7 关闭firewall安装iptables并配置

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  7. CentOS7下Firewall防火墙配置用法详解

    官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...

  8. Good Firewall(字典树 HDU4760)

    Good Firewall Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. centos7 firewall 防火墙 命令

    为了架设ss在vultr上买了一个日本的vps 用的是centos7的系统 防火墙是 firewall 捣鼓了两天 在这里总结一下. 如果小伙伴也准备在vultr上买vps  在注册是 可以使用这个优 ...

  10. NX 8.5 License Server Firewall Setting

    Reference: http://eng-tips.com/viewthread.cfm?qid=284511 The FLEXNet Server(lmgrd) listens to 28000 ...

随机推荐

  1. 协程与Epoll的配合

    想快速了解协程与网络调用的原来么,那么请赶紧关闭本页,因为下面都是在扯淡. 这几天是端午假期,第一天大算照着网上一大堆基于ucontext来写协程的文章自己也写一个简单的协程实现.于是第一天我就开始动 ...

  2. SAP MM ME81N PO Value Analysis报表中Net Value 为负数是怎么回事?

    SAP MM ME81N PO Value Analysis报表中Net Value 为负数是怎么回事? ME81N 报表中,如下PO的net value为负数, 怎么回事? 经查这些PO都是退货采购 ...

  3. Android studio 下的SDK Manager只显示已安装包的情况

    原因是连接不上Google的更新服务器: 解决方法: 选择第三个Options: 修改Http Proxy Server: mirrors.neusoft.edu.cn Http Proxy Port ...

  4. react-fetch数据发送请求

    在一个项目中,数据的请求发送数据是最为重要的,不可能我们的数据都是自己进行编写的 在react中官方推荐使用的方法是fetch.当然它里面也可以使用vue中的axios请求数据,jQuery的$.aj ...

  5. 数学建模-灰色预测模型GM(1,1)_MATLAB

    GM(1,1).m %建立符号变量a(发展系数)和b(灰作用量) syms a b; c = [a b]'; %原始数列 A A = [174, 179, 183, 189, 207, 234, 22 ...

  6. 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱

    如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 onSaveInstanceState 以及 onRestoreInstanceState 方法用来保持 Activity 的状态, ...

  7. matlab练习程序(点集配准的SVD法)

    上一篇博客中我们使用了四元数法计算ICP. 本篇我们使用SVD计算ICP. 下面是<视觉slam十四讲>中的计算方法: 计算步骤如下: 我们看到,只要求出了两组点之间的旋转,平移是非常容易 ...

  8. React router动态加载组件-适配器模式的应用

    前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式. 一.普通路由例子 import Center from 'page/center'; import Data from 'page/data ...

  9. OneAPM 获得“2018中国 IT 服务创新奖”,彰显技术创新实力

    6月30日,主题为“智能服务 数字中国”的中国 IT 服务创新大会在京召开.作为第22届中国国际软件博览会的重头戏,本次大会由工业和信息化部.北京市人民政府共同主办,中国电子工业标准化技术协会信息技术 ...

  10. spark RDD,reduceByKey vs groupByKey

    Spark中有两个类似的api,分别是reduceByKey和groupByKey.这两个的功能类似,但底层实现却有些不同,那么为什么要这样设计呢?我们来从源码的角度分析一下. 先看两者的调用顺序(都 ...