亮的MARK库

mark.liangliang.org.cn

当前面所有设置都完成后,我们可以来做一个 PPPoE 服务器了,很简单,来吧!

一、创建 PPPoE server a、进入winbox,点击 主菜单 最上面的 “Interfaces”,在弹出的“Interface list”对话框中依次点击“settings”-“PPPoE Server”,

b、这时弹出“PPPoE Server list”对话框,点击左边的“+”号,“Interface”选项里选择 内网网卡,选中 “One session Per Host”,按 OK。

二、创建 IP 地址池 a、点击 主菜单 中的 “IP - Pool”

b、点击“+”号,在出现的对话框中 输入 name,如“PPPoE”,adress,如“192.168.2.1-192.168.2.254”。按 OK 。

三、为刚创建的 IP 地址池 建立路由。 a、选择 主菜单 中的“IP - Firewall”,在出现的”Firewall“对话框中,点击“Source NAT”选项卡,点击“+”号,弹出“Src.NAT Rule” 对话框,

点击“General”选项卡,在“Src.Adress”中输入 IP地址池的网络号和掩码,如: 192.168.2.0,掩码为 24。 b、点击“Action”选项卡,

和以前一样,在“Action”选项中选择“masquerade”,按 OK。

四、建立 用户 和 用户限制。 a、点击 主菜单 下面的 “PPP”,在出现的对话框中,点击“Profiles”选项卡,双击下面前面有“*”号的默认设置,弹出“PPP Profile”对话框,

点击“General”选项卡, 在 name 里输入 名称,随便。 local address 和 remote address中要选择刚才在 IP Pool 里建立的 地址池。 DNS Server 中输入DNS 服务器地址,按右边的“…”号可以多增加几个。

b、然后按“limit”选项卡,

里面的 Tx Bit Rate 和 Rx Bit Rate 分别是下行和上行的带宽,根据需要设置,1024000就是1M。 选中 Only One 和 Change TCP MSS,按 OK。

c、点击 主菜单 下面的 “PPP”,在弹出的对话框中选择“Secrets”,并点击左边的“+”号,弹出 “New PPP Secret”对话框,

分别输入 name(用户名),Password(密码) service 中选择“pppoe”,按 OK。 注:在此可以增加更多用户。

好了,现在只要 客户端 连在局域网上,不要设置IP,或者随便怎么设置 IP,都可以通过PPPoE拨号上网了。同时,只有在 ARP list 里进行了 MAC-IP 绑定的电脑不用拨号,开机就可以上网

看了很多router os 的资料都是关于如何安装的,却很少见到关于router os的命令资料(也许因为有winbox了),虽然在router os 的手册中有说明,但是是英文版本的,很不好看懂。下面就我就写出一些常用的命令,希望对大家有所帮助:1、开机登陆以后常用的一个 ? 是常用的帮助命令,可以列出可用的命令及简单的说明。

2、有些英文命令很长,可以简写如interface ,你输入in后回车自动就会进入interface了。或者你可以按下tab键来帮你完成长英文命令的输入。

3、有些命令的参数很多,你不知道的时候可以输入命令后加空格 ?,如print ?

可以显示该命令的参数。

4、setup 该命令可是谁都要记得的,因为最初安装完router os 必须用它分配网卡的ip地址。

5、ip route add gate=211.12.*.14,220.163.*.12 该命令用于多线路接入时加入多个网关用的。

6、ip firewall add action=nat protocol=tcp dst-address=212.12.*.*/32:80 to-dst-address=192.168.0.198 该命令用于映射端口80到本地的192.168.0.198上。

7、print 该命令有点用于列出所有的项目。

8、interface monitor-traffice 0,1,2 可以监视当前0,1,2网卡的活动情况。

9、ip firewall connection print 显示当前的所有的连接。

10、ip arp print 显示所有router os 知道的ip地址和mac地址的对应列表。

11、user active print 显示所有的router os 的活动用户。

12、system reboot 、system shutdown分别是重启和关机。

13、system reset 删除所有原来的配置,并重新启动router os. 14、system resource monitor 可以监视当前的cpu,和内存的使用情况。

15、log print 可以显示router os 的日志。

16、tool ping-speed 210.13.14.* 可以显示ping 的速度。

17、tool sniffer start,和tool sniffer stop 可以开启和停止嗅探器。

18、tool sniffer packet print 可列出嗅探的包。

19 、system backup name=2004107.bak 可以将系统的配置备份到文件2004107.bak,可以用file print看到。

还有什么enable,disable,remove,set 那些常用的就不说了。

以上是我用了router os接入两个光纤后,常使用的一些命令,发现router os 真是个好东西,所以忍不住写出来,为router os 宣传一下。有很多不成熟的东西,希望大家多原谅。

具我观察我没设置什么负载均衡,但是两个光纤基本上是收发的包是均衡的,而且很稳定。

安装完成后什么都没有设置的情况下.登录 用户: admin 密码: 为空

1、查看已安装的网卡 >/int >pri

2、确认已安装两块网卡后,如果看到网卡前面的英文为X,则要激活网卡,2.9系列版本是自动激活网卡的. >enable 0 >enable 1

3、激活之后网卡前面的英文为R,然后改网卡名字, >set 0 name=lan >set 1 name=wan >/ 这里“/”为退出的意思 4、设置内网卡IP和子网掩码 >set >a >a >lan 回车后输入你服务器内网卡的IP地址,我的内网卡的IP地址是192.168.1.1 ,下面IP后面的“/24”是代表子网掩码255.255.255.0 , 192.168.1.1/24 回车后按G设置网关 192.168.1.1

5、设置外网卡IP和子网掩码 >set >a >a >wan 回车后输入你服务器外网卡的IP地址,下面IP后面的“/29”是代表子网掩码255.255.255.248, 如果你的子网掩码不是255.255.255.248,请自己计算,不要跟着我填29 210.137.174.1/29 回车后按G设网关 219.137.174.193 然后按X退出。 6、查看IP设置情况 >ip add >pri 假如网卡1设错,删除设错的网卡, >remove 1 重启一次,完成后在其它机用winbox登入

7、设置DNS IP –dns-settings 然后输入 202.96.128.68 202.96.134.133

8、最后一步,设置共享上网 2.9系列的版本选择 IP–Firewall-nat –选择“+”号–Action-masquerade

2.8系列的版本选择 IP–Firewall-选择“+”号-src-nat-add action-masquerade 这样你的ROS就可以共享上网了。其实也很简单的。此设置基本上适合2.8和2.9的各版本 (注释:这里掩码是用8进制,简单说24就等于255.255.255.0 这样简单解释吧 255.255.255.255 = 11111111.11111111.11111111.11111111 这里有32个1,就是32了 255.255.255.0 = 11111111.11111111.11111111.00000000 这就是24了 )

相信大家都用过克隆帐户吧。无论是用工具还是用手工,克隆帐户无疑是隐藏帐户的最好选择。但是看见网上的文章都讲的特别麻烦。这样那样的。其实克隆帐户很简单。就是复制administrator的注册表项。本篇文章针对已经使用过克隆的用户,不针对对克隆帐户一无所知者。我只讲述下克隆的原理和方法。希望对大家有所启发。 原理:我们的帐户在注册表里都有他相应的键值,具体在 “[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users ”administrator 的 项为 “000001F4”下面有 2个二进制值 一个 是“F”一个是“V”。我一般克隆的都是 Guest用户,所以我就拿这个克隆这个用户做例子,克隆其他用户方法相同。Guest的项为 “000001F5”。其他用户所对应的项可以从 “[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”下查看。我们所要做的就是把 “1F4”下的“F”和“V”值复制到“1F5”下的对应值里。这就是所说的克隆帐户。

1 简单克隆: a,原理:只复制“F” 值。这样克隆出来的帐户隐蔽性比完全克隆(一会要说到)要低些,但是对自己方便些。如果肉鸡的管理员不是太厉害的话,建议你用这个方法。这样克隆出来的用户如果登陆上去,所用的桌面了什么的都是administrator的,也就是说你在系统里的文件“C:\Documents and Settings\Administrator”和admin是一样的。而非以前的“C:\Documents and Settings\Guest”。但是在“query user”和“终端服务管理器”里面你所登陆的用户还是“Guest”,还有就是用命令“net localgroup administrators”还是可以看出Guest是管理员来,这就是我所说的隐蔽性比完全克隆要低些。但是在net下,和用户管理中都看不出 Guest用户有什么问题。 b,具体方法:无论你用什么方法,看你个人习惯了,用 “system”权限打开“注册表”,我喜欢用 psu 命令格式为 psu -p regedit -PID 这里解释一下,后面的PID是系统进程winlogon的值.然后打开[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\ Account\Users\000001F4]打开他的“F”值,然后复制到 “1F5”的“F”值里面。然后在CMD下(必须),给Guest改密码(net user guest password)然后激活guest帐户(net user guest /active:y),然后我们把他禁用 (net user guest /active:n )简单!END

2 完全克隆 a,原理:全部复制“F”和“V”值。这样方法克隆出来的2个帐户其实在系统里是一个帐户,这样隐蔽性最高,除非用专业工具查看,否则在 net 和用户管理中,还有“net localgroup administrators”都看不出有什么问题来。还有最重要的一点,如果你登陆上去后,在“query user”和“终端服务管理器”里面你所登陆的用户上面显示的是“administrator”,好玩不。:)这样我们就达到了超级隐蔽的目的。在这里我要说明的一点就是,如果你用这个克隆方法弄出来的帐户登陆的话,其实你登陆的是administrator的界面。也就是说,假设你使用克隆帐户通过 3389登陆着,在你断开连接没有注销的时候,如果administrator也使用3389登陆,那他登陆的将是你的会话!!你那个会话上所保留的操作对方也是可以看见的,因为你们2个现在在同一个会话中!而我所说的不方便就是指的这点。但是如果3389是你开的,而管理员不会通过远程登陆服务器,那你就爽了。你们的会话就不是一个。还有如果你用简单克隆的方法克隆下来的帐户登陆,那你们登陆的不是一个会话,帐户还是不同的2个帐户,可以放心。 b,具体方法:方法和简单克隆的一样。不同的就是全部复制“F”和“V”值。你也可以直接导出[HKEY_LOCAL_MACHINE\SAM\SAM\ Domains\Account\Users\000001F4]的项。然后编辑导出的注册表文件,把里面的“000001F4”改成 “000001F5”,然后在给他导入进去就OK了。然后在CMD下(必须),给Guest改密码(net user guest password)然后激活guest帐户(net user guest /active:y),然后我们把他禁用 (net user guest /active:n )简单!END 3 最后提醒一下.克隆完成后除了建立的时候我要求的更改密码千万不要再次对克隆后的帐户更改密码!.因为只要你再更改密码,你所克隆的帐户将暴露!

4 说了这些,希望对大家有个帮助。说到这里了,还想多说几句,经常看到一些人在入侵一台服务器后堂而皇之地创建一个管理员组的用户,似乎当管理员不存在一般,或者弄个欺骗自己的Admin$之类的帐户。我想说的是管理员不是傻子,虽说带“$”的帐户在“net user”里面看不见,可在计算机管理的用户管理中可是明明白白在那摆着呢。如果你想你的肉鸡可以留的长久的话,那你就聪明点。我还想对那些管理员说几句,现在大家的安全意识都提高了,都知道及时打补丁了什么的,还有知道把密码设置的特变态。可是你们忽视了第三方软件的安全性。比如危害很大的SQL IIS Server-u 等。对计算机的安全我认为可以分为3个方面。第一个是系统的安全,这个就通过简单的打几个补丁就可以解决。第二个就是设置方面的安全。你一个固若金汤的系统,可你给弄了空口令,不笑死那些小黑们。对这个方面,你就弄变态密码就行,但是我要提醒下,你设变态密码可以,但是不要为了防止自己记不住,而写个文本,把密码全放里面。我就弄过一个机器,是通过第三方软件的漏洞进入的。在进了机器后我翻看他盘里的东西的时候突然看到一个文本pass.txt,我自然的打开看看了,看到的是他们整个网络的主干服务器和路由的密码!!而且还都是变态密码,我都晕了。后来知道哪个机器是网管的机器,其实他的的防护还是很严的,系统漏洞根本没有,后来知道他的所有密码都极其变态,爆破我看爆破到地球毁灭都没可能。:)如果没有第三方软件的漏洞的话我是进不去的。所以我要说到的就是关于第三方软件的安全问题。其实我觉得关于安全设置和第三方软件可以归到一块。好多第三方软件的漏洞都是通过不安全的设置而出现的漏洞。比如SQL 的 SA 空口令,SA的权限又高,连上去直接是SYSTEM权限。还有就是最好使用最新版本的软件。比如server-u。这个也是我的习惯,所有东西都是最新版的。

如何配置Cisco PIX防火墙

任何企业安全策略的一个主要部分都是实现和维护防火墙,因此防火墙在网络安全的实现当中扮演着重要的角色。防火墙通常位于企业网络的边缘,这使得内部网络与Internet之间或者与其他外部网络互相隔离,并限制网络互访从而保护企业内部网络。设置防火墙目的都是为了在内部网与外部网之间设立唯一的通道,简化网络的安全管理。 在众多的企业级主流防火墙中,Cisco PIX防火墙是所有同类产品性能最好的一种。Cisco PIX系列防火墙目前有5种型号PIX506,515,520,525,535。其中PIX535是PIX 500系列中最新,功能也是最强大的一款。它可以提供运营商级别的处理能力,适用于大型的ISP等服务提供商。但是PIX特有的OS*作系统,使得大多数管理是通过命令行来实现的,不象其他同类的防火墙通过Web管理界面来进行网络管理,这样会给初学者带来不便。本文将通过实例介绍如何配置Cisco PIX防火墙。

