1 背景
本文档是针对明珠商城在测试环境下,为了只让信任的IP访问指定的服务,减少系统的运行风险,为此引入了iptables服务进行防护。Jboss本身的安全问题也要做些处理,比如对外屏蔽jboss其他(除8080)众多端口,把控制台等模块服务给移除等方式,把安全漏洞降到最低。
2 应用服务器的安全配置
2.1 Linux防火墙配置
设置环境:
服务器 IP地址 描述 服务端 192.168.145.128 被保护的应用服务器 客户端A 192.168.145.129 不被信任的客户端 客户端B 192.168.145.1 信任的客户端
示意图:
设置防火墙步骤: #清除现有规则 iptables –F
#设置默认策略,默认关闭进入应用服务器的所有数据包链路 iptables-P INPUT DROP iptables-P OUTPUT ACCEPT iptables-P FORWARD ACCEPT
#设置可信任IP或端口
iptables -AINPUT -p tcp --dport 22 -j ACCEPT
iptables-A INPUT -s 192.168.145.1 -p tcp --dport8080 -j ACCEPT
#把设置保持至/etc/sysconfig/iptables,以后防火墙重启也不会失效 /etc/rc.d/init.d/iptablessave
2.2 JBoss中间件的安全配置
Jboss默认安装时,为了管理配置方便,很多服务都给默认安装上了,比如Tomcatstatus (full) (XML)、JMX Console 、JBoss Web Console 等管理服务,这些服务给人带来调试、配置方便的同时,也给系统带来了严重的安全隐患。为了减少jboss服务被恶意攻击,除了做好iptables安全防护外,jboss本身的很多服务也要减少被攻击机会,通常有两种做法,一是引入apache服务,让所有请求通过apache转发,把jboss服务隐藏在后端,减少直接被攻击的风险;二是不用apache,而是直接把jboss的相关服务给卸载掉,把这些安全漏洞直接堵死。
2.2.1 方法一:通过Apache进行服务转发
要实现apache转发jboss服务,需集成mod_jk或是mod_proxy其中一个模块,这两个模块都可以做负载均衡和代理服务。mod_jk性能好些但相对而言配置量大些,而mod_proxy配置简单但性能稍差,其版本不断更新,正在不断完善中。另外需注意的是如果要通过apache转发服务,隐藏jboss细节的话,前提条件是apache服务与jboss应用不能部署在同一台服务器上,这里以mod_jk集成为例进行配置介绍。
2.2.1.1 安装apache服务
安装linux是自带,这里就不介绍
2.2.1.2 安装mod_jk模块
1).源码安装
tar –zxvftomcat-connectors-1.2.30-src.tar.gz cdtomcat-connectors-1.2.23-src cd native
./configure--with-apxs=/usr/local/apache/bin/apxs make
cp ./apache-2.0/mod_jk.so/etc/httpd/modules/
2).修改/etc/httpd/conf/http.conf配置文件 LoadModule jk_module modules/mod_jk.so Include conf/extra/httpd-vhosts.conf Include conf/mod_jk.conf
#ServerName www.example.com:80改为ServerName 127.0.0.1:80 添加默认首页: DirectoryIndex index.html index.htm index.jsp
3). 增加mod_jk配置文件
在/etc/httpd/conf/下面建立两个配置文件mod_jk.conf和workers.properties
vi /etc/httpd/conf/mod_jk.conf
在/etc/httpd/conf/下面建立两个配置文件mod_jk.conf和workers.properties cd /etc/httpd/conf/
vi mod_jk.conf
JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info
JkLogStampFormat \"[%a %b %d %H:%M:%S %Y]\"
JkOptions +ForwardKeySize +ForwardURICompat-ForwardDirectories JkRequestLogFormat \"%w %V %T\"
vimworkers.properties
#Defining a worker named worker1 and of type ajp13 worker.list=worker1 #Set properties for worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10
worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300
4). 配置apache的vhost
配置/usr/local/apache/conf/extra/httpd-vhosts.conf,增加mod_jk的配置 vi /etc/httpd/conf/extra/httpd-vhosts.conf NameVirtualHost *:80 # VirtualHost example:
# Almost any Apache directive may go intoa VirtualHost container. # The first VirtualHost section is usedfor all requests that do not # match a ServerName or ServerAlias in any ServerAdmin caozhiping@foreveross.com DocumentRoot\"/usr/local/jboss-4.2.3.GA/server/default/deploy\" ServerName 192.168.145.128 ServerAlias www.foreveross.com JkMount /*.jsp worker1 JkMount /jmx-console/* worker1 //这个工程能通过80端口来访问 JkMount /web-console/* worker1 //这个工程能通过80端口来访问,如果没有定义的工程,不能访问 #apache will serve the static picture JkUnMount /*.jpg worker1 #JkUnMount /*.gif worker1 JkUnMount /*.swf worker1 JkUnMount /*.bmp worker1 JkUnMount /*.png worker1 ErrorLog \"logs/dummy-host.example.com-error_log\" CustomLog \"logs/dummy-host.example.com-access_log\" common 2.2.1.3 禁止jboss配置 jboss默认的端口是8080,可以注视掉,通过8009交给apache来解析 cd/usr/local/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer vim server.xml 这这一段注视掉 2.2.2 方法二:JBoss的安全配置 这种方式是通过删除jboss本身的一些在开发环境下有利于开发人员工作需要的服务,以及关闭管理账户、限制IP等方式加强jboss安全 2.2.2.1 移除jmx-console控制台 rm -r /usr/local/jboss/server/default/deploy/jmx-console.war rm –r /usr/local/jboss/server/default/deploy/jbossws.sar/jbossws-context.war rm –r /usr/local/jboss/server/default/deploy/management/console-mgr.sar/web-console.war 2.2.2.2 移除web-console控制台 rm –r /usr/local/jboss/server/default/deploy/jboss-web.deployer/ROOT.war rm –r /usr/local/jboss/server/default/deploy/jboss-web.deployer/context.xml 测试效果 访问:http://192.168.145.8080/jmx-console 访问:http://192.168.145.8080/web-console 2.2.2.3 禁止自动扫描 修改文件:JBOSS_HOME/server/web/conf/jboss-service.xml 修改内容: 2.2.2.4 限制访问IP JBOSS 4.2以上版本服务启动如果不加任何参数的话,只监听127.0.0.1,就是说只能用127.0.0.1或者localhost访问。可以通过参数-b ip地址 来绑定监听的地址。如: 所有IP都能访问:-b 0.0.0.0 所有同局域网机器都可以访问:-b 10.101.1.100 (10.101.1.100为Jboss服务器IP) 2.2.2.5 移除管理用户 注释/usr/local/jboss/server/default/conf/props文件夹里面的配置文件所有用户与角色 vi jbossws-roles.properties # A sampleroles.properties file for use with the UsersRolesLoginModule #kermit=friend vi jbossws-users.properties # A sampleusers.properties file for use with the UsersRolesLoginModule #kermit=thefrog vi jmx-console-roles.properties # A sampleroles.properties file for use with the UsersRolesLoginModule #admin=JBossAdmin,HttpInvoker vi jmx-console-users.properties # A sampleusers.properties file for use with the UsersRolesLoginModule #admin=admin 2.3 安全配置脚本实例 2.3.1 防火墙规则设定的脚本 #!/bin/bash # Program: # This program configure your iptables. # History: #2013/04/11 caozhiping First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e\"Execute Iptables configure! \\a \\n\" #clean ruletable iptables -F iptables -t nat-F #setting defaultrule iptables -PINPUT DROP iptables -P OUTPUTACCEPT iptables -PFORWARD ACCEPT # permit pingcommand #iptables -A INPUT -p icmp -j ACCEPT # permit sourceaddress:192.168.145.1 into destination port 8080 iptables -AINPUT -p tcp --dport 22 -j ACCEPT iptables -AINPUT –s 192.168.145.1 -p tcp --dport8080 -j ACCEPT #data packet ofrelative local computer can pass firewall iptables -AINPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #save this configure information into /etc/sysconfig/iptablesfile /etc/rc.d/init.d/iptablessave exit 0 2.3.2 删除jboss控制台的脚本 #!/bin/bash # Program: # This program delete jboss consolerelative file # History: #2013/04/11 caozhiping First release #let user inputjboss deploy home,for example:/usr/local/jboss/server/all # or usr/local/jboss/server/default read –p “Pleaseinput jboss deplay home:” JBOSS_DEPLAY_HOME rm –r $JBOSS_DEPLAY_HOME/deploy/jmx-console.war rm –r $JBOSS_DEPLAY_HOME/deploy/jbossws.sar/jbossws-context.war rm –r $JBOSS_DEPLAY_HOME/deploy/management/console-mgr.sar/web-console.war rm –r $JBOSS_DEPLAY_HOME/deploy/jboss-web.deployer/ROOT.war rm –r $JBOSS_DEPLAY_HOME/deploy/jboss-web.deployer/context.xml exit 0 因篇幅问题不能全部显示,请点此查看更多更全内容