Linux安全的透明代理服务器iptables+squid1.Iptables和Squid简介IptablesSquid是一种在Linux系统下使用的优秀的代理服务器软件Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率1.Iptables和Squid简介Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成1.Iptables和Squid简介Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间1.Iptables和Squid简介Squid使用访问控制清单(ACL)和访问权限清单(ARL)访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点2.1项目背景实验背景XX公司内部搭建了web服务器和FTP服务器,为了满足公司需求,要求使用Linux构建安全、可靠的防火墙。具体要求如下:防火墙自身要求安全、可靠,不允许网络中任何人访问;防火墙出问题,只允许在防火墙主机上进行操作2.1项目背景公司内部的web服务器要求通过地址映射发布出去,且只允许外部网络用户访问web服务器的80端口,而且通过有效的DNS注册公司内部的员工必须通过防火墙才能访问内部的web服务器,不允许直接访问2.1项目背景FTP服务器只对公司内部用户起作用,且只允许内部用户访问FTP服务器的21和20端口,不允许外部网络用户访问公司内部的员工要求通过透明代理上网(不需要在客户机浏览器上做任何设置,就可以上网)内部用户所有的IP地址必须通过NAT转换之后才能够访问外网2.2项目拓扑实验拓扑2.3项目原理实验原理:iptables默认具有5条规则链:PREROUTINGPOSTROUTINGFORWARDINPUTOUTPUT2.3项目原理iptables默认的规则表以及对应的规则链:filter:INPUT、FORWARD和OUTPUTnat:PREROUTING、POSTROUTING和OUTPUTmangle:PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD2.3项目原理nat表的主要用处是网络地址转换,即NetworkAddressTranslation属于一个流的包只会经过这个表一次PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址OUTPUT链改变本地产生的包的目的地址POSTROUTING链在包就要离开防火墙之前改变其源地址2.3项目原理mangle表主要用来mangle数据包我们可以改变不同的包及包头的内容,比如TTL,TOS或MARKMARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记防火墙内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由2.3项目原理PREROUTING在包进入防火墙之后、路由判断之前改变包POSTROUTING是在所有路由判断之后OUTPUT在确定包的目的之前更改数据包INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包2.3项目原理filter表是专门过滤包的,内建三个链FORWARD链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包INPUT针对那些目的地是本地的包OUTPUT是用来过滤所有本地生成的包的2.3项目原理3.1项目总体设计实验思想:先将进出防火墙的策略设置到最严格,然后一步步添加需要放行的策略3.2Iptables的设置Linux下iptables的具体设置:清空filter表和nat表中的配置策略iptables-F(INPUTOUTPUTFORWARD),不加参数,表示全部清除iptables-F(PREROUTING、POSTROUING、OUTPUT)–tnat,不跟参数,表示全部清除删除表中的自定义规则链:iptables-X自定义规则链名1、链名2....指定链的所有计数器归零:iptables-Z(INPUTOUTPUTFORWARD)3.2Iptables的设置放行filter表的默认OUTPUT链,阻止FORWARD链和INPUT链全部放行nat表中的PREROUTING链、POSTROUTING链以及OUTPUT链设置默认策略规则:iptables-P-t(nat、filter、mangle)(INPUTOUTPUTFORWARD)DROP、ACCEPT3.2Iptables的设置将内网web服务器的IP地址映射到防火墙连接外网接口的IP地址上格式:iptables-tnat-APREROUTING-ptcp-d防火墙对应外网的IP--dport80-jDNAT--to-destinationweb服务器的IP地址3.2Iptables的设置放行转发访问内网web服务器的数据包格式:iptables–AFORWARD–ptcp–d内网web服务器的IP地址--dport80–jACCEPT3.2Iptables的设置将内网web服务器的IP地址映射到防火墙连接内网接口的IP地址上内网用户就可以通过访问防火墙内网接口的IP地址来访问内部web服务器。这样做可以增加内网Web服务器的安全性格式:iptables-tnat-APOSTROUTING-ptcp-dhttp服务器的IP地址--dport80-jSNAT--to-source防火墙对应内网的IP地址3.2Iptables的设置在防火墙中添加透明代理设置的规则内网用户访问外网的web服务器的80端口都转换为内网代理服务器squid的默认端口3128格式:iptables–tnat–APREROUTING–s子网地址/子网掩码-ptcp--dport80-jREDIRECT––to-posts31283.2Iptables的设置设置Linux作为网关服务器内网所有IP地址如果访问外网都映射为防火墙外网接口的IP地址格式:iptables–tnat–APOSTROUTING–s子网地址/子网掩码-o外部接口-jMASQUERADE3.2Iptables的设置保存iptables的配置使用iptable-save命令将设置内容保存到一个指定的文件中当重新启动系统之后,需要使用iptables-restore命令将保存的文件重新恢复到/etc/sysconfig/iptables中3.3Squid的设置Linux下squid的具体设置:squid服务器的初始化使用squid–z命令对squid服务器进行初始化主要作用是在squid服务器的工作目录“/var/spool/squid/”中建立需要的子目录3.3Squid的设置编辑squid服务器的配置文件修改服务端口,squid服务器的服务端口使用http_port配置项设置,其默认值是3128,为了用户使用方便,可以添加服务端口8080或其它端口3.3Squid的设置修改缓冲内存数量一般设置cache_mem的值设置为服务器物理内存的三分之一到四分之一比较合适cache_mem默认的设置只有8MB3.3Squid的设置设置squid的工作目录在squid.conf配置文件中使用cache_dir设置squid服务器的工作目录路径和属性“10016256”分别表示目录中最大的容量是100MB,目录中的一级子目录的数量为16个,二级子目录为256个3.3Squid的设置squid.conf配置文件中默认只允许本机使用squid服务器要局域网所有用户能够通过squid的代理服务访问外部网页,需要设置访问控制列表3.3Squid的设置在squid.conf文件的http_accessdenyall设置行之前添加如下设置:http_accessallowclients添加提供透明代理的相关功能3.3Squid的设置设置完成之后,重新启动squid服务,使squid.conf配置文件生效Squid服务启动后,使用netstat命令可以看到squid服务程序在3128端口进行代理服务的监听