在配置PIX防火墙之前,先来介绍一下防火墙的物理特性。防火墙通常具有至少3个接口,但许多早期的防火墙只具有2个接口;当使用具有3个接口的防火墙时,就至少产生了3个网络,描述如下: ? 内部区域(内网)。 内部区域通常就是指企业内部网络或者是企业内部网络的一部分。它是互连网络的信任区域,即受到了防火墙的保护。 ? 外部区域(外网)。 外部区域通常指Internet或者非企业内部网络。它是互连网络中不被信任的区域,当外部区域想要访问内部区域的主机和服务,通过防火墙,就可以实现有限制的访问。 ? 停火区(DMZ)。 停火区是一个隔离的网络,或几个网络。位于停火区中的主机或服务器被称为堡垒主机。一般在停火区内可以放置Web服务器,Mail服务器等。停火区对于外部用户通常是可以访问的,这种方式让外部用户可以访问企业的公开信息,但却不允许他们访问企业内部网络。注意:2个接口的防火墙是没有停火区的。

由于PIX535在企业级别不具有普遍性,因此下面主要说明PIX525在企业网络中的应用。

PIX防火墙提供4种管理访问模式: 2 非特权模式。 PIX防火墙开机自检后,就是处于这种模式。系统显示为pixfirewall> 2 特权模式。 输入enable进入特权模式,可以改变当前配置。显示为pixfirewall# 2 配置模式。 输入configure terminal进入此模式,绝大部分的系统配置都在这里进行。显示为pixfirewall(config)# 2 监视模式。 PIX防火墙在开机或重启过程中,按住Escape键或发送一个“Break”字符,进入监视模式。这里可以更新*作系统映象和口令恢复。显示为monitor>

配置PIX防火墙有6个基本命令:nameif,interface,ip address,nat,global,route. 这些命令在配置PIX是必须的。以下是配置的基本步骤: 1. 配置防火墙接口的名字,并指定安全级别(nameif)。 Pix525(config)#nameif ethernet0 outside security0 Pix525(config)#nameif ethernet1 inside security100 Pix525(config)#nameif dmz security50 提示:在缺省配置中,以太网0被命名为外部接口(outside),安全级别是0;以太网1被命名为内部接口(inside),安全级别是100.安全级别取值范围为1~99,数字越大安全级别越高。若添加新的接口,语句可以这样写: Pix525(config)#nameif pix/intf3 security40 (安全级别任取)

2. 配置以太口参数(interface) Pix525(config)#interface ethernet0 auto(auto选项表明系统自适应网卡类型 ) Pix525(config)#interface ethernet1 100full(100full选项表示100Mbit/s以太网全双工通信 ) Pix525(config)#interface ethernet1 100full shutdown (shutdown选项表示关闭这个接口,若启用接口去掉shutdown )

3. 配置内外网卡的IP地址(ip address) Pix525(config)#ip address outside 61.144.51.42 255.255.255.248 Pix525(config)#ip address inside 192.168.0.1 255.255.255.0 很明显,Pix525防火墙在外网的ip地址是61.144.51.42,内网ip地址是192.168.0.1

4. 指定要进行转换的内部地址(nat) 网络地址翻译(nat)作用是将内网的私有ip转换为外网的公有ip.Nat命令总是与global命令一起使用,这是因为nat命令可以指定一台主机或一段范围的主机访问外网,访问外网时需要利用global所指定的地址池进行对外访问。nat命令配置语法:nat (if_name) nat_id local_ip [netmark] 其中(if_name)表示内网接口名字,例如inside. Nat_id用来标识全局地址池,使它与其相应的global命令相匹配,local_ip表示内网被分配的ip地址。例如0.0.0.0表示内网所有主机可以对外访问。[netmark]表示内网ip地址的子网掩码。 例1.Pix525(config)#nat (inside) 1 0 0 表示启用nat,内网的所有主机都可以访问外网,用0可以代表0.0.0.0 例2.Pix525(config)#nat (inside) 1 172.16.5.0 255.255.0.0 表示只有172.16.5.0这个网段内的主机可以访问外网。

5. 指定外部地址范围(global) global命令把内网的ip地址翻译成外网的ip地址或一段地址范围。Global命令的配置语法:global (if_name) nat_id ip_address-ip_address [netmark global_mask] 其中(if_name)表示外网接口名字,例如outside.。Nat_id用来标识全局地址池,使它与其相应的nat命令相匹配,ip_address-ip_address表示翻译后的单个ip地址或一段ip地址范围。[netmark global_mask]表示全局ip地址的网络掩码。 例1. Pix525(config)#global (outside) 1 61.144.51.42-61.144.51.48 表示内网的主机通过pix防火墙要访问外网时,pix防火墙将使用61.144.51.42-61.144.51.48这段ip地址池为要访问外网的主机分配一个全局ip地址。 例2. Pix525(config)#global (outside) 1 61.144.51.42 表示内网要访问外网时,pix防火墙将为访问外网的所有主机统一使用61.144.51.42这个单一ip地址。 例3. Pix525(config)#no global (outside) 1 61.144.51.42 表示删除这个全局表项。

6. 设置指向内网和外网的静态路由(route) 定义一条静态路由。route命令配置语法:route (if_name) 0 0 gateway_ip [metric] 其中(if_name)表示接口名字,例如inside,outside。Gateway_ip表示网关路由器的ip地址。[metric]表示到gateway_ip的跳数。通常缺省是1。 例1. Pix525(config)#route outside 0 0 61.144.51.168 1 表示一条指向边界路由器(ip地址61.144.51.168)的缺省路由。 例2. Pix525(config)#route inside 10.1.1.0 255.255.255.0 172.16.0.1 1 Pix525(config)#route inside 10.2.0.0 255.255.0.0 172.16.0.1 1 如果内部网络只有一个网段,按照例1那样设置一条缺省路由即可;如果内部存在多个网络,需要配置一条以上的静态路由。上面那条命令表示创建了一条到网络10.1.1.0的静态路由,静态路由的下一条路由器ip地址是172.16.0.1

OK,这6个基本命令若理解了,就可以进入到pix防火墙的一些高级配置了。

A. 配置静态IP地址翻译(static) 如果从外网发起一个会话,会话的目的地址是一个内网的ip地址,static就把内部地址翻译成一个指定的全局地址,允许这个会话建立。static命令配置语法:static (internal_if_name,external_if_name) outside_ip_address inside_ ip_address 其中internal_if_name表示内部网络接口,安全级别较高。如inside. external_if_name为外部网络接口,安全级别较低。如outside等。outside_ip_address为正在访问的较低安全级别的接口上的ip地址。inside_ ip_address为内部网络的本地ip地址。 例1. Pix525(config)#static (inside, outside) 61.144.51.62 192.168.0.8 表示ip地址为192.168.0.8的主机,对于通过pix防火墙建立的每个会话,都被翻译成61.144.51.62这个全局地址,也可以理解成static命令创建了内部ip地址192.168.0.8和外部ip地址61.144.51.62之间的静态映射。 例2. Pix525(config)#static (inside, outside) 192.168.0.2 10.0.1.3 例3. Pix525(config)#static (dmz, outside) 211.48.16.2 172.16.10.8 注释同例1。通过以上几个例子说明使用static命令可以让我们为一个特定的内部ip地址设置一个永久的全局ip地址。这样就能够为具有较低安全级别的指定接口创建一个入口,使它们可以进入到具有较高安全级别的指定接口。

B. 管道命令(conduit) 前面讲过使用static命令可以在一个本地ip地址和一个全局ip地址之间创建了一个静态映射,但从外部到内部接口的连接仍然会被pix防火墙的自适应安全算法(ASA)阻挡,conduit命令用来允许数据流从具有较低安全级别的接口流向具有较高安全级别的接口,例如允许从外部到DMZ或内部接口的入方向的会话。对于向内部接口的连接,static和conduit命令将一起使用,来指定会话的建立。 conduit命令配置语法: conduit permit deny global_ip port[-port] protocol foreign_ip [netmask] permit deny 允许 拒绝访问 global_ip 指的是先前由global或static命令定义的全局ip地址,如果global_ip为0,就用any代替0;如果global_ip是一台主机,就用host命令参数。 port 指的是服务所作用的端口,例如www使用80,smtp使用25等等,我们可以通过服务名称或端口数字来指定端口。 protocol 指的是连接协议,比如:TCP、UDP、ICMP等。 foreign_ip 表示可访问global_ip的外部ip。对于任意主机,可以用any表示。如果foreign_ip是一台主机,就用host命令参数。 例1. Pix525(config)#conduit permit tcp host 192.168.0.8 eq www any 这个例子表示允许任何外部主机对全局地址192.168.0.8的这台主机进行http访问。其中使用eq和一个端口来允许或拒绝对这个端口的访问。Eq ftp 就是指允许或拒绝只对ftp的访问。 例2. Pix525(config)#conduit deny tcp any eq ftp host 61.144.51.89 表示不允许外部主机61.144.51.89对任何全局地址进行ftp访问。 例3. Pix525(config)#conduit permit icmp any any 表示允许icmp消息向内部和外部通过。 例4. Pix525(config)#static (inside, outside) 61.144.51.62 192.168.0.3 Pix525(config)#conduit permit tcp host 61.144.51.62 eq www any 这个例子说明static和conduit的关系。192.168.0.3在内网是一台web服务器,现在希望外网的用户能够通过pix防火墙得到web服务。所以先做static静态映射:192.168.0.3->61.144.51.62(全局),然后利用conduit命令允许任何外部主机对全局地址61.144.51.62进行http访问。

C. 配置fixup协议 fixup命令作用是启用,禁止,改变一个服务或协议通过pix防火墙,由fixup命令指定的端口是pix防火墙要侦听的服务。见下面例子: 例1. Pix525(config)#fixup protocol ftp 21 启用ftp协议,并指定ftp的端口号为21 例2. Pix525(config)#fixup protocol http 80 Pix525(config)#fixup protocol http 1080 为http协议指定80和1080两个端口。 例3. Pix525(config)#no fixup protocol smtp 80 禁用smtp协议。

D. 设置telnet telnet有一个版本的变化。在pix OS 5.0(pix*作系统的版本号)之前,只能从内部网络上的主机通过telnet访问pix。在pix OS 5.0及后续版本中,可以在所有的接口上启用telnet到pix的访问。当从外部接口要telnet到pix防火墙时,telnet数据流需要用ipsec提供保护,也就是说用户必须配置pix来建立一条到另外一台pix,路由器或vpn客户端的ipsec隧道。另外就是在PIX上配置SSH,然后用SSH client从外部telnet到PIX防火墙,PIX支持SSH1和SSH2,不过SSH1是免费软件,SSH2是商业软件。相比之下cisco路由器的telnet就作的不怎么样了。 telnet配置语法:telnet local_ip [netmask] local_ip 表示被授权通过telnet访问到pix的ip地址。如果不设此项,pix的配置方式只能由console进行。 说了这么多,下面给出一个配置实例供大家参考。

Welcome to the PIX firewall

Type help or ? for a list of available commands. PIX525> en Password: PIX525#sh config : Saved : PIX Version 6.0(1) —— PIX当前的*作系统版本为6.0 Nameif ethernet0 outside security0 Nameif ethernet1 inside security100 —— 显示目前pix只有2个接口 Enable password 7Y051HhCcoiRTSQZ encrypted Passed 7Y051HhCcoiRTSQZ encrypted —— pix防火墙密码在默认状态下已被加密,在配置文件中不会以明文显示,telnet 密码缺省为cisco Hostname PIX525 —— 主机名称为PIX525 Domain-name 123.com —— 本地的一个域名服务器123.com,通常用作为外部访问 Fixup protocol ftp 21 Fixup protocol http 80 fixup protocol h323 1720 fixup protocol rsh 514 fixup protocol smtp 25 fixup protocol sqlnet 1521 fixup protocol sip 5060 —— 当前启用的一些服务或协议,注意rsh服务是不能改变端口号 names —— 解析本地主机名到ip地址,在配置中可以用名字代替ip地址,当前没有设置,所以列表为空 pager lines 24 —— 每24行一分页 interface ethernet0 auto interface ethernet1 auto —— 设置两个网卡的类型为自适应 mtu outside 1500 mtu inside 1500 —— 以太网标准的MTU长度为1500字节

