项目背景:
最近的需求是,在__不能连外网的__centos7系统的__arm64架构的__服务器上安装suricata,但是因为服务器只能在客户现场才能操作,所以我需要在本机研究好怎么安装和使用, 然后去客户现场直接部署
实现方案:
利用yumdownloader和createrepo创建离线安装环境
先在windows的虚拟机上安装成功,并学会suricata软件简单的使用
然后弄个能联网的arm64架构的服务器(我的是在阿里云租的),把离线安装需要的文件拷贝下来,并弄成离线包和离线安装脚本,放到客户不能联网的机器上安装
具体操作:
下面以windows虚拟机为例介绍制作离线包的过程(centos7_arm64大致流程差不多,只是需要下载的库有一些差异)
1.在vmware下新建centos7的虚拟机,并与windows共享文件夹(不共享也行,但是下载的文件要手动复制出去),给虚拟机联网权限
https://blog.csdn.net/qq_45560958/article/details/132878292?spm=1001.2014.3001.5502
注:新建虚拟机如果选择最小安装的话,就没有界面了,所以我一般是按照下图创建
2.在能联网的机器上,下载suricata安装包
先安装yumdownloader,用以下载离线包
yum update
yum install yum-utils
再下载安装epel,直接用yumdownloader下载suricata会发现如下图报错,因为yum里没有suricata的源,所以要先下载安装epel
yumdownloader --resolve --destdir=/mnt/shareDocker/ epel-release
yum install -y epel-release
再下载suricata
yumdownloader --resolve --destdir=/mnt/shareDocker/ suricata
此时安装包就下载好了,文件路径为/mnt/shareDocker/,文件如图
插个眼::::::::::但是这些安装包根据实际情况,并不一定够用,等会安装的时候有可能报缺库,在这里插个眼,如果报错的话,根据本文档下面的教程把库下载好,回到这里重新制作离线仓库。
所有的离线包下载好了,创建离线仓库(很重要)
createrepo /mnt/shareDocker/offlineFile
把上面offline文件夹拷贝到离线的机器上
接下来在离线机器上安装软件
离线机器
现在所有的包下载好了,接下来是把文件拷贝到离线的机器上,在离线的机器上配置离线源并安装相应的软件
因为我在离线机器和在线机器映射的是同一个windows的文件夹,所以我两个虚拟机里的文件内容是一样的,如果你没有映射同一个文件夹,可以直接把在线机器的文件拷贝出来,然后放到离线机器的任意目录下面也可以以,下面配置离线源
cd /etc/yum.repos.d/
ls
上图的文件夹为在线源,创建个备份文件夹,把这些源都移动进去(相当于删除了),然后创建自己的离线源(因为这个机器不能联网,所以要这些文件也没什么用)
mkdir CentOS_back
mv *.repo CentOS_back/
touch offline.repo
offline.repo文件内容如下,baseurl里面填你下载的那一堆离线包的路径
yum clean all
yum makecache
yum install epel-release
再次进入/etc/yum.repos.d/,把安装epel生成的repo文件移动到备份文件夹
cd /etc/yum.repos.d/
mv epel.repo Centos_back/
mv epel-testing.repo Centos_back
终于要安装suricata了!!!
yum install suricata
注:这一次虽然直接安装成功了,但是我第一次安装suricata的时候报错,缺少库,不论是虚拟机上和在线的centos服务器上都报缺库,并且他们缺的库名称还不一样,报错的时候我没截图,如果你也会报错的话解决方案如下,只做参考,实际根据你缺的库进行调整。
把缺的库补齐之后,需要再次回到上面“插个眼”的地方,重新创建一下离线仓库
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm epel-release
yum install epel-release
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm suricata
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm PyYAML
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm libnetfilter_queue
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm libprelude
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm hiredis
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm glibc
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm libnet
yumdownloader --resolve --destdir=/mnt/shareDocker/offlinerpm libnfnetlink
这是我放到现场的库文件,主要按照上面的方式下载的,实在找不到就去官网看看
看一下版本号,证明suricata安装好了 ,注意-V要大写
suricata -V
下面是suricata简单的使用
打开suricate的配置文件,翻到文档的最下面找到default-rule-path:那一行
vi /etc/suricata/suricata.yaml
打开上图显示的文件,如果没有这个文件就自己创建
vi /var/lib/suricata/rules/suricata.rules
把下面的文本复制进去,这些是检测规则
告警分别是:60s内超过5个不同的ip地址通过tcp/udp与本地,60s内超过20个tcp连接请求,60s内超过10个tcp成功建立连接(没错,成功建立的连接过多也会告警),10s内收到超过100个udp的包 ,60s内被ping超过6次(这个最容易检测,用别的机器ping几次就行)
alert tcp any any -> any any (msg:"Port Scanning Detected TCP"; flags:S; threshold:type both, track by_src, count 5, seconds 10; sid:199001;)
alert udp any any -> any any (msg:"Port Scan Detected UDP "; threshold: type threshold, track by_src, count 5, seconds 10; sid:100007;)
alert tcp any any -> any any (msg:"NetAttack Large number of connection requests"; threshold: type threshold, track by_src, count 20, seconds 60; sid:199002;)
alert tcp any any -> any any (msg:"NetAttack Too Many Established Connection"; flow: established, to_client; threshold: type both, track by_src, count 10, seconds 60; sid:199003;)
alert tcp any any -> any any (msg:"NetAttack Frequent login failures"; flow: established, to_server; content:"Failed password"; threshold: type threshold, track by_src, count 5, seconds 60; sid:199004;)
alert icmp any any -> any any (msg:"NetAttack ICMP Smurf Flood Attack Detected"; icode:0; itype:8; threshold: type threshold, track by_src, count 6, seconds 60; sid:100005;)
alert udp any any -> any any (msg:"NetAttack Possible UDP Flood Attack Detected"; threshold: type threshold, track by_src, count 100, seconds 10; sid:100006;)
运行suricata,-i 后面跟的是要检测的网卡,根据实际情况修改
suricata -c /etc/suricata/suricata.yaml -i ens33
不报错的话就算是运行成功了,这个时候查看
cd /var/log/suricata/
tail -f fast.log
fast.log文件无内容
用内网里的其他机器,去ping这个机器,会发现 fast.log产生告警
此时suricata安装并运行成功
(如果觉得写的还行,就给个赞和评论把)
(如果觉得写的还行,就给个赞和评论把)
(如果觉得写的还行,就给个赞和评论把)
下面多写一点,去客户现场安装的时候,我写了个脚本自动部署,在联网机器上下载好文件并创建好离线仓库之后,只需要把这些文件拷贝到离线的机器上,然后修改一下脚本路径他就能自动安装了,脚本内容如下,你修改一下第一行的路径就行
offline_folder="/path/to/offlinerpm"
#!/bin/bash
offline_folder="/path/to/offlinerpm"
back_folder="/etc/yum.repos.d/Centos_back"
folder="/var/lib/suricata/rules"
target_file="$folder/suricata.rules"if [ ! -d "$back_folder" ]; then
mkdir "$back_folder"
fi
mv /etc/yum.repos.d/*.repo "$back_folder"cp "$offline_folder/MyOffline.repo" "/etc/yum.repos.d/"
yum clean all
yum makecacheif ! rpm -q epel-release; then
yum install -y epel-release
fimv /etc/yum.repos.d/*.repo "$back_folder"
cp "$offline_folder/MyOffline.repo" /etc/yum.repos.d/
yum install -y suricataif [ ! -d "$folder" ]; then
mkdir -p "$folder"
fiif [ -f "$target_file" ]; then
rm "$target_file"
fi
cp "$offline_folder/suricata.rules" "$target_file"suricata -V
suricata -c /etc/suricata/suricata.yaml -i ens33