linux环境下的防火墙设计和配置.docx

上传人:b****2 文档编号:2414227 上传时间:2023-05-03 格式:DOCX 页数:31 大小:40.03KB
下载 相关 举报
linux环境下的防火墙设计和配置.docx_第1页
第1页 / 共31页
linux环境下的防火墙设计和配置.docx_第2页
第2页 / 共31页
linux环境下的防火墙设计和配置.docx_第3页
第3页 / 共31页
linux环境下的防火墙设计和配置.docx_第4页
第4页 / 共31页
linux环境下的防火墙设计和配置.docx_第5页
第5页 / 共31页
linux环境下的防火墙设计和配置.docx_第6页
第6页 / 共31页
linux环境下的防火墙设计和配置.docx_第7页
第7页 / 共31页
linux环境下的防火墙设计和配置.docx_第8页
第8页 / 共31页
linux环境下的防火墙设计和配置.docx_第9页
第9页 / 共31页
linux环境下的防火墙设计和配置.docx_第10页
第10页 / 共31页
linux环境下的防火墙设计和配置.docx_第11页
第11页 / 共31页
linux环境下的防火墙设计和配置.docx_第12页
第12页 / 共31页
linux环境下的防火墙设计和配置.docx_第13页
第13页 / 共31页
linux环境下的防火墙设计和配置.docx_第14页
第14页 / 共31页
linux环境下的防火墙设计和配置.docx_第15页
第15页 / 共31页
linux环境下的防火墙设计和配置.docx_第16页
第16页 / 共31页
linux环境下的防火墙设计和配置.docx_第17页
第17页 / 共31页
linux环境下的防火墙设计和配置.docx_第18页
第18页 / 共31页
linux环境下的防火墙设计和配置.docx_第19页
第19页 / 共31页
linux环境下的防火墙设计和配置.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

linux环境下的防火墙设计和配置.docx

《linux环境下的防火墙设计和配置.docx》由会员分享,可在线阅读,更多相关《linux环境下的防火墙设计和配置.docx(31页珍藏版)》请在冰点文库上搜索。

linux环境下的防火墙设计和配置.docx

linux环境下的防火墙设计和配置

Linux环境下的netfilter/iptables防火墙设计和配置

(防火墙课程设计-linux篇)

1问题和解答引言

1)问:

采用iptables如何限定QQ。

答:

QQ的source-port为4000,destination-port为8000只需要在FORWARD里加入一条规则就可以:

iptables-AFORWARD-ieth0-pudp--dport8000-jDROP

2)问:

我不想开放我的端口,但我要在我的电脑上启用http服务,并对外服务。

答:

想开放除了80以外的端口你可以这样iptables-PINPUT–jDROP,用-P(大写字母)来拦截全部的通信,然后再来允许哪些端口可以被使用,结果可以这样写:

iptables–AINPUT–ptcp–dport80–jACCEPT

3)问:

由于我采用了linux的iptables作为外网络之间的隔离墙,想在网的计算机系统上架设ftp服务可以供外部访问,我该怎么做?

答:

要用到iptables的一个强大的功能为端口映射了。

举例如下:

iptables-tnat-APREROUTING-ptcp-mtcp--dport25-jDNAT--to-destination

192.168.0.6:

25

iptables-tnat-APOSTROUTING-s192.168.0.0/24-d192.168.0.6-ptcp-mtcp--dport25

-jSNAT--to-source192.168.0.1

4)问:

如何屏蔽对部ping,其中eth0为与外部网络相连接。

答:

简单的iptables-AINPUT-picmp--icmp-typeecho-request-ieth0-jDROP

5)问:

设有一台计算机作为linux防火墙,有两块网卡,eth0与校园网相连接,ip为222.18.134.129;eth1与部网络相连接,ip为192.168.0.1。

现在需要把发往地址222.18.134.129的80端口的ip包转发到网ip地址192.168.0.2的80端口,如何设置?

答:

iptables-tnat-APREROUTING-d222.18.134.129-ptcp-mtcp--dport80

-jDNAT--to-destination192.168.0.2:

80

