• linux学习笔记(26)firewalld防火墙


    【1】firewalld 的安装与基本概念

    FirewallD 是 CentOS 7 服务器上默认可用的防火墙管理工具。

    基本上,它是 iptables 的封装,有图形配置工具 firewall-config 和命令行工具 firewall-cmd

    使用 iptables 服务,每次改动都要求刷新旧规则,并且从 /etc/sysconfig/iptables 读取新规则,然而 firewalld 只应用改动了的不同部分。

    (1.0)安装并查看状态

    yum install firewalld
    启动服务,并在系统引导时启动该服务:
    
    systemctl start firewalld
    systemctl enable firewalld
    停止并禁用:
    
    systemctl stop firewalld
    systemctl disable firewalld
    检查防火墙状态。输出应该是 running 或者 not running
    
    # firewall-cmd --state
    running
    默认情况下,firewalld 处于运行状态,并拒绝所有传入流量,但有几个例外,如 SSH。
    
    查看 FirewallD 守护进程的状态:
    
    systemctl status firewalld

    (1.1)Zone的概念

    Zone :名称 Zone 描述block :所有进入的网络连接都会被拒绝。对于 IPV4,回复 icmp-host-prohibited 消息。对于 IPV6,回复 icmp6-adm-prohibited 消息。只有由内部发起的网络连接可以通行。

    dmz  :对于在非军事区域的服务器,外部网络可以在受限制的情况下进入内网,只有特定的网络连接请求被接受。

    drop  :所有的进入的网络包都会被丢掉,并且没有任何的回应。只有向发起的连接请求可以被放行。

    external :用于开始伪装的外部网络,特别是作为路由器。任务外部的网络会损坏你的计算机,只有特定的网络连接请求被接受。

    home    :在家使用,信任网络上的大多数计算机。只有特定的网络连接请求被接受。

    internal :在内部网络使用,信任当前网络下其他的计算机。只有特定的网络连接请求被接受。

    public   :在公共网络使用,不信任网络上的其他计算机。只有特定的网络连接请求被接受。

    trusted :所有的网络连接都会被接受。

    work    :在工作网络中使用,信任网络上的其他计算机。只有特定的网络连接请求被接受

    (1.2)策略制定的规则

      我们可以根据服务的类型,端口号,协议号,源端口,接口,来源等等来设定防火墙的规则;

    (1.3)策略的有效期(如何永久生效)

    运行时:本次运行有效,防火墙重启后失效;

    永久:永久有效; (-permanent)

    使用 firewalld 配置的防火墙策略默认为运行时(Runtime)模式,随着系统的重启会失效。

    如果想让配置一直存在,就需要使用永久(Permanent)模式,方法就是在用 firewall-cmd 命令时添加 –permanent 参数,设置之后需要执行 firewall-cmd –reload 命令重启,如下

    用命令怎么实现呢?我们假设现在要添加smtp服务到public区域中:
    
    firewall-cmd -zone=public -add-service=smtp                //运行时有效,重启失效
    firewall-cmd -permanent -zone=public -add-service=stmp     //永久有效,重启后开始生效
    firewall-cmd -runtime-to-permanent //将运行时配置转为永久配置
    #永久开放6379端口
    firewall-cmd --add-port=6379/tcp --permanent --zone=public

    #重启防火墙(修改配置后要重启防火墙)
    firewall-cmd --reload

    【2】firewalld 常用命令

    (2.1)基本命令

    firewalld-cmd --version        //查看firewalld版本
    firewalld-cmd --help           //查看firewalld用法
    man firewalld-cmd              //查看firewalld用法
     
    systemctl status firewalld     //查看firewalld状态
    firewalld-cmd --reload         //重载firewalld,当前已经生效的连接不中断
    firewalld-cmd --compulete-reload    //重载firewalld,当前连接中断
     
    firewalld-cmd --get-services   //列出所有预设服务,如上图的“3”
    firewalld-cmd --list-services  //列出当前正在生效的服务
    firewalld-cmd --permanent --zone=public --add-service=smtp      //在public区域中的永久配置中启用smtp服务
    firewalld-cmd --permanent --zone=public --remove-service-smtp   //在public区域中的永久配置中移除smtp服务
     
    firewalld-cmd --zone=public --list-ports    //列出public区域中已经启用的端口号
    firewalld-cmd --permanent --zone=public --add-port=8080/tcp     //在public区域中的永久配置中启用8080端口
    firewalld-cmd --permanent --zone=public --remove-port=8080/tcp  //在public区域中的永久配置中移除8080端口
     
    firewalld-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=90    //将本机的80端口流量转发到90端口,区域为public
     
    //将本机80端口的流量转发到192.168.1.1这台主机的8080端口上
    firewall-cmd --zone=public --add-masquerade       //不同服务器端口转发,要先开启 masquerade
    firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1
     
    firewall-cmd --get-zones                          //查看所有可用区域
    firewall-cmd --get-active-zones                   //查看当前活动的区域
    firewall-cmd --list-all-zones                     //列出所有区域的所有配置
    firewall-cmd --zone=work --list-all               //列出指定区域(如:work区域)的所有配置
    firewall-cmd --get-default-zone                   //查看默认区域
    firewall-cmd --set-default-zone=public            //设定默认区域
     
    //设定某一网段为内网段(然后可以创建策略为只允许内网访问呀)
    firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24
    firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24    //移除

    (2.2)富规则 rich-rule 

    firewall-cmd –list-rich-rules //列出所有富规则

    复杂规则配置案例:

    //允许来自主机 192.168.0.14 的所有 IPv4 流量
    firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'
    
    //拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量
    firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'
    
    //允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上
    firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'
    
    //将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)
    firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'
    
    //允许192.168.122.0/24主机所有连接
    firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'
    
    //每分钟允许2个新连接访问ftp服务
    firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept'
    
    //同意新的IPv4和IPv6连接FTP ,并使用审核每分钟登录一次
    firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept'
    
    //允许来自1192.168.122.0/24地址的新IPv4连接连接TFTP服务,并且每分钟记录一次
    firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
    
    //丢弃所有icmp包
    firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
    
    //当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除
    firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10
    
    //拒绝所有来自2001:db8::/64子网的主机访问dns服务,并且每小时只审核记录1次日志
    firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300
    
    //允许192.168.122.0/24网段中的主机访问ftp服务
    firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept'
    
    //转发来自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
    firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"'

    【3】最佳实践

    (3.1)构建自定义区域来 指定IP 访问 指定端口

    首先创建一个适当的区域名称(在我们的例子中,我们使用了mariadb access来允许访问MySQL数据库服务器)。

    # firewall-cmd --new-zone=mariadb-access --permanent

    接下来,重新加载firewalld设置以应用新更改。如果跳过此步骤,则在尝试使用新区域名称时可能会出错。这一次,新区域应该出现在区域列表中,如下面的屏幕截图所示。

    # firewall-cmd --reload
    # firewall-cmd --get-zones

    接下来,添加要在本地服务器上打开的源IP地址(10.24.96.5/20)和端口(3306),如图所示。然后重新加载防火墙设置以应用新更改。

    # firewall-cmd --zone=mariadb-access --add-source=10.24.96.5/20 --permanent
    # firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent
    # firewall-cmd --reload

    或者,您可以允许从整个网络(10.24.96.0/20)到服务或端口的流量。

    # firewall-cmd --zone=mariadb-access --add-source=10.24.96.0/20 --permanent
    # firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent
    # firewall-cmd --reload

    要确认新分区具有上面添加的所需设置,请使用以下命令检查其详细信息。

    # firewall-cmd --zone=mariadb-access --list-all

    (3.2)富规则 实现 指定IP 访问指定端口

    firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="1.2.3.4/32" port protocol="tcp" port="4567" accept'
    firewall-cmd --reload

    【4】小技巧

    (4.1)小技巧汇总

    # 多个端口
    firewall-cmd --zone=mariadb-access --add-port=3306-3309/tcp --permanent
  • 相关阅读:
    Core2.0知识整理
    bootbox.js官方文档
    MongoDB分片详解
    MongoDB高可用集群+MMS集群监控搭建
    使用 AcceptTcpClientAsync 进行 异步 操作
    Windows证书操作
    SQL Server查询所有的表名、字段名、注释
    【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇
    【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
    C#网络编程系列文章
  • 原文地址:https://www.cnblogs.com/gered/p/16494425.html
Copyright © 2020-2023  润新知