其实还是我写的啦 https://www.jianshu.com/p/3444d9413461

1.防火墙firewall的基本概述

现在的RedHat/CentOS7版本默认都使用firewall防火墙了,firewall的配方法大致可以分为图形化和命令行。firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。

firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

wiki百科↓

https://fedoraproject.org/wiki/Firewalld

2.防火墙使用区域管理

  1. 阻塞区域(block):任何传入的网络数据包都将被阻止。
  2. 工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
  3. 家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
  4. 公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
  5. 隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
  6. 信任区域(trusted):所有的网络连接都可以接受。
  7. 丢弃区域(drop):任何传入的网络连接都被拒绝。
  8. 内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
  9. 外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
  10. 注:FirewallD的默认区域是public
  11. firewalld默认提供了九个zone配置文件:block.xmldmz.xmldrop.xmlexternal.xml home.xmlinternal.xmlpublic.xmltrusted.xmlwork.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。

3.防火墙基本指令参数

firewall-cmd #是命令行配置

firewall-config #是图形化配置 默认中文不支持福规则的动作设置需要LANG=C 转一下英文ASCII环境

  1. firewall -cmd
  2. 1、域zone相关的命令
  3. --get-default-zone 查询默认的区域名称
  4. --set-default-zone=<区域名称> 设置默认的区域
  5. --get-active-zones 显示当前正在使用的区域与网卡名称
  6. --get-zones 显示总共可用的区域
  7. --new-zone= 新增区域
  8. 2services管理的命令
  9. --get-services 显示预先定义的服务
  10. --add-service=<服务名> 设置默认区域允许该服务的流量
  11. --remove-service=<服务名> 设置默认区域不再允许该服务的流量
  12. 3Port相关命令
  13. --add-port=<端口号/协议> 设置默认区域允许该端口的流量
  14. --remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
  15. 4、网卡相关的命令
  16. --add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
  17. --change-interface=<网卡名称> 将某个网卡与区域进行关联
  18. 5、查看所有规则的命令
  19. --list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
  20. 加上--permanent 查看永久生效的配置参数、资源、端口以及服务等信息
  21. 6、重载防火墙的策略
  22. --reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
  23. ...

4.防火墙区域配置策略



开始之前确认防火墙是开启的状态

  1. 1zone区域相关指令
  2. //查看当前默认区域
  3. [root@server ~]# firewall-cmd --get-default-zone
  4. public
  5. //查看当前活跃的区域
  6. [root@server ~]# firewall-cmd --get-active-zone
  7. public
  8. interfaces: eth0 eth1
  9. //将当前默认区域修改为drop
  10. firewall-cmd --set-default-zone=drop
  11. //将网络接口关联至drop区域
  12. firewall-cmd --permanent --change-interface=eth0 --zone=drop
  13. //将192.168.122.0/24网段加入trusted白名单
  14. firewall-cmd --permanent --add-source=192.168.122.0/24 --zone=trusted
  15. //重载防火墙
  16. firewall-cmd --reload
  17. success
  18. //查看当前处于活动的区域
  19. firewall-cmd --get-active-zones
  20. drop # 默认区域, eth0接口流量都由drop区域过滤
  21. interfaces: eth0
  22. trusted # 数据包的源IP是192.168.122.0/24网段走trusted区域
  23. sources: 192.168.122.0/24
  24. 2、使用firewalld中各个区域的应用
  25. //允许10.0.0.1IP地址能访问ssh
  26. firewall-cmd --add-source=10.0.0.0/24 --permanent --zone=public #默认zone在public
  27. firewall-cmd --reload
  28. //将192.168.20.0网段加入白名单
  29. firewall-cmd --add-source=192.168.20.0/24 --permanent --zone=trusted
  30. firewall-cmd --reload
  31. //查看设置项
  32. firewall-cmd --get-active-zone
  33. drop
  34. interfaces: eth0 eth1
  35. public
  36. sources: 10.0.0.1/32
  37. trusted
  38. sources: 192.168.20.0/24
  39. 3、查询firewald指定区域的明细
  40. firewall-cmd --list-all --zone=drop #指明要查的zone 加上--permanent查看永久生效的区域的明细
  41. drop (active)
  42. target: DROP
  43. icmp-block-inversion: no
  44. interfaces: eth0 eth1
  45. sources:
  46. services:
  47. ports:
  48. protocols:
  49. masquerade: no
  50. forward-ports:
  51. source-ports:
  52. icmp-blocks:
  53. rich rules:
  54. 4、查询public区域是否允许请求SSH协议的流量 #对应服务对应状态
  55. firewall-cmd --zone=public --query-service=ssh
  56. yes
  57. 5、恢复默认规则操作
  58. firewall-cmd --set-default-zone=public
  59. firewall-cmd --remove-source=192.168.1.0/24 --zone=public --permanent
  60. firewall-cmd --remove-source=192.168.1.0/24 --zone=trusted --permanent
  61. firewall-cmd --reload

5.防火墙端口访问策略

  1. 1、开放80端口
  2. firewall-cmd --permanent --add-port=80/udp --add-port=80/tcp
  3. firewall-cmd --reload #重载配置生效
  4. firewall-cmd --list-ports #检查开放的端口
  5. 2、配置防火墙, 访问80udp的端口流量设置为永久拒绝,并立即生效
  6. firewall-cmd --permanent --remove-port=80/udp
  7. firewall-cmd --reload && firewall-cmd --list-ports #重载并查看