iptables-tnat-APOSTROUTING-s192.168.0.0/24-d192.168.0.2-ptcp

-mtcp--dport80-jSNAT--to-source192.168.0.1

是否忘了打开FORWARD链的相关端口。

6)如何在Linux路由器下采用iptables防火墙构建DMZ(解答规则的实现中存在不完整的地方,请指出)?

答:

要构建一个带DMZ的防火墙,首先要对从连接外部网络的网卡(eth0)上流入的数据进行判断,这是在INPUT链上完成。

如果数据的目标地址属于DMZ网段,就要将数据转发到连接DMZ网络的网卡(eth1)上;如果是部网络的地址,就要将数据转发到连接部网络的网卡(eth2)上,如图1所示。

各个网络之间的访问关系如下描述(6条访问控制策略):

(1)网可以访问外网

网的用户显然需要自由地访问外网。

在这一策略中,防火墙需要进行源地址转换。

(2)网可以访问DMZ

此策略是为了方便网用户使用和管理DMZ中的服务器。

(3)外网不能访问网

很显然,网中存放的是公司部数据,这些数据不允许外网的用户进行访问。

(4)外网可以访问DMZ

DMZ中的服务器本身就是要给外界提供服务的,所以外网必须可以访问DMZ。

同时,外网访问DMZ需要由防火墙完成对外地址到服务器实际地址的转换。

(5)DMZ不能访问网

很明显,如果违背此策略,则当入侵者攻陷DMZ时,就可以进一步进攻到网的重要数据。

(6)DMZ不能访问外网

此条策略也有例外,比如DMZ中放置服务器时,就需要访问外网,否则将不能正常工作。

 

ØDMZ实现:

根据以上访问控制策略可以设定Linux防火墙的过滤规则。

用户在实际应用时可根据具体的情况进行设置,设定虚拟环境的网络拓扑如图1。

如图1所示,作为防火墙的Linux服务器使用三块网卡:

网卡eth0与外部网络连接(或者通过路由器连接),网卡eth1与DMZ区的Hub或交换机相连接,网卡eth2与网Hub或交换机相连接。

对于防火墙,原则之一就是默认禁止所有数据通信,然后再打开必要的通信。

所以在防火墙脚本的最初,需要清空系统原有的规则,然后将INPUT、OUTPUT、FORWARD的默认规则设置为丢弃所有数据包,对应的防火墙脚本片段如下:

#清空系统原有的所有规则

/sbin/iptables-F

/sbin/iptables-X

/sbin/iptables-tnat-F

/sbin/iptables-tnat-X

#默认丢弃所有数据包

/sbin/iptables-PINPUTDROP

/sbin/iptables-POUTPUTDROP

/sbin/iptables-PFORWARDDROP

Ø完成6种策略的实现:

(1)网可以访问外网,对应的防火墙脚本片段如下:

……

/sbin/iptables-tnat-APOSTROUTING-s[网地址]-d[外网地址]-oeth0-jSNAT--to[NAT的真实IP]

当数据从连接外网的eth0流出时,要将来自网的数据包的源地址改成Internet上的真实IP,这样才能和外网的主机进行通信。

“[NAT的真实IP]”表示分配给NAT用户的真实IP,有几个就写几个,以空格分开,但至少要写一个。

(2)网可以访问DMZ,对应的防火墙脚本片段如下:

/sbin/iptables-AFORWARD-s[网地址]-d[DMZ地址]-ieth2-jACCEPT

以上命令允许所有来自网、目的地为DMZ的数据包通过。

(3)外网不能访问网,对应的防火墙脚本片段如下:

/sbin/iptables-tnat-APREROUTING-s[外网地址]-d[网地址]-ieth0-jDROP

以上命令将来自外网、去往网的数据包全部丢弃。

(4)外网可以访问DMZ

为了保护DMZ中的服务器,外网对DMZ的访问也要加以限制。

通常的思路是,只允许外网访问DMZ中服务器所提供的特定服务,比如HTTP。

对应的防火墙脚本片段如下:

