实验三 - 用iptables构建linux防火墙(2)

更新时间:2023-10-01 03:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验三:用iptables构建Linux防火墙

【实验目的】

1) 掌握防火墙的基础架构。

2)掌握利用iptables构建Linux防火墙的基本方法。

3)掌握利用iptables实现NAT代理、IP伪装等高级设置。 4)掌握简单的Shell脚本语言编程。

【原理简介】

静态报过滤器是最老的防火墙,静态数据包过滤发生在网络层上,也就是OSI模型的第三层上。对于静态报过滤防火墙来说,决定接受还是拒绝一个数据包取决于对数据包中IP头和协议头的特定区域的检查,这些特定的区域包括:

1、 数据源地址 2、 目的地址

3、 应用或者协议 4、 源端口号 5、 目的端口号

Iptables软件是netfilter框架下定义的一个包过滤子系统。Netfilter作为中间件在协议栈中提供了一些钩子函数(Hooks),用户可以利用钩子函数插入自己的程序,扩展所需的功能。

图1中IPv4共有5个钩子函数: 1、NF_IP_PRE_ROUTING 2、NF_IP_LOCAL_IN 3、NF_IP_FORWARD

4、NF_IP_POST_ROUTING 5、NF_IP_LOCAL_OUT

数据包从左边进入系统进行IP校验后,经过第一个钩子函数NF_IP_PRE_ROUTING进行处理;然后进入路由代码,它决定改数据包是转发还是发给本机;

若是发给本机,则该数据包经过钩子函数NF_IP_LOCAL_IN处理后传给上层协议;

若该数据包需转发则被NF_IP_FORWARD处理;然后,经过最后一个钩子函数NF_IP_POST_ROUTING处理后传到网络上;

本地产生的数据经钩子函数NF_IP_LOCAL_OUT处理后,进行路由选择处理,然后经NF_IP_POST_ROUTING处理发送到网络上。

【实验环境】

1、

环境搭建

(1) 准备普通PC一台。

(2) 在该PC上安装Red Hat Linux操作系统虚拟机。

在装有linux2.6的PC上,可以直接利用iptables实现防火墙功能,利用命令service iptables start或者在启动菜单中启动该服务,并根据下面的参数说明,设置规则,然后利用本机的网络访问进行测试。

2、 Iptables参数说明

iptables 参数格式:iptables [-t table] command [match] [target] 1) 表(table) “表”是包含仅处理特定类型信息包的规则和链的信息包过滤表。[-t table]选项允许使用标准表之外的任何表。iptables 可以操纵3 个表:filter 表,nat 表,mangle 表。nat和mangle 用 -t 参数指定要操作哪个表。

filter 是默认的表,如果没有 -t 参数,就默认对 filter 表操作。各表实现的功能如表1所示。

表1 表参数 表名 filter nat 实现功能 默认的表,包含内建的链INPUT(处理进入的包)、FORWARD(处理通过的包)和OUTPUT(处理本地生成的包) 这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING(修改到来的包)、OUTPUT(修改路由之前进入的包)和POSTROUTING(修改准备出去的包) 用来对指定的包进行修改。它有两个内建规则:PREROUTING(修改路由之前进入的包)和OUTPUT(修改路由之前本地的包) mangle

2) 命令(command)

Command部分是iptables最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或者删除规则。表2是最常用的一些命令。

表2 命令参数 参 数 -A或-append -D或-delete -R或-replace -I或-insert 参 数 -L或-list 解 释 在所选择的链末添加一条或者更多规则 在所选链中删除一条或更多的规则 从选中的链中取代一条规则 根据给出的规则序号向所选链中插入一条或者更多规则 解 释 显示所选链的所有规则 -F或-flush -Z或-zero -N或-new-chain -X或-delete-chain -P或-policy -E或-rename-chain 清空所选链 把所有链的包及字节的计数器清空 根据给出的名称建立一个新的用户定义链 删除指定的用户自定义链 设置链的目标规则 根据用户给出的名字对指定链进行重命名 Chain 规则链:由一系列规则组成,每个包顺序经过 chain 中的每一条规则。chain 又分为系统 chain和用户创建的 chain。下面先叙述系统 chain。

filter 表的系统 chain: INPUT,FORWAD,OUTPUT

nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT mangle 表的系统 chain: PREROUTING,OUTPUT

每条系统 chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。

3) 匹配(match)

iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通过匹配和特定于协议的匹配两大类。这里将介绍可以用于采用任何协议信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。

表3 常用匹配参数表 参 数 解 释 -p或-protocol -s或-source -d或-destination -j或-jump -i或-in-interface -o或-out-interface 规则或者包检查(待检查包)的协议。指定协议可以是TCP、UDP、ICMP中的一个或者全部 指定源地址,可以是主机名、网络名和清楚的IP地址 指定目标地址 目标跳转 进入的(网络)接口 输出接口[名称] 4) 目标(target)添加规则

目标是由规则制定的操作,对于那些规则匹配的信息包执行这些操作。表4是常用的一些目标及示例说明。除了允许用户定义的目标之外,还有许多可用的目标选项。

表4 目标参数 命 令 解 释 ACCEPT DROP QUEUE RETURN 让这个包通过 将这个包丢弃 把这个包传递到用户空间 停止这条链的匹配,到前一个链的规则重新开始 Iptables的更多参数信息可以使用命令 man iptables获取。 3、 iptables的简单配置

查看规则集:

iptables -list 清楚预设表filter中的所有规则链的规则: iptables -F 创建一个具有很好灵活性。可以抵御各种意外事件的规则需要大量的时间。简单可行的方法是先拒绝所有的数据包,然后再根据需要设定允许规则。下面为每一个链设置默认的规则: iptables –P INPUT DROP iptables –P OUTPUT ACCEPT iptables –P FORWARD DROP 这里选项-P用于设置链的策略,只有三个内建的链才有策略。上述策略可以让信息毫无限制地流出,但不允许信息流入。 之后添加INPUT链,INPUT链的默认规则是DROP,所以必须写需要ACCEPT(用过)的链。为了能采用远程SSH登录,需要开启22端口: iptables –A INPUT –p tcp - -dport 22 –j ACCEPT 如果需要Web服务器,需要开启80端口: iptables –A INPUT –p tcp - -dport 80 –j ACCEPT 允许IP地址为192.168.0.100的机器进行SSH连接: iptables –A INPUT –s 192.168.0.100 –p tcp --dport 22 –j ACCEPT 如果要允许或者限制一段IP地址可以用192.168.0.0/24表示192.168.0.1~255的所有IP: iptables –A INPUT –s 192.168.0.0/24 –p tcp --dport 22 –j ACCEPT iptables –A INPUT –s 192.168.0.0/24 –p tcp --dport 22 –j DROP 4、 实际应用

以下命令为linux下的Shell脚本命令,可以直接执行,或者编写到脚本文件中去,增加其可执行属性,直接执行即可。其中以#为首的语句为脚本命令的解释行。 #打开IP伪装功能(路由) modprobe ipt_MASQUERADE iptables –t nat –A POSTROUTING –s 172.16.0.0/24 –j ACCEPT #打开forward功能 echo “1” > /proc/sys/net/ipv4/ip_forward #清除预设表filter中,所有规则链中的规则 iptables –F #设定filter table的预设政策 iptables –P INPUT DROP iptables –P OUTPUT DROP iptables –P FORWARD DROP #对INPUT链进行限制,来自内部网络的封包无条件放行 iptables –A INPUT –s 172.16.0.0/24 –j ACCEPT iptables –A INPUT –s 192.168.0.254 –j ACCEPT #从WAN进入防火墙主机的所有封包,检查是否为响应封包,若是则予以放行 iptables –A INPUT –d 172.16.0.0/24 –m state --state ESTABLISHED, RELATED –j ACCEPT #对OUTPUT链进行限制,所有输出全部放行 iptables –A OUTPUT –j ACCEPT #ping命令的限制,本机可以ping别的机器,而阻止别的计算机ping本机 Iptables –A FORWARD –p icmp –s 172.16.0.0/24 –icmp-type 8 –j ACCEPT Iptables –A FORWARD –p icmp --icmp-type 0 –d 172.16.0.0/24 –j ACCEPT #以下命令用于设置观看外部网站 #开放内部网络可以观看外部网络的网站。open对外主机的HTTP port 80~83 iptables –A FORWARD –o eth0 –p tcp –s 172.16.0.0/24 --sport 1024:65536 --dport 80:83 –j ACCEPT iptables –A FORWARD –i eth0 –p tcp !--syn --sport 80:83 –d 172.16.0.0/24 --dport 1024:65536 –j ACCEPT #以下命令用于设置远程控制 #开放内部主机可以telnet至外部主机,开放内部网络,可以telnet至外部主机 iptables –A FORWARD –o eth0 –p tcp –s 172.16.0.0/24 --sport 1024:65536 --dport 23 –j ACCEPT iptables –A FORWARD –i eth0 –p tcp !--syn –s 192.168.1.110/32 --sport 23 –d 172.16.0.0/24 --dport 1024:65536 –j ACCEPT #以下命令用于设置E-mail服务,别人可以送信给你,使用SMTP的25端口 iptables –A FORWARD –i eth0 –p tcp --sport 1024:65536 –d 172.16.0.0/24 --dport 25 –j ACCEPT iptables –A FORWARD –o eth0 –p tcp !--syn –s 172.16.0.0/24 --sport 25 --dport 1024:65536 –j ACCEPT #开放内部网络可以对外部网络的POP3 Server取信件 iptables –A FORWARD –o eth0 –p tcp –s 172.16.0.0/24 --sport 1024:65536 --dport 110 –j ACCEPT iptables –A FORWARD –i eth0 –p tcp !--syn --sport 110 –d 172.16.0.0/24 --dport 1024:65536 –j ACCEPT

