iptables和nat的配置与管理金京犬Tip:学习目标知识目标了解防火墙的分类及工作原理、了解NAT掌握iptables防火墙的配置掌握利用iptables实现NAT能力目标能熟练完成利用iptables架设企业NAT服务器情感目标项目背景假如某公司需要Internet接入,由ISP分配IP地址202.112.113.112。采用iptables作为NAT服务器接入网络,内部采用192.168.1.0/24地址,外部采用202.112.113.112地址。为确保安全需要配置防火墙功能,要求内部仅能够访问Web、DNS及Mail三台服务器;内部Web服务器192.168.1.100通过端口映象方式对外提供服务。网络拓扑结构如下图所示。任务1:iptables配置任务2:nat实现项目背景防火墙概述防火墙通常具备以下几个特点。(1)位置权威性。(2)检测合法性。(3)性能稳定性。防火墙分类—包过滤防火墙APP数据链路层TCP层IP层TCP层IP层只检测报头IPTCP1.无法关联数据包之间关系2.无法适应多通道协议3.通常不检查应用层数据数据链路层防火墙分类—代理防火墙发送连接请求外网终端代理防火墙内网Server向Server发送报文A’对请求进行安全检查,不通过则阻断连接通过检查后与Server建立连接通过检查后与Client建立连接向防火墙发送报文A向防火墙发送回应报文B向终端发送回应报文B’1.处理速度慢2.升级困难防火墙分类—状态检测防火墙Host10.0.0.1Server20.0.0.110.0.0.1TCPSYN20.0.0.1安全策略检查记录会话信息20.0.0.1TCPACKTCPSYN’10.0.0.110.0.0.1TCPACKTCPSYN20.0.0.1状态错误,丢弃10.0.0.1TCPACK’20.0.0.11.处理后续包速度快2.安全性高Linux防火墙发展早期的Linux系统采用过ipfwadm作为防火墙但在2.2.0核心中被ipchains所取代。Linux2.4版本发布后,netfilter/iptables信息包过滤系统正式使用。iptables简介Netfilter/iptablesIP数据包过滤系统实际由netfilter和iptables两个组件构成。Netfilter是集成在内核中的一部分,它的作用是定义、保存相应的规则。而iptables是一种工具,用以修改信息的过滤规则及其他配置。用户可以通过iptables来设置适合当前环境的规则,而这些规则会保存在内核空间中。对于Linux服务器而言,采用netfilter/iptables数据包过滤系统,能够节约软件成本,并可以提供强大的数据包过滤控制功能,iptables是理想的防火墙解决方案。iptables简介netfilter是Linux核心中的一个通用架构,它提供了一系列的“表”(tables),每个表由若干“链”(chains)组成,而每条链可以由一条或数条“规则”(rules)组成。实际上,netfilter是表的容器,表是链的容器,而链又是规则的容器。3个表:filter(默认表)、nat表、manger表5条链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTINGfilter表①filter表。这是netfilter默认的表,通常使用该表进行过滤的设置,它包含以下内置链。INPUT:应用于发往本机的数据包。FORWARD:应用于路由经过本地的数据包。OUTPUT:本地产生的数据包。filter表过滤功能强大,几乎能够设定所有的动作。nat表②nat表。当数据包建立新的连接时,该nat表能够修改数据包,并完成网络地址转换。它包含以下3个内置链。PREROUTING:修改到达的数据包。OUTPUT:路由之前,修改本地产生数据包。POSTROUTING:数据包发送前,修改该包。nat表仅用于网络地址转换,也就是转换包的源或目标地址,其具体的动作有DNAT、SNAT以及MASQUERADEmangle表③mangle。该表用在数据包的特殊变更操作,如修改TOS等特性。Linux2.4.17内核以前,它包含两个内置链:PREROUTING和OUTPUT,内核2.4.18发布后,mangle表对其他3个链提供了支持。PREROUTING:路由之前,修改接受的数据包。INPUT:应用于发送给本机的数据包。FORWARD:修改经过本机路由的数据包。OUTPUT:路由之前,修改本地产生的数据包。POSTROUTING:数据包发送出去之前,修改该包。Iptables的基本语法iptables[-t表名]-命令-匹配-j动作/目标iptables内置了filter、nat和mangle三张表,我们可以使用-t参数来设置对哪张表生效,也可以省略-t参数,则默认对filter表进行操作。Iptables的基本语法—命令选项序号命令选项作用1-P(大写)定义默认策略2-A在链的最后添加一条规则3-D从链中删除一条规则4-L显示链的所有规则5-F清空链的规则6-I(大写)根据规则序号向链中插入规则Iptables的基本语法—匹配选项序号匹配选项作用1-p(小写)匹配制定的协议(如tcp,udp,icmp)2--sport基于源端口匹配3--dsport基于目的端口匹配4-s基于源IP地址匹配5-d基于目的IP地址匹配6-i进入本地接口的数据包匹配7-o离开本地接口的数据包匹配Iptables的基本语法—目标动作选项序号目标动作选项作用1ACCEPT允许数据包通过2DROP不许数据包通过3REJECT不许数据包通过,并弹回错误信息4LOG符合规则的数据包写入日志5SNAT对POSTROUTING链操作,私网访问外网6DNAT对PREROUTING链操作,外网访问私网7MASQUERADE同SNAT,但是不需要指定—to-sourceIptables的基本语法实例将filter表中INPUT链的默认策略定义为DROPiptables–PINPUTDROP查看filter表中的规则iptables–L(--line-n)为filter表的INPUT链添加一条规则,规则为拒绝所有使用ICMP协议的数据包iptables–AINPUT–picmp–jDROP为filter表的INPUT链添加一条规则,规则为允许访问TCP协议的80端口的数据包通过iptables-AINPUT-ptcp--dport80-jACCEPTIptables的基本语法实例在filter表中INPUT链的第2条规则前插入一条新规则,规则为不允许访问TCP协议的53端口的数据包通过iptables–IINPUT2–ptcp–dport53–jDROP在filter表中INPUT链的第一条规则前插入一条新规则,规则为允许源IP地址属于172.16.0.0/16网段的数据包通过iptables–IINPUT1–s172.16.0.0/16–jACCEPT删除filter表中INPUT链的第2条规则iptables–DINPUT2清除filter表中INPUT链的所有规则。iptables–FINPUTIptables的基本语法实例禁止员工访问域名为–AFORWARD–s–jDROP禁止员工访问IP地址为212.1.2.3的网站Iptables–AFORWARD–s212.1.2.3–jDROPIptables实现nat转换Iptables防火墙利用nat表可以实现nat功能,将内网地址与外网地址进行转换,支持3种操作SNAT,DNAT,MASQUERADE地址转换的原理局域网PC2PC1IP:192.168.0.1Port:3000IP报文IP:202.0.0.1Port:4000IP:192.168.0.2Port:3010IP:202.0.0.1Port:4001地址转换Internet配置SNATSNAT功能是进行源IP地址转换,也就是重写数据包的源IP地址。若网络内部主机采用共享方式,访问Internet连接时就需要用到SNAT的功能,将本地的IP地址替换为公网的合法IP地址。SNAT只能用在nat表的POSTROUTING链,并且只要连接的第一个符合条件的包被SNAT进行地址转换,那么这个连接的其他所有的包都会自动地完成地址替换工作,而且这个规则还会应用于这个连接的其他数据包。SNAT使用选项--to-source,命令语法如下。iptables-tnat-APOSTROUTING-o网络接口-jSNAT--to-sourceIP地址Iptables实现nat转换公司内部主机使用10.0.0.0/8网段的IP地址,并且使用Linux主机作为服务器连接互联网,外网地址为固定地址212.212.12.12,现需要修改相关设置保证内网用户能够正常访问Internet,如图Iptables实现nat转换iptables–tnat–APOSTROUTING–s10.0.0.0/8–oeth1–jsnat--to-source212.212.12.12配置DNATDNAT只能用在nat表的PREROUTING链,使用选项--to-destination,命令语法如下。Iptables实现nat转换iptables-tnat-APREROUTING-i网络接口-jDNAT--to-destinationIP地址公司网络内部搭建了一台web服务器,其IP地址为192.168.0.3,防火墙外部地址为212.200.30.27,现需要调整防火墙设置,保证外网能够正常访问该服务器Iptables–tnat–APREROUTING–d212.200.30.27–ptcp–dport80–jDNAT--to-destination192.168.0.3Iptables实现nat转换Iptables实现nat转换公司内部有230台计算机,网段为192.168.0.0/24,并配有一台拨号主机,使用接口ppp0接入internet,所有客户端通过该主机访问互联网,这时需要在拨号主机进行设置,将192.168.0.0/24的内部地址转换为ppp0的公网地址iptables–tnat–APOSTROUTING–s192.168.0.0/24–oppp0–jMESQUERADEIptables配置保存serviceiptablessave1.查看iptables软件是否安装[root@localhost~]#rpm-qa|grepiptablesiptables-ipv6-1.3.5-5.3.el5iptables-1.3.5-5.3.el52.给服务器配置相应的IP地址[root@localhost~]#ifconfigeth0192.168.1.2[root@localhost~]#ifconfigeth1202.112.113.112[root@localhost~]#routeadddefaultgw202.112.113.1deveth1Iptables配置与管理—任务13.清除原有的配置[root@localhost~]#iptables-tfilter-F[root@localhost~]#iptables-tnat-F[root@localhost~]#iptables-tmangle–FIptables配置与管理—任务14.允许访问三台服务器[root@localhost~]#iptables-AFORWARD-ieth1-ptcp--dport80-jACCEPT[root@localhost~]#iptables-AFORWARD-ieth1-pudp--dpor