利用Linux自带的iptables配置防火墙

一、实验要求

利用Linux自带的iptables配置防火墙,完成如下配置:

  • (1)阻止任何外部世界直接与防火墙内部网段直接通讯
  • (2)允许内部用户通过防火墙访问外部HTTP和HTTPS服务器
  • (3)允许内部用户通过防火结防问外部FTP服务器。
  • (4)其余功能可自行添加。

网段示意图:
在这里插入图片描述

二、环境配置

概述

新建3个虚拟机,分别作为内网、网关(防火墙)、外网,如下:在这里插入图片描述
要在VMware中配置一个区分内网和外网并且含有网关的网络环境,那么就应该按照以下思路:

  1. 网关需要进行数据包的转发,因此需要两张虚拟网卡,一张对内,一张对外,两张网卡设置为不同的网段
  2. 内网的IP与网关的对内网卡IP处于同一网段,且内网的网关IP是网关主机的对内网卡IP
  3. 外网的IP与网关的对外网卡IP处于同一网段,且外网的网关IP是网关主机的对外网卡IP

整体思路就是这样,具体的配置步骤如下

1、配置VMware的虚拟网络

打开VMware的虚拟网络选项,将NAT模式的“使用本地DHCP自动分配IP”取消勾选,因为要创建两个网络环境,就需要手动给三个主机设置静态IP及其网段,而DHCP服务会根据配置将所有虚拟机划分到同一网段。

在这里插入图片描述

子网IP自己设置,但是需要和物理机的网络适配器选项中的网关处于同一网段,这样虚拟机才可以上网,比如我设置IP范围是192.168.11.0/24,网关就是192.168.11.2
在这里插入图片描述

2、配置网关

网关需要有转发功能,因此需要两个网卡一个对内,一个对外,在虚拟机设置中,添加一张网络适配器(网卡),均选择NAT模式即可

在这里插入图片描述
两个网卡的设置方法相同,如下:

  • 对内网卡(网卡1 - ens33)

我是Ubuntu18.04,直接在设置中就可以修改网络选项

在这里插入图片描述
设置网卡1,选择IPv4的方式为手动(Manual),在Address栏分别输入

  • IP地址:192.168.11.16
  • 子网掩码:255.255.255.0
  • 网关IP:192.168.11.2

(网关主机的网关IP用于和物理机进行数据交互,因此需要和物理主机的VMnet8网络适配器中的网关一致,否则无法访问外网)
在这里插入图片描述
至此,对内网卡填写的数据如下:
在这里插入图片描述

  • 对外网卡(网卡2 - ens38)

对外网卡的配置与对内网卡一样,只不过IP需要和对内网卡不在同一网段,如下:

  • IP地址:192.168.22.11
  • 子网掩码:255.255.255.0
  • 网关IP:192.168.22.2

在这里插入图片描述
这样网关的网卡就设置好了,但是默认的IP转发功能并没有开启,需要手动开启来进行转发,使用以下语句将ip_forward文件内的值改为1即可开启

echo "1" > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述

3、配置内网与外网

内外网的配置与网关的对内对外网卡大同小异,如下:

  • 内网

配置成以下数据:

  • IP地址:192.168.11.12(和网关的对内网卡IP处于同一网段)
  • 子网掩码:255.255.255.0
  • 网关IP:192.168.11.16
    (此处的网关需要填网关主机的对内网卡IP,因为是把其作为内外环境的网关,让数据包经过网关主机)

在这里插入图片描述

  • 外网

外网与内网同理

  • IP地址:192.168.22.12(和网关的对内网卡IP处于同一网段)
  • 子网掩码:255.255.255.0
  • 网关IP:192.168.22.11 (网关主机的对外网卡IP)

在这里插入图片描述
至此,所有环境配置完成,各主机IP如下:

  • 内网:192.168.11.12
  • 外网:192.168.22.12
  • 网关:
    • 对内:192.168.11.16
    • 对外:192.168.22.11

三、环境测试

重启网卡服务或者虚拟机,通过互相ping来测试环境是否配置成功

内网ping外网与网关(成功):
在这里插入图片描述
外网ping内网与网关(成功):
在这里插入图片描述
网关ping内网与外网(成功):

在这里插入图片描述
OK,测试无误,可以开始进行iptables的防火墙配置了。

四、iptables规则配置

首先查看当前规则表为空
在这里插入图片描述

1、阻止内外网直接通信

阻止任何外部世界直接与防火墙内部网段直接通讯,有以下两种方法:

  • 1)将转发链的默认策略改为DROP

可以看到当前转发链的默认策略是允许(ACCEPT)
在这里插入图片描述
使用语句 iptables -P FORWARD DROP 修改默认策略为丢弃

在这里插入图片描述
此时内外网互相ping,均无法通信
在这里插入图片描述
在这里插入图片描述

不仅如此,内网主机也已经无法与任何外部网络进行通信,例如百度
在这里插入图片描述
阻断成功。

  • 2)设置指定IP可以访问内网

将默认策略改回并重置iptables,并且将非内网的请求目标是内网的请求包拒绝(REJECT)即可。

