如何检测远程SSH会话从外部networking启动?

我如何设置monit来通知我有关源自一个特定子网之外的新的远程SSH会话?

我已经将连接尝试logging为~/.bashrc脚本的一部分,但我不确定这是否可行,因为我不确定一些实现细节。

具体来说,我需要知道如何在~/bashrc脚本中执行以下操作:

  1. 如何获取与新连接关联的IP地址和子网
  2. 如何检查IP是否在我select的特定子网之外

我想像脚本可能看起来像这样psudocode:

 #检查这是一个SSH连接
 #检查SSH连接是否源自选定的子网
 echo“从$ SSH_CLIENT的新连接”> /var/log/_ssh.log

Monit食谱:

检查path为/var/log/_ssh.log的文件_ssh
   如果失败的校验和然后警报

你不能从~/.bashrc或类似的地方进行这种日志logging,因为它只是针对一些交互式会话执行的,而不是如果某人不ssh yourserver mycommand sftp yourserver你的服务器等等。

所有sshlogin尝试失败或成功,都通过系统日志与auth设施进行logging。 日志信息包括源IP地址,authentication方法和authentication是否成功。 我认为你最好的select是使用一些日志监控软件。

我不知道monit,但是看起来它的工作就是看sshd,如果它死了就重启它,这是一个不同的问题。

与$ SSH_CLIENT一起,还有$ SSH_CONNECTION。 要查看可用variables,请在命令提示符处运行“env”(不带引号)。 -Tim

我不知道monit,但你可以通过防火墙轻松地做到这一点。 用一个特殊的标签logging所有的外部连接,并保持内部不被logging。 如果你在Linux上,iptables是你的朋友。

你也可以通过hosts.allow / hosts.deny来阻止所有的ssh连接。 您将在ssh日志中看到日志。

环境variables$ SSH_CLIENT是当前用户的SSH会话的IP,远程端口和本地端口。

这就是说,为什么你不放弃从安全的其他子网的一切? 为您节省很多麻烦。

另外:请花一些时间来正确地制定你的问题。 ServerFault应该是一个人们可以find答案的地方,不仅在他们自己,而且在其他人的问题。 如果你不介意我说的话,你有点混乱。