ip address outside 61.144.51.42 255.255.255.248 ip address inside 192.168.0.1 255.255.255.0 —— pix外网的ip地址61.144.51.42,内网的ip地址192.168.0.1 ip audit info action alarm ip audit attack action alarm —— pix入侵检测的2个命令。当有数据包具有攻击或报告型特征码时,pix将采取报警动作(缺省动作),向指定的日志记录主机产生系统日志消息;此外还可以作出丢弃数据包和发出tcp连接复位信号等动作,需另外配置。 pdm history enable —— PIX设备管理器可以图形化的监视PIX arp timeout 14400 —— arp表的超时时间 global (outside) 1 61.144.51.46 —— 如果你访问外部论坛或用QQ聊天等等,上面显示的ip就是这个 nat (inside) 1 0.0.0.0 0.0.0.0 0 0 static (inside, outside) 61.144.51.43 192.168.0.8 netmask 255.255.255.255 0 0 conduit permit icmp any any conduit permit tcp host 61.144.51.43 eq www any conduit permit udp host 61.144.51.43 eq domain any —— 用61.144.51.43这个ip地址提供domain-name服务,而且只允许外部用户访问domain的udp端口 route outside 0.0.0.0 0.0.0.0 61.144.51.61 1 —— 外部网关61.144.51.61 timeout xlate 3:00:00 —— 某个内部设备向外部发出的ip包经过翻译(global)后,在缺省3个小时之后此数据包若没有活动,此前创建的表项将从翻译表中删除,释放该设备占用的全局地址 timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 rpc 0:10:00 h323 0:05:00 sip 0:30:00 sip_media 0:02:00 timeout uauth 0:05:00 absolute —— AAA认证的超时时间,absolute表示连续运行uauth定时器,用户超时后,将强制重新认证 aaa-server TACACS+ protocol tacacs+ aaa-server RADIUS protocol radius —— AAA服务器的两种协议。AAA是指认证,授权,审计。Pix防火墙可以通过AAA服务器增加内部网络的安全 no snmp-server location no snmp-server contact snmp-server community public —— 由于没有设置snmp工作站,也就没有snmp工作站的位置和联系人 no snmp-server enable traps —— 发送snmp陷阱 floodguard enable —— 防止有人伪造大量认证请求,将pix的AAA资源用完 no sysopt route dnat telnet timeout 5 ssh timeout 5 —— 使用ssh访问pix的超时时间 terminal width 80 Cryptochecksum:a9f03ba4ddb72e1ae6a543292dd4f5e7 PIX525# PIX525#write memory —— 将配置保存 上面这个配置实例需要说明一下,pix防火墙直接摆在了与internet接口处,此处网络环境有十几个公有ip,可能会有朋友问如果我的公有ip很有限怎么办?你可以添加router放在pix的前面,或者global使用单一ip地址,和外部接口的ip地址相同即可。另外有几个维护命令也很有用,show interface查看端口状态,show static查看静态地址映射,show ip查看接口ip地址,ping outside inside ip_address确定连通性。

Squid 介绍 Squid工作原理: Squid 启动之后,会在 RAM 建立一个 Hash Table,记录硬盘中 object 配置的情形。 Squid 又会在 RAM 中建立一个 Digest Table(摘要表) ,其功能是和其他有合作关的 Squid (Sibling)互相交换 Digest Table,万一用户端想要的资料自己没有时,可以很快的知道哪一部 Squid Server 有资料(Squid 也可以透过 ICP 向其他 Squid 查询,但速度较慢)。但是 Digest Table 本身不小,既记忆体又频宽,如果 Server 的内存不够,对外带宽不够,反而比 ICP 查询更慢。

Squid的种类【可能不太合适叫做种类,不过没有更好的词。语文太差^_^】 child、sibling、parent。

关系如下: Squid Server 之间的第一种关系是:Child 和 Parent。当 Child Squid Server 没有资料时,会直接向 Parent Squid Server 要资料,然後一直等,直到 Parent 给它资料为止。 Squid Server 之间的第二种关系是:Sibling 和 Sibling。当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要或上 internet 去拿。

一般 Squid Server 运作的模式是: 1. 当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要。 2. 向 Parent 要资料,然後一直等,直到 Parent 给它资料为止(Parent 自己有的资料或上 internet 去拿)。 3. 没有 Parent 时,就自己上 internet 去拿。 4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。

编译安装Squid: ./configure –prefix=/usr/local/squid[-ip] –enable-async-io=160 –enable-icmp –enable-kill-parent-hack –enable-cache-digests –enable-default-err-language=Simplify_Chinese –enable-poll && make && make install –enable-async-io=160:这项主要是设置async模式来运行 squid,我的理解是设置用线程来运行squid,如果服务器很强劲,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了(不要太贪心哦^_^)。 –enable-icmp:加入icmp。默认不加。 –enbale-kill-parent-hack:当kill掉nobody的squid进程的时候会同时杀死它的父进程。 –enable-cache-digests:【。。。】 –enable-default-err-language=Simplify_Chinese:当有错误的时候在页面中显示简体中文。【不过squid还是会无情的把所有语言都装上,看的不顺的话手工删咯】 –enable-poll:可以提升效能。

Squid的结构介绍: 安装好的目录在/usr/local/squid-10 (这里假设我的主ip最后一段是10) 结构是: bin/:放置squid默认写好的启动脚本。有RunAccel;RunCache;squidclient;前2个启动Squid可以使用,因为当 squid进程死了后,这个脚本可以自动检测到。 RunAccel是用于web 加速用的脚本,而RunCache是用于做squid代理用的,squidclient是用本机做squid测试的。 etc/:squid.conf在这个目录中 libexec/:函数库; man/:帮助文件。不用说了吧。。。 sbin/ :squid命令所在目录。一般如果我用来测试就启动squid命令。或者用这个命令创建swap,或者加-k参数重启之类的操作。 share/ :一些错误显示的html都在里面; var/ :log,pid,swap都在这个目录中!

隔了很久才有空可以写这个经验体会,前一段时间一直在搞qmail,头大中,终于可以空下来了:)

先看squid的一个重要的,对我来说也是唯一需要配置的一个配置文件。选项非常多,当然,默认的squid.conf文件中对于每一个选项都有比较详细的说明,但是我还是想把我理解的以及必须要进行配置的选项罗列出来,以免过段时间自己都忘了^_^

以下的配置我是要向sina,sohu,163学习的web server的架构,试着自己去搭建一个这样的环境来看看效果到底如何。因此这里的squid不是用来做代理的,而是反向作为网站高速缓存。其实原理差不多,只是方向反一反而已,相信都能理解这点的。

使用的测试服务器为Dell 2650 双CPU至强2.4G 内存DDR 2G。OS为Freebsd 5.2.1(这里需要说明的是,从实际使用情况来看,squid跑在freebsd上的效果是最快最好的。这是由os的文件系统所决定的,千万不能用, solaris,感觉solaris的文件系统实在太慢,虽然非常稳定,而且跑多线程的效果是最好的。linux嘛~~~没有进行测试,不过感觉在 freebsd之下,solaris之上。)

Squid.conf的几个重要参数的配置说明:

http_port 61.155.143.54:80 #Squid Server侦听的端口。假设我的主页的dns server 指到61.155.143.54上的,因此我必须让squid来侦听这个IP的这个端口。

cache_mem 32 MB #要额外提供多少内存给squid使用,这里的额外是指squid会将最常用的一些缓存放到这块内存中。这个指令也是我看了官方文档后才理解的。因为一开始从实际使用情况来看,我这边设32M的话,用top命令来查看一般会达到100M左右。这点让我让我很想不通,呵呵。然后就去看官方文档,发觉 squid是这样来计算使用多少内存的:squid本身的进程大概10M-20M,然后下面我设的cache目录的大小是500M的话,那他放在内存里的 hash索引大概需要20M左右,然后再加上这里设置的cache_mem的值。官方文档建议你的实际内存大小应该是这个squid所需要总内存的2倍以上。自己量力而为吧。cache_mem当然是越大越好了。

cache_dir ufs /usr/local/squid-54/var/cache 500 16 256 #设置squid存放cache目录的位置以及大小。第一个数字500是指目录的总大小为500M(默认为100M),第二个数字16是指第一级目录为 16个,第三个数字256是指第二级目录为256个我个人觉得如果网站访问量大,并且内容很多的话,可以考虑将默认的100M改大一点,否则会报错。我就经历过,错误我忘了记录了(该死!)大致就是说超过Max的极限了,当时查了半天才找到罪魁祸首是这条指令,惭愧~~~。

cache_access_log none cache_log none

cache_store_log none #我是将这些log记录都关了, 有需要的可以将它们打开。

acl managerIP src 10.10.10.10 acl ipcanbrows dst 10.10.10.0/24 #acl应该是squid配置里面最难理解也最需要花时间的地方了。应该说只需要修改很小的一部分就可以了,像这里我只是在原来的基础上加了2条记录,前面一条的意思是我定义了10.10.10.10为源路径,另外一条是指目的端是10.10.10.0/24这个网段。而managerIP, ipcanbrows随便取得名字。具体的规则需要下面的语句来定义。10.10.10.10就是本服务器的内网ip,而apache server的ip就在10.10.10.0/24这个网段里,不需要用外网ip,一定程度上节约了ip地址。

http_access allow manager managerIP ipcanbrows localhost #加上2个允许就可以了。高深的配置我觉得我也不需要,用户可以访问就达到目的了:)

httpd_accel_host virtual #由于我后面的apache server是基于ip来做虚拟主机的,因此这里需要设置成virtual。

httpd_accel_port 80 #http加速的端口,因为习惯等原因,还是将后面的apache server监听80端口。

httpd_accel_uses_host_header on #如果选了virtual的话,这里必须设置成on。

这里最多只列出了5%左右的选项,但是我配置的时候就只是用到了这些,因此,如果做网站加速的话,基本设置就是这些。当然需要更强劲的功能的话就需要好好读读squid的配置文件的文档了。

最后的步骤:

1. 改变var目录的权限:chown -R nobody var

2. 创建缓存目录:sbin/squid -z

