文章目录

  • 一、FIREWALL概念
    • 1、防火墙原理
      • (1)四表
      • (2)五链
    • 2、iptables的一些常用命令
    • 3、firewall的优势
    • 4、firewall的原理
  • 二、FIREWALL服务的配置和使用
    • 1、防火墙服务的管理
    • 2、命令方式配置防火墙(其实绝大多数情况下的命令都能tab出来)
    • 3、特别介绍一下某个zone下的规则参数对应含义
    • 4、富规则方式配置防火墙
  • 三、iptables的使用
    • 1、iptables基本命令的使用
    • 2、iptables规则的添加
    • 3、iptables规则的删除
    • 4、使用firewall-cmd命令对iptables链进行设置

一、FIREWALL概念

防火墙借助硬件和软件在内部和外部网络之间产生一种保护屏障,防火墙配置好且启用的情况下,将是不同网络或网络安全域之间信息的唯一出入口,能够设置安全策略控制网络的信息流,防火墙是一个分离器、一个限制器也是一个分析器,有效地监控内部网络和Internet之间的任何活动,保障内部网络的安全

在操作系统中可能有几种防火墙共存,firewalld、iptables、ebtables

1、防火墙原理

防火墙其实是通过内核netfilter模块实现的功能,netfilter也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集

而不同的防火墙工具都只是保存策略的工具,默认使用firewalld服务,底层调用的命令仍然是iptables,firewalld和iptables相比,一个很明显的区别是:iptables默认所有的数据包都能流入计算机,而firewalld默认会拒绝,下图是firewalld和iptables之间的关系

#mermaid-svg-9r0la5KgEWEkOR78 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .error-icon{fill:#552222;}#mermaid-svg-9r0la5KgEWEkOR78 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9r0la5KgEWEkOR78 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9r0la5KgEWEkOR78 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9r0la5KgEWEkOR78 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9r0la5KgEWEkOR78 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9r0la5KgEWEkOR78 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9r0la5KgEWEkOR78 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9r0la5KgEWEkOR78 .marker.cross{stroke:#333333;}#mermaid-svg-9r0la5KgEWEkOR78 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9r0la5KgEWEkOR78 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .cluster-label text{fill:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .cluster-label span{color:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .label text,#mermaid-svg-9r0la5KgEWEkOR78 span{fill:#333;color:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .node rect,#mermaid-svg-9r0la5KgEWEkOR78 .node circle,#mermaid-svg-9r0la5KgEWEkOR78 .node ellipse,#mermaid-svg-9r0la5KgEWEkOR78 .node polygon,#mermaid-svg-9r0la5KgEWEkOR78 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9r0la5KgEWEkOR78 .node .label{text-align:center;}#mermaid-svg-9r0la5KgEWEkOR78 .node.clickable{cursor:pointer;}#mermaid-svg-9r0la5KgEWEkOR78 .arrowheadPath{fill:#333333;}#mermaid-svg-9r0la5KgEWEkOR78 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9r0la5KgEWEkOR78 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9r0la5KgEWEkOR78 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9r0la5KgEWEkOR78 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9r0la5KgEWEkOR78 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9r0la5KgEWEkOR78 .cluster text{fill:#333;}#mermaid-svg-9r0la5KgEWEkOR78 .cluster span{color:#333;}#mermaid-svg-9r0la5KgEWEkOR78 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9r0la5KgEWEkOR78 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

firewall-config图形化方式
firewall-cmd命令方式
firewalld daemon & service
iptables command
netfilter

iptables包含四个表五个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度

(1)四表

iptables的四个表,默认是fileter,表处理优先级:raw > mangle > nat > filter

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:优先级最高,设置raw时一般是为了不再让iptables做数据包跟踪处理,提高性能

raw表只使用在PREROUTING链和OUTPUT链,因为优先级最高,从而可以对收到的数据包在链接跟踪前处理。一旦使用了raw表,在某个链上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了