/sbin/iptables-tnat-APREROUTING-ptcp--dport80-d[分配给HTTP服务器的Internet上的真实IP]-s[外网地址]-ieth0-jDNAT--to[HTTP服务器的实际IP]

……

/sbin/iptables-AFORWARD-ptcp-s[外网地址]-d[HTTP服务器的实际IP]-ieth0--dport80-jACCEPT

/sbin/iptables-AFORWARD-ptcp-d[外网地址]-s[HTTP服务器的实际IP]-ieth1--sport80!

--syn-jACCEPT

/sbin/iptables-tnat-APREROUTING-s[外网地址]-d[DMZ地址]-ieth0-jDROP

该防火墙脚本片段将开放HTTP服务,使得只有访问DMZ中HTTP服务的数据包才能通过防火墙。

(5)DMZ不能访问网,对应的防火墙脚本片段如下:

/sbin/iptables-AFORWARD-s[DMZ地址]-d[网地址]-ieth1-jDROP

以上命令将丢弃所有从DMZ到网的数据包。

(是否有问题,不完整的解答,可以采用状态检测吗)

(6)DMZ不能访问外网,对应的防火墙脚本片段如下:

/sbin/iptables-tnat-APOSTROUTING-ptcp--dport25-d[外网地址]-s[服务器的IP]-oeth0-jSNAT--to[分配给SMTP服务器的Internet上的真实IP]

/sbin/iptables-AFORWARD-ptcp-s[服务器的IP]-d[外网地址]-ieth1--dport25-jACCEPT

/sbin/iptables-AFORWARD-ptcp-d[服务器的IP]-s[外网地址]-ieth0--sport25!

--syn-jACCEPT

以上命令先允许DMZ中服务器连接外网的SMTP服务端口(25),然后禁止其它从DMZ发往外网的数据包。

2准备

netfilter/iptablesIP信息包过滤系统是一种功能强大的工具,可用于添加、编辑和删除规则,这些规则存储在专用的信息包过滤表中,而这些表集成在Linux核中,又对他们进行处理。

netfilter组件也称为核空间(kernelspace),是核的一部分,由一些信息包过滤表组成,这些表包含核用来控制信息包过滤处理的规则集。

iptables组件是一种工具,也称为用户空间(userspace),它使插入、修改和删除信息包过滤表中的规则变得容易。

如果在你的linux系统没有安装这两组件,需要从.netfilter.org(或filer.org/iptables)下载最新工具并安装使用它,还需要从.kernel.org下载最新的核版本(注意软件包签名认证)。

通过使用iptables用户空间,可以构建自己的定制规则,这些规则存储在核空间的信息包过滤表中。

Iptables工具的操作介绍根据后面部分和按照课程设计要求完成。

(1)安装netfilter/iptables系统

因为netfilter/iptables的netfilter组件是与核2.4及以上集成在一起的,通常只需要下载并安装iptables用户空间工具。

下面是安装netfilter/iptables系统的需求:

●硬件:

要使用netfilter/iptables,需要有一个运行LinuxOS并连接到因特网、LAN或WAN的系统。

●软件:

带有核2.4或更高版本的任何版本的LinuxOS。

可以从.kernel.org下载最新版本的核。

还需要从.netfilter.org下载iptables这个用户空间工具,因为这个工具不是核的一部分。

(2)安装前的准备

在开始安装iptables用户空间工具之前,需要对系统做某些修改。

首先,需要使用makeconfig命令来配置核的选项。

在配置期间,必须通过将CONFIG_NETFILTER和CONFIG_IP_NF_IPTABLES选项设置为Y来打开它们,因为这是使netfilter/iptables工作所必需的。

下面是可能要打开的其它选项:

●CONFIG_PACKET:

如果要使应用程序和程序直接使用某些网络设备,那么这个选项是有用的。

●CONFIG_IP_NF_MATCH_STATE:

如果要配置有状态的防火墙,那么这个选项非常重要而且很有用。

这类防火墙会记得先前关于信息包过滤所做的决定,并根据它们做出新的决定。

●CONFIG_IP_NF_FILTER:

这个选项提供一个基本的信息包过滤框架。