3. 启动squid:bin/RunAccel & (这边我使用squid附带的启动脚本来启动squid,有个好处就是,如果squid的进程死了的话,这个脚本会自动启动squid,对于运行在线上的服务器来说,这点太重要了。

一些使用体会:

1. squid使用时间长了,速度会变慢,我的建议是每2小时kill掉squid 进程,RunAccel脚本会自动再启动的它。

2. 写一脚本,放进crontab中,每天凌晨4点左右把cache目录清空。

#!/bin/sh # squid clean swap and restart script by marco lu SQUID_DIR=/usr/local/squid-54/ PID_FILE=${SQUID_DIR}var/logs/squid.pid CACHE_DIR=${SQUID_DIR}var/cache PPID=`ps aux grep -i squid-54 grep -v grepawk ‘{print $2}’` kill -9 ${PPID} > /dev/null kill -9 `cat ${PID_FILE}` > /dev/null rm -rf $CACHE_DIR/* ${SQUID_DIR}sbin/squid -z > /dev/null if [ $? -eq 0 ] then ${SQUID_DIR}bin/RunAccel & > /dev/null fi

现有网络情况:

我校校园网通过光缆已将31座建筑物连通,光缆总长度约15Km,绝大多数楼中实现结构化布线,连入校园网的网络多媒体教室、教学基地、实验室、机房等约有数十个,连网计算机达3000多台 。我校目前出口有2个,一条速率为10M bps,通过光纤接入中国教育科研网CERNET,另一条速率为4M bps连入中国电信。

用户的需求:

我校校园网的使用者主体为在校学生及老师。根据统计,约80%的用户使用WWW、FTP等资源。我校现有Chinanet ip 126个,不可能分给所有的用户使用。通过架设代理服务器来实现让所有用户使用网络资源是最简单并且相对安全和可靠的方法。通过架设专门的WWW (FTP)代理来满足用户的主要需求,通过架设socks5代理来满足用户的其他需求。

二、硬件及软件的选择

硬件

Cache Server可以是一台普通的PC服务器加上cache软件(如Squid、Inktomi)构成,也可以是软硬件系统和一台专门的cache服务器。根据Chinanet出口的实际情况,4Mbps速率的出口,每秒最大传入数据量为约500K/s。我校主干网节点间为双千兆连接,到达部分实验室是百兆,到达宿舍为10M。送出的最大数据量为约12M/s。传送的数据量不是很大,使用传统的IA32构架服务器既可满足需求。我校网络中心主机房使用机柜来存放服务器。惠普公司的LH6000服务器,具有很强的扩展性,是新型的六路服务器。代理服务器的运算负荷不是很重,对于IO的要求较高。LH6000通过自定义配置可以达到这个要求。通过使用raid可以提高磁盘性能,增加数据的可靠性。代理服务器软件占用内存较大。LH6000可以支持8GB内存。最终选择配置如下:

配置

处理器:1个100MHz系统总线的Intel Pentium III Xeon 700MHz处理器 内存:1G PC-133 ECC SDRAM 磁盘控制器:集成具有32MB高速缓存双通道Ultra3 SCSI HP NetRAID控制器 附加单通道:Ultra Wide SCSI控制器 内置存储:热插拔5x18G半高驱动器 网卡:内置INTEL 82559 100M网卡 电源:3个热插拔电源

RAID使用了RAID5模式,这个模式是向阵列中的磁盘写数据,奇偶校验数据存放在阵列中的各个盘上,允许单个磁盘出错。RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。

软件

Squid Internet Object Cache (Harvest Project的後续版本) 是美国政府大力助的一项研究计划。Squid是一个开放源代码的代理服务器软件。它是一个为UNIX系统下运行的全功能的代理服务器软件。它可以为 HTTP协议、FTP协议以及其他使用URL方式定位的协议作缓存。它支持客户端使用SSL协议进行数据传送。它可以使用ICP, HTCP, CARP, Cache Digests等协议和方式和其他运行squid的服务器进行协同。它支持SNMP协议,可以用相应的软件来做协调和管理。并且能配置详细的访问控制列表(acl)。

操作系统

以前学校的代理服务器使用linux作为操作系统。这是因为以前的代理服务器通常还兼作其他的服务器。很多服务器软件是专门为linux开发的,或者在linux上运行的效率最高。Squid本身是为unix-like操作系统开发的。本身对系统没有太多的要求。目前我校Chinanet代理服务器使用的是FreeBSD作为操作系统。

没有选择Linux有下面几点原因:

Linux的核心部分开发相对比较开放,FreeBSD的核心是由一个严格的core team来完成的。相对检查更加严格。从核心部分比较BSD的内核更加稳定。

Linux对高负荷的承载能力不如FreeBSD。对于高负荷下程序出错的容忍力,BSD远强于Linux。 许多著名的网站,如:yahoo, netease 等著名的商业网站使用的就是freebsd,稳定性和性能早已通过很多专家的评测,远远强于Linux。

在著名的文章“Linux vs BSD: A Tale of Two System”中,是这样评价Freebsd的: FreeBSD focuses on the Intel Architecture PC and server platforms, and on providing the best performance and stability possible. The DEC/Compaq Alpha is also supported.

但是Freebsd也有不如Linux的弱点。主要表现在磁盘IO的性能上。这主要是因为Freebsd使用的文件系统—UFS的性能不如 linux上使用的ext2/ext3。但是在加上softupdate之后会有很大的改进。而且出国代理上配置的使用raid5模式,磁盘使用高转速 scsi硬盘,在上述硬件配置的情况下,读取squid cache的数k大小的小文件使用ext2和ufs+softupdate的效率的差别在万分之一以下。对于负载数千用户的代理服务器来说,可以忽略这样的效率差别。

基于以上原因,最终选用Freebsd作为代理服务器的操作系统。

三、代理服务器软件的安装

squid的安装

freebsd本身的ports程序带有squid的稳定版本。目前squid的最新版本是2.4.STABLE6。在freebsd的 /usr/ports/www/squid 目录下执行make;make install就会将最新版本的squid代码下载、编译并最终安装到/usr中的相应路径中。

Squid本身会被安装到/usr/local/sbin下 Squid的cache目录默认为/usr/local/squid/cache Squid的log目录默认为/usr/local/squid/logs squid的配置文件目录默认为/usr/local/etc/squid

这样的安装方式比直接使用二进制的package安装要好。因为二进制的package不能保证在自定义的系统上稳定运行。下载源代码代码在本地进行编译之前,首先会校验源代码的MD5 checksum,这样能保证我得到的源代码是未经修改过的版本。然后再在本地进行编译。最后安装到相应目录。

Squid的配置

Squid的配置文件是squid.conf

部分参数的配置如下:(为保证代理服务器安全,部分参数用*代替)

http_port 8080 设置http代理端口为8080 cache_peer pa.us.ircache.net sibling 3128 3130 login=*:* cache_peer sj.us.ircache.net sibling 3128 3130 login=*:* cache_peer * parent 13280 4827 htcp *:*

这几行是使用squid可以和其他几台机器进行协同工作的特性,同几台组成cache_peer。具体设置在后面的优化部分会解释。

cache_peer_domain * .edu.cn设置.edu.cn的域名使用某个cache_peer访问 cache_mem 400 MB设定内存cache的大小为400M cache_swap_low 80 cache_swap_high 97这两行是设置cache进行替换的闸值。当占用到97%的cache后,cache中的内容将被清空20%。 maximum_object_size 20000 KB 最大对象大小为20M. maximum_object_size_in_memory 10000 KB 内存中最大的对象大小为10M ipcache_size 4096 ip对应cache的大小为4096 fqdncache_size 4096 域名全称cache的大小为4096 cache_replacement_policy heap LFUDA cache替换策略 memory_replacement_policy heap LRU 内存替换策略 cache_dir ufs /usr/local/squid/cache 25000 16 256 cache存放的路径大小及具体配置 dns_nameservers * * * * * 内部指定dns服务器 authenticate_program * * 身份认证程序 authenticate_children 32 身份认证程序启动的进程数目 request_body_max_size 5 MB 最大请求的body大小 reply_body_max_size 20 MB 最大回应的body大小 acl all src 0.0.0.0/0.0.0.0 acl dorm proxy_auth 192.168.0.0/255.255.0.0 REQUIRED acl bjpu proxy_auth 202.112.64.0/255.255.240.0 REQUIRED acl bjpu2 proxy_auth 211.71.80.0/255.255.240.0 REQUIRED

访问控制列表

acl banned_sites {过滤的关键字} http_access deny banned_sites deny_info ERR_BANNED_SITE banned_sites

禁止访问违禁站点的设置

acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT

设置可以连接的端口

http_access allow dorm http_access allow bjpu http_access allow bjpu2 http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all

允许http访问

icp_access allow *允许cache_peer使用ICP协议访问 proxy_auth_realm BJPU proxy-caching web server 验证框提示的banner cache_mgr liukange@netease.com cache管理员的电子邮件地址 cache_effective_user * cache_effective_group * 执行cache程序的用户uid和gid visible_hostname cnproxy.bjpu.edu.cn cache服务的机器名 memory_pools on 内存池设置为打开。 memory_pools_limit 50 MB 内存池的大小

Socks5代理的安装

出国代理上选用的socks5代理软件是NEC公司制作的软件。它实际上是一个商业版软件。但是根据它的license文件所述,在非商业用途上使用这个软件是免费的。在RFC-1928对socks5如何运行做了详细的描述。这个标准就是NEC公司的“Ying-Da Lee”和HP及IBM公司制定的。在相应的测试中,NEC公司的这个socks5代理软件的性能是较好的。虽然它有一些安全上的漏洞,但是使用 freebsd的ports方式安装,将会自动对源代码打补丁,修正安全隐患。

在/usr/ports/net/socks5下执行make;make install就能安装好该程序。相应的文件将被安装在下列目录:

socks5可执行文件被放在/usr/local/bin socks5.conf文件被放在/usr/local/etc下

bugtraq上曾经提到socks5的密码验证部分有安全隐患,因此没有使用该功能。

Socks5代理的配置

Socks5代理的配置文件是socks5.conf,内容如下:

set SOCKS5_MAXCHILD 8000 permit - - 192.168. - (1024,65535) - permit - - 202.112.64.0/255.255.240.0 - (1024,65535) - permit - - 211.71.80.0/255.255.240.0 - (1024,65535) –

限制工大可以使用该socks5代理,限制目标端口为1024-65535。设置最多可以有8000个进程运行。

配置文件的切换

为了避免带宽的浪费,出国代理设置为夜间取消最大下载对象限制。这是是使用crontab来做到的。每天夜间23:30将配置文件切换为没有最大下载对象限制的。每天上午7:30切换回有最大下载对象限制的。

四、使用情况分析

单位时间内流量

input (total) output packets errs bytes packets errs bytes colls 917 0 646248 1015 0 767928 0 941 0 667858 1287 0 1548180 0 832 0 673330 897 0 836839 0 895 0 655289 1067 0 878449 0

*以上数据为出国代理负载中等时的数据。

Chinanet出口已经被占满,经过cache的作用,送出数据大于进入数据

CPU负荷

使用top命令看到的CPU的负荷: load averages: 0.72, 0.86, 0.86(1mi,5min,15min),此数据为出国代理负载中等时的数据。

Hourly usage

[img:01091db545]http://www.frontfree.net/articles/pages/0000000597/hourlyusage.gif\[/img:01091db545\]

通过这张图可以清晰的了解出国代理的使用情况。

早6时,宿舍通电。出国代理的使用频度增加数倍。 早8时,机房、实验室开始开放,出国代理的使用频度近一步增多。 上午11时,课程结束,部分学生离开机房、实验室,午餐时间使用频度略微减少。 中午13时,下午课程开始,学生离开宿舍,使用频度减少。 下午15时,机房和实验室用户增多。 下午17时,部分机房、实验室关闭,教师离开学校,造成使用频度减少。 晚18-20时,学生去上自习或选修课,使用频度呈减少趋势 晚21时-22时,选修课结束,学生回到宿舍,使用频度急剧增加,并且达到每天的最高点。 晚23时,部分宿舍断电,实验室断电。使用频度进一步减少。 0时-5时,宿舍学生大多已经休息,使用频度程减少趋势。

Daily usage

[img:01091db545]http://www.frontfree.net/articles/pages/0000000597/dailyusage.gif  [/img:01091db545]

通过上面可以看出我校Chinanet线路代理服务器每天的使用情况。出国代理的日访问日志在约600M。图中显示出周末,尤其是周日访问量很大。这是由于周末我校宿舍不断电,作为用户主体的学生的使用网络的时间大大增加。对此称为“周末效应”。

五、安全保障

物理安全的保护

供电:该服务器放在我校网络中心主机房,有双路供电。UPS可以保证在没有市电供应下5小时不中断服务。

物理隔离:网络中心24小时有专人值班,进入主机房需要登记。

服务器软件安全保护

操作系统选用了FreeBSD。Freebsd本身几乎没有任何安全漏洞。根据服务最少化原则,出国代理上目前使用的服务有ssh ntp socks5 squid几种。其中ssh没有使用freebsd自带的openssh,而是使用了ssh.com出的非商业版的ssh服务器软件。这个版本的ssh服务器软件相对openssh有更安全效率更高的优势。而且对于非商业应用是免费的。服务器通过ntp服务与某网络时间服务器进行时间同步,这是为了保证日志文件记录事件发生时间的准确性。另2个为必须提供的代理服务。其余服务没有打开。执行ps命令确认没有任何多余进程。

对SYN-Flood及扫描的防护

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

[img:01091db545]http://www.frontfree.net/articles/pages/0000000597/tcpconnection.gif\[/img:01091db545\]

TCP协议的三次握手过程是这样的:

首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号; 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送 SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源—-数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。 实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃。即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),从而造成DoS。

在freebsd的可以调整的内核参数中有下面2项:net.inet.tcp.blackhole和 net.inet.udp.blackhole。相应的描述如下:The blackhole sysctl MIB is used to control system behaviour when connection requests are received on TCP or UDP ports where there is no socket listening. Normal behaviour, when a TCP SYN segment is received on a port where there is no socket accepting connections, is for the system to return a RST segment, and drop the connection. The connecting system will see this as a “Connection reset by peer”. By setting the TCP blackhole MIB to a numeric value of one, the incoming SYN segment is merely dropped, and no RST is sent, making the system appear as a blackhole. By setting the MIB value to two, any segment arriving on a closed port is dropped without returning a RST. This provides some degree of protection against stealth port scans.In the UDP instance, enabling blackhole behaviour turns off the sending of an ICMP port unreachable message in response to a UDP datagram which arrives on a port where there is no socket listening. It must be noted that this behaviour will prevent remote systems from running traceroute to a system. The blackhole behaviour is useful to slow down anyone who is port scanning a system, attempting to detect vulnerable services on a system. It could potentially also slow down someone who is attempting a denial of service attack.

根据上面描述可以将net.inet.tcp.blackhole和net.inet.udp.blackhole设置为2和1,这样将防止半开式的端口扫描,并且能对syn-flood有初步的防护。

在内核的配置文件中有options TCP_DROP_SYNFIN这个选项。通过加入这个参数,可以防止通过TCP/IP堆栈对操作系统进行识别。可以将安全问题中的”information gathering”解决 。

六、优化

内核的优化

FreeBSD有很丰富的可以自定义的内核的参数。默认的内核为了保证通用性和稳定性,有大量优化性能的参数没有加入。

我校Chinanet代理服务器操作系统内核部分优化参数如下:

options MAXDSIZ=”(1024*1024*1024)” options MAXSSIZ=”(1024*1024*1024)” options DFLDSIZ=”(1024*1024*1024)” options CPU_ENABLE_SSE options PANIC_REBOOT_WAIT_TIME=16

前三行是对freebsd下运行的应用程序可以使用的最大的内存资源作限制,默认为128M。由于出国代理服务器软件squid占用内存巨大,默认的配置显然不能满足要求,所以要使用自定义的配置。这个配置允许单一进程占用1G的内存资源。

第四行是打开对SSE/MMX2指令集的支持。通过加入这一参数,出国代理的性能提高了约1%。即单位时间内吞吐量增加了1%。

第5行是在内核发生严重错误的时候自动重新启动的时间。这个参数保证了服务器出现严重的软件错误后能自动恢复。

Cache policy 在本文的第三部分中提到了出国代理使用的cache policy。

cache_replacement_policy heap LFUDA cache替换策略 memory_replacement_policy heap LRU 内存替换策略

HP公司曾经对squid作过详细的测试。

参考该文档,对我校出国代理作了相应的调整。默认的cache_replacement_policy 和memory_replacement_policy都是LRU。这个算法用在cache上效率相对较低。经过实际测试,使用LFUDA(Least Frequently Used with Dynamic Aging)作为cache replacement policy,cache的命中率最高。使用heap LRU作为memory replacement policy,memory cache命中率最高。使用工具测得加入出国代理后,对使用代理的用户来说,Chinanet的出口带宽达到了5-7M,已经远远高于4M的实际带宽。确实起到了cache的作用。

对于磁盘IO的优化

前文提到freebsd的磁盘性能不佳。除使用raid技术之外,squid本身有unlinkd 和diskd两个子进程来专门负责对磁盘作操作。配置文件中的cache_dir ufs /usr/local/squid/cache 25000 16 256 这行指定了squid可以使用25G的硬盘空间来作为缓存。Ufs指定了使用unlinkd作为对磁盘做操作的进程。Unlinkd只负责删除文件的操作,diskd负责所有的操作。Squid的相应文档上建议使用diskd。但是经过测试,使用diskd虽然能提高系统的性能,但是会使squid进程变得不稳定。基于保证稳定性的考虑,选择使用unlinkd作为对磁盘操作的进程。

Cache peer

