翻译

  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. 数据库索引(Oracle和Mysql)学习总结

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://mp.csdn.net/postedit/80910082 索引概念:     索引是关系数据库中用于存放每一条记录的一种 ...

  2. C#基础(201)--常量枚举

    本文知识点: 1.掌握常量的定义和使用方法 2.理解枚举的作用和特点 3.掌握枚举的使用方法 1.1.常量的定义语法 const  数据类型   常量名称  =  值: 1.2.常见错误 1.3常量的 ...

  3. SAP FI配置步骤

    http://blog.sina.com.cn/s/blog_8eda1a620100uwzj.html No. 配置对象 事务代码 配置内容 路径 备注 1 定义公司 OX15 企业结构>定义 ...

  4. Android项目实战(五十):微信支付 坑总结

    大部分APP必备需求,使用总结 Android接入文章在此:官方文档 文档很简单,Android分为四步: 1.后台配置 2.Android 内 注册appId 3.Android 内 调起支付 4. ...

  5. C# 过滤特殊字符,保留中文,字母,数字,和-

    #region public static string FilterChar(string inputValue) 过滤特殊字符,保留中文,字母,数字,和- /// <summary> ...

  6. Android ScrollView内部组件设置android:layout_height="fill_parent"无效的解决办法

    问题:scrollview内部组件都设置了android:layout_height="fill_parent"却没有效果. 解决办法:设置scrollview的fillViewp ...

  7. MSSQL中 数值类型转换为千分号的解决方案

    转自:http://www.maomao365.com/?p=4797 前言:最近需要将报表中关于数值部分的数据,采用千分号的形式展现给用户,下面将讲解如何制作1 将数值类型转换为 money类型2 ...

  8. web前端(5)—— 常用标签2

    以下三个不仅是常用标签了,还非常重要,所以请务必好好看,重要性从高到低: 盒模型div div标签是最常用最重要的,它可以把web页面分割成很多的小块分别管理 测试代码: <!DOCTYPE h ...

  9. windows下安装mysql

    windows 下安装mysql 1.先下载好 mysql5.7 版本的安装包,可以去官网自己下载,也可以从我的百度云分享 里面下载: 链接: https://pan.baidu.com/s/1VXk ...

  10. Elasticsearch拼音和ik分词器的结合应用

    一.创建索引时,自定义拼音分词和ik分词 PUT /my_index { "index": { "analysis": { "analyzer&quo ...