**最后的文件检查: **
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