Linux下的防火墙(firewalld和iptables,地址伪装,地址转发)

1. 什么是firewalld
防火墙(Firewalld)是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
防火墙是系统的第一道防线,其作用是防止非法用户的进入
 
 
  • 1
centos 7 中防火墙Firewalld是一个非常强大的功能,Firewalld提供了支持网络/防火墙区域(zone)定义网络连接以及接口安全等级的动态防火墙管理工具,它支持IPv4,IPv6防火墙设置以及以太网桥接,并拥有运行时配置和永久配置选项它也支持允许服务或者应用程序直接添加防火墙规则的接口
以前的system-config-frewall/lokkit防火墙模型是静态的,每次修改都要求防火墙完全重启
这个过程包括内核netfilter防火墙模块的卸载和新配置所需模块的装载等,而模块的卸载将会破坏状态防火墙和确立的连接;
相反firewall deamon动态管理防火墙,不需要重启防火墙便可以更改,因此也就没有必要重新加在所有的内核防火墙模块了
不过要使用firewall deamon就要求防火墙的所有变更都要通过改守护进程来实现。以确保守护进程中的状态和内核里的防火墙是一致的
另外firewall deamon无法解析由 ip*tables和ebtables 命令行工具添加防火墙的规则
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
2. 搭建实验环境

将server虚拟机和desktop虚拟机reset,保持实验环境纯净,给desktop虚拟机再添加一块虚拟网卡做服务器,配置eth0的静态ip为172.25.254.114,配置eth1=192.168.0.114,给server虚拟机的一块网卡的ip设置为192.168.0.214,配置172.25.254.114的yum源,将desktop当作防火墙服务器

给desktop安装firewalld服务