如果打开这个选项,则会将一个基本过滤表(带有置的INPUT、FORWARD和OUTPUT链)添加到核空间。

●CONFIG_IP_NF_TARGET_REJECT:

这个选项允许指定:

应该发送ICMP错误消息来响应已被DROP丢弃的入站信息包,而不是简单地杀死它们。

(3)安装用户空间工具

在下载iptables用户空间工具的源代码(它类似于iptables-1.2.6a.tar.bz2)之后,可以开始安装。

您需要以root身份登录来执行安装。

清单1给出了一个示例,它指出了安装该工具所需的命令,其必要的次序及其说明。

清单1用户空间工具安装的示例

首先,解压工具包到一个指定的目录,命令操作如下:

#bzip2-diptables-1.3.5.tar.bz2

#tar-xvfiptables-1.3.5.tar

现在进入解压后的目录iptables-1.3.5中,在该目录中,有一个INSTALL文件包含了许多关于编译核安装信息,操作如下:

#cdiptables-1.3.5

现在开始编译用户空间工具,命令操作如下:

#makeKERNEL_DIR=/usr/src/linux-2.4.20

注:

KERNEL_DIR=/usr/src/linux-2.4.20指定为核目录路径,有的核目录名不同。

最后,安装源代码,命令操作如下:

#makeinstallKERNEL_DIR=/usr/src/linux-2.4.20

以上,仅仅是一个简单的说明,详细的可以看看文件或查阅有关,站点可以如下:

.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO.html

.netfilter.

.kernel.org

等等。

3部分操作选项和参数介绍

iptables是用来设置、维护和检查Linux核的IP包过滤规则的。

可以定义不同的表,每个表都包含几个部的链,也能包含用户定义的链(user-define-chains)。

每个链都是一个规则列表,对对应的包进行匹配:

每条规则指定应当如何处理与之相匹配的包。

这被称作“target”(目标),也可以跳向同一个表的用户定义的链。

当前文档说明应用于IPv4的网络中。

防火墙的规则指定所检查包的特征和目标。

如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定。

该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],DROP[丢弃],QUEUE[排队]或者RETURN[返回]。

ACCEPT表示让这个包通过;DROP表示将这个包丢弃;QUEUE表示把这个包传递到用户空间;RETURN表示停止这条链的匹配,到前一个链的规则重新开始。

如果到达了一个建的链(的末端),或者遇到建链的规则是RETURN,包的最后处理将由链准则指定的目标决定。

语法:

通用格式:

iptables[-ttable]command[match][-jtarget/jump]

具体格式:

iptables[-ttable]-[AD]chainrule-specification[options]

iptables[-ttable]–Ichain[rulenum]rule-specification[options]

iptables[-ttable]-Rchainrulenumrule-specification[options]

iptables[-ttable]-Dchainrulenum[options]

iptables[-ttable]-[LFZ][chain][options]

iptables[-ttable]-Nchain

iptables[-ttable]-X[chain]

iptables[-ttable]-Pchaintarget[options]

iptables[-ttable]-Eold-chain-namenew-chain-name

-ttable参数用来指定规则表,目前有:

filter、nat、mangle和raw,当未指定规则表-t时,则默认为是filter。

各个规则表的功能如下:

filter:

当没有-t选项的时候,为规则表的默认值,处理的目标主要为:

DROP、LOG、REJECT和ACCEPT。

它包含INPUT(作为到达本地socket的包)、OUTPUT(作为本地产生的包)和FORWARD(作为路由的包)链。

nat:

用于要转发(路由)的信息包,要完成该类表的操作,目标主要有:

DNAT、SNAT、MASQUERADE和REDIRECT。

它包含PREROUTING(oralteringincomingpacketsbeforerouting)、OUTPUT(foralteringlocally-generatedpacketsbeforerouting)和POSTROUTING(foralteringpacketsastheyareabouttogoout)三个建的链。

如果信息包及其头进行了任何更改,则使用mangle表。

该表包含一些规则来标记用于高级路由的信息包,处理的目标有:

TOS、TTL和MARK。