#设置FTP服务。打开控制连接端口21和数据传输端口20 iptables –A FORWARD –o eth0 –p tcp –s 172.16.0.0/24 --sport 1024:65536 --dport 20:21 –j ACCEPT iptables –A FORWARD –i eth0 –p tcp !--syn --sport 20:21 –d 172.16.0.0/24 --dport 1024:65536 –j ACCEPT 【实验步骤】

(1) 在linux环境下进行系统初始化操作。

a) 清除预设表filter中所有的规则链中的规则 b) 添加规则 c) 删除规则 d) 查看规则

(2) 设定filter table的预设政策,将所有侦测预设为拒绝,并进行网络检验。 (3) 进行ping命令限制,分别完成以下操作。

a) 本机可以ping他机,而阻止他机

b) 他机可以ping本机,而阻止本机ping他机。 c) 本机可以ping他机,同时允许他机ping主机。 并掌握其检验方法

(4) 进行端口命令的设置,并分别完成以下的操作。

a) 开放或者禁止局域网访问外部网站

b) 利用vsftpd为远程提供FTP服务通过防火墙进行读取限制 c) 提供Telnet服务,但禁止某些外部IP访问 d) 禁止Telnet服务的端口 并掌握其检验方法

(5) 进行地址伪装命令设置。将本地地址伪装为其他地址,例如163.26.197.X,

并进行检验。

【实验报告】

请按照南京邮电大学实验报告格式要求进行实验报告的填写。

利用iptables实现Linux防火墙功能如表5所示。请给出实现如下功能后的截图。

实验报告电子版请命名为“学号+姓名+实验3.doc”,发送到邮箱htzhu@njupt.edu.cn。 规则操作 查看所有规则 删除所有规则 预设In链的策略为拒绝 本机可以ping他机,而阻止他机ping本机 他机可以ping本机,而阻止本机ping他机 开放局域网访问外部网站 禁止局域网访问外部网站 利用vsftpd为远端提供FTP服务,开放服务 利用vsftpd为远程提供FTP服务,禁止服务 提供Telnet服务,但禁止某些外部IP访问 提供Telnet服务,关闭服务端口 将本机地址伪装为一个其他地址 【思考题】

1、 为什么通常要把所有链的预设策略都设置成DROP?

2、 如果规则链中有两条规则是互相矛盾的,比如前一条是禁止某个端口,后是打开这个端口,请问这会出现什么情况?

3、 考虑限制其他常见的网络功能,例如对FTP、远程控制、QQ服务等网络功能施加限制。 【相关帮助】

Iptables命令详细说明:

https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html

虚拟机:

experiment用户,密码lablab。 root用户,密码security。 ftp:cent,cent

在root用户下启动vsftp服务:root密码为security

man iptables leapftp

本文来源:https://www.bwwdw.com/article/y82d.html

Top