yum install firewalld #安装火墙服务
 
 

    在这里插入图片描述
    安装火墙图形化界面的软件
    yum install firewall-config -y

    在这里插入图片描述

    systemctl start firewalld  #开启firewalld服务
    systemctl enable firewalld  #设置开启启动
     
     
    • 1

    查看火墙的状态,可以看到,火墙正在运行

    在这里插入图片描述

    在这里插入图片描述

    3. firewalld中的区域管理
    3.1 网络区域简介
    通过网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流
    例如,互联网是不可信的区域,而内部网络是高度信任的区域
    网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化
    该模型描述了主机所连接的整个网络环境的可信级别,并定义了连接的处理方式
     
     
    • 1
    • 2
    • 3
    3.2 火墙初始化区域

    firewalld的默认区域是public

    区域名称作用
    阻塞区域block任何传入的网络数据包都会被阻止(有回显)
    工作区域work相信网络上的其他计算机,不会损害自己的计算机
    家庭区域home相信网络上的其他计算机,不损害自己的计算机
    公共区域public不相信网络上的任何计算机,只选择接受传入的网络连接
    隔离区域 DMZ隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用,对于隔离区域,只有选择接受传入的网络连接
    信任区域trusted所有网络连接都可以接受
    丢弃区域drop任何传入的网络连接都被拒绝(不回显)
    内部区域internal信任网络上的其他计算机,不会损害自己的计算机,只有选择接受传入的网络连接
    外部区域external不相信网络上的其他计算机不会损害自己计算机,只有选择接受传入的网络连接
    4. 使用图形界面管理firewalld防火墙

    firewall-config #输入这个命令,firewall图形化管理工具就显示出来了,可以在里面进行修改,并且修改的参数可以通过命令查看
    在这里插入图片描述
    在这里插入图片描述
    firewall-cmd --get-active-zones #查看正在使用的域
    在这里插入图片描述

    在图形化界面中将172.25.254.114主机加入block域

    在这里插入图片描述

    可以看到,block域里已经成功添加了ip为172.25.254.114的主机

    用命令行可以查看到在这里插入图片描述
    用命令可以查看到新添加进block的域
    在这里插入图片描述
    firewall-cmd --get default-zone 查看默认域
    在这里插入图片描述
    firewall-cmd --get-service #列出所有服务
    在这里插入图片描述
    firewall-cmd --list-all-zones #列出所有的域的详细信息
    在这里插入图片描述
    firewall-cmd --get-zones #列出所有的域名
    在这里插入图片描述
    firewall-cmd --set-default-zones=trusted #设置默认于为trusted
    在这里插入图片描述
    firewall-cmd --get-zones #列出默认的域名
    在这里插入图片描述
    firewall-cmd --zone=public --list-all #列出public域的所有信息
    在这里插入图片描述

    4. 使用命令行接口配置防火墙

    在desktop服务器端配置好yum源,安装Apache服务

    编辑yum源的安装指向文件
    在这里插入图片描述
    安装Apache软件
    在这里插入图片描述
    在这里插入图片描述
    安装成功
    实验:public域是不允许访问apache,现在做特殊指定,就可以让真机访问的到114火墙端的apache了
    设置默认域为public,在来源里加入172.25.254.14,允许真机访问服务器端
    在这里插入图片描述开启apache服务

    在这里插入图片描述

    4.1 ip方式设定允许访问apache的主机

    在desktop服务器端

    外来的主机进入自己的trust域
    firewall-cmd --add-sources=172.25.254.14 --zone=trusted
    此时默认域仍是public,不允许http服务
     
     
    • 1
    • 2

    firewall-cmd --add-sources=172.25.254.14 --zone=trusted
    此时在主机的浏览器地址栏输入172.25.254.14,可以看到apache的默认发布目录
    在这里插入图片描述
    server访问不到的原因是因为,desktop上的eth0和eth1两块网卡均在public域里面,不允许外来主机访问apache
    在这里插入图片描述
    firewall-cmd --remove-interface=eth1 --zone=public #把eth1从public域中移走

    在这里插入图片描述

    4.2 网卡方式设定允许访问apache的主机

    把eth1网卡添加到trusted域,可以看到,public域里已经没有eth1网卡了
    在这里插入图片描述
    在真机端的浏览器地址栏输入172.25.254.114,可以看到,不能访问apache的默认发布目录
    在这里插入图片描述
    而在server虚拟机中可以访问到apache的默认发布页面
    在这里插入图片描述
    firewall-cmd --change-interface=eth1 --zone=public #将eth1网卡的域改为public
    可以看到,eth1网卡已经在public域里了
    在这里插入图片描述

    5. firewalld防火墙中的文件配置
    firewalld防火墙主要涉及两个文件:
    1. /usr/lib/firewalld/ #火墙工作时访问的数据文件
    2. /etc/firewalld/ #火墙工作时访问的策略文件
     
     
    • 1
    • 2
    5.1 在firewalld中添加允许iscsi服务

    在/usr/lib/firewalld/services文件中,保存着多个以.xml结尾的文件,每个文件以它所提供的服务命名, 火墙在工作时访问这些数据文件,就可以通过这些服务
    在这里插入图片描述
    由于我们对apache服务比较熟悉,我们使用vim命令来查看一下.xml中写入的内容
    在这里插入图片描述

    可以看到,里边包含.xml文件的版本信息,编码方式,服务名称,服务描述,使用的协议及端口号
    在这里插入图片描述
    如果我们自己想在firewalld的数据文件中添加相同格式的服务文件,那么,防火墙也就能够提供相应的服务,我们可以看到,防火墙的默认服务中并没有iscsi网络磁盘共享服务,先将apache服务的文件复制一份,名称为iscsi.xml
    在这里插入图片描述
    对这个文件的内容进行修改,可以删除描述性的内容,添加服务名称,端口号修改为3260
    在这里插入图片描述
    修改完文件之后需要重启火墙服务才能生效
    在这里插入图片描述
    firewall-cmd --get-services #查看防火墙可以使用的服务,可以看到,现在已经包含了iscsi服务
    在这里插入图片描述
    在防火墙中永久添加iscsi服务,重新加载使其生效
    在这里插入图片描述
    在防火墙的信息列表中也可以看到已经添加了iscsi服务
    在这里插入图片描述

    5.2 在firewalld中添加允许http服务

    切到/etc/firewall/zones目录下,查看域文件中存在的文件
    在这里插入图片描述
    使用vim命令查看公共域文件的内容
    在这里插入图片描述
    可以看到,里边包含 <service name="http">的行就代表着公共域允许这个服务
    在这里插入图片描述
    使配置修改生效,查看http服务是否添加成功

    firewall-cmd --reload
    firewall-cmd --list-all
     
     
    • 1

    可以看到,public域已经添加了http服务

    在这里插入图片描述

    5.3 firewalld中端口的添加和移除
    firewall-cmd --list-ports   #列出已经存在的端口
    firewall-cmd --add-port=8080/tcp   #将以tcp协议的方式传输数据的3260端口添加进firewald
    firewall-cmd --list-ports    #再次查看端口是否已经添加进firewalld
    firewall-cmd --remove-port=8080/tcp   #将8080端口从firewalld中移除
    firewall-cmd --list-ports   #列出已经存在的端口,看8080端口是否成功移除
     
     
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    从上图可以看到,8080端口已经成功添加

    在这里插入图片描述
    从上图可以看到,8080端口已经成功移除

    5.4 了解reload和complete-reload的区别

    desktop服务器端:
    首先查看firewald中public域已经添加的服务

    在这里插入图片描述
    可以看到,firewalld中含有ssh服务,将ssh服务移除,使用–reload重新加载
    在这里插入图片描述
    再次查看列表发现,ssh服务已经不在firewalld里
    在这里插入图片描述
    查看desktop服务器的ip为172.25.254.114
    在这里插入图片描述
    在真机端测试
    用真机测试,使用ssh root @172.25.254.114命令来测试firewalld服务器到底是否允许ssh服务
    在这里插入图片描述
    输入密码之后发现,能够登陆desktop服务器,说明在desktop服务器端虽然使用firewall-cmd --reload命令重新加载使其生效,并且列表里也已经看不到ssh服务,但是实际上ssh服务依然存在
    在这里插入图片描述
    desktop服务器端:
    再次使用firewall-cmd --complete-reload重新加载使移除生效

    在这里插入图片描述
    在真机端测试
    用真机sshdesktop虚拟机,此时可以发现,终端被占用,无法进行操作,说明ssh服务已经被彻底移除了

    在这里插入图片描述

    总结:
    reload: 管理当前火墙状态,重新加载使其生效,不会终止任何当前已经建立的到达服务器的链接
    

    complete-reload: 管理当前火墙状态,重新加载生效,并且会断掉访问服务器的连接

    • 1
    • 2
    • 3

    防火墙的地址伪装与地址转发

    实验:拒绝ip为172.25.254.250主机访问我的desktopfirewalld火墙服务器

    实验目的:拒绝ip为172.25.254.250主机访问我的desktopfirewalld火墙服务器,desktop火墙服务器的ip为172.25.254.114
    说明:因为172.25.254.250是别人主机的ip,为了验证实验现象,我先完成拒绝自己的真机(ip为172.25.254.14)访问desktop防火墙服务器

    实验步骤:
    在desktop服务器端

    firewall-cmd --permanent --add-service=ssh  #给火墙永久添加ssh服务
    firewall-cmd --reload  #重新加载使其生效
    firewall-cmd --list-all  #查看火墙信息列表,查看ssh服务是否已经成功添加
     
     
    • 1
    • 2

    在这里插入图片描述

    firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.250 -p tcp --dport 22 -j REJECT #永久添加规则,指定ipv4的filter表的INPUT 1链,数据来源为172.25.254.250的,传输协议为tcp,到达22端口(ssh服务的端口)的动作为拒绝

    各参数说明:
    –direct 规则
    –add-rule 添加规则
    指定ipv4的filter表
    INPUT-s 数据来源
    -p 访问采用的协议
    –dport 目的地端口 distnation port
    -j 行为动作 REJECT(拒绝有回显)| ACCPET(接受)| DROP(拒绝无回显)
     
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    拒绝172.25.254.14访问desktop的firewalld服务器
    在这里插入图片描述

    在真机进行测试
    ssh root@172.25.254114 #查看真机是否能够使用ssh服务连接desktop虚拟机

    在这里插入图片描述可以看到,无法连接至172.25.254.114主机,22端口访问被拒绝
    移除拒绝172.25.254.14访问的策略
    在这里插入图片描述
    在这里插入图片描述
    可以看到,此时真机端已经可以通过ssh服务访问desktop服务器端

    firewalld的源地址伪装(postrouting路由之后)与目的地址转换(prerouting路由之前)

    在desktop服务器端必须首先开启防火墙的地址伪装功能和路由功能ip_forward=1
    在这里插入图片描述

    vim /etc/sysctl.conf #编辑/etc/sysctl.conf文件
     net.ipv4.ip_forward=1  #写入内容使ip_forward=1,开启路由功能
    sysctl -p  #刷新使其生效
     
     
    • 1
    • 2
    源地址伪装(SNAT postrouting路由之后,例如上网)
    内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
    

    源地址转换SNAT即内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
    将内网地址转换成公网址(一般是网关的外部地址),所以大家经常会看到为了让内网用户上公网,我们必须在routeros的firewall中设置snat,俗称IP地址欺骗或伪装(masquerade)

    • 1
    • 2
    • 3

    在server端测试
    在server端(ip为192.168.0.214)添加网关为192.168.0.114,若不添加,则ping不通172.25.254.14
    在这里插入图片描述
    在这里插入图片描述重启网络
    在这里插入图片描述
    route -n #查看网关是否成功添加
    在这里插入图片描述

    在desktop服务器端:
    从22端口进来的数据都转到172.25.254.15这台主机上去
    在这里插入图片描述
    在server端测试
    ssh root@172.25.254.15 #连接172.25.254.15,登陆上去之后,使用w -i查看登陆过15这台主机的ip
    在这里插入图片描述
    可以看到,虽然登陆172.25.254.15这台主机的ip为192.168.0.214,实际上却是172.25.254.114,说明地址伪装成功

    目的地址转换(DNAT,prerouting路由之前,例如发布网站)
    当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
     
     

      为了不受上一个地址伪装的实验的影响,将172.25.254.15这台主机从desktop服务器端移除
      在这里插入图片描述
      重新添加172.25.254.14(真机ip)允许访问desktop服务器端,查看列表可以看到forward-ports中成功添加了172.25.254.14, 意思是从22端口进来的数据都转到172.25.254.14这台主机上去
      在这里插入图片描述
      在真机端进行测试
      在真机上ssh root@172.25.254.114
      在这里插入图片描述
      这里需要注意,虽然显示的是要求输入172.25.254.114的密码,实际上需要输入真机(172.25.254.14)的密码,这里验证了连接确实会被转到172.25.254.14去
      可以看到,能够成功访问desktop服务器
      ifconfig br0 #查看真机ip为172.25.14.250
      在这里插入图片描述
      使用w -i可以看到,172.25.254.114登陆了真机
      在这里插入图片描述
      做完地址转换的实验,firewalld防火墙实验就暂停了,下边要学习iptables防火墙,因此关掉firewalld服务,设置为不开机自启动,以免对iptables实验造成影响
      在这里插入图片描述

      防火墙iptables的使用

      什么是iptables

      iptables(网络过滤器)是一个工作于用户空间的防火墙应用软件,是与3.5版本Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
      Iptables是用来设置、维护和检查Linux内核的IP包过滤规则的。它可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配,每条规则指定应当如何处理与之相匹配的包。这被称作"target"(目标),也可以跳向同一个表内的用户定义的链。

      iptables的基本命令管理

      实验准备:
      1. desktop作为服务器端,配置为双网卡主机:
      eth0:172.25.254.114
      eth1: 192.168.0.114
      2. server测试端:eth0: 192.168.0.214
      3. 真机测试端:ip:172.25.254.14
      在desktop服务器端配置好yum源

      实验步骤:
      在desktop服务器端
      安装iptables服务
      在这里插入图片描述
      发现这个服务已经安装好,开启iptables服务, 并且设置为开机启动
      在这里插入图片描述
      -nL # 表示不做解析列出防火墙策略
      在这里插入图片描述
      -L # 表示做解析列出防火墙策略
      在这里插入图片描述

      -t # 表示列出指定表的策略信息,不加-t默认为filter
      在这里插入图片描述

      保存策略方法一在这里插入图片描述
      保存策略方法二
      在这里插入图片描述
      -A #将策略追加在已经存在的表后面,按顺序执行(第一个符合行为后便不会读取第二个)
      在这里插入图片描述
      添加策略允许ip为172.25.254.15的主机通过ssh服务连接进服务器
      在这里插入图片描述
      -I #插入 加数字表示添加的位置 默认为1,表示插入到最前边
      在这里插入图片描述
      -R #替换规则要加数字(将172.25.54.250的规则修改为丢弃)
      在这里插入图片描述
      -D #删除第二条规则
      在这里插入图片描述
      -N # 添加新链名称为redhat
      在这里插入图片描述
      -E #重命名链(将名称为redhat的链重命名为WESTOS)
      在这里插入图片描述
      -X #删除WESTOS链
      在这里插入图片描述
      -P # 修改policy DROP ACCEPT 不能修改为REJECT 链的默认属性
      在这里插入图片描述
      清除策略(刷新iptable服务后,原策略会恢复)
      在这里插入图片描述
      -j #行为动作
      -S #查看策略详细信息,包括操作
      在这里插入图片描述
      -Z # 清除数据包

      iptables的地址伪装(SNAT)和端口转发(DNAT)
      iptables的SNAT和DNAT含义

      SNAT和DNAT(由连接的发起者是谁来区分)

      源地址转换:SNAT
      内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
      
       
       
      • 1
      • 2
      目的地址转换:DNAT
      当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
       
       
      • 1
      iptables的权限策略编写

      实验题目要求:新建火墙策略:squid+sshd+dns

      举一个生活中的例子:去电影院看电影的时候,第一次用户需要检票入场,若中途有事离开了观影厅,在电影结束前还可以凭票根再次入场,无需重新再次检票

      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  #建立过状态和建立完成中途断开重新连接的都允许
      

      iptables -A INPUT -m state state NEW -i lo -j ACCEPT #通过回环接口的所有数据都接收

      iptables -A INPUT -m state state NEW -p tcp dport 22 -j ACCEPT #允许ssh服务

      iptables -A INPUT -m state state NEW -p tcp dport 53 -j ACCEPT #允许dns服务

      iptables -A INPUT -m state state NEW -p tcp dport 3128 -j ACCEPT ##允许squid服务

      iptables -A INPUT -j REJECT #拒绝其他主机通过任何服务连接
      iptables -nL #查看新建的火墙策略

      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      在这里插入图片描述
      查看iptables火墙策略
      在这里插入图片描述不做解析查看策略

      在这里插入图片描述
      可以看到,已经成功添加ssh, squid和dns服务进策略信息
      将新建的策略保存
      iptables-save > /etc/sysconfig/iptables
      刷新
      iptables -F
      重启iptables服务
      在这里插入图片描述
      再次查看策略信息依然存在
      在这里插入图片描述

      iptables的SNAT 源地址转换(POSTROUTING—地址伪装)
       >  /etc/sysconfig/iptables  #清空策略信息
       iptables -nL  #查看策略信息已经不存在
        `这个实验必须开启路由功能 `
      
       
       
      • 1
      • 2
      • 3

      在这里插入图片描述
      iptables -t nat -nL #查看nat表的策略
      在这里插入图片描述

      iptables -t nat -A POSTROUTING  -o eth0 -j SNAT --to-source 172.25.254.114  #把要从eth0出去的数据的源地址改为172.25.254.114
      iptables -t nat -nL
      
       
       
      • 1
      • 2

      将192.168.0.214测试机网关设为192.168.0.114
      route -n #查看网关
      在这里插入图片描述
      把要从eth0出去的数据的源地址改为172.25.254.114
      iptables -t nat -nL #查看是否添加策略(必不可少)
      在这里插入图片描述
      在server虚拟机进行测试
      ping 172.25.254.14,发现可以ping通(如果不添加网关,则无法ping通)
      在这里插入图片描述

      iptables的DNAT 源地址转换(PREROUTING—端口转发)
      iptables -t nat -A PREROUTING  -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.214:22 #从eth0的22端口进来的数据,目的地转为 192.168.0.21422端口
      iptables -t nat -nL
      
       
       
      • 1
      • 2

      将从eth0的22端口进来的数据,目的地转为 192.168.0.214的22端口
      iptables -t nat -nL #查看是否添加策略(必不可少)
      在这里插入图片描述
      在真机端进行测试
      ssh root@172.25.254.114 输入的密码是转到的ip的主机密码

      在这里插入图片描述
      查看登陆服务器的ip为192.168.0.214, 端口转发成功

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值