Pound+Tomcat vs PCI DSS

网银在线公司是做网上支付的,凡是支付行业呢,基本都是要过国外的PCI检测的,简单介绍一下:

Trustwave公司是面向全球企业和组织提供随需数据安全和支付卡行业合规性管理解决方案的领先提供商。支付卡行业数据安全标准称之为(PCI DSS)。

简而言之,过PCI认证需要通过Trustwave公司,而Trustwave公司有一项很著名的服务,就是安全扫描,扫描出来如果有中级以上的漏洞,是过不了pci检测的。

我们的服务是采用的Tomcat,弱点扫描中不合规,原因是Tomcat支持的http命令中包含DELETE、OPTIONS、PUT、HEAD和TRACE这五条命令。采用如下命令可以看服务器支持的命令:

#telnet localhost 8080
Trying 127.0.0.1...  
Connected to localhost.localdomain (127.0.0.1).  
Escape character is '^]'.  
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK  
Server: Apache-Coyote/1.1  
pragma: no-cache  
cache-control: no-store  
expires: Thu, 01 Jan 1970 00:00:00 GMT  
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS  
Content-Language: zh-CN  
Content-Length: 0  
Date: Mon, 11 May 2009 08:42:43 GMT  
Connection: close

Connection closed by foreign host.  

这下麻烦了,得补掉啊,TRACE命令倒是很好修补,在tomcat的server.xml中加上allowTrace="false"即可,下面也顺手改掉了server的头标,省的扫描脚本自动套用Tomcat进行深度扫描:

<Connector port="8080" maxHttpHeaderSize="8192"  
       maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
       enableLookups="false" redirectPort="8443" acceptCount="100"
       connectionTimeout="20000" disableUploadTimeout="true"
       server="Chinabank" allowTrace="false"/>

HEAD、PUT、DELETE、OPTIONS如何修补呢,可以让程序员写tomcat的filter来修补,这样太麻烦了,几十个tomcat进程呢,每个都改,上帝啊。

得,架一个前置机统一修改好了,前置机最好很轻,性能还得强,找来找去,找到了Pound这个利器。 原理就是修改HTTP让它之支持GET和POST这两种方法:

wget http://www.rendoumi.com/soft/Pound-2.7.tgz  
tar zxvf Pound-2.7.tgz  
cd Pound-2.7  
vi config.c  
找到:
static char *xhttp[] = {  
     "^(GET|POST|HEAD) ([^ ]+) HTTP/1.[01]$",
改成:
     "^(GET|POST) ([^ ]+) HTTP/1.[01]$",

再找到另外两处的:
if(regcomp(&res->verb, xhttp[n], REG_ICASE | REG_NEWLINE | REG_EXTENDED)) {  
改成:
if(regcomp(&res->verb, xhttp[0], REG_ICASE | REG_NEWLINE | REG_EXTENDED)) {

./configure
make

不要安装,直接拷贝个主文件,手动生成配置文件即可:

cp Pound /usr/local/bin  
vi /usr/local/bin/pound.cfg

       TimeOut 180
       ListenHTTP
          Address 0.0.0.0
          Port    80
            Service
                BackEnd
                    Address 127.0.0.1
                    Port    8080
                End
            End
        End

最后启动:

/usr/local/bin/pound -f /usr/local/bin/pound.cfg

就补好了。

comments powered by Disqus