此处以ping为例,那么协议就是icmp,语句如下:

iptables -I FORWARD -p icmp -d 192.168.11.12 -j REJECT

在这里插入图片描述
此时再次使用外网ping内网,已经无法ping成功
在这里插入图片描述
当然除此之外,还可以不指定数据包类型,那么就切断了所有的内外网直接访问,如下,打开内网的Apache http服务
在这里插入图片描述
此时外网可以正常访问
在这里插入图片描述
插入所有数据包均拦截(即不指定协议或端口)的规则:

iptables -I FORWARD -d 192.168.11.12 -j REJECT

再次使用外网访问内网的http服务,无法访问
在这里插入图片描述

2、内网通过防火墙访问外网的HTTP和HTTPS

允许内部用户通过防火墙访问外部HTTP服务器,允许内部用户通过防火墙访问外部HTTPS服务器

该规则的含义是指:内网访问外网只能访问HTTP和HTTPS服务,其他的均拦截。

那么接着上一步,依然将转发链中默认的策略改为DROP,且删除所有配置,内网无法与外部进行任何通信,此时添加以下语句:

iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 80 -j ACCEPT 
iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 443 -j ACCEPT

语句表示:只有源地址是内网地址,目的地址不限,目的端口是80(HTTP)和443(HTTPS)时才会允许,其余的默认丢弃(此处均设置两个服务的默认端口)
在这里插入图片描述
此时使用再访问百度(HTTPS)
在这里插入图片描述
学校官网(HTTP),均可成功访问
在这里插入图片描述
但是依然ping不通外网,因为策略中没有对其进行允许
在这里插入图片描述

3、内网通过防火墙访问外网的TFP

允许内部用户通过防火墙访问外部FTP服务器。

FTP服务的默认端口为20(传输端口)和21(控制端口),先不添加规则,在步骤二的iptables配置基础上
在这里插入图片描述
直接访问一个上海交大的FTP站点,无法访问,因为默认丢弃
在这里插入图片描述
此时添加以下语句:

iptables -A FORWARD -s 192.168.11.12 -p tcp --dport 20 -j ACCEPT 
iptables -A FORWARD -s 192.168.11.12 -p tcp --dport 21 -j ACCEPT

在这里插入图片描述
再次访问,即可成功
在这里插入图片描述

4、内网服务器端口映射

将内网服务器的80端口映射到网关的9999端口,也就是可以通过访问网关的9999端口,来访问内网的80端口提供的HTTP服务

首先需要打开转发功能,也就是允许所有转发

iptables -I FORWARD -j ACCEPT

在这里插入图片描述
接着输入以下两条语句:

  • 请求包的NAT映射
iptables -t nat -I PREROUTING -d 192.168.11.16 -p tcp --dport 9999 -j DNAT --to 192.168.11.12:80
  • 响应包的NAT映射
iptables -t nat -I POSTROUTING -s 192.168.11.12 -j SNAT --to 192.168.11.16

在这里插入图片描述
此时便可成功映射,访问网关主机的9999端口即访问内网的HTTP服务
在这里插入图片描述

附:iptables & 涉及参数解释

仅对实验中涉及到的参数进行解释,其余的网上比比皆是,请自行搜查。

1、iptables简述

iptables的设计是四表五链结构

四表:

  • filter: 基本过滤表,防火墙,也是不指定表时的默认表
  • nat: 用于NAT(网络地址转换)功能,如端口映射,地址映射等
  • mangle: 用于对特定数据包的修改
  • raw: 有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

五链:

  • INPUT: 进来的数据包应用此规则链中的策略
  • OUTPUT: 外出的数据包应用此规则链中的策略
  • FORWARD: 转发数据包时应用此规则链中的策略
  • PREROUTING: 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING: 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

链是相同动作规则的集合,表是相同功能规则的集合。

iptables工作优先级示意图:
在这里插入图片描述

2、参数解释

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
  • -t table:指操作的表,filter、nat、mangle或raw, 默认使用filter
  • COMMAND:子命令,定义对规则的管理
  • chain:指明链路
  • CRETIRIA:匹配的条件或标准
  • ACTION:操作动作

以以下语句为例:

iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 80 -j ACCEPT
  • 未指定-t table即使用默认表,filter
  • -I FORWARD表示在FORWARD链首插入(insert)本条规则,-A是在末尾追加(append)
  • -s 表示源IP(source)
  • -p 表示网络协议(protocol),一般有TCP、UPD、ICMP等
  • –dport 表示目的端口(destination port)
  • -j 后跟执行的动作,一般有ACCEPT、REJECT、DROP,或者在nat表中还可能有SNAT(对源地址进行NAT)、DNAT(对目的地址进行NAT)

除此还有一些常用的:

  • iptables -t table -L:列出指定表的规则链信息
  • iptables -t table -D chain 1:删除指定表的指定链的第1条规则
  • iptables -t table -F:重置指定表(删除表中所有规则)
  • iptables -t table -P chain ACTION:更改指定表中指定链的默认策略

具体的iptables相关知识请看以下博客,非常详细:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章