Squid支持多台服务器进行协同工作,组成cache peer。美国的National Laboratory for Applied Network Research、UCSD、The National Science Foundation建立了相应的cache peer组织(http://www.ircache.net)。我校Chinanet代理服务器将该组织中的2台服务器设置为slibing模式来调用,将我校另外一台cernet线路上的服务器设置为域名以.edu.cn结尾的parent模式。访问过程是这样的:如果客户端提交来的请求是以. edu.cn结尾的,首先查询cache中是否有,如果没有则请求cernet线路上的服务器去读取相应资源。

对于其他的域名,则首先查询本身的cache,如果没有则查询slibing的cache,如果还没有,则自己主动去获取该资源。与 ircache的协调使用ICP(Internet Cache Protoclol),与cernet线路服务器协调使用HTCP(Hypertext Caching Protocol)。对ICP的描述在RFC2186、RFC2187,对HTCP的描述在http: //icp.ircache.net/htcp.txt。HTCP更有利于提高cache的性能,但是对系统的配置有要求,ICP相对简单。所以,选择使用ICP与ircache的服务器协同工作,使用HTCP与学校cernet服务器协同工作。

#vi /etc/squid/squid.conf http_port 192.168.0.1:60080 icp_port 0 cache_dir ufs /var/squid cache_mem 32MB cache_swap_low 90 cache_swap_high 95 cache_access_log /var/squid/access.log cache_log /var/squid/cache.log cache_store_log none emulate_httpd_log on pid_filename /var/run/squid.pid httpd_accel_port 80 httpd_accel_host virtual httpd_accel_with_proxy on httpd_accel_uses_host_header on cache_log /var/log/squid/cache.log cache_store_log none acl zzvcom src 192.168.0.0/24 http_access allow zzvcom visible_hostname proxy #squid -z #/etc/rc.d/init.d/squid start & #touch /etc/rc.d/firewall #chmod 755 /etc/rc.d/firewall #vi /etc/rc.d/firewall LAN_IP_RANGE=”192.168.0.0/24” STARIC_IP=”229.143.34.38” TRUSTED_PORT=”22 25 53 80 110”

#开放以下端口:22 25 53 80 110 /sbin/iptables -N services for PORT in $TRUSTED_PORT; do /sbin/iptables -A services -i eth0 -p tcp –dport $PORT -j ACCEPT done

echo “1”>/proc/sys/net/ipv4/ip_forward /sbin/iptables -F /sbin/iptables -F -t nat /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP #状态检测 /sbin/iptables -A FORWARD -p tcp ! –syn -m state –state NEW -j LOG –log-prefix “New not syn:” /sbin/iptables -A FORWARD -p tcp ! –syn -m state –state NEW,INVALID -j DROP /sbin/iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT #DROP掉受怀疑的扫描 /sbin/iptables -A FORWARD -p tcp –destination-port 1080 -j DROP /sbin/iptables -A FORWARD -p tcp –destination-port 8080 -j DROP /sbin/iptables -A FORWARD -p tcp –destination-port 8000 -j DROP /sbin/iptables -A FORWARD -p tcp –destination-port 8081 -j DROP #防止IP欺骗 /sbin/iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP /sbin/iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP /sbin/iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP #只开启内部机器PING通代理 /sbin/iptables -A FORWARD -i eth1 -p icmp –icmp-type 0/0 -j ACCEPT /sbin/iptables -A FORWARD -p icmp –icmp-type 0/0 -j DROP #对于内部WWW服务,则转至SQUID /sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp -s $LAN_IP_RANGE –dport 80 -j REDIRECT –to-ports 60080 #使内网机器其它服务用SNAT /sbin/iptables -t nat -A POSTROUTING -o eth0 -s $LAN_IP_RANGE -j SNAT –to $STATIC_IP #开放主机的SSH服务 /sbin/iptables -A OUTPUT -o eth0 -p tcp -s $STATIC_IP –sport 1024:65535 -d any/0 –dport 22 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp -s any/0 –sport 22 -d $STATIC_IP –dport 1024:65535 -j ACCEPT #使内部192.168.0.2开放WWW至外部 /sbin/iptables -t nat -A PREROUTING -p tcp -d $STATIC_IP -dport 80 -j DNAT –to 192.168.0.2:80 #允许要转向的包 /sbin/iptables -A FORWARD -i eth1 -j ACCEPT #ip碎片进行控制 /sbin/iptables -A FORWARD -f -m limit –limit 100/s –limit-burst 100 -j ACCEPT #允许udp服务 /sbin/iptables -A FORWARD -i eth0 -p udp -d $LAN_IP_RANGE -j ACCEPT #防止DOS,FLOOD攻击 /sbin/iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT /sbin/iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT #vi /etc/rc.d/rc.local /etc/rc.d/init.d/squid start /etc/rc.d/firewall

01、允许全部可以访问Internet;

02、允许部分人有权限的人可以下载;

03、允许部分人完全没有限制(管理员组、经理组);

04、允许全体人员在固定时间,有部分限制,不在此时间之内,撤除限制;

05、不允许下载的特定url字符:exe/zip/mp3等等;

06、不允许访问特定的站点;

07、透明代理与用户认证共存可提供选择;

08、允许部分人员只能浏览指定网站;

09、允许收发邮件(所有域名邮件(smtp,pop3))和只能收某域名收发某域名邮件;

10、IP/MAC绑定用户名认证上网;

11、三种认证方式(mysql,samba,ncsa);

实施环境: PII350 , 512MB , 40GB ,双网卡

固定IP 1M带宽

子网: 192.168.168.0 192.168.1.0 ,网关 192.168.168.201 192.168.1.201

软件:RedHat9,光盘自定义安装方式。

所有软件以自带方式。

试试: 首先本人认为01 是不可能实现的,而11我又不会SQL和SAMBA认证只会基本认证,除此之外其余均能实现 假设子网192.168.1.0/24,某个域名为www.163.com通过PING 的其IP为202.108.36.196,通过其IP限制收发该域名邮件(可在iptables中实现) 外网网卡为eth0内网网卡为eht1,为eth1绑定192.168.1.201和192.168.0.201 cp eth1 eth1:1 修改eht1:1 没有限制的用户为192.168.0.201以后的IP用MAC标志 由于AS3没有安装GCC而本身的SQUID里又没有NCSA文件,固重新安装GCC和SQUID, tar zxvf squid-2.5.STABLE7.tar.gz cd squid-2.5.STABLE7 ./configure –prefix=/usr/local/squid –sysconfdir=/etc/squid #配置文件位置 –enable-arp-acl #客户端的MAC地址进行管理 –enable-linux-netfilter #允许使用Linux的透明功能 –enable-pthreads –enable-err-language=”Simplify_Chinese” –enable-default-err-language=”Simplify_Chinese” #上面两个选项告诉Squid编入并使用简体中文错误信息 –enable-storeio=ufs,null #可以不用缓冲 –enable-auth=”basic” #认证方式 –enable-baisc-auth-helpers=”NCSA” #认证程序为 –enable-underscore #允许解析的URL中出现下划线 make make install 开始配置squid.conf ################################################################################################## # 服务器配置 icp_port 0 cache_store_log none cache_access_log /dev/null cache_log /dev/null http_port 3128 cache_mem 128 MB cache_dir null /tmp

pid_filename none client_netmask 255.255.255.255 half_closed_clients on

#用户分类 auth_param basic program /usr/bin/ncsa_auth /usr/etc/passwd auth_param basic children 5 auth_param basic realm Tianfuming proxy-caching server auth_param basic credentialsttl 2 hours acl normal proxy_auth REQUIDE #用户认证 acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b … #10 IP/MAC绑定用户名认证上网; acl lana src 192.168.1.0/24 acl lanb src 192.168.0.1-192.168.0.200/32

#行为分类 acl download urlpath_regex -i \.mp3$ \.exe$ \.avi$ \.rar$ \.rvmb$ \.jpg #禁止下载 #acl conncount maxconn 5 #最大连接数 acl worktime MTWHF 8:00-18:00 # 04、允许全体人员在固定时间,有部分限制, #不在此时间之内,撤除限制(在http_access中限制) acl qq dstdomain .snnu.edu.cn acl badwords url_regex sex

acl localhost src 127.0.0.1/32 acl all src 0.0.0.0/0.0.0.0

http_access allow advance # 03 允许部分人完全没有限制; http_access allow localhost #http_access deny conncount normal http_access deny ! http_access deny badwords worktime # 不允许访问特定url字符网站 http_access deny qq worktime # 06 不允许访问特定的站点 http_access allow lana # 02 允许部分人可以下载 http_access deny download worktime # 05 不允许下载的特定url字符:exe/zip等等; http_access allowd lanb homepage #08、允许部分人员只能浏览指定网站; http_access allow normal http_access deny all #除这些,禁止所有 #结合透明代理 07、透明代理与用户认证共存 httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on #################################################################################### iptables脚本 #################################################################################### #! /bin/sh

UPLINK=”eth0” UPIP=”a.b.c.d” LANLINK=”eth1” ROUTER=”yes” #NAT=”UPIP/dynamic” NAT=”UPIP” INTERFACES=”lo eth0 eth1” SERVICES=”80 22 25 110 “ deny=”” case “$@” in start) echo -n “Starting firewall…” modprobe ip_nat_ftp modprobe ip_conntrack_ftp iptables -P INPUT DROP iptables -A INPUT -i ! ${UPLINK} -j ACCEPT iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD DROP iptables -A FORWARD -p tcp -m multiport –dport 25 80 110 -j ACCEPT iptables -A FORWARD -d !202.108.36.196 -p tcp -m multiport –dprot 25 110 -j DROP ##09、只允许收发邮件(所有域名邮件 iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT #(smtp,pop3))和只能收某域名收发某域名邮件 #iptables -P OUTPUT DROP #enable public access to certain services for x in ${SERVICES} do iptables -A INPUT -p tcp –dport ${x} -m state –state NEW -j ACCEPT done

for y in ${deny} do iptables -A OUTPUT -p tcp –dport ${y} -j DROP iptables -A OUTPUT -p udp –dport ${y} -j DROP done

#enable system-log #iptables -A INPUT -j LOG –log-prefix “bad input:”

iptables -A INPUT -p tcp -i ${UPLINK} -j REJECT –reject-with tcp-reset #iptables -A INPUT -p udp -i ${UPLINK} -j REJECT –reject-with icmp-port-unreachable

#explicitly disable ECN if [ -e /proc/sys/net/ipv4/tcp_ecn ] then echo 0 > /proc/sys/net/ipv4/tcp_ecn fi

#disable spoofing on all interfaces for x in ${INTERFACES} do echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter done

if [ “$ROUTER” = “yes” ] then #we’re a router of some kind, enable IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward if [ “$NAT” = “dynamic” ] then #dynamic IP address, use masquerading iptables -t nat -A POSTROUTING -o ${UPLINK} -j MASQUERADE elif [ “$NAT” != “” ] then #static IP, use SNAT iptables -t nat -A PREROUTING -i ${LANLINK} -d ! ${UPIP} -j DNAT –to-ports 3128 iptables -t nat -A POSTROUTING -o ${UPLINK} -j SNAT –to ${UPIP} fi fi echo “OK!” exit 0 ;; stop) echo -n “Stopping firewall…” iptables -F INPUT iptables -P INPUT ACCEPT iptables -F OUTPUT iptables -P OUTPUT ACCEPT #turn off NAT/masquerading, if any #iptables -t nat -F POSTROUTING echo “OK!” exit 0 ;; restart) $0 stop $0 start

;; show) clear echo “>——————————————————————-“ iptables -L echo “>——————————————————————-“ iptables -t nat -L POSTROUTING exit 0 ;; *) echo “Usage: $0 {startstoprestartshow}” exit 1 esac

用Squid实现代理上网及计费

-— IP紧缺是高速发展的网络面临的现实问题,我们该如何解决这 一问题?将只有内 部IP的计算机通过一台具有标准IP作为代理服务器 的计算机连接到Internet上是解决此 问题的一种绝妙手段。代理服务 器是数据的中转站,它可以将经过代理服务器的数据记 录下来,为后 继的数据分析和计费提供服务与帮助。另外,借助代理服务器软件 (比 如Squid)可以建立访问站点的缓存,从而让再次访问的用户能 够直接从缓存中调用数据, 加快访问速度,减少重复的网络数据流 量。

-— 由于Squid具有权限管理灵活、性能高和效率快等特点,应用较 为广泛,因此,我 们将就代理服务器软件Squid在Linux、FreeBSD和 Unix应用中的认证问题进行讨论,同时 还将介绍关于利用Squid辅助 软件实现代理上网与计费的具体方法。

一、 获取Squid及相关的软件

-— 从http://squid-cache.org/上获取Squid软件,从http:// web.onda.com.br/orso/ 上获取htpasswd_plus和SQMGRLOG,并将它们 保存在/tmp目录下。

二、在Linux下编译并安装Squid

-— 我们假设软件环境为Redhat Linux 7.x,编译和安装Squid的操 作步骤如下。

-— 1.下载最新版本的源文件Squid-2.3.STABLE4.src.tar.gz,并 将它放置在/tmp目 录下。

-— 2.以root身份创建用户squidadmin#adduser squidadmin

-— 在缺省的情况下,同名组squidadmin已经被建立。Squid因为考 虑到安全问题,不 能以root身份运行,所以从一开始就使用新建的用 户进行安装管理。

-— 3.以squidadmin登录,对Squid源文件解包和安装。

$cd /tmp $tar -zxvf squid* $cd squid* $./configure –prefix=/usr/local/squid 进入Squid目录进行编译,考虑的选项是安装路径 –prefix=/usr/local/squid。 $make $make install

-— 4.进入/usr/local/squid/bin目录,执行$./squid -z,创建 cache交换目录。至此, Squid已经安装在用户的系统上了。然而,要 让Squid正常运转,用户还需要做一些基本设 置。Squid的运转只与/ usr/local/squid/etc/squid.conf有关,所有设置均在此文件中完 成。

三、Squid基本设置

#Defaults: acl all src 0.0.0.0/0.0.0.0 设置的规则在此处加入。 http_access deny all

-— 在缺省的情况下,有以上2条规则。当有请求未能匹配任何一条 用户定义的规则时, http_access deny all规则将被应用,这 样,http请求将被拒绝。

