Yulong Hids Bash Install
Contents
最近折腾一堆事情, 都没碰到电脑, 刚好老铁找到我, 本来是解决这个yulong-hids 安装bug的, 然后聊到docker安装存在一些问题.
例如elasticsearch容器的内存太小会启动失败之类的. 必须修改docker启动的内存大小
例如server端的rpc数据传输映射, agent连接的是docker容器内网ip, 那么就导致始终连接不到server. 当然, 解决办法也有, 就是使用hosts.
0.plan
必须要解决第一个问题是内存限制, 所以虚拟机环境运行的内存大小(建议是2gb及以上),2个cpu核心
笔者实验环境是ubunut16.04 , 大家根据自己实际情况更改脚本哦
这里就不提供软件下载地址了, 大家到官网下载即可
1.elasticsearch
说几个点
- 部署 Elasticsearch (5.x,驭龙暂不兼容6.x版本)
- 执行bin/elasticsearch java环境变量问题
- elasticsearch.yml
笔者之前没看到官方文档, 直接使用了Elasticsearch 6.x的版本, 导致一直接收不到agent的数据
官方给的elasticsearch.yml文件存在一下几项是需要稍作修改的
|
|
docker-compose.yml 拉取的是 docker.elastic.co/elasticsearch/elasticsearch:5.5.1
所以下载下来的elasticsearch是存在xpack的, 而默认情况一些安全设置是存在http basic登录, 所以作者是把这个选项关闭了
所以在这里踩了一些坑, 一直以为基础环境中必须使用xpack, 但是默认情况只有一个月license, 所以折腾了一会儿破解版, 后来发现根本没用到哈哈哈嗝
bin/elasticsearch 文件中建议增加 ES_JAVA_OPTS="-Xms1g -Xmx1g"
, 避免内存太小问题, 当然根据报错大家可以到网上一搜一大堆解决方案
java环境我这边使用的是1.8以上的jdk (jdk-8u201-linux-x64.tar.gz), 在systemctl启动的时候是没有获取到env的, 所以我在启动脚本里面添加了source /etc/profile
部分安装代码
|
|
2.golang
安装这个应该没啥问题, 从官网下载, 然后设置个环境变量就行
|
|
3.MongoDB
去官网下载最新压缩包tgz(或者deb), tar解压设置环境变量即可(不兼容2.x版本, 笔者用的是4.2.3最新版)
唯一需要注意的是 server -db 连接的ip地址不能使用127.0.0.1, 又没有认证参数(有能力改server源码), 所以建议可以适当降权, 或者不要是生产的重要机器
所以在配置里面可以修改绑定host (bind_ip = 当前服务器ip或者0.0.0.0)
|
|
4.agent-pcap
编译Agent需要先安装libpcap-devel
由于通信问题, 在windows2008及之前都可以使用winpcap, 在windows2008以后的建议使用npcap
即使linux安装了pcap, 也不一定毫无问题, 笔者找到提issue提供的缓解建议
|
|
5.agent-web
启动web程序之前, 必须确定存在几个文件,分别是conf/app.conf, https_cert/cert.pem, https_cert/private.pem, 缺少这几个文件都会导致web程序启动失败
现假设web程序目录在/web,启动程序是/web/web, 所以启动方式则是
1 2 |
cd /web ./web |
6.error-log
invalid operator '$dateToString'。
笔者当时使用apt-get安装导致一直报这个错误, 后来确定是当前的 Mongodb 不支持 $dateToString 操作符,升级 Mongodb 版本就可以了。
7.kernel
笔者测试centos7的内核存在溢出直接死机情况, 所以生产环境一定要慎重啊
官方介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
我们在bin\linux-64\data.zip中已经提供了一些编译好的对应内核版本的ko文件,直接用的话需要确认内核版本完全一致。 实际部署过程中需要 uname -r 统计下需要部署的机器linux内核版本,然后需要找到完全匹配对应版本的kernel-devel包 下下来并安装,yum安装的不一定完全匹配。虽然软链接到不一致的版本也能编译出来ko并加载,但是不知道会不会有影响, 稳妥起见还是参照上面的做法。 rpm -ivh kernel-devel-3.10.0-327.el7.x86_64.rpm debian系的也类似 用 uname -r 的结果替换 4.9.0-3-amd64 apt-get install linux-headers-4.9.0-3-amd64 openSUSE zypper install kernel-devel 安装好对应kernel-devel包后cd进目录就可以编译了 cd /usr/local/go/src/yulong-hids/syscall_hook make 编译好的内核和驱动需要替换进对应系统目录下的data.zip内。 |
8.startup code
这里做了几个systemctl-service我就不放出来了, 毕竟写的太low
server-start.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/sh DIRNAME=`dirname $0` mongohost=`/sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p'|grep -v 127.0.0.1|head -1` for i in $(seq 1 10); do echo "Wait for ElasticSearch Start...$i" curl -s http://127.0.0.1:9200> /dev/null if [ $? = 0 ];then break; fi sleep 5 if [ $i -ge 10 ]; then echo "Too much retry, exit." exit 2 fi done /server -db $mongohost:27017 -es 127.0.0.1:9200 >> server.log 2>&1 & |
启动代码如下
|
|
9.web init
默认登录的账户名: yulong
默认登录的密码: All_life_is_a_game_of_luck.
需要修改的自己修改下 web/conf/app.conf, 密码是md5加密的
1.访问 https://web, 记得不要占用80,443端口, 点击初始化
2.初始化规则直接使用官方项目根目录的rules.json, 也可以参考自己写
3.上传对应的文件, 这里的是上传压缩包, 可以到官方release里面下载最新的, 也可以参考安装文档中自行编译
4.最后,服务器是linux并且安装了openssl后, 直接点击生成证书,然后点击完成
5.重启web服务使之生效
10.Monitor & ✅code
切换到主机列表, 使用代码安装就行了
贴一张 创建一个ssh账户, 然后登录的监控记录
最后,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
if [ "$(id -u)" != "0" ];then echo 'Permission is not root!'; exit; fi DIRNAME="/root/yulong-sh" sed -i 's/mirrors.tuna.tsinghua.edu.cn/mirrors.aliyun.com/g' /etc/apt/sources.list apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ netbase \ wget \ gnupg \ dirmngr \ git \ mercurial \ openssh-client \ subversion \ procps \ g++ \ gcc \ libc6-dev \ make \ pkg-config \ libpcap-dev \ tzdata \ openssl update-ca-certificates cd $DIRNAME tar -C /usr/local -xzf golang/go1.14.1.linux-amd64.tar.gz echo 'export PATH="/usr/local/go/bin:$PATH"' >> /etc/profile echo 'export GOPATH=/go' >> /etc/profile echo 'export PATH="$GOPATH/bin:/usr/local/go/bin:$PATH"' >> /etc/profile source /etc/profile mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" cd $GOPATH go version cd $DIRNAME mkdir -p /usr/java/ tar zxf elasticsearch/jdk-8u201-linux-x64.tar.gz -C /usr/java/ echo -e 'export JAVA_HOME=/usr/java/jdk1.8.0_201\nexport JRE_HOME=$JAVA_HOME/jre\nCLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib\nPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin\nexport JAVA_HOME JRE_HOME CLASS_PATH PATH' >> /etc/profile cd $DIRNAME cp -f elasticsearch/gosu-amd64 /usr/local/bin/gosu chmod +x /usr/local/bin/gosu rm -rf /elasticsearch tar zxf elasticsearch/elasticsearch-5.6.13.tar.gz -C /tmp/ mv -f /tmp/elasticsearch-5.6.13 /elasticsearch if [ -z "`cat /etc/passwd|grep elasticsearch`" ];then useradd elasticsearch fi sed -i '2a source /etc/profile' /elasticsearch/bin/elasticsearch chown -R elasticsearch:elasticsearch /elasticsearch echo 'export PATH=/elasticsearch/bin:$PATH' >> /etc/profile cd /usr/lib if [ ! -f "/usr/lib/libpcap.so.1" ];then ln -s /usr/lib/x86_64-linux-gnu/libpcap.so.1.7.4 libpcap.so.1 fi cd $DIRNAME cp -rf yulong-hids /go/src/ cd /go/src/yulong-hids go build -o ./server/server --ldflags='-w -s -linkmode external -extldflags "-static"' ./server/server.go > /dev/null 2>&1 cp -f /go/src/yulong-hids/server/server / mkdir -p /web/conf go build -o ./web/web --ldflags='-w -s -linkmode external -extldflags "-static"' ./web/main.go > /dev/null 2>&1 cp -rf /go/src/yulong-hids/web / cp -f /go/src/yulong-hids/web/web /web cd $DIRNAME rm -rf /usr/local/mongodb/* tar -xf mongo/mongodb-linux-x86_64-ubuntu1604-4.2.3.tgz -C /tmp mv -f /tmp/mongodb-linux-x86_64-ubuntu1604-4.2.3 /usr/local/mongodb mkdir -p /usr/local/mongodb/data /usr/local/mongodb/data/db /usr/local/mongodb/log /usr/local/mongodb/conf echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> /etc/profile cat>/usr/local/mongodb/conf/mongodb.conf<<EOF dbpath = /usr/local/mongodb/data/db logpath = /usr/local/mongodb/log/mongodb.log bind_ip = 0.0.0.0 port = 27017 fork = true EOF |