【CentOS 7】Linux 操作系统防火墙设置和端口开放的方法

一、防火墙介绍
  • 所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。

  • 防火墙是一种保护计算机网络安全的技术性措施,它通过在网络边界上建立相应的网络通信监控系统来隔离内部和外部网络,以阻挡来自外部的网络入侵。

  • Linux 操作系统在默认情况下就安装了防火墙,CentOS 7 内置的防火墙已经从 Iptables 变成了 Firewall

二、防火墙安装
  • yum 安装 firewalld

    # 非图形化界面安装
    yum install firewalld  
    
    # 图形化界面安装  
    yum install firewall-config  
    
    # 图形化非图形化共同安装  
    yum install firewalld firewall-config
    
三、Iptables 和 Firewall 区别

在这里插入图片描述

四、Iptables 和 Firewall 详解
  • Firewall

    • 简介

      • firewalldCentOS 7 的一大特性,最大的好处是支持动态更新,不用重启服务,并且加入了 zone 概念

      • 防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接和接口。它支持 ipv4ipv6,并支持网桥,采用 firewall-cmd(command)firewall-config(GUI) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务

      • firewalld 的字符界面管理工具是 firewall-cmd

      • firewalld 默认配置文件有两个:/usr/lib/firewalld/(系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

      zone

      Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别

      级别注解
      drop丢弃所有进入的包,而不给出任何响应
      block拒绝所有外部发起的连接,允许内部发起的连接
      public允许指定的进入连接
      external同上,对伪装的进入连接,一般用于路由转发
      dmz允许受限制的进入连接
      work允许受信任的计算机被限制的进入连接,类似 workgroup
      home同上,类似 homegroup
      internal同上,范围针对所有互联网用户
      trusted信任所有连接

      过滤规则

      规则注解
      source根据源地址过滤
      interface根据网卡过滤
      service根据服务名过滤
      port根据端口过滤
      icmp-blockicmp 报文过滤,按照 icmp 类型配置
      masqueradeip 地址伪装
      forward-port端口转发
      rule自定义规则

      其中,过滤规则的优先级遵循如下顺序

      1. source
      2. interface
      3. firewalld.conf
    • 使用

      firewalld.service 基本操作

      • 停止

        systemctl stop firewalld.service 
        
      • 启动

        systemctl start firewalld.service
        
      • 重启

        systemctl restart firewalld.service
        
      • 查看状态

        systemctl status firewalld.service
        
      • 禁止 firewalld 开机启动

        systemctl disable firewalld.service
        
      • 设置开机启用防火墙

        systemctl enable firewalld.service
        
      • 查看服务是否开机启动

        systemctl is-enabled firewalld.service
        
      • 查看已启动的服务列表

        systemctl list-unit-files|grep enabled
        
      • 查看启动失败的服务列表

        systemctl --failed
        
      • 查看已经开放的端口列表

        firewall-cmd --zone=public --list-ports
        
      • 永久开启15672端口

        firewall-cmd --zone=public --add-port=15672/tcp --permanent
        
      • 重启防火墙使配置生效

        firewall-cmd --reload
        

      firewall-cmd 基本操作

      • 查看版本

        firewall-cmd --version
        
      • 查看帮助

        firewall-cmd --help
        
        --zone=NAME                 # 指定 zone
        --permanent                 # 永久修改,--reload 后生效
        --timeout=seconds           # 持续效果,到期后自动移除,用于调试,不能与 --permanent 同时使用
        
      • 查看运行状态

        firewall-cmd --state
        
      • 查看区域信息

        firewall-cmd --get-active-zones
        
      • 查看指定接口所属区域

        firewall-cmd --get-zone-of-interface=ens33
        

      firewall-cmd 规则设置

      • 对外暴露指定端口

        firewall-cmd --zone=public --add-port=9092/tcp --permanent
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        
      • 添加多个端口

        firewall-cmd --permanent --zone=public --add-port=8080-8083/tcp
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        
      • 开放http/80端口服务访问

        firewall-cmd --zone=public --add-port=80/tcp --permanent
        # 或者
        firewall-cmd --permanent --add-service=http
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        
      • 开放https/443端口服务访问

        firewall-cmd --zone=public --add-port=443/tcp --permanent
        # 或者
        firewall-cmd --permanent --add-service=https
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        
      • 查看已对外暴露端口列表

        firewall-cmd --zone=public --list-ports
        
      • 查看所有的规则暴露列表

        firewall-cmd --list-all
        # 或者
        iptables -nL
        
      • 查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)

        firewall-cmd --list-all-zones
        
      • 取消指定对外暴露的接口

        firewall-cmd --zone=public --remove-port=9092/tcp --permanent
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        
      • 拒绝所有包

        firewall-cmd --panic-on
        
      • 取消拒绝状态

        firewall-cmd --panic-off
        
      • 查看是否拒绝

        firewall-cmd --query-panic
        
      • 设置指定服务的端口号只允许指定网段的服务器能访问的规则

        规则场景一

        # 添加规则,设定 MySQL 服务的 3306 端口只允许 192.168.1.1/24 网段的服务器能访问
        firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.1/24" port protocol="tcp" port="3306" accept"
        # 或者添加规则,设定 MySQL 服务的 3306 端口只允许 192.168.1.100 这个IP的服务器能访问
        firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"
        
        # 当然除了设置远程服务器的指定 IP 可以访问以外,本地也需要支持可以访问的
        firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept"
        
        # 更新防火墙规则使修改生效
        firewall-cmd --reload
        

        规则场景二

        # 访问 IP 匹配 10.30.125.* 的网段服务器都可以访问 3306 端口
        firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" port protocol="tcp" port="3306" accept"
        # 10.30.125.* 其它网段访问都会被丢弃(也就是说,这么设定以后,该网段服务器只能访问 3306 端口,其它端口或者服务都不能被访问),请注意这两个命令的执行顺序
        firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" drop"
        

        P.S

        address="192.168.1.1/24" 的理解:  
        1. /8  是表示只要设置的前一个网段匹配,就能够适配
        2. /16 是表示只要设置的前两个网段匹配,就能够适配
        3. /24 是表示只要设置的前三个网段匹配,就能够适配
        4. /32 是表示只要设置的所有网段都匹配,就能够适配(可以尝试指定 IP 而不进行网段匹配设置,如:address="192.168.1.1")
        
      • 删除指定服务的端口号只允许指定网段的服务器访问的规则

        firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"
        firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="3306" accept"
        
      • 更多 rich rule 规则设定请参考如下命令

        man firewalld.richlanguage
        
      • 端口转发,将到本机的3306端口的访问转发到192.168.1.1服务器的3306端口

        # 开启伪装IP
        firewall-cmd --permanent --add-masquerade
        # 配置端口转发
        firewall-cmd --permanent --add-forward-port=port=3306:proto=tcp:toaddr=192.168.1.2:toport=13306
        

        P.S
        如果不开启伪装 IP,端口转发会失败。其次,要确保源服务器上的端口(3306)和目标服务器上的端口(13306)是开启的。

  • Iptables(CentOS 7 以下版本适用)

    • 打开/关闭/重启防火墙

      # 开启防火墙(重启后永久生效)
      chkconfig iptables on
      
      # 关闭防火墙(重启后永久生效)
      chkconfig iptables off
      
      # 开启防火墙(即时生效,重启后失效)
      service iptables start
      
      # 关闭防火墙(即时生效,重启后失效)
      service iptables stop
      
      # 重启防火墙
      service iptables restartd
      
    • 查看打开的端口

      /etc/init.d/iptables status
      
    • 打开某个端口(以8080为例)

      # 开启端口
      iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 
      
      # 保存并重启防火墙
      /etc/rc.d/init.d/iptables save
      /etc/init.d/iptables restart
      
    • 打开49152~65534之间的端口(重启后永久生效)

      iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT  
      
    • 其他打开方式

      # 编辑 iptables 文件
      vi /etc/sysconfig/iptables
      
      # 在该文件的最后一行添加如下开放指定端口的命令
      -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
      

      P.S
      参数说明:

      –A 参数就看成是添加一条规则
      –p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS
      –dport 就是目标端口,当数据从外部进入服务器为目标端口
      –sport 数据从服务器出去,则为数据源端口使用
      –j 就是指定是 ACCEPT -接收 或者 DROP 不接收
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值