-— 那么如何在Linux中设置Squid的用户认证存取控制呢?Squid用 access control list (缩写为acl)来管理规则。例如:

acl aclname acltype string1 … acl aclname acltype “file”

-— aclname为用户定义规则的名字,acltype是可被Squid识别的类 别(主要有src、 dst、proxy_auth、port和time…),string为用 户的设置,可以用”file”从外部文件 调入设置。

-— 1.如果用户喜欢弹出输入用户名及密码的方式,首先需要安装 认证程序。Squid 的源文件包自带了几种认证程序,都在/tmp/squid- 2.3.STABLE4/auth_modules目录下。

(1)$ cd /tmp/squid-2.3.STABLE4/auth_modules/NCSA $ make ncsa_auth (2)将生成的执行文件ncsa_auth拷贝到squid执行文件目录中。 $ cp ncsa_auth /usr/local/squid/bin (3)用htpasswd_plus生成供Squid利用的用户名和密码认证数据文 件。 $htpasswd_plus -c /usr/local/squid/etc/passwd passwd的格式如下。 username1:SilykvIBT46C.:977867617:* username2:tV.8XcR8tgIqw:*:192.168.1.0 username3:密码:失效时间:可以登录的IP 若为*,则说明任何项都能与其匹配。另外还可以增加其他更多的用 户。 $ htpasswd_plus /usr/local/squid/etc/passwd newusername (4)修改squid.conf设置 authenticate program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd指定认证身份的内部程序。添加规则 如下。 acl alloweduer proxy_auth username1 username2或者 acl alloweduser proxy_auth REQUIRED http access allow alloweduser

-— 关键字REQUIRED意味着任何合法的用户都可以认证身份,在其 他的acltype中也 起同样的作用。

-— 2.用IP限制Squid proxy的使用,设置内容如下。

acl manager proto HTTP FTP … acl safeports port 80 21 443 563 70 210 1025-65535 … acl connect method CONNECT acl allowedIP src 202.120.x.x/255.255.255.224 acl denyIP src 202.96.x.x/255.255.255.224 acl allowedusers proxy_auth REQUIRED http_access deny !safeports #禁止来自!safeports的HTTP请求。 http_access deny denyIP http_access allow allowedIP http_access allow allowedusers

-— 这样,除了拒绝及允许的IP,其他的请求都将通过输入用户名 及密码来认证。 如果用户不希望内部计算机访问某些网站(比如暴力 或色情网站),可以通过如下 设置屏蔽这些站点。

-— acl badip dst “/usr/local/squid/etc/somebadip”

-— http_access deny badip

-— 此处被拒绝的不是来源src的IP地址,而是目的dst的IP地址。 在文件somebadip 中存储如下格式的一批IP地址:

-— 24.244.192.0/255.255.240.0

-— 61.128.0.0/255.252.0.0

-— 请大家特别注意http语句的顺序,正是通过不同的次序,使得 我们可以进行灵活 的配置,得到相应的服务。

-— 3.其他的一些设置如下所示,其中的大多数可以不做修改,只 使用缺省值即可。

http port 3128 #HTTP协议的默认代理端口。 cache mem 42MB #用一块内存作为缓冲。 cache dir ufs /home/squid/cache 1024 16 256

-— #硬盘缓冲区的大小,大小为1GB,一级目录16个,二级目录256 个。

-— cache access log /var/log/squid/access.log

-— #该log文件是用来描述每次客户请求HTTP内容时高速缓存命中 或未命中的项目,同 时还描述提出请求的主机身份及它们所需要的内 容,它是用SQMGRLOG等软件分析记费的 基础。

-— cache log /var/log/squid/cache.log

-— #用于描述当Squid守护进程启动时可以看到的内存容量、交换 空间的大小、高速缓 存目录的位置、所接受的连接类型以及接受连接 的端口。

-— cache_store_log /var/log/squid/store.log

-— #用于描述页面从高速缓存中被调入调出的情况。

pid filename /var/run/squid.pid #Squid进程的进程号。 dns nameservers 192.x.x.1 #定义域名解析服务器的地址。 cache_mgr squidadmin@your.domain #cache管理员的邮件箱地址。 reference age 1 week #设置缓冲区的更新周期。 maximum object size 4096 KB #设置允许被缓存的一次性最大请求。 cache_effective_user squidadmin squidadmin #以用户squidadmin的身份运行。

四、用SQMGRLOG实现计费

$cd /tmp $tar -zxvf sqmlog* $cd sqm* $./configure –enable-config=/usr/local/squid/ 的选项主要有以下2项。

-— 1. 语言

-— 该语言不包含中文。事实上,它的语言部分是由English.h控制 的,可以汉化后 对其进行编译和安装。

-— –enable-language=English, Bulgarian_windows1251, Czech, Dutch, French, German, Hungarian, Indonesian, talian, apanese, Portuguese, Russian_Koi8, Russian_windows1251, Serbian, Spanish, Turkish default: English

-— 2.安装目录

-— –enable-config=/usr/local/squid/etc

-— #笔者将SQMGRLOG的配置文件sqmgrlog.conf 放在与Squid的配 置文件相同的目录下。

--enable-prefix=/usr/local/squid/bin #最终编译生成的运行文件sqmgrlog的放置目录。 $make $make install 最后,我们还要配置sqmgrlog.conf。 access log /usr/local/squid/logs/access.log #设置Squid的使用记录文件access.log的所在地。 output dir /home/squidadmin/public_html/squid-reports #生成report的输出目录。 password /usr/local/squid/etc/passwd #只生成此passwd文件中指明的用户report。 $./sqmgrlog

SARG这个软件,就download下来,装在我的代理服务器上,哇噻,功能真是很强大.上网的记录完全的展现在你的面前,你浏览过的网页,下载过的东东,你的访问量,流量…….很全呀,不过,我都害怕了,这么全,我的上网记录不是全都爆光了:)

安装:

sarg-2.0.2.tar.gz

#tar -zxvf sarg-2.0.2.tar.gz

#cd sarg-2.0.2

#./configure

#make;make install

#vi /usr/local/sarg/sarg.conf #根据你的实际情况修改了

#vi /etc/cron.daily/sarg.daily #包括/etc/cron.weekly/sarg.weekly,/etc/cron.monthly/sarg.monthly,这些就是你的 Squid proxy Server的日报表,周报表,月报表呀,不过如果你的流量很大的话,就不要做日报表了,太大了,很浪费你的硬盘空间.

以下是几个cron的说明档,大家可以根据自己的需求修改:

sarg.cron # Please edit the following lines to match your requirements # Also edit sarg.* scripts if you want to customize reports folder # To enable report generation put last 3 lines into your /etc/crontab # file.

30 23 * * * root /usr/sbin/sarg.daily 01 0 * * 1 root /usr/sbin/sarg.weekly 30 1 1 * * root /usr/sbin/sarg.monthly

sarg.monthly #!/bin/bash

#Get yesterday date YESTERDAY=$(date –date “1 day ago” +%d/%m/%Y)

#Get 1 month ago date MONTHAGO=$(date –date “1 month ago” +%d/%m/%Y)

/usr/sbin/sarg -o /var/www/html/squid/monthly -d $MONTHAGO-$YESTERDAY # > /dev/null 2>&1

/usr/sbin/squid -k rotate

exit 0

sarg.daily #!/bin/bash

#Get yesterday date YESTERDAY=$(date –date “1 day ago” +%d/%m/%Y)

/usr/sbin/sarg -o /var/www/html/squid/daily -d $YESTERDAY > /dev/null 2>&1

exit 0

sarg.weekly #!/bin/bash

#Generate Access.log for correct weekly reports cat /var/log/squid/access.log.0 /var/log/squid/access.log > /var/log/squid/access.log.week

#Get yesterday date YESTERDAY=$(date –date “1 days ago” +%d/%m/%Y)

#Get one week ago date WEEKAGO=$(date –date “7 days ago” +%d/%m/%Y)

/usr/sbin/sarg -l /var/log/squid/access.log.week -o /var/www/html/squid/weekly -d $WEEKAGO-$YESTERDAY > /dev/null 2>&1

exit 0 sarg默认的输出的目录/var/www/html/,所以要创建/var/www/html/daily,monthly,weekly三个目录,或手动执行上述shell命令,在IE中打开http://yourip/daily,出来了吧 大家可以这里看一下我的抓图

squid日志分析软件sarg的安装和使用

1、SARG介绍

SARG的全称是:Squid Analysis Report Generator SARG作为一款Squid日志分析工具,它采用html格式,详细列出了每一位用户访问internet的站点信息,时间占用信息,排名,连接次数,访问量,访问量等。 软件的主页:http://www.sarg-squid.org/ 目前最新的版本是2.0.2

2、安装

下载了sarg的最新安装包以后,进入下载的目录,执行以下的操作进行安装: 解压缩安装软件包 #tar zxvf sarg-2.0.2.tar.gz 进入解压后的目录, #cd sarg-2.0.2 #./configure 在这里,也可以用./configure –help看看可以使用的configure可以使用的参数,一般来说,使用默认的选项就可以了。 #make #make install 这样,就完成了sarg的安装,如果安装过程中出现错误,可以看看有没有安装gcc,或者在安装系统是没有安装相应的开发库。如果使用默认的选项,可执行文件是/usr/bin/sarg,配置文件是/usr/local/sarg/sarg.conf,在 /usr/local/sarg目录下还有一些其他的文件和目录。

3、配置

安装成功后,在/usr/local/sarg/目录中,有一个配置文件为sarg.conf,我们通过修改配置文件的参数,来达到对日志进行有规则的分析。也可以通过命令行参数实现。 sarg配置文件的方法和squid配置文件的配置方法类似,只要修改带有关键字的行: “language english” 指定网页报告文件的语言类型,很可惜不支持中文网页。 “access_log /usr/local/squid/logs/access.log” 指定squid日志文件绝对路径。 “title “squid user access reports” 指定网页标题,可以写中文网页,内核支持先。 “temporary_dir /var/tmp” 指定临时文件目录,请确认该目录所在的分区足够大先,1g以上。 “output_dir /var/www/html/squid-reports” 指定网页报告文件输出路径,推荐使用webmaster或其他非admin用户运行sarg。 “topuser_sort_field connect reverse bytes reverse” 在top排序中,指定连接次数(connect),访问字节数(bytes)采用降序排列,升序请使用normal替代reverse “user_sort_field connect reverse” 对于每个用户的访问纪录,连接次数按降序排列 “exclude_hosts /usr/local/sarg/norecords” 指定不计入排序的站点列表文件名为/usr/local/sarg/norecords,对于客户端 访问的这些站点,将不会被top排序中,norecords文件样本: google.com csdn.net microsoft.com “date_format e” 启动sarg进程是如果使用日期参数-d时,请使用和配置文件一致的日期格: e (europe=dd/mm/yy), u (usa=mm/dd/yy), w (weekly=yy.ww) “topuser_fields num date_time userid connect bytes %bytes in-cache-out used_time milisec %time total average” 指定top排序的域,可以取掉一些不关紧要的域:in-cache-out used_time等 “weekdays 1-5” 指定top排序星期周期为星期一到星期五,0表示星期天 “hours 9-11,13-16” 指定top排序的时间周期为9:00-11:59,13:00-16:59,哈哈,差不多为上班时间

至此,sarg.conf文件的配置基本上over了,还有些不是太重要的配置一看就明白,在此就不耽误大家的时间了。

sarg的命令行解释如下: # sarg -h sarg: usage [options…] -a hostname or ip address 指定不计入排序的主机名称或地址 -b useragent log 用户代理日志文件输出 -c exclude file 指定不计入排序的站点列表文件名为/usr/local/sarg/norecords,对于客户端访问的这 些站点,将不会被top排序中 -d date from-until dd/mm/yyyy-dd/mm/yyyy 指定日期范围 -e email address to send reports (stdout for console) 指定报告接收者邮件 -f config file (/usr/local/sarg/sarg.conf) 指定配置文件 -g date format [e=europe -> dd/mm/yy, u=usa -> mm/dd/yy] 指定输入的日期格式 -h help (this…) 列帮助信息 -i reports by user and ip address 指定客户端排序采用用户名或者ip地址 -l input log 指定squid日志文件绝对路径。 -o output dir 指定网页报告文件输出路径,推荐使用webmaster或其他非admin用户运行 sarg。 -p use ip address instead userid (reports) 使用ip地址作为userid域 -w temporary dir 指定临时文件目录,请确认该目录所在的分区足够大先,1g以上。

4、运行 一般来说,我们希望系统可以自动生成日志分析以后的结果。在这里,我们利用cron来实现,把以下的相应脚本放到cron里面去执行即可

日报告: ————————————- #!/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date –date “1 day ago” +%d/%m/%Y) /usr/local/bin/sqmgrlog -l /usr/local/squid/logs/access.log -o /usr/local/apache/htdocs/reports/daily -z -d $YESTERDAY-$TODAY exit 0

周报告: ————————————- #!/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date –date “1 week ago” +%d/%m/%Y) /usr/local/bin/sqmgrlog -l /usr/local/squid/logs/access.log -o /usr/local/apache/htdocs/reports/weekly -z -d $YESTERDAY-$TODAY exit 0

月报告: ————————————- #!/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date –date “1 month ago” +%d/%m/%Y) /usr/local/bin/sqmgrlog -l /usr/local/squid/logs/access.log -o /usr/local/apache/htdocs/reports/monthly -z -d $YESTERDAY-$TODAY /usr/local/squid/bin/squid -k rotate exit 0