6.防火墙服务访问策略

  1. 1、开放httpd服务
  2. firewall-cmd --permanent --add-service=http --add-service=https
  3. firewall-cmd --reload ; firewall-cmd --list-services # 重载生效并查看
  4. 2、配置防火墙, 请求https协议的流量设置为永久拒绝,并立即生效
  5. firewall-cmd --permanent --remove-service=https
  6. firewall-cmd --reload ; firewall-cmd --list-services # 重载生效并查看

7.防火墙端口转发策略

端口转发需要用到forward-port

  1. 转发本机80/tcp端口的流量至8080/tcp端口,要求当前和长期有效
  2. firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:to port=8080:toaddr=10.0.0.61
  3. 移除转发
  4. firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.61
  5. 开启IP伪装
  6. firewall-cmd --add-masquerade --permanent #IP地址转换

8.防火墙富规则策略

到重点了,这里上面的条目富规则都可实现

具体配置案例查询firewalld.richlanguage

  1. //区里的富规则按先后顺序匹配,按先匹配到的规则生效。#firewall-cmd ↓
  2. --add-rich-rule='<RULE>' //在指定的区添加一条富规则
  3. --remove-rich-rule='<RULE>' //在指定的区删除一条富规则
  4. --query-rich-rule='<RULE>' //找到规则返回0 ,找不到返回1
  5. --list-rich-rules //列出指定区里的所有富规则
  6. --list-all --list-all-zones 也能列出存在的富规则
  7. //在192.168.0.0/24这个段里可以访问tftp服务
  8. rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" accept
  9. //来自192.168.0.0/24这个段的8080端口数据转发到本地的80端口
  10. rule family="ipv4" source address="192.168.0.0/24" forward-port to-addr="local" to-port="8080" protocol="tcp" port="80"
  11. //拒绝192.168.2.4这个ip访问
  12. rule family="ipv4" source address="192.168.2.4" drop
  13. ...

9.防火墙开启内部上网

firewalld防火墙开启ip伪装

1、网卡默认是在public的zones内,也是默认zones。永久添加源地址转换功能

firewall-cmd --add-masquerade --permanent

firewall-cmd --reload

2、共享上网

开启的ip转发后,相当了一台本地的nat服务器。

将client的网关指向你配置的ip转发服务器的IP。

只要你的ip转发服务器可以正常解析公网IP(dns可解析公网地址)。

Clent服务器就可以借助IP转发服务器实现上网(前提是中间路由可达)。

Firewalld 用法解析的更多相关文章

  1. extern "c"用法解析

    转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...

  2. WordPress的have_posts()和the_post()用法解析

    原文地址:http://www.phpvar.com/archives/2316.html 网上找到一篇介绍WordPress的have_posts()和the_post()用法解析的文章,觉得不错! ...

  3. extern "C" 用法解析

    extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...

  4. mysql group by 用法解析(详细)

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  5. (转载)mysql group by 用法解析(详细)

    (转载)http://blog.tianya.cn/blogger/post_read.asp?BlogID=4221189&PostID=47881614 mysql distinct 去重 ...

  6. group by 用法解析

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...

  7. sql中的group by 和 having 用法解析

    转载博客:http://www.cnblogs.com/wang-123/archive/2012/01/05/2312676.html --sql中的group by 用法解析:-- Group B ...

  8. C/C++之extern "C"的用法解析

    extern "C"的用法解析 http://blog.sina.com.cn/u/494a1ebc010004g5 C++中extern “C”含义深层探索 1.引言 C++语言 ...

  9. ZT extern "C"的用法解析

    extern "C"的用法解析 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同. ...

随机推荐

  1. 继续过Hard题目.周五

      # Title Editorial Acceptance Difficulty Frequency   . 65 Valid Number     12.6% Hard    . 126 Word ...

  2. uva live 2326 - Moving Tables

    把房间号映射在一条坐标上,然后排序,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划, ............ 次数*1 ...

  3. Step by Step Do IOS Swift CoreData Simple Demo

    简单介绍 这篇文章记录了在 IOS 中使用 Swift 操作 CoreData 的一些基础性内容,因为缺乏文档,基本上都是自行实验的结果.错漏不可避免,还请谅解. 部分内容借鉴了 Tim Roadle ...

  4. jni java与c++交互返回三维数组jobjectArray

    1.在java里创建一个类,在类里添加静态方法调用c++的类库dll,在java里创建要返回数组的函数.在java的main方法里创建返回后的测试方法. package cn.gov.cma.cnn. ...

  5. hdoj--3183--A Magic Lamp(贪心)

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  6. poj 1094 / zoj 1060 Sorting It All Out

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26876   Accepted: 92 ...

  7. Android开发(一)

    在界面显示文字,自定义文字的颜色,显示图片,按钮,编辑框,进度条进度条等.完成如下图的demo. ![这里写图片描述](http://img.blog.csdn.net/201510222212523 ...

  8. healthcheck

    -- ============================================================================= -- USAGE  : sqlplus ...

  9. NodeJS代码调试

    1.在Chrome打开chrome://flags/#enable-devtools-experiments 2.激活Developer Tools experiments 3.重启Chrome 4. ...

  10. python 进阶:修饰器的介绍

    参考链接:Python 函数装饰器 我认为python中的装饰器是一个很厉害的功能,他能瞬间提升代码的逼格,但对于我这样的小白来说,别说为所欲为的使用了,就连简单的尝试一下,却也是难于登天.经过长达半 ...