四个表中,用的最多的是filter表过滤,然后就是nat表用于转发

(2)五链

iptables的五个链

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARD:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发

POSTROUTING:发送到网卡接口之前

图中的五个链分别对应了内核中的对应的五个内核函数(在内核中函数名称是小写,所以这里五条链用大写与之区分),按照箭头指向顺序,假设有一个数据包,我现在不想让其进入内核,那么就在PREROUTING链阻止;假设有一个数据包,现在不想让其进入用户空间,那么可以在PREROUTING和INPUT链进行阻止

FORWARD:假设一个数据包通过了PREROUTING到达了内核,现在不想让其数据包进入计算机内部,使用FORWORD链使这个数据包通过内核直接转发给其他计算机,FORWARD链转发功能默认没有开启,可以通过防火墙进行开启

假设一个数据包进入到了用户空间,现在不想让这个数据包从我的计算机中流出,那么就可以在OUTPUT链和POSTROUTING链进行阻拦

2、iptables的一些常用命令

iptables -L可以看到默认有三条链INPUT链、FORWARD链、OUTPUT链

iptables -F清除所有链规则

3、firewall的优势

(1)firewalld可以动态修改单条规则

(2)firewall要比iptables使用简单,即使不明白"四张表五条链"而且对TCP/IP协议不太理解也能实现大多数的功能,因为firewall配置相对简单,下面主要写一下firewall用法

4、firewall的原理

firewall有9个域zone,默认是public域

名称 功能 配置文件
阻塞区域(block) 任何传入的网络数据包都将会被阻止 block.xml
工作区域(work) 相信网络上的其他计算机不会损害自己的计算机 work.xml
家庭区域(home) 相信网络上的其他计算机不会损害自己的计算机 home.xml
公共区域(public) 不相信网络上的任何计算机,只有选择接受传入的网络计算机 public.xml
隔离区域(DMZ) 隔离区域也被叫做非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接 dmz.xml
信任区域(trusted) 所有的网络连接都可以接受 trusted.xml
丢弃区域(drop) 任何传入的网络连接都被拒绝,且不响应 dorp.xml
内部区域(internal) 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接 internal.xml
外部区域(external) 不相信网络上的其他计算机,不会损害你的计算机,只有选择接受传入的网络连接 external.xml

这些zone的配置文件都保存在"/usr/lib/firewallld/zones"目录下。默认情况下在/etc/firewalld/zones下面只有一个public.xml。如果给另外一个zone做一些改动,并永久保存,那么就会自动生成对应的配置文件

比如给work zone增加一个端口

firewall-cmd --permanent --zone=work --add-prot=1000/tcp

那么就会在/usr/lib/firewalld/zones/目录下生成对应的work.xml配置文件

由此可见,firewalld的配置文件其实有两个主要的目录

(1)/usr/lib/firewalld/系统配置文件,尽量不要修改

(2)/etc/firewalld/用户配置文件,可以自行修改

/etc/firewalld配置文件目录下面,不止保存了zones的配置文件,还有services文件,也就是

/usr/lib/firewalld/services/目录中,每个文件分别对应一项具体的网络服务,通过名字来管理更加高效,后文的讲解,会让你更明白这两个路径下的这些文件的含义和用途

二、FIREWALL服务的配置和使用

1、防火墙服务的管理