通过邮件发送报告: #!/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date –date “1 day ago” +%d/%m/%Y) /usr/local/bin/sqmgrlog -l /usr/local/squid/logs/access.log -e user@site.com -z -d $YESTERDAY-$TODAY

Linux做代理

环境:Linux ADV3.0

代理软件:Squid 2.5.6

主机:Proxy01 IP:132.147.165.235 端口:81/1080

实现目标:用户端使用合法的用户名和密码登入

步聚:

1、 下载最稳定、最新的Squid软件:squid-2.5.STABLE6.tar.gz,解压:

tar xzvf squid-2.5.STABLE6.tar.gz

2、 编辑:

make

make install

3、 确认ncsa_auth此程序是否存在,正常情况下会存在于/usr/lib/squid/目录下,将此文件Copy至/usr/bin 目录中(此种做法的意义在于已加入到了启动搜索的Path中)

4、 配置/etc/squid/squid.conf文件,

先将原文件做好备份,再做编辑

cp squid.conf squid.conf.bak

vi squid.conf

主要要修改的参数如下:

auth_param basic program /usr/bin/ncsa_auth /usr/bin/passwd

--指定使用此程序来进行用户认证的方式,在/usr/bin/passwd中,Passwd文件必须可以被普通用户能够读、执行,通行如下实现:

chmod 755 passwd

http_port 132.147.16 132.147.165.235:81 –设定Squid的代理端口,加上IP地址,Squid就不会监听外部的网络端口

cache_mgr cp_mis_wub@cpmail.lkm.com –配置管理员的E_mail

cache_access_log /var/log/squid/access.log –设定Client User访问代理的详细记录,包括用户名,IP地址,访问的网址等。

dns_nameservers 202.96.134.133 132.147.160.2 –设定DNS

visible_hostname proxy01 –设定标志的主机名称,也就是做代理的主机名称,必选

httpd_accel_with_proxy on –打开使用Squid代理本地的Web服务

cache_mem 20 MB –指定Squid可以使用的RAM

maximum_object_size 2048 KB –指定缓存文件的最大值

minimum_object_size 0 KB –指定缓存文件的最小值

cache_swap_low 85

cache_swap_high 90 –设定进行空间交换的空占比

cache_dir ufs /var/spool/squid 1000 16 256 –设定磁盘缓存目录

以上建缓存在磁盘上,如要建立高速缓存目录,可如下操作

mkdir /dev/shm/tmp

chmod 1777 /dev/shm/tmp

mount –bind /dev/shm/tmp /var/spool/squid –被Mount的目录为刚建立的磁盘缓存目录

将http_access deny all更改为http_access allow all

再加入如下语句:

acl our_network src 132.147.165.0/24 132.147.166.0/24 132.147.164.0/24 132.147.163.0/24

--建立规则,这个规则包括这么上些内容

acl our_user proxy_auth REQUIRED

--建用户认证的规则,所有合法的用户都可以通过认证

httpd_access allow our_network

--应用这个规则

httpd_access allow our_user

--应用这个规则

5、 最后一步,添加用户:

使用Apache中的一个程序来实现对用户添加,以配合ncsa_auth程序验证

htpasswd –c /usr/bin/passwd mis_wub

以上语句的意思为在Passwd文件建立一个Mis_wub的用户名,并保存它的密码。

6、 重启Squid或重起机器,以便得Squid生效

squid –k reconfigure

or

shutdown –rf now

日常工作维护:

1、 用户添加:htpasswd –c /usr/bin/passwd user_name

2、 查看日志:more /var/log/squid/access.log

3、 备份:/etc/squid/squid.conf

/usr/bin/passwd

/var/log/squid/access.log

4、 日志管理:

/var/log/squid 下所有

5、 用户管理:

A、 添加用户:htpasswd –b /usr/bin/passwd user_name user_passwd

B、 删除用户:htpasswd –D /usr/bin/passwd user_name

C、 更改密码:htpasswd –b /usr/bin/passwd user_name user_passwd

Socks5代理:

1、 安装

tar xvzf socks5-v1.0r11.tar.gz

cd socks5-v1.011

./configure

make

make install

2、 将配置文件Copy到/etc目录下,并改名

cd samples

cp socks5.conf.singlehomed socks5.conf

3、 默认情况下是对所有开放1080端口

4、 socks5 –t –运行Socks5的服务

标题: 用iptables设置有状态防火墙

如果你是新手,请先看我写的《用iptables设置静太防火墙》 ,本文在此基础上写的,很多细节上的问题用它作参考。

########################

版权所有,转载请注明来自www.linuxsir.org 并写明作者

########################

在这里我必须要解释一下防火墙的状态(state)

比如,你用ssh远程访问,你的主机和远程主机会进行通信。 静态的防火墙会这样处理: 检查时入机器的数据包,发现数据是来源是22端口,当允许时入,连接之后相互通信的数据也一样,检查每个数据,发现数据来源于22端口,允许通过!

如果用有状态的防火墙如何处理呢? 当你连接远程主机成功之后,你的主机会把这个连接记录下来,当有数据从远程ssh服务器再进入你的机器时 检查自己连接状态表,发现这个数据来源于一个已经建立的连接,允许这个数据包进入。

以上两种处理,我们明显的发现static firewall比较生硬,而有状态的防火墙则显得要智能一些!

现在我们来解释一下状态 NEW:如果你的主机向远程机器发时一个连接请求,这个数据包状态是NEW. ESTABLISHED:当联接建立之后,远程主机和你主机通信数据状态为ESTABLISHED RELATED: 像ftp这样的服务,用21端口传送命令,而用20端口(port模式)或其他端口(PASV模式)传送数据。在已有21端口上建立好连接后发送命令,用20传送的数据,状态是RELATED

有了以上知识后,接下来时行我们的step by step 吧 首先,我们还是来设置默认规则 iptables -P INPUT DROP 这样你的机器将对所有进入你主机的数据都丢弃

如果你有一台主机只是用于个人桌面应用,那么你的主机不提供任何服务,那么,我们就禁止其他的机器向你的机器发送任何连接请求 iptables -A INPUT -m state –state NEW -j DROP

这个规则将所有发送到你的机器数据包,状态是NEW的包丢弃。这样,也就是不允许其他的机器主动发起对你机器的连接,但是你却可以主动的连接其他的机器,不过仅仅只是连接而已,连接之后的数据就是ESTABLISHED状态的了,我们再加上一条。

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT 所有已经建立联接,或者与之相关的数据允许通过

好了,们们来总结一下三条语句,因为它是一个很好的个人桌面主机的防火墙。 iptables -P INPUT DROP #iptables -A INPUT -m state –state NEW -j DROP iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT 我们看到,第二条被注释掉了,因为那一规则完全可以省去,让默认规则处理就行了。 是不是显得很简单呢,对于个人桌面应用来说,只用刚才那两条语句,就能让你接入internet网的主机足够安全。而且你随意访问internet,但是外部却不能主动发起对你机器的连接,真是爽啊! 当然,如是你的IE有漏洞的话,iptables还是无济于事的,这也不是iptables的工作范围。 我们可看到有状态的防火墙比静态防火墙要”智能”一些,当然规则容易设置一些。

如果你的主机是服务器,接下来的问题就简单了。这里假如我们开了www 和ftp服务。注意ftp的pasv模式,会使用动态的端口来传送数据,而并非20端口。这些对有状态的防火墙来说,轻易做到,甚至不用知道pasv模式的ftp用哪些端口,因为你的主机会认识到ftp给别人主机传送文件时,认识到这些数据是RELATED

在后面加下 iptables -A INPUT -i ppp0 -p tcp -dport 21 -j ACCEPT iptables -A INPUT -i ppp0 -p udp -dport 21 -j ACCEPT iptables -A INPUT -i ppp0 -p tcp -dport 80 -j ACCEPT iptables -A INPUT -i ppp0 -p udp -dport 80 -j ACCEPT 好了,至此我们的工作就全部完成了,仿照我上一文的方法,最后给出一个脚本,有详细的注释

!/bin/bash #define const here Accept_Ports=”80 20 21” #允许internet访问的自己服务端口

# init iptables -F iptables -X iptables -t nat -F iptables -t nat -X

# set default ruler here iptables -P INPUT DROP

# Allow inner Network access iptables -A INPUT -i !ppp0 -j ACCEPT

# set stated ruler here,this is the most important ruler iptables -A INPUT -i ppp0 -m state –state ESTABLISHED,RELATED -j ACCEPT

# set ruler so that other can access service on your server for Port in “$Accept_Ports” ; do iptables -A INPUT -i ppp0 -p udp –dport ${Port} -j ACCEPT iptables -A INPUT -i ppp0 -p tpc –dport ${Port} -j ACCEPT done

# the ruler can make you firewall betterd iptables -A INPUT -i ppp0 -p tcp -j REJECT –reject-with tcp-reset iptables -A INPUT -i ppp0 -p udp -j REJECT –reject-with icmp-port-unreachable

注: 有状态防火墙需要内核的支持,幸好,多数的发行版都支持这一特征

标题: iptables入门教程–设置静态防火墙( step by step)

iptables--静态防火墙实例教程 follow me

介绍: 这篇文章是本人原创,向读者展示了如何一步一步建立静态防火墙来保护您的计算机,同时在每一步中,我力图向读者讲述清楚原理。在这篇教程之后,你将能理解到防火墙内在过滤机制,同时也能自己动手创建符合自己要求的防火墙。

版权所有,转载请注明来自www.linuxsir.org 并写明作者

1、iptables介绍

iptables是复杂的,它集成到linux内核中。用户通过iptables,可以对进出你的计算机的数据包进行过滤。通过iptables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。接下来,我将告诉你如何设置自己的规则,从现在就开始吧。

2、初始化工作

在shell提示符 # 下打入

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

以上每一个命令都有它确切的含义。一般设置你的iptables之前,首先要清除所有以前设置的规则,我们就把它叫做初始化好了。虽然很多情况下它什么也不做,但是保险起见,不妨小心一点吧! 如果你用的是redhat 或fedora,那么你有更简单的办法

service iptables stop

3、开始设置规则:

接下下开始设置你的规则了

iptables -P INPUT DROP

这一条命令将会为你构建一个非常“安全”的防火墙,我很难想象有哪个hacker能攻破这样的机器,因为它将所有从网络进入你机器的数据丢弃(drop)了。这当然是安全过头了,此时你的机器将相当于没有网络。如果你ping localhost,你就会发现屏幕一直停在那里,因为ping收不到任何回应。

4 、添加规则

接着上文继续输入命令:

iptables -A INPUT -i ! ppp0 -j ACCEPT

这条规则的意思是:接受所有的,来源不是网络接口ppp0的数据。

我们假设你有两个网络接口,eth0连接局域网,loop是回环网(localhost)。ppp0是一般的adsl上网的internet网络接口,如果你不是这种上网方式,那则有可能是eth1。在此我假设你是adsl上网,你的internet接口是ppp0

此时你即允许了局域网的访问,你也可以访问localhost

此时再输入命令 ping localhost,结果还会和刚才一样吗?

到此我们还不能访问www,也不能mail,接着看吧。

5、我想访问www

iptables -A INPUT -i ppp0 -p tcp -sport 80 -j ACCEPT

允许来自网络接口ppp0(internet接口),并且来源端口是80的数据进入你的计算机。 80端口正是www服务所使用的端口。

好了,现在可以看网页了。但是,你能看到吗?

如果你在浏览器的地址中输入www.baidu.com,能看到网页吗?

你得到的结果一定是:找不到主机www.baidu.com

但是,如果你再输入220.181.27.5,你仍然能够访问baidu的网页。

为什么?如果你了解dns的话就一定知道原因了。

因为如果你打入www.baidu.com,你的电脑无法取得www.baidu.com这个名称所能应的ip地址220.181.27.5。如果你确实记得这个ip,那么你仍然能够访问www,你当然可以只用ip来访问www,如果你想挑战你的记忆的话^ _ ^,当然,我们要打开DNS。

6、打开dns端口

打开你的dns端口,输入如下命令:

iptables -A INPUT -i ppp0 -p udp -sport 53 -j ACCEPT

这条命令的含义是,接受所有来自网络接口ppp0,upd协议的53端口的数据。53也就是著名的dns端口。

此时测试一下,你能通过主机名称访问www吗?你能通过ip访问www吗?

当然,都可以!

7、查看防火墙

此时可以查看你的防火墙了

iptables -L

如果你只想访问www,那么就可以到此为止,你将只能访问www了。 不过先别急,将上面讲的内容总结一下,写成一个脚本。

#!/bin/bash

# This is a script

# Edit by liwei

# establish static firewall

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp –sport 80 -j ACCEPT

iptables -A INPUT -i ppp0 -p udp –sport 53 -j ACCEPT

8、复杂吗?到此iptables可以按你的要求进行包过滤了。你可以再设定一些端口,允许你的机器访问这些端口。这样有可能,你不能访问QQ,也可能不能打网络游戏,是好是坏,还是要看你自己而定了。顺便说一下,QQ这个东西还真是不好控制,用户与服务器连接使用的好像是8888端口,而QQ上好友互发消息使用的又是udp的4444端口(具体是不是4444还不太清楚)。而且QQ还可以使用www的80端口进行登录并发消息,看来学无止境,你真的想把这个家伙控制住还不容易呢?还是进入我们的正题吧。

如果你的机器是服务器,怎么办?

9、如果不巧你的机器是服务器,并且要提供www服务。显然,以上的脚本就不能符合我们的要求了。但只要你撑握了规则,稍作修改同样也能很好的工作。在最后面加上一句

iptables -A INPUT -i ppp0 -p tcp –dport 80 -j ACCEPT

