本文将会介绍在入侵检测技术系统(Intrusion Detection )中,如何通过使用相关工具软件,进行系统即时消息推送的设置。本文将介绍一种叫做Monit的新工具,以及两个常用软件Pushover和Slack。
近日,来自Gartner公司(一家从事信息技术研究和分析的IT公司)的最新研究成果向我们展示了APM(应用程序管理系统)的全貌;同时,近些年来,人们已经逐渐意识到了维护APM系统安全的重要性。这不禁就会让我们联想到企业应用管理服务商AppDynamics公司提供的高效APM产品。
今年,信息安全公司Inversoft曾发表了一系列的安全文章,统称为《2016用户数据安全指南》。本文就是该指南中关于介绍服务器安全连载系列中的第10篇。
虽然大部分的网络服务器都不支持用户频繁地进行登录和注销,但当有用户登录到网络服务器中时,作为管理员,你必须在第一时间就要获得通知,知晓该用户的情况。有很多方法可以做到这一点。接下来,我们将会介绍一种叫做Monit的消息推送工具,来帮助服务器管理员实现这一目的。你可通过Monit来浏览一些系统日志文件,从中获得一些包含特定文档的消息;同时,Monit会根据这些消息的安全性,向系统发出警报。安装Monit的第一步是:在系统的root命令窗口下,执行下列代码:
$ apt-get install monit
在安装完成后,你可以创建一个系统配置文件,来监控SSH的登录状态。同时需要将之前创建的配置文件复制粘贴到路径为/etc/monit/conf.d/ssh-logins的文件夹下:
check file ssh_logins with path /var/log/auth.log
# Whitelist IPs here if you want
# ignore match "/etc/monit/whitelist_ips.regex"
if match "Accepted keyboard-interactive/pam" then
该配置文件要求Monit必须要时刻监控着文件/var/log/auth.log;同时,一旦Monit检测到含有“Accepted keyboard-interactive/pam”字样的命令行,那么它就会立刻报警。在你完成了上述的两个步骤之后,SSH系统就会向文件中增加一条与上述配置相匹配的日志记录。如果你没有开启双重身份验证功能,或是仅仅使用密钥验证方式,那么你的配置信息就需要进行修改,必须与字符串“Accepted publickey”相一致。
你也可以撤销白名单上的某些特定IP地址的匹配设置,同时创建一个/etc/monit/whitelist_ips.regex文件。该文件将会包含为白名单上的每一个IP地址单独设置的命令行语句。
编译/etc/monit/monitrc文件是整个配置过程的最后一步。向配置文件中加入带有能向管理员发送报警邮件的代码。这一配置过程会根据你所使用的SMTP电子邮件服务器、SMTP服务器要求的验证方式以及你的电子邮件地址等的不同,而出现一些变化。在下面的示例中,我所使用的是自己的电邮地址,以及Sendgrid公司提供的邮件服务器。
set mailserver smtp.sendgrid.net port 587 username "<sendgrid-username>" password "<sendgrid-password>" using tlsv12
set brian@inversoft.com not on { instance, action }
其中的第二行代码是给Monit下达一个指令,即:只要系统发出警报,都必须在第一时间以邮件的方式通知我,同时要忽略我自行设置的警报。如果你选择使用Monit来执行系统监控、系统重启等任务时,上述的设置将会大大减少你所收到的垃圾邮件的数量。
你肯定想要在第一时间就接到来自Monit的消息通知。在系统默认的情况下,Monit每2分钟进行一次检查。如果觉得这一周期过长的话,你可以修改其默认设置,将检查周期改为5秒。配置代码就是/etc/monit/monitrc 文件的第一行代码,如下所示:
set daemon 5
最后,重启Monit,它就会执行你所修改的配置了。相关代码是:
$ service monit restart
此外,我还想说的是,你还可以让Monit给你的移动终端设备或Slack,发送即时消息通知。如果想要接收推送通知,你需要使用Pushover服务器。同时,你需要对/etc/monit/conf.d/ssh-logins文件中的最后一行代码进行修改,将原先的代码改为:
if match "Accepted keyboard-interactive/pam" then exec "/etc/monit/monit-slack-pushover.rb"
之后,将这个Ruby脚本拷贝到/etc/monit/monit-slack-pushover.rb文件中:
#!/usr/bin/ruby
require 'net/https'
require 'json'
slack_webhook_url=""
slack_enabled=true
pushover_application=""
pushover_user=""
pushover_enabled=true
def log(message)
open('/var/log/monit.log', 'a') { |f|
f.puts message
}
end
if slack_enabled
begin
uri = URI.parse(slack_webhook_url)
Net::HTTP.start(uri.host, uri.port, {use_ssl: true}) { |http|
request = Net::HTTP::Post.new(uri.request_uri, {'Content-Type' => 'application/json'})
request.body = {
:text => "[#{ENV['MONIT_HOST']}] #{ENV['MONIT_SERVICE']} - #{ENV['MONIT_DESCRIPTION']}"
}.to_json
response = http.request(request)
log("Response from Slack [#{response.code}] [#{response.body}]")
}
rescue Exception => e
log("Exception while calling Slack [#{e.message}]")
end
end
if pushover_enabled
begin
uri = URI.parse("https://api.pushover.net/1/messages.json")
Net::HTTP.start(uri.host, uri.port, {use_ssl: true}) { |http|
request = Net::HTTP::Post.new(uri.request_uri, {'Content-Type' => 'multipart/form-data'})
request.set_form_data(token: pushover_application, user: pushover_user, message: "[#{ENV['MONIT_HOST']}] #{ENV['MONIT_SERVICE']} - #{ENV['MONIT_DESCRIPTION']}")
response = http.request(request)
log("Response from Pushover [#{response.code}] [#{response.body}]")
}
rescue Exception => e
log("Exception while calling Pushover [#{e.message}]")
end
end
与此同时,你必须对文件顶部的Pushover和Slack工具变量,进行配置,使其能正常运行。在使用Pushover集成工具时,你需要创建一个Pushover账号和Pushover应用程序。Pushover应用程序的创建视图如下所示:
之后,给你的Pushover应用程序起个名字,加入一定的描述信息以及相应的URL。
从“类型选择框”中选择“Script”选项。
在创建完成后,Pushover应用程序会给你提供一个与帐户对应的ID。你需要将应用程序的编译代码和用户ID分别加入到pushover_application和pushover_user两个变量中。在脚本中,将pushover_enabled选项改为“true”,进而激活Pushover功能。
对于Slack,相关的配置步骤如下:
1.打开Slack,点击左上角的用户名;
2.点击“Apps & Integrations”选项;
3.点击右上角的“Build your own”选项;
4.点击“Just for my team”下的“Make a Customer Integration”选项;
在此需要说明的是:在进行第4步操作时,你需要选取想要进行消息接收的频道。有很多频道可供你选择,但需要你提供一个准确无误的URL。
5.将URL复制粘贴到slack_webhook_url变量中。
为了确保你在上述的Ruby脚本中所做的配置,能够正确运行,你必须在进行配置前,就要安装好Ruby;同时,也要确保在输入下面的代码后,该脚本能够运行:
$ apt-get install ruby
$ chmod +x /etc/monit/monit-slack-pushover.rb
最后,输入下列代码,重启Monit:
$ service monit restart
上述所有的配置步骤就是AppDynamics公司提供的APM系统产品的配置过程。我想要强调的是,根据Gartner公司发布的,关于APM系统的全面介绍,再次提醒我们应当对APM引起重视。