• Centos7 配置防火墙 firewall


    一、firewall

    1、从CentOS7开始,默认使用firewall来配置防火墙,没有安装iptables(旧版默认安装)。

    2、firewall的配置文件是以xml的格式,存储在 /usr/lib/firewalld/ 和 /etc/firewalld/ 目录中。

     (1)系统配置目录,目录中存放定义好的网络服务和端口参数,系统参数,不要修改。

    1 /usr/lib/firewalld/
    2 /usr/lib/firewalld/services
    3 /usr/lib/firewalld/zones

     (2)用户配置目录

    1 /etc/firewalld/
    2 /etc/firewalld/services
    3 /etc/firewalld/zones

    3、特性

    (1)firewalld是centos7的一大特性,最大的好处有两个:

    • 支持动态更新,不中断用户连接
    • 加入了防火墙的“zone”概念 ,可以理解为 firewalld 的单位、规则集:

       1️⃣ drop(丢弃),任何接受的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网路连接。

       2️⃣ block(限制),任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。

       3️⃣ public(公共),在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。  

         4️⃣ external(外部),特别是为路由器启动了伪装功能的外部网。你不能相信来自网络的其他计算机,不能相信他们不会对你的计算机造成危害,只能接收经过选择的连接。

       5️⃣ dmz(非军事区),用于你的非军事区内的电脑,此区域内可公开访问,可以有限的进入你的内部网络,仅仅接收经过选择的连接。

       6️⃣ work(工作),用于工作区。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。

       7️⃣ home(家庭),用于家庭网络。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。

       8️⃣ internal(内部),用于内部网络。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。

       9️⃣ trusted(信任),可接受所有的网络连接。

       说明:firewalld 的缺省区域是 public。

    (2)firewalld有图形界面和工具界面

    (3)firewalld的字符界面管理工具是 firewall-cmd 

    二、配置防火墙

    设置防火墙的方式有两种:firewall命令 、 直接修改配置文件

    1、firewall命令

    例如:对外开放/停止3306端口,供外部的计算机访问。该命令方式添加的端口,可在/etc/firewalld/zones中的对应配置文件中得到体现

    #开放
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    
    #删除
    firewall-cmd --zone=public --remove-port=3306/tcp --permanent
    
    #别忘记重启防火墙
    systemctl restart firewalld 

    说明:

    • firewall-cmd:Linux中提供的操作firewall的工具。
    • –zone:指定作用域。
    • –add-port=3306/tcp:添加的端口,格式为:端口/通讯协议。
    • –permanent:表示永久生效,没有此参数重启后会失效。

    2、直接修改配置文件

    比如:修改 /etc/firewalld/zones/public.xml 

    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>
      <port protocol="tcp" port="20"/>
      <port protocol="tcp" port="21"/>
      <port protocol="tcp" port="22"/>
      <port protocol="tcp" port="80"/>
      <port protocol="tcp" port="8888"/>
      <port protocol="tcp" port="39000-40000"/>
      <port protocol="tcp" port="3306"/>
    </zone>

    如上,需要开放的端口,已经添加再public这个区域里了。

    三、firewall常用命令

    1、查看状态

    service firewalld status 
    systemctl status firewalld firewall-cmd --state

    2、启动、停止、重启

    # 启动
    service firewalld start
    或
    systemctl start firewalld
    
    # 停止
    service firewalld stop
    或
    systemctl stop firewalld
    
    # 重启
    service firewalld restart
    或
    systemctl restart firewalld

    3、开机自启动

    # 关闭开机自启动
    systemctl disable firewalld
    
    # 开启开机自启动
    systemctl enable firewalld

    4、查看防火墙规则

    firewall-cmd --list-all

    四、其他命令

    1、其他基本命令

    firewall-cmd --version          #查看版本
    firewall-cmd --help             #查看帮助
    firewall-cmd --panic-on         #拒绝所有包
    firewall-cmd --panic-off        #取消拒绝状态
    firewall-cmd --query-panic      #查看是否拒绝
    firewall-cmd --reload           #重新加载防火墙,并不中断用户连接(firewalld特性之一动态添加规则)
    firewall-cmd --complete-reload  #重新加载防火墙并中断用户连接(类似于重启服务)

    2、zone相关

    firewall-cmd --get-zones                    #显示支持的区域列表
    firewall-cmd --get-active-zones                 #查看当前的区域
    firewall-cmd --get-default-zone                 #查看默认区域
    firewall-cmd --set-default-zone=home            #设置默认区域为 home
    firewall-cmd --zone=public --list-interfaces    #显示显示公共区域(public)所有接口
    firewall-cmd --zone=public --list-all           #显示公共区域(public)所有设置
    firewall-cmd --get-zone-of-interface=ens33      #查看指定接口 ens33 所属区域
    firewall-cmd --zone=internal --change-interface=ens33   #临时修改网络接口 ens33 为内部区域(internal),永久修改加上 --permanent 参数
    firewall-cmd --zone=public --add-interface=ens37        #为公共区域(public)增加一个接口 ens37  

    3、service相关

    firewall-cmd --get-service                           #显示服务列表
    firewall-cmd --list-service                          #显示当前服务
    firewall-cmd --enable service=ssh                    #允许SSH服务通过
    firewall-cmd --disable service=ssh                   #禁止SSH服务通过
    firewall-cmd --enable service=samba --timeout=600    #临时允许 samba 服务通过 600 秒
    firewall-cmd --permanent --zone=internal --add-service=http   #添加 http 服务到内部区域(internal)
    firewall-cmd --zone=work --add-service=smtp          #把 smtp 服务加入工作区域(work) 
    firewall-cmd --zone=work --remove-service=smtp       #从工作区域(work)移除 smtp 服务

    4、地址伪装

    firewall-cmd --zone=external --query-masquerade     #查询外部区域(external)是否能伪装ip,结果为yes
    firewall-cmd --zone=external --add-masquerade       #外部区域(external)启用IP伪装(masquerade)
    firewall-cmd --zone=external --remove-masquerade    #外部区域(external)禁用用IP伪装

    5、端口转发

    # 打开端口转发,首先需要打开IP地址伪装
    firewall-cmd --zone=external --add-masquerade
    
    # example 1:把外部区域(external)的 22 端口 转发至 3753
    firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toport=3753
    
    # example 2:把外部区域(external)的 22 端口转发到 192.168.1.20 的同一端口
    firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toaddr=192.168.1.20
    
    # example 3:把外部区域(external)的 22 端口转发到 192.168.1.2052222 端口
    firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=52222:toaddr=192.168.1.20  
  • 相关阅读:
    2015.07-2015.08
    the last lecture
    强化的单例属性_Effective Java
    Socket通信客户端设计(Java)
    静态工场方法代替构造器
    如何控制Java中的线程,总结了3种方法...
    如何快速转型,比如C#...to...Java
    C#中var和dynamic
    How to use the Visual Studio
    mark blog
  • 原文地址:https://www.cnblogs.com/cleven/p/11040143.html
Copyright © 2020-2023  润新知