shell编程之防火墙基础

一、Firewalld概述

  • Firewalld简介

    • 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙
      管理工具
    • 支持IPv4、IPv6防火墙设置以及以太网桥
    • 支持服务或应用程序直接添加防火墙规则接口
    • 拥有两种配置模式
      • 运行时配置
      • 永久配置

二、Firewalld和iptables的关系

  • netfilter
    • 位于Linux内核中的包过滤功能体系
    • 称为Linux防火墙的“内核态’
  • Firewalld/iptables
    • CentOS7默认的管理防火墙规则的
      工具(Firewalld)
    • 称为Linux防火墙的“用户态”
      在这里插入图片描述
  • Firewalld和iptables的区别
    在这里插入图片描述

三、iptables的四表五链

  • 链就是位置:共有五个进路由(PREROUT ING)、进系统(INPUT)、转发(FORWARD)、出系统(OUTPUT)、出路由(POSTROUTING);
  • 表就是存储的规则;数据包到了该链处,会去对应表中查询设置的规则,然后决定是否放行、丢弃、转发还是修改等等操作。

3.1、四表

  • filter表 一 过滤数 据包
  • Nat表 一 用 于网络地址转换(IP、 端口)
  • Mangle表 一 修改数 据包的服务类型、TIL、并且可以配置路由实现Q0S
  • Raw表决定数据包是否被状态跟踪机制处理
  • 用的较多的是filter表、Nat表,默认的表是:filter

3.2、五链

  • INPUT链—进来的数据包应用此规则链中的策略

  • OUTPUT链----外出的数据包应用此规则链中的策略

  • FORWARD链-----转发数据包时应用此规则链中的策略

  • PREROUTING 链----对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)

  • POSTROUTING 链----对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

3.3、iptables语法格式

iptables [-t 表名] 选项[链名] [条件] [-j 控制类型]
iptables常用参数:
-t 表名
-j 控制类型
-P 设置默认策略:iptables
-P INPUT (DROP|ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则(优先响应)
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp   icmp没端口
--dport num 匹配目标端口号
--sport num 匹配来源端口号

四、Firewalld的防火墙配置

4.1、防火墙维护命令

  • 防火墙进程操作
[root@Server /]# systemctl 选项 firewalld
  • 选项:start stop restart status
  • 防火墙管理操作
    • firewall-cmd命令
      • 支持全部防火墙特性
      • 对于状态和查询模式,命令只返回状态,没有其他输出
      • –permanent参数:携带该参数表示永久配置,否则表示运行时配置
      • –one=]选项:不携带此选项表示针对默认区域操作,否则针对指定区域操作

4.2、防火墙状态查询命令

  • 查询Firewalld状态
[root@localhost mnt]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2019-11-20 13:32:39 CST; 2 weeks 4 days ago
[root@Server门# firewall-cmd -tate
running

4.3、防火墙重载配置命令

  • 重新加载Firewalld的配置
    • firewall-cmd -reload
[root@localhost mnt]# firewall-cmd --reload
success
  • firewall-cmd --complete-reload
    • 状态信息将会丢失,多用于处理防火墙出现问题时
[root@localhost mnt]# firewall-cmd -complete-reload
success
  • systemctl restart firewalld
[root@localhost mnt]# systemctl restart firewalld

4.4、查询预定义信息命令

[root@localhost mnt]# firewall-cmd --get-zones     #查看预定义的区域
block dmz drop external home internal public trusted work
[root@localhost mnt]# firewall-cmd --get-services   #查看预定义服务
[root@localhost mnt]# firewall-cmd --get-icmptypes   #查看预定义的ICMP类型

五、Firewalld区域操作命令

  • 显示网络连接或接口的默认区域
[root@localhost mnt]# firewall-cmd --get-default-zone
public
  • 设置网络连接或接口的默认区域为internal
[root@localhost mnt]# firewall-cmd --set-default-zone=internal
success
[root@localhost mnt]# firewall-cmd --get-default-zone
internal
  • 显示已激活的所有区域
[root@localhost ~]# firewall-cmd --get-active-zones
internal
  interfaces: ens33
  • 激活的条件:区域至少关联一个接口或一个源地址/网段
  • 显示ens33接口绑定的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 为ens33接口绑定work区域
[root@localhost ~]# firewall-cmd --zone=work --add-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
work
  • 为work区域删除绑定的网络接口ens33
[root@localhost ~]# firewall-cmd --zone=work --remove-interface=ens33
The interface is under control of NetworkManager, setting zone to default.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 查询work区域中是否包含接口ens33
[root@localhost ~]# firewall-cmd --zone=work --query-interface=ens33
yes
  • 显示区域及其规则
    • 显示所有区域及其规则
[root@localhost ~]# firewall-cmd --list-all-zones
  • 显示internal区域的所有规则
[root@localhost ~]# firewall-cmd --zone=internal --list-all
  • 显示默认区域的所有规则
[root@localhost ~]# firewall-cmd --list-all
  • 显示internal区域内允许访问的所有服务
[root@localhost ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
  • 为public区域设置允许访问SMTP服务
[root@localhost ~]# firewall-cmd --zone=public --add-service=smtp
success
[root@localhost ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client smtp
  • 删除internal区域中的SSH服务
[root@localhost ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=ssh
success      
            #删除internal区域中的SSH服务
[root@localhost ~]# firewall-cmd --zone=internal --list-services
mdns samba-client dhcpv6-client
[root@localhost ~]# 
  • 查询internal区域中是否启用了SSH服务
[root@localhost ~]# firewall-cmd --zone=internal --query-service=ssh
no

六、Firewalld端口操作命令

  • 显示internal区域内允许访问的所有端口号
[root@localhost ~]# firewall-cmd --zone=internal --list-ports
80/tcp
  • 启用interna区域 22 端口的TCP协议组合
[root@localhost ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
  • timeout=5m:表示5分钟后删除该端口,多用于测试目的“
  • 禁用internal区域22端口的TCP协议组合
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=22/tcp 
success
  • 查询internal区域中是否启用了22端口和TCP协议组合
[root@localhost ~]# firewall-cmd --zone=internal --query-port=22/tcp
yes

七、Firewalld阻塞ICMP操作命令

  • 显示 internal 区域内阻塞的所有ICMP类型
[root@localhost ~]# firewall-cmd --zone=internal --list-icmp-blocks
echo-request
  • 为 internal 区域设置阻塞echo-reply类型的ICMP
[root@localhost ~]# firewall-cmd --zone=internal --add-icmp-block=echo-reply
success

删除 internal 区域已阻塞的echo-reply类型的ICMP

[root@localhost ~]# firewall-cmd --zone=internal --remove-icmp-block=echo-reply
success

查询 internal 区域的echo-request类型的ICMP是否阻塞

[root@localhost ~]# firewall-cmd --zone=internal --query-icmp-block=echo-request
yes
发布了69 篇原创文章 · 获赞 32 · 访问量 3445

猜你喜欢

转载自blog.csdn.net/qq_28361541/article/details/103455502
今日推荐