NAT( Network Address Translation)即网络地址转换,将局域网内的私有IP地址转换 戎 Internet上公有的IP地址,反之亦然 代理服务是指:由一台拥有公有IP地址的主机,代替若干台没有公有IP地址的主机 和 Internet上的其他主机打交道,提供代理服务的这台机器称为代理服务器。 74lNAT概述 源NAT和目的NAT (1)SNAT( Source nat,SNAT):修改一个数据包的源地址,改变连接的来源地, SNAT会在包发出之前的最后时刻进行修改。 (2)DNAT( Destination nat,DNAT):修改一个数据包的目的地址,改变连接的目 的地,DNAT会在包进入之后立刻进行修改 2. filter、nat和 mangle 在 Linux系统中,NAT是由 Netfilter/iptables系统实现的。 Netfilter/ iptables内核空间中 有3个默认的表: filter、nat和 mangle, filter表用于包过滤, mangle表用于对数据包做进一 步的修改,nat表用于 IP NAT。 Netfilter/iptables由两个组件组成: netfilter和 iptables (1) netfilter:称为内核空间,是内核的一部分,由一些表组成,每个表由若干链组成 每条链中有若干条规则 (2) iptables:称为用户空间,是一种工具,用于插入、修改和删除包过滤表中的规则。 nat中的链有: PREROUTING、 OUTPUT和 POSTROUTING。 可使用的动作有:SNAT、DNAT、 REDIRECT和 MASQUERADE 要做SNAT的信息包的规则被添加到 POSTROUTING链中 要做DNAT的信息包的规则被添加到 PREROUTING链中。 直接从本地出站的信息包的规则被添加到 OUTPUT链中 数据包穿过nat表的过程如图7-46所示 入站数据包 出站数据包 PREROUTING链(DAT) 油择王业 POSTROUTING链(SNAT) 本地处理 OUTPUT链 图746数据包穿过nat表的示意图 3.认识内网客户机访问外网服务器的过程 局域网内的客户机使用NAT访问 Internet的示意图如图747所示
NAT(Network Address Translation)即网络地址转换,将局域网内的私有 IP 地址转换 成 Internet 上公有的 IP 地址,反之亦然。 代理服务是指:由一台拥有公有 IP 地址的主机,代替若干台没有公有 IP 地址的主机, 和 Internet 上的其他主机打交道,提供代理服务的这台机器称为代理服务器。 7.4.1 NAT 概述 1.源 NAT 和目的 NAT (1)SNAT(Source NAT,SNAT):修改一个数据包的源地址,改变连接的来源地, SNAT 会在包发出之前的最后时刻进行修改。 (2)DNAT(Destination NAT,DNAT):修改一个数据包的目的地址,改变连接的目 的地,DNAT 会在包进入之后立刻进行修改。 2.filter、nat 和 mangle 在 Linux 系统中,NAT 是由 Netfilter/iptables 系统实现的。Netfilter/iptables 内核空间中 有 3 个默认的表:filter、nat 和 mangle。filter 表用于包过滤,mangle 表用于对数据包做进一 步的修改,nat 表用于 IP NAT。 Netfilter/iptables 由两个组件组成:netfilter 和 iptables。 (1)natfilter:称为内核空间,是内核的一部分,由一些表组成,每个表由若干链组成, 每条链中有若干条规则。 (2)iptables:称为用户空间,是一种工具,用于插入、修改和删除包过滤表中的规则。 nat 中的链有:PREROUTING、OUTPUT 和 POSTROUTING。 可使用的动作有:SNAT、DNAT、REDIRECT 和 MASQUERADE. 要做 SNAT 的信息包的规则被添加到 POSTROUTING 链中。 要做 DNAT 的信息包的规则被添加到 PREROUTING 链中。 直接从本地出站的信息包的规则被添加到 OUTPUT 链中。 数据包穿过 nat 表的过程如图 7-46 所示. 图7-46 数据包穿过nat表的示意图 3.认识内网客户机访问外网服务器的过程 局域网内的客户机使用 NAT 访问 Internet 的示意图如图 7-47 所示
1921680.101921680 2181981656212567 WwW 源IP:192168010 8.1656 目的I:212567 目的端口号:80 Pc1发给NAT的数据包 NAT发给WwW的数包 源IP:212567 IP:212567 ⑨端口号:8 目的P:192168010目的I:2181916 目的端口号:10000 目的端口号:100050 1:www发给NAT的数据包 图7-47访问 Internet的示意图 内网客户机访问外网服务器的过程如下: (1)PC1将访问wwW服务器的请求包发给NAT (2)NAT对请求包进行SNAT,即修改源IP地址和源端口号。 (3)NAT将修改后的请求包发给WWW服务器。 (4)WwW服务器将响应包发给NA (5)NAT对响应包进行DNAT,即修改目的IP地址和目的端口号。 (6)NAT将修改后的响应包发给PC1 742NAT的设置 实例7-3使用NAT带动局域网上网 服务器端的设置 第1步:执行# touch/ letc/rc. d/snat命令,生成空的脚本文件 第2步:执行# chmod+x/letc/rcd/snat命令,使该文件可执行 第3步:编辑snat文件,如图748所示。 第4步:保存该文件,执行#/snat。如果想使该脚本在系统启动时自动执行,需要执行 #echo“"letc/rcd/snat”>>/ etcc.drc. local命令。 第5步:执行#less/ etc/resolv,conf命令,査看拨号连接时获得的DNS的P地址,如图 7-49所示。DNS的IP地址将在设置客户端时使用 2. Windows客户端的设置 在桌面右键单击【网上邻居】,在右键菜单选择【属性】,在弹出窗口中双击【本地连 接】,在弹出窗口中单击【属性】按钮,在弹出窗口中双击【 Internet协议(TCP/P)】 将会显示图7-50,客户端的设置如图7-50所示。设置好网络环境后(读者可以根据实际情 况进行相应调整),就可以访问 Internet上的服务了 743代理服务器Squd的设置 对于Web用户来说, Squid是一个高性能的代理缓存服务器,可以加快内部网浏览 Internet的速度,提高客户机的访问命中率。当一个用户要下载一个主页时,它向 Squid发
图7-47 访问Internet的示意图 内网客户机访问外网服务器的过程如下: (1)PC1 将访问 WWW 服务器的请求包发给 NAT。 (2)NAT 对请求包进行 SNAT,即修改源 IP 地址和源端口号。 (3)NAT 将修改后的请求包发给 WWW 服务器。 (4)WWW 服务器将响应包发给 NAT。 (5)NAT 对响应包进行 DNAT, 即修改目的 IP 地址和目的端口号。 (6)NAT 将修改后的响应包发给 PC1。 7.4.2 NAT 的设置 实例 7-3 使用 NAT 带动局域网上网 1.服务器端的设置 第 1 步:执行#touch /etc/rc.d/snat 命令,生成空的脚本文件。 第 2 步:执行#chmod +x /etc/rc.d/snat 命令,使该文件可执行。 第 3 步:编辑 snat 文件,如图 7-48 所示。 第 4 步:保存该文件,执行#./snat。如果想使该脚本在系统启动时自动执行,需要执行 #echo “/etc/rc.d/snat” >> /etc/rc.d/rc.local 命令。 第 5 步:执行#less /etc/resolv.conf 命令,查看拨号连接时获得的 DNS 的 IP 地址,如图 7-49 所示。DNS 的 IP 地址将在设置客户端时使用。 2.Windows 客户端的设置 在桌面右键单击【网上邻居】,在右键菜单选择【属性】,在弹出窗口中双击【本地连 接】, 在弹出窗口中单击【属性】按钮,在弹出窗口中双击【Internet 协议(TCP/IP)】, 将会显示图 7-50,客户端的设置如图 7-50 所示。设置好网络环境后(读者可以根据实际情 况进行相应调整),就可以访问 Internet 上的服务了。 7.4.3 代理服务器 Squid 的设置 对于 Web 用户来说,Squid 是一个高性能的代理缓存服务器,可以加快内部网浏览 Internet 的速度,提高客户机的访问命中率。当一个用户要下载一个主页时,它向 Squid 发
出一个申请,要Sqμuid替它下载,然后 Squid连接所申请网站并请求该主页,接着把该主页 传给用户,同时保留一个备份,当别的用户申请同样的页面时, Squid把保存的备份立即传 给用户,使用户觉得速度相当快。 744局域网使用Sqμud共享上网 实例7-4局域网使用 Squid共享上网 1.配置 Squid代理服务器 第1步:修改ltc/sqμ uid/squid. conf主配置文件,如图7-51所示 下面对 Squid配置文件中的几个基本配置选项和语句进行说明: (1)httpport 定义 Squid监听HIIP客户连接请求的端口。缺省是3128。可以指定多个端口,但是 所有指定的端口都必须在一条命令中。 (2) cache mem(bytes) 该选项用于指定Squd可以使用内存的理想值。 (3)cache dir Type Directory-Name Mbytes Level-1 Level-2 指定Squd用来存储对象的交换空间的大小及其目录结构。可以用多个 cache dir命令 来定义多个这样的交换空间,并且这些交换空间可以分布在不同的磁盘分区 Type是指 Linux使用的缓冲系统类型。 Directory-Name指明了该交换空间的顶级目录 Mbytes定义了可用的空间总量 Level-1是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理, Level-2 是可以建立的第二级子目录的数目,缺省值为256 (4)acl:定义访问控制列表 定义语法为: acl aclname acltype string l acl aclname acltype"file acltype的说明见表7-6 表7-6访问控制列表类型及其说明 指明源地址,格式为: acl aclname src ip- address/netmask…(客户IP地址) (地址范围) 指明目标地址,格式为: acl aclname dst ip- address/netmask….(即客户请求的服务器的IP地 srcdomain指明客户所属的域。格式为: acl aclname srcdomain foo com…squd将根据客户地址反向 dstdomain指明请求服务器所属的域,格式为:aclacinamedstdomainfoo.com,由客户请求的URL决 定。注意:如果用户使用服务器IP地址而非完整的域名时, Squid将进行反向的DNS解析来 确定其完整域名,如果失败就记录为“none” method指定请求方法。比如: acl aclname method GET PoSt
出一个申请,要 Squid 替它下载,然后 Squid 连接所申请网站并请求该主页,接着把该主页 传给用户,同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传 给用户,使用户觉得速度相当快。 7.4.4 局域网使用 Squid 共享上网 实例 7-4 局域网使用 Squid 共享上网 1.配置 Squid 代理服务器 第 1 步:修改/etc/squid/squid.conf 主配置文件,如图 7-51 所示。 下面对 Squid 配置文件中的几个基本配置选项和语句进行说明: (1)http_port 定义 Squid 监听 HTTP 客户连接请求的端口。缺省是 3128。可以指定多个端口,但是 所有指定的端口都必须在一条命令中。 (2)cache_mem (bytes) 该选项用于指定 Squid 可以使用内存的理想值。 (3)cache_dir Type Directory-Name Mbytes Level-1 Level-2 指定 Squid 用来存储对象的交换空间的大小及其目录结构。可以用多个 cache_dir 命令 来定义多个这样的交换空间,并且这些交换空间可以分布在不同的磁盘分区。 Type 是指 Linux 使用的缓冲系统类型。 Directory-Name 指明了该交换空间的顶级目录。 Mbytes 定义了可用的空间总量。 Level-1 是可以在该顶级目录下建立的第一级子目录的数目,缺省值为 16。同理,Level-2 是可以建立的第二级子目录的数目,缺省值为 256。 (4)acl :定义访问控制列表 定义语法为: acl aclname acltype string1 ... acl aclname acltype "file" ... acltype 的说明见表 7-6。 表 7-6 访问控制列表类型及其说明 acltype 说明 src 指明源地址,格式为:acl aclname src ip-address/netmask ...(客户 IP 地址) 或 acl aclname src addr1-addr2/netmask ...(地址范围) dst 指明目标地址,格式为:acl aclname dst ip-address/netmask ...(即客户请求的服务器的 IP 地 址) srcdomain 指明客户所属的域。格式为:acl aclname srcdomain foo.com ... squid 将根据客户 IP 地址反向 查询 DNS dstdomain 指明请求服务器所属的域,格式为:acl aclname dstdomain foo.com ... 由客户请求的 URL 决 定。注意:如果用户使用服务器 IP 地址而非完整的域名时,Squid 将进行反向的 DNS 解析来 确定其完整域名,如果失败就记录为“none” method 指定请求方法。比如:acl aclname method GET POST
指定访问端口。可以指定多个端口,比如: I aclname port 80 8080 8000 定一个端口范围) 定使用协议。可以指定多个协议 rotohttpFtp 指明访问时间 格式为: acl acIname time[day- abbeys] hI: mI-h2m2 Ihh mm-hmm] day- abbrevs为:S( Sunday)、M( Monday)、T( Tuesday)、W( Wednesday)、H( Thursday)、 hlml必须小于h2m2 urI regex使用正则表达式匹配特定一类URL,格式为: acl aclname url regex (5)httpac 根据访问控制列表允许或禁止某一类用户访问 如果某个访问没有相符合的项目,则缺省为使用最后一条项目的“非”。比如最后一条 为允许,则缺省就是禁止。所以,通常应该把最后的条目设为“ deny al”或“ allow all”来 避免安全性隐患 第2步:启动 squid服务器,并且清除防火墙的过滤规则,如图7-52所示 2.设置 Squid客户机 设置好 Squid服务器后,就该设置 Squid客户机了。 (1)在 Linux操作系统上设置 Squid客户机 首先打开 Firefox浏览器,单击主菜单后面的按钮即可。然后依次选择【编辑】/【首选 项】,打开【首选项】窗口,单击【高级】按钮,选择【网络】选项卡,单击【设置】按钮, 打开【连接设置】窗口,如图7-53所示,在其中选择【手工配置代理】单选按钮,然后在 【HIP代理】和【端口】文本框中输入Squd服务器的IP地址和端口号。 (2)在 Windows操作系统上设置 Squid客户机 首先打开IE浏览器,然后依次选择【工具】/【 Internet选项】,打开【 Internet选项】 窗口,然后选择【连接】选项卡,在其中单击【局域网设置】按钮,打开【局域网设置】窗 口,如图7-54所示,在其中选择【为LAN使用代理服务器】复选框,然后在【HTTP代理】 和【端口】文本框中输入 Squid服务器的IP地址和端口号
port 指定访问端口。可以指定多个端口,比如: acl aclname port 80 8080 8000 ... acl aclname port 0-2048 ...(指定一个端口范围) proto 指定使用协议。可以指定多个协议: acl aclname proto HTTP FTP ... time 指明访问时间 格式为:acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm] day-abbrevs 为:S(Sunday)、M(Monday)、T(Tuesday)、W(Wednesday)、H(Thursday)、 F(Friday)、A(Saturday) h1:m1 必须小于 h2:m2 url_regex 使用正则表达式匹配特定一类 URL,格式为:acl aclname url_regex [-i] pattern (5)http_access 根据访问控制列表允许或禁止某一类用户访问。 如果某个访问没有相符合的项目,则缺省为使用最后一条项目的“非”。比如最后一条 为允许,则缺省就是禁止。所以,通常应该把最后的条目设为“deny all”或“allow all”来 避免安全性隐患。 第 2 步:启动 squid 服务器,并且清除防火墙的过滤规则,如图 7-52 所示。 2.设置 Squid 客户机 设置好 Squid 服务器后,就该设置 Squid 客户机了。 (1)在 Linux 操作系统上设置 Squid 客户机 首先打开 Firefox 浏览器,单击主菜单后面的按钮即可。然后依次选择【编辑】/【首选 项】,打开【首选项】窗口,单击【高级】按钮,选择【网络】选项卡,单击【设置】按钮, 打开【连接设置】窗口,如图 7-53 所示,在其中选择【手工配置代理】单选按钮,然后在 【HTTP 代理】和【端口】文本框中输入 Squid 服务器的 IP 地址和端口号。 (2)在 Windows 操作系统上设置 Squid 客户机 首先打开 IE 浏览器,然后依次选择【工具】/【Internet 选项】,打开【Internet 选项】 窗口,然后选择【连接】选项卡,在其中单击【局域网设置】按钮,打开【局域网设置】窗 口,如图 7-54 所示,在其中选择【为 LAN 使用代理服务器】复选框,然后在【HTTP 代理】 和【端口】文本框中输入 Squid 服务器的 IP 地址和端口号