百度openrasp基于docker环境安装及初步使用实践
需求环境
php 7.2
apache 2.4
docker
官方资料
php-rasp镜像构建
Dockerfile文件内容
FROM php:7.2-apache
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN sed -i 's|security.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y wget && wget https://github.com/baidu/openrasp/releases/download/v1.0/rasp-php-linux.tar.bz2 \
&& tar -jxvf rasp-php-linux.tar.bz2 && cd rasp-php* \
&& cp -f php/linux-php5.6-x86_64/openrasp.so /usr/local/lib/php/extensions/no-debug-non-zts-20170718/openrasp.so \
&& cd ../ && rm -rf rasp-php* \
&& apt-get remove -y wget
RUN mkdir -p /opt/rasp && chmod 777 -R /opt/rasp
COPY config/php_openrasp.ini /usr/local/etc/php/conf.d/php_openrasp.ini
COPY openrasp /opt/rasp/rasp
php_openrasp.ini文件内容
;OPENRASP BEGIN
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/openrasp.so
openrasp.root_dir=/opt/rasp
;拦截攻击后,跳转到这个URL,并增加 request_id 参数
openrasp.block_url=https://rasp.baidu.com/blocked/
;拦截攻击后,将状态码设置为这个值
;openrasp.block_status_code=302
;数组回调函数黑名单,命中即拦截
openrasp.callable_blacklists=system,exec,passthru,proc_open,shell_exec,popen,pcntl_exec,assert
;当服务器不满足安全配置规范,是否禁止服务器启动
;openrasp.enforce_policy=Off
;hook 点黑名单,逗号分隔
;openrasp.hooks_ignore=
;对于以下URL,修改响应并注入HTML
;openrasp.inject_urlprefix=
;国际化配置
;openrasp.locale=
;每个进程/线程每秒钟最大日志条数
;openrasp.log_maxburst=1000
;当SQL查询结果行数大于或等于该值,则认为是慢查询
;openrasp.slowquery_min_rows=500
;报警是否开启 syslog
;openrasp.syslog_alarm_enable=Off
;用于 syslog 的 facility
;openrasp.syslog_facility=
;syslog 服务器地址
;openrasp.syslog_server_address=
;syslog connection timeout(毫秒)
;openrasp.syslog_connection_timeout=50
;syslog read timeout(毫秒)
;openrasp.syslog_read_timeout=10
;syslog重连时间间隔(秒)
;openrasp.syslog_connection_retry_interval=300
;对于单个请求,JS插件整体超时时间(毫秒)
;openrasp.timeout_ms=100
;插件获取堆栈的最大深度
;openrasp.plugin_maxstack=100
;报警日志记录的最大堆栈深度
;openrasp.log_maxstack=10
; 远程管理配置,不需要不用配置
;openrasp.backend_url=http://127.0.0.1:9400
;openrasp.app_id=cf78de842bcb1fd73cf928e0cbefeb56845d00d6
;openrasp.app_secret=iuR8uD81GP18KBd2TCeBSQsDojutHyVTYC5bGuhzBqk
;openrasp.remote_management_enable=1
;OPENRASP END
远程管理主机
登陆后台后使用添加主机功能,获取AppID
、AppSecret
、BackendURL
三项参数,并更改启用php_openrasp.ini
文件中有关远程配置的选项
; 远程管理配置,不需要不用配置
;openrasp.backend_url=http://127.0.0.1:9400
;openrasp.app_id=cf78de842bcb1fd73cf928e0cbefeb56845d00d6
;openrasp.app_secret=iuR8uD81GP18KBd2TCeBSQsDojutHyVTYC5bGuhzBqk
;openrasp.remote_management_enable=1
重启php-rasp服务(参照后面步骤创建)即可在后台看见主机列表,若不能,请检查服务器是否能访问backend_url或有关设置是否正确。
构建命令
1 | docker build -t php72-rasp:latest . |
运行并检查扩展生效
启动容器方式
1 | docker run -p 80:80 -v /var/www/html:/var/www/html php72-rasp:latest |
创建php脚本
1 | echo "<?php\rphpinfo();" > /var/www/html/info.php |
检查扩展
访问http://127.0.0.1/info.php输出phpinfo信息检查是否成功加载openrasp
远程管理后台配置及使用
启用ElasticSearch服务
1 | docker run -p 9200:9200 -p 9300:9300 -e discovery.type=single-node elasticsearch:6.5.4 |
若要启用外网访问活动节点,使用下面的命令,network.publish_host
为外网ip,http.port
为访问端口1
docker run -p 9200:9200 -p 9300:9300 -e discovery.type=single-node -e network.publish_host=10.2.98.2 -e http.port=9200 elasticsearch:6.5.4
1 | ## service 模式 |
启用MongoDB服务
1 | docker run -p 27017:27017 mongo:3.6-stretch |
1 | ## service 模式 |
启动rasp-cloud
普通模式
下载rasp-cloud.tar.gz,解压到服务器本地,编辑 conf/app.conf
文件,将 PanelServerURL
、AgentServerURL
里面的 127.0.0.1
替换为你的服务器IP或者域名1
2wget https://github.com/baidu/openrasp/releases/download/v1.0/rasp-cloud.tar.gz
tar zxvf rasp-cloud.tar.gz
#vi rasp-cloud/conf/app.conf
PanelServerURL = http://127.0.0.1:8086
AgentServerURL = http://127.0.0.1:8086
修正 ElasticSearch 和 MongoDB 两个服务器的地址。如果这两个服务器都安装在了本机,请跳过此步骤:
[prod]
EsAddr = http://127.0.0.1:9200
EsUser =
EsPwd =
MongoDBAddr = 127.0.0.1:27017
MongoDBUserName =
MongoDBPwd =
最后,在终端里执行如下命令,启动后台服务器:1
./rasp-cloud -d
启动成功后,可通过 http://127.0.0.1:8086
访问管理后台。其中,后台用户名固定为 openrasp
,初始密码为 admin@123
。如果不能访问,请检查防火墙设置,或者检查 logs/api/agent-cloud.log 下面的错误信息。
docker模式
Dockerfile内容
FROM centos:7
RUN mkdir -p /rasp-cloud
ADD https://github.com/baidu/openrasp/releases/download/v1.0/rasp-cloud.tar.gz /tmp/
RUN tar xzvf /tmp/rasp-cloud.tar.gz -C /rasp-cloud && rm -rf /tmp/rasp-cloud.tar.gz
COPY app.conf /rasp-cloud/rasp-cloud-2019-04-17/conf/app.conf
WORKDIR /rasp-cloud/rasp-cloud-2019-04-17
EXPOSE 8086
ENTRYPOINT ["./rasp-cloud"]
app.conf内容
appname = rasp-cloud
httpport = 8086
runmode = prod
autorender = false
copyrequestbody = true
EnableDocs = true
MaxPlugins = 30
; alarm log handle method include: es, file
; file mode can collect the alarm with logstash
AlarmLogMode = es
AlarmBufferSize = 300
; AlarmCheckInterval unit second
AlarmCheckInterval = 120
; CookieLifeTime unit hour
CookieLifeTime = 168
MongoDBName = openrasp
MongoDBPoolLimit = 2048
[prod]
EsAddr = http://127.0.0.1:9200
EsUser =
EsPwd =
MongoDBAddr = 127.0.0.1:27017
MongoDBUserName =
MongoDBPwd =
[dev]
EsAddr = http://127.0.0.1:9200
EsUser =
EsPwd =
MongoDBAddr = 127.0.0.1:27017
MongoDBUserName =
MongoDBPwd =
构建命令
1 | docker build -t rasp-cloud:v1.0 . |
运行命令
1 | docker run -name rasp-cloud -p 8086:8086 rasp-cloud:v1.0 . |
1 | #service |