1. SSL证书和公钥不能存放在DocumentRoot下;
2. SSL 证书和公钥必须被root所拥有,chmod 400 *.crt;
3. 移去/htdocs和/cgi-bin中的所有示例文件;
4. /htdocs下的所有文件被nobody所拥有。
如果你不怕配置麻烦,最好把Apache放到一个chroot的环境中运行。:)
关于如何生成证书请求包和到CA中心去签署,请参考其他文章。目前国内也有很多CA中心,如中国电信电子商务安全认证中心(http://www.sinocol.com/),都可以对个人颁发证书。
五.Hardening e-commerce Server
尽管Apache安装和配置的都很安全,但是一台具有薄弱口令或者运行着象wu-ftpd那样不安全服务的LINUX还是很容易被攻破。一般来讲,一台WEB服务器仅仅需要的其他服务只有SSH―远程管理所用。不要安装x-windows,编译器如gcc等应该在系统稳定运行后删去,这样可以避免一些script-kiddiez的破坏。
同时,一些包过滤规则(ipfw,ipchains,iptables)应该被应用。这里我们将讨论Linux下的ipchains,假定有以下需求:
1. 服务器有两块网卡
2. 外网卡仅仅允许80和443端口数据的incoming
3. 外网卡仅仅允许>1023端口数据的outgoing
4. 内网卡仅仅允许22、80、443端口的incoming
5. 内网卡仅仅允许>1023端口数据的outgoing。一般的连接是数据库,oracle是1524port,SQL Server是1443,SSH可以加上-P选项来指定大于1023的用户端口。
6. 内网卡允许ICMP响应
命令如下(eth0外网卡,eth1内网卡):
ipchains -A in-eth0 -p tcp --dport 80 -j ACCEPT
ipchains -A in-eth0 -p tcp --dport 443 -j ACCEPT
ipchains -A in-eth0 -p udp --dport 53 -j ACCEPT
ipchains -A in-eth0 -j DENY
ipchains -A out-eth0 -p tcp --dport 1024:65535 -j ACCEPT
ipchains -A out-eth0 -p udp --dport 53 -j ACCEPT
ipchains -A out-eth0 -j DENY
ipchains -A in-eth1 -p tcp --dport 22 -j ACCEPT
ipchains -A in-eth1 -p tcp --dport 80 -j ACCEPT
ipchains -A in-eth1 -p tcp --dport 443 -j ACCEPT
ipchains -A in-eth1 -p udp --dport 53 -j ACCEPT
ipchains -A in-eth1 -p icmp -j ACCEPT
ipchains -A in-eth1 -j DENY
ipchains -A out-eth1 -p tcp --dport 22 -j ACCEPT
ipchains -A out-eth1 -p tcp --dport 1024:65535 -j ACCEPT
ipchains -A out-eth1 -p udp --dport 53 -j ACCEPT
ipchains -A out-eth1 -p icmp -j ACCEPT
ipchains -A out-eth1 -j DENY
剩下的工作就是重新编译系统内核,禁用不需要的模块,可以使某些rootkits失效。
最后,检查WEB SERVER上运行着的程序的安全性,有没有缓冲区溢出等安全问题。
六.参考资料
Improving Apache, by GARY BAHADUR & MIKE SHEMA
SSL: Theory and Practice, Zeus Technology
LASG, i.e. Linux Administrators Security Guide新闻热点
疑难解答