这一句也就是将自己机器上的80端口对外开放了,这样internet上的其他人就能访问你的www了。当然,你的www服务器得工作才行。如果你的机器同时是smtp和pop3服务器,同样的再加上两条语句,将–dport后面的80改成25和110就行了。如果你还有一个ftp服务器,呵呵,如果你要打开100个端口呢……

我们的工作好像是重复性的打入类似的语句,你可能自己也想到了,我可以用一个循环语句来完成,对,此处可以有效的利用shell脚本的功能,也让你体验到了shell脚本语言的威力。看下文:

10、用脚本简化你的工作,阅读下面的脚本

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall

# define const here

Open_ports=”80 25 110 10” # 自己机器对外开放的端口

Allow_ports=”53 80 20 21” # internet的数据可以进入自己机器的端口

#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT DROP #we can use another method to instead it

iptables -A INPUT -i ! ppp0 -j ACCEPT

# define ruler so that some data can come in.

for Port in “$Allow_ports” ; do

iptables -A INPUT -i ppp0 -p tcp -sport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp -sport $Port -j ACCEPT

done

for Port in “$Open_ports” ; do

iptables -A INPUT -i ppp0 -p tcp -dport $Port -j ACCEPT

iptables -A INPUT -i ppp0 -p udp -dport $Port -j ACCEPT

done

这个脚本有三个部分(最前面的一段是注释,不算在这三部分中)

第一部分是定义一些端口:访问你的机器”Open_ports”端口的数据,允许进入;来源是”Allow_ports”端口的数据,也能够进入。

第二部分是iptables的初始化,第三部分是对定义的端口具体的操作。

如果以后我们的要求发生了一些变化,比如,你给自己的机器加上了一个ftp服务器,那么只要在第一部分”Open_ports”的定义中,将ftp对应的20与21端口加上去就行了。呵呵,到此你也一定体会到了脚本功能的强大的伸缩性,但脚本的能力还远不止这些呢!

11、使你的防火墙更加完善

看上面的脚本init部分的倒数第二句

iptables -P INPUT DROP

这是给防火墙设置默认规则。当进入我们计算机的数据,不匹配我们的任何一个条件时,那么就由默认规则来处理这个数据—-drop掉,不给发送方任何应答。

也就是说,如果你从internet另外的一台计算机上ping你的主机的话,ping会一直停在那里,没有回应。

如果黑客用namp工具对你的电脑进行端口扫描,那么它会提示黑客,你的计算机处于防火墙的保护之中。我可不想让黑客对我的计算机了解太多,怎么办,如果我们把drop改成其他的动作,或许能够骗过这位刚出道的黑客呢。

怎么改呢?将刚才的那一句( iptables -P INPUT DROP )去掉,在脚本的最后面加上

iptables -A INPUT -i ppp0 -p tcp -j REJECT –reject-with tcp-reset

iptables -A INPUT -i ppp0 -p udp -j REJECT –reject-with icmp-port-unreachable

这样就好多了,黑客虽然能扫描出我们所开放的端口,但是他却很难知道,我们的机器处在防火墙的保护之中。如果你只运行了ftp并且仅仅对局域网内部访问,他很难知道你是否运行了ftp。在此我们给不应该进入我们机器的数据,一个欺骗性的回答,而不是丢弃(drop)后就不再理会。这一个功能,在我们设计有状态的防火墙中(我这里讲的是静态的防火墙)特别有用。

你可以亲自操作一下,看一看修改前后用namp扫描得到的结果会有什么不同?

12、这个教程我想到此就结束了,其中有很多东西在这里没有提到,如ip伪装,端口转发,对数据包的记录功能。还有一个很重要的东西就是:iptables处理数据包的流程.在这里我想告诉你,你设置的过滤规则的顺序很重要,在此不宜详细介绍,因为这样一来,这个教程就会拘泥于细节。

iptables是复杂的,我在linuxsir上看过很多教程,它们往往多而全,反而让人望而生畏,希望我的这个教程,能够指导你入门。加油!

最后,我把完整的脚本写出来如下,你只要修改常量定义部分,就能表现出较大的伸缩性^_^

#!/bin/bash

# This is a script

# Edit by liwei

# establish a static firewall

# define const here

Open_ports=”80 25 110 10” # 自己机器对外开放的端口

Allow_ports=”53 80 20 21” # internet的数据可以进入自己机器的端口

#init

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

# The follow is comment , for make it better # iptables -P INPUT DROP

iptables -A INPUT -i ! ppp0 -j ACCEPT

# define ruler so that some data can come in.

for Port in “$Allow_ports” ; do ptables -A INPUT -i ppp0 -p tcp -sport $Port -j ACCEPT iptables -A INPUT -i ppp0 -p udp -sport $Port -j ACCEPT done

for Port in “$Open_ports” ; do iptables -A INPUT -i ppp0 -p tcp -dport $Port -j ACCEPT iptables -A INPUT -i ppp0 -p udp -dport $Port -j ACCEPT done

# This is the last ruler , it can make you firewall better iptables -A INPUT -i ppp0 -p tcp -j REJECT –reject-with tcp-reset iptables -A INPUT -i ppp0 -p udp -j REJECT –reject-with icmp-port-unreachable

处理器不再重要

当英特尔集中精力攻占高端计算设备市场的时候,IBM反而要回到娱乐设备上了。这难道不是一个巨大的玩笑吗?

1月22日,Sun和Intel重新回到合作路线上来。对这两个个性鲜明的公司来说,利益是让他们重归于好的唯一纽带。然而,这可就得让整个处理器行业乃至计算设备业都重新思考一下这到底意味着什么了。 无论是倔强的麦克尼利,还是务实低调的奥特里尼,都没有在双方同时执掌两个分别代表两个时代的企业时坐在同一张谈判桌上。或许这是一个遗憾。 然而,更大的遗憾是,当双方能走在一起的时候,大家的境况都已大不如前了。

意外的共识

在SUN和英特尔宣布合作的细节中,包括了两个部分的内容。一是Sun将向客户提供采用Intel Xeon处理器的服务器及工作站产品系列;二是英特尔将保证大力推广SUN公司在服务器上面的操作系统Solaris。 看上去,这是双方的一种交换。在高端服务器领域,由于安腾系列处理器在研发过程中不断跳票和AMD在64位处理器上的抢跑,使得英特尔在过去3年中试图在高端服务器市场占据优势的梦想不断延后,如果能够获得SUN的认可和支持,对英特尔来说将是天大的喜事。而对Sun来说,采用Xeon处理器,不仅能够为客户提供更低成本的服务器产品,也将帮助从2002年起就进入亏损状态的服务器部门走出颓势。从那时起,这个部门已经累计亏损了50亿美元。换一个说法,这样的亏损面甚至已经可以收购一家小型的服务器厂商了。 事实上,这是在服务器领域的两种截然不同的思路的融合。在服务器领域,自从20世纪70年代RISC (Reduced Instruction Set Computing,精简指令集计算)技术推出以来,高性能微处理器设计的中心就从半导体厂商转向了系统厂商,也是从那时起,随着SUN和IBM在处理器领域的话语权在不断增大,这两个技术出身、并痴迷于技术的厂商认为,从追求安全和可靠的角度出发研发技术和提供产品,是高端计算设备领域应该坚持的原则。 如果你认为IBM与Sun有点曲高和寡,那可就完全错了。事实上,在PC还在作为计算设备而不是娱乐工具存在的时代,追求技术的高精尖是这个圈子的主流意识。由于优化的指令系统带来运算速度的提高等优势,RISC技术在上世纪80年代后期风靡一时,具备一定技术实力的厂家都倾向于在此架构基础上研发出自己的处理器,这些处理器先后包括PowerPC、SPARC、PA-RISC、MIPS等。 而另一个方面,英特尔依靠X86处理器在PC市场形成的标准化、可复制的优势,借助微软操作系统的大获成功,共同培育和形成了目前的个人电脑。英特尔将个人计算设备变得便宜,微软将使用电脑变得傻瓜。尔后,英特尔逐渐从高端PC市场试图切入服务器市场,逐渐蚕食中低端服务器,并试图向高端服务器挺进。 这一个过程是漫长的,充满了轻视与敌意。即使在中国市场上,直到2005年依然能从国产服务器厂商身上可以看见两个阵营的分解。曙光与浪潮在高端服务器产品坚持RISC架构,联想与宝德则借助X86切入市场。而事实证明,无论哪一种道路,这几个企业都没有坚持下来。在技术上,最显著的变化是,前两者终于也开始两条腿走路,后两者也并没有因此而建立起深厚的技术体系。 Sun和英特尔从势不两立到冰释前嫌,只是说明,在利益面前,技术理想其实并不像人们说的那么重要。可以保证,这一点,放在几年前,Sun肯定不会承认。 问题是,形势变了。

两种冲突

在Sun和英特尔回到蜜月前一天,1月21日,英特尔意大利公司负责人表示,苹果刚刚发布的iPhone使用的是Xscale处理器。该处理器来自Marvell,而就在半年前的2006年6月,正是英特尔将Xscale手机处理器业务出售给了Marvell科技公司。更值得注意的是,就在那件事前后,苹果电脑在2006年6月7日加入了英特尔阵营。 这是一个多么绝妙的讽刺!在出售Xscale的时候,英特尔大概并没有想到过苹果会在自己的创新产品中采用自己的手机处理器。如果是那样,它难保不会选择保留这一业务。 然而,对英特尔来说,这并不能说明什么。当初,正是因为对手机处理器业务缺乏信心,英特尔才将其最终出售。 在苹果所面临的上下游环境中,它并不是依靠处理器来完成对一个新市场的开拓。事实上,在手机处理器上,它可以面对多项选择,不仅有三星,还有素以芯片授权闻名的ARM。而在产品上,它不再像PC时代那样坚守自己的某一项核心技术,中央处理器和802.11组件都来自Marvell公司,基带部分是由英飞凌提供的,而触摸屏控制器来自Broadcom,蓝牙则是由CambridgeSiliconRadio提供。从这一个美妙绝伦的iPhone中,你已经很难找到某一项独立的属于苹果自己的核心技术。 正如分析家们所看到的那样,处理器在设备中的重要性正在日渐降低。对苹果来说,没有一项技术是非得是自己提供的,确实,今天的苹果跟MAC时代已经有了本质的变化,它不再是以追求某一项技术的独一无二为标榜,而转变为“抓住用户的心”,这是它的新的核心技术。 从这个意义上说,核心技术的内涵和外延都在扩大。未来,在苹果之外的更多的产品上,将更加没有人关心处理器是由谁提供的。 而在封闭、高端的思路和开放、低端的思路的两种较量中,现在已越来越难泾渭分明,更多情况下,进入了一种你中有我、我中有你的境界。IBM采用了英特尔和AMD的处理器,但在高端并没有放弃自己的Power处理器;苹果放弃了自己曾投入研发的Power处理器,转而迎接英特尔;Sun在中低端服务器放手AMD跟英特尔合作,同时也坚持自己的处理器;IBM的Power处理器虽然在PC端逐渐失去拥趸,却在家庭娱乐设备上找到了第二春,微软Xbox、索尼的PS3、任天堂的Wii都成为其主要采购方。 这种境况,恰恰揭示了一个现实:没有任何一种处理器能够在一个处理器需求巨大的市场中在占有绝对优势了。这对习惯了在低端计算设备领域呼风唤雨的英特尔来说可能不是一件好事。然而,这种现状的形成是包括英特尔在内的处理器厂商们自己造成的,承认这种现实,同时就等于接受了这种无奈:面对这种现实,谁又能有所作为呢?

新的规则

事实上,对处理器来说,不可能再指望它们的重要性再像上个世纪两种技术思想相争时那么重要了。就像苹果那样,将来,选择哪一种处理器只是一种选择,没有任何其他多余的成分。 这一问题在低端计算设备领域也得到了延续。在英特尔不断攻克高端计算设备厂商堡垒的时刻,AMD正在不断攻下英特尔曾经的堡垒。这是一个向上推动的进程,正如数码相机的出现将胶卷相机赶出了摄影器材市场、手机摄像头将数码相机推到了高端市场一样,这种破坏性创新推动了整个处理器行业的进化与分化。 而从另一个角度看,英特尔和AMD在未来面对的局面还将进一步演变,但没有人能够判断这到底是好事还是坏事。在低端计算设备领域,全球PC大厂们已经不可能再回到单独与某一家处理器厂商合作的局面了,无论是英特尔还是AMD,都必须客观面对这一个分享的市场,并且还得提防那些潜在的竞争者,比如Power处理器。 目前的状况表明,在未来以家庭为核心的发展趋势下,计算设备将愈来愈多的与娱乐设备合为一体。而Power处理器目前在家庭游戏市场建立起来的优势是英特尔和AMD都无法比拟的。跟英特尔当初一战成名的道路不通,Power反其道而行之,从高端服务器领域切入高端游戏机领域,将技术下移,迂回占领家庭客厅。从IBM目前通过Power Org进行的种种努力来看,这种理想正在逐渐变为现实。 这是两种对未来市场的看法:当英特尔集中精力攻占高端计算设备市场的时候,IBM反而要回到娱乐设备上了。这难道不是一个巨大的玩笑吗?然而,这难道不是又展现了一个巨大的前景吗? 而对处理器来说,这是一条新的起跑线。从前形成的势力范围与规则,现在恐怕要重新书写了。

黑客防线2001年 第11期

编辑部的故事 黑客动态 菜鸟学堂 基础知识 使用Telnet远程登录 Windows脚本宿主全攻略(三) 经验交流 入侵还是检测 \sinbad Cookie技术进阶 \王丽文 微软你的“漏洞”其实是这样 \景海亮

0%