# systemctl对防火墙的管理
[root@localhost ~]# systemctl start firewalld  # 起服务
[root@localhost ~]# systemctl stop firewalld #停服务
[root@localhost ~]# systemctl enable firewalld # 设置防火墙开机自启
[root@localhost ~]# systemctl disable firewalld # 关闭防火墙开机自启
[root@localhost ~]# systemctl status firewalld # 查看firewalld服务的状态
[root@localhost ~]# systemctl mask firewalld.service   # 注销服务,执行后无法使用systemctl控制该服务的开启与关闭且开机不会加载该服务
[root@localhost ~]# systemctl unmask firewalld.service # 取消注销# firewall-cmd对防火墙的管理
[root@localhost ~]# firewall-cmd --state   # 显示状态
[root@localhost ~]# firewall-cmd --reload  # 重载防火墙策略,无需断开链接,动态加载规则
[root@localhost ~]# firewall-cmd --complete-reload # 重启防火墙,类似于重启服务
[root@localhost ~]# firewall-cmd --panic-on        # 任何人都不能访问我这台计算机
[root@localhost ~]# firewall-cmd --panic-off   # 与上一条命令对应

2、命令方式配置防火墙(其实绝大多数情况下的命令都能tab出来)

# 下面对命令做了大概的分类,好好观察一下,找到大概的规律,就容易理解命令的逻辑了
# 对zone和服务的全览(泛查询)
[root@localhost ~]# firewall-cmd --get-zones   # 查看所有的zone
[root@localhost ~]# firewall-cmd --get-default-zone    # 查看默认的zone
[root@localhost ~]# firewall-cmd --get-active-zones    # 查看活跃的zone
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33    # 查看ens33接口所属区域
[root@localhost ~]# firewall-cmd --get-services    # 查看所有的服务# 对某个zone下的服务查看,可以配合"--zone=域"使用
[root@localhost ~]# firewall-cmd --list-all    # 列出指定的zone的规则,如果不指定zone默认查看当前活跃zone的规则
[root@localhost ~]# firewall-cmd --list-source # 列出源IP
[root@localhost ~]# firewall-cmd --list-source-ports   # 列出源端口
[root@localhost ~]# firewall-cmd --list-ports  # 列出端口
[root@localhost ~]# firewall-cmd --list-services   # 列出活跃zone下的服务# 对服务、端口等的设置与添加,策略的设置
[root@localhost ~]# firewall-cmd --set-default-zone=work  # 设置默认zone
[root@localhost ~]# firewall-cmd --add-interface=ens33    # 添加接口
[root@localhost ~]# firewall-cmd --add-source=192.168.0.21    # 添加源地址
[root@localhost ~]# firewall-cmd --add-service=dhcp   # 添加服务
[root@localhost ~]# firewall-cmd --add-port=80/tcp    # 添加端口
[root@localhost ~]# firewall-cmd --add-masquerade  # 开启内核路由转发功能,其等同于以下改法
[root@localhost ~]# vim /etc/sysctl.conf修改net.ipv4.ip_forward = 1
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request    # 禁止ping
[root@localhost ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 设置80到8080端口转发,add-forward-prot=后面的内容以冒号分隔,正好是三对,源端口:协议:目标端口# 对策略的删除
[root@localhost ~]# firewall-cmd --remove-sevice=dhcp # 删除服务
[root@localhost ~]# firewall-cmd --remove-port=80/tcp # 删除端口
[root@localhost ~]# firewall-cmd --panic-on    # 丢弃
[root@localhost ~]# firewall-cmd --query-panic # 查询丢弃状态
[root@localhost ~]# firewall-cmd --panic-off   # 取消丢弃# 永久生效
[root@localhost ~]# firewall-cmd --permanent ...   # 如果想要永久生效,就在firewall-cmd后边加一个--permanent参数# 总结来说就是:firewall-cmd命令后面
# 1、如果是泛查询,一般是--get-xxx
# 2、如果是查询某个zone下的xxx,一般是--list-xxx再结合--zone=一起使用
# 3、如果是对某个zone下的xxx做修改或添加,一般是--add-xxx
# 4、如果是对某个zone下的xxx做删除,一般是--remove-xxx
# 5、永久生效的话,另加--permanent

3、特别介绍一下某个zone下的规则参数对应含义

[root@localhost ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: no      # icmp-blocks反转开关interfaces: ens33sources:      # 允许哪个原地址到达计算机services: ssh mdns dhcpv6-client cockpitports:protocols:masquerade: no            #  伪装(路由转发功能),配置成功后,可以用sysctl -p查看到net.ipv4.ip_forward = 1forward-ports:       # 端口转发source-ports:     # 允许哪个源端口到达计算机icmp-blocks:  # 如果icmp-blok-inversion为默认的no的时候,这里为黑名单,若为yes则相反rich rules:       # 富规则

可以使用sysctl -p查看一下策略,可以看到内核打开的一些功能,sysctl -p查看到的内容和/etc/sysctl.conf文件的内容是一致的

【注】特别要注意的是:如果选取的策略是通过放行服务(ssh)的方式,而不是通过放行端口的方式对网络做安全加固的话,那么可能会因为不同服务器ssh服务本身使用的端口不同,而导致有的服务器ssh放行失败

举个简单的例子如下:

ssh默认使用的端口是22,但是某些服务器会修改为2222(通过修改/etc/ssh/sshd_config可以实现),此时如果firewall-cmd对ssh服务做放行,那么默认放行的将是22端口(这是因为默认的xml描述文件里对ssh服务描述的就是22),最终导致ssh服务使用2222,而防火墙只通行22,最终导致ssh连接不上

那么对ssh服务的放行究竟是对哪个配置文件做的修改呢?其实其默认是读取/usr/lib/firewalld/services目录下的ssh对应的xml描述文件,firewall-cmd做操作的时候实际上也是操作这个文件。

当然了,能放这些xml文件的地方除了这个路径,其实还有/etc/firewalld/services这个路径,也就是说,为了防止直接修改/usr/lib/firewalld/services路径下的xml文件修改出错,可以用cp命令拷贝到/etc/firewalld/services目录下一份,这样只修改/etc/firewalld/services下的这个xml就行了,修改完对ssh服务的描述,firewalld服务找xml文件的时候,会先加载/usr/lib/firewalld/services目录下的,之后再加载/etc/firewalld/services目录下的xml文件,后加载的会覆盖掉先前的

通过上面的例子可以看出来,通行策略使用放行服务的方式,可能会引起诸多问题,所以还是建议通过端口做控制,使用哪些端口,就对哪些端口做控制

4、富规则方式配置防火墙

如果不知道富规则语法,可以使用man firewall-cmd查看man帮助,其中不难找到富规则的关键词firewalld.richlanguage,然后使用man richlanguage查看

rule[source][destination]service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port[log][audit][accept|reject|drop|mark]

示例

[root@localhost ~]# firewall-cmd --add-rich-rules='rule family=ipv4 source not address=192.168.0.200 destination address=192.168.0.33 accept'
# 源地址不是192.168.0.200目标地址是192.168.0.33的情况,允许通过

三、iptables的使用

1、iptables基本命令的使用

[root@localhost ~]# iptables -L     # 查看所有规则
# 查看的结果中,如果有的链中有policy的是主链,也就是内核的链
[root@localhost ~]# iptables -t filter -L      # 查看filter表中的所有链
[root@localhost ~]# iptables -F        # 清空所有规则

2、iptables规则的添加

[root@localhost ~]# iptables -A INPUT -s 192.168.0.200 -j ACCEPT        # 默认是添加到filter表中,给INPUT链添加一条规则,来自源地址192.168.0.200的数据允许通过
[root@localhost ~]# iptables -A INPUT -p tcp --dport 135:139,80 -j DROP        # 在INPUT链中设置规则,对端口进行控制,对135到139之间的端口以及80端口的tcp连接进行丢弃

规则添加好之后,只当前生效,如果需要永久生效,有两种方式

(1)直接修改iptables的配置文件/etc/sysconfig/iptables把上面的iptables规则设置都编辑在这个配置文件中

(2)先用/usr/sbin/netfilter-persistent save命令保存一下目前设置的规则,默认会保存到/etc/iptables/rules.v4中,编写开机启动脚本,每次开机把rules.v4中的规则恢复出来

# 脚本内容如下
#!/bin/bash
/sbin/iptables-restore  <  /etc/iptables/rules.v4        # 恢复规则

脚本名为iptables.sh,放在/etc/network/if-pre-up.d/目录下

3、iptables规则的删除

[root@localhost ~]# iptables -L INPUT --line-numbers    # 查看所有规则对应的行号
[root@localhost ~]# iptables -D INPUT 11   # 这里的11是行号

永久删除的话,先当前删除,然后再写入配置就好了

4、使用firewall-cmd命令对iptables链进行设置

[root@localhost ~]# firewall-cmd --direct --get-all-chains          # 查看所有的链
[root@localhost ~]# firewall-cmd --direct --get-chains filter      # 查看filter表中的链
[root@localhost ~]# firewall-cmd --direct --add-chain ipv4 filter data # 在filter表中添加一条名为data的链,该链对ipv4地址进行过滤
# 添加data链后,对这个链添加规则
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 filter data 1 -s 192.168.0.66 -j ACCEPT      # 在data链中的第一行添加源地址192.168.0.66允许的规则

学习笔记(八):FIREWALL配置与使用相关推荐

  1. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  2. MongoDB 学习笔记八 复制、分片、备份与恢复、监控

    MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...

  3. TMS320F280049C 学习笔记19 可配置逻辑块 (CLB) 软件配置

    文章目录 CLB tool 简介 CLB配置过程概述 软件安装 GNU Compiler Install the Simulation Viewer 使用CLB tool 导入空CLB工程 更新变量路 ...

  4. Redis 学习笔记八:集群模式

    Redis 学习笔记八:集群模式 作者:Grey 原文地址: 博客园:Redis 学习笔记八:集群模式 CSDN:Redis 学习笔记八:集群模式 前面提到的Redis 学习笔记七:主从复制和哨兵只能 ...

  5. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  6. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  7. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  8. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  9. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  10. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

最新文章

  1. JAVA学习笔记(6)
  2. 数字证书原理分析总结
  3. Springboot 请求数据
  4. 阿里云容器服务cni网络插件terway非官方网络性能测试
  5. .NET Core验证ASP.NET密码
  6. 苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!
  7. JavaWeb【Velocity】
  8. 【CF-gym101889:B】Buggy ICPC(找规律+思维)
  9. 坐标c语言输入数组中,求助 C语言中如何利用二维数组计算多个坐标之间的距离...
  10. AutoJs学习-几个QQ群脚本(群引流\提取成员\加群友\加群)
  11. IMU传感器输出值与实际物理量的换算关系
  12. mysql amoeba 配置_mysql amoeba安装配置步骤
  13. VC 用发音函数Beep()播放简谱音乐
  14. Java语言编写小游戏
  15. 假如大数据组件中的动物都变成神奇宝贝,那会变成什么样?(大数据的组件动漫化)
  16. mac删除ssh key_好用的mac终端命令仿真工具
  17. 高等数学(第七版)同济大学 习题9-4 (前11题)个人解答
  18. HTML.网页程序设计
  19. java高级架构师工资多少啊,附源代码
  20. 怎么解除计算机网络密码,电脑怎么解除密码

热门文章

  1. Python获取Windows管理员权限
  2. 揭秘!量子计算的可怕之处在哪?摩尔定律到达极限会发生什么?
  3. 拉普拉斯金字塔图像融合
  4. 教你如何秒杀12306,JAVA程序抢票成功 分享 附截图
  5. avast! Home/Pro 4.7.1098简体中文
  6. 基础知识大全(LATEX,三角函数变换)
  7. Mindjet MindManager 2021思维导图Keygen教程分享
  8. 【xshell】家庭个人免费版
  9. 10 种常用的CSS框架,收藏一下
  10. 计算机考试操作题要点,江苏省计算机一级考试操作题注意要点