在核2.4.17中该表包含PREROUTING和OUTPUT链;在核2.4.18以后,该表支持三个建链INPUT(forpacketscomingintotheboxitself)、FORWARD(foralteringpacketsbeingroutedthroughthebox)和POSTROUTING(foralteringpacketsastheyareabouttogoout)。

raw:

ThistableisusedmainlyforconfiguringexemptionsfromconnectiontrackingincombinationwiththeNOTRACKtarget,Itregistersatthenetfilterhookswithhigherpriorityandisthuscalledbeforeip_conntrack,oranyotherIPtables.Itprovidesthefollowingbuilt-inchains:

PREROUTING(forpacketsarrivingviaanynetworkinterface)OUTPUT(forpacketsgeneratedbylocalprocesses)。

filter、nat和mangle三个规则链为常用。

3.1命令(command):

-A,--append

在所选择的链(chains)末添加一条或更多规则。

当源(地址)或者/与目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。

-D,--delete

从所选链(chainas)中删除一条或更多规则。

这条命令可以有两种方法:

可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。

-R,--replace

从选中的链中取代一条规则。

如果源(地址)或者/与目的(地址)被转换为多地址,该命令会失败。

规则序号从1开始。

-I,--insert

根据给出的规则序号向所选链中插入一条或更多规则。

所以,如果规则序号为1,规则会被插入链的头部。

这也是不指定规则序号时的默认方式。

-L,--list

显示所选链的所有规则。

如果没有选择链,所有链将被显示。

也可以和Z选项一起使用,这时链会被自动列出和归零。

精确输出受其它所给参数影响。

-F,--flush

清空所选链。

这等于把所有规则一个个的删除。

-Z,--zero

把所有链的包及字节的计数器清空。

它可以和-L配合使用,在清空前察看计数器。

-N,--new-chain

根据给出的名称建立一个新的用户定义链。

这必须保证没有同名的链存在。

-X,--delete-chain

删除指定的用户自定义链。

这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。

如果没有给出参数,这条命令将试着删除每个非建的链。

-P,--policy

设置链的目标规则。

-E,--rename-chain

根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。

TARGETS参数给出一个合法的目标。

只有非用户自定义链可以使用规则,而且建链和用户自定义链都不能是规则的目标。

-h,--Help

帮助。

给出当前命令语法非常简短的说明。

3.2match(匹配具体的规则,对命令增加、删除、替换等的rule-specification弥补)

-p,--protocal[!

]protocol

规则或者包检查(待检查包)的协议。

指定协议可以是tcp(6)、udp(17)、icmp

(1)中的一个或者全部all,也可以是数值,代表这些协议中的某一个。

当然也可以使用在/etc/protocols中定义的协议名。

在协议名前加上“!

”表示相反的规则。

数字0相当于所有all。

all会匹配所有协议,而且这是缺省时的选项。

在和check命令结合时,all可以不被使用。

-s,--source[!

]ipaddress[/mask]

指定源地址,可以是主机名、网络名和一般的IP地址。

mask说明可以是网络掩码或一般的数字,比如mask值为24等于255.255.255.0。

在指定地址前加上“!

”说明指定了相反的地址段。

标志--src是这个选项的简写。

-d,--destination[!

]address[/mask]

指定目标地址,与-s标志的说明类似。

标志--dst是这个选项的简写。

-j,--jumptarget表示-j目标跳转

指定包匹配规则后应当做什么。

目标可以是建的(如DROP),也可以是用户自定义链(不是这条规则所在的),或者一个扩展(参见下面的EXTENSIONS)。

如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。

-i,--in-interface[!

][name]

这是包经由该接口接收的可选的入口名称(即接口名称),包通过该接口接收(在链INPUT、FORWORD和PREROUTING中进入的包)。

当在接口名前使用“!

”说明后,指的是相反的名称。

如果接口名后面加上“+”,则所有以此接口名开头的接口都会被匹配。

如果这个选项被忽略,那么将匹配任意接口。

-o,--out-interface[!

][name]

这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。

当在接口名前使用“!

”说明后,指的是相反的名称。

如果接口名后面加上“+”,则所有以此接口名开头的接

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2