当有人使用SSH或远程桌面登录服务器时收到通知


13

我有一台运行OS X Lion Server 10.7.3的Mac mini服务器。它几乎无人值守,没有问题。但是,根据日志,服务器处于持续的“攻击”之下。防火墙和安全性似乎停滞不前。

每当有人/任何人使用SSH,管理工具或ARD登录到服务器时,是否有任何应用程序/脚本可以向我发送电子邮件?

由于机器可以在无人值守的情况下在另一个城市的数据中心中无人值守运行,因此我担心有人(通过纯粹的持久性)可能设法破解密码或对系统造成危害。知道我会被提醒会让我放心。


2
并不是一个真正的答案,因此请发表评论:您是否考虑过使用类似fail2ban([How-Tow](fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_ ( 10.5))之类的东西?设置禁止时间的规则,等等,这将有助于您防止被黑客入侵,这对于每次登录尝试都会收到一封电子邮件会有所帮助。
bortom 2012年

Answers:


4

您最好的防御方法总是关闭不必要的服务。如果您不使用远程桌面:请将其关闭。如果您不使用HTTP或FTP服务器,请关闭它们。运行的服务越少,入侵者利用的入口点就越少。

除了将其锁定之外,还有一些OS X友好的免费开放源代码产品,您可以查看它们在计算机上进行入侵检测。

鼻息

尽管我还没有亲自运行它,但我确实有一些同事知道并信任它用于入侵检测。它与BSD兼容,因此非常适合OSX。Snort的另一个好处是可以作为Homebrew软件包提供:

> brew info snort
snort 2.9.0.5
http://www.snort.org
Depends on: daq, libdnet, pcre
Not installed
https://github.com/mxcl/homebrew/commits/master/Library/Formula/snort.rb

==> Caveats
For snort to be functional, you need to update the permissions for /dev/bpf*
so that they can be read by non-root users.  This can be done manually using:
    sudo chmod 644 /dev/bpf*
or you could create a startup item to do this for you.

因此,您可以获得简化的安装路径,并且可以信任它可以很好地移植到OS X并在其中运行的事实。随着自制安装,你只需要做:

> brew install snort

您已经准备好开始使用它。

查阅Snort社区提供的Snort for OS X Lion Server安装指南,以开始为OS X计算机编写规则。这是一个很棒的文档,除了逐步安装从源代码安装Snort(您不需要执行此操作)之外,它还讨论了应执行OS X Lion Server实例以保护它的所有事情。如果通过Homebrew安装,请从PDF的第5节(第13页)开始,因为您不必担心从源代码安装它。

绊线

我已经在Linux机器上运行Tripwire来进行快速入侵检测和警报。它很有效,但是设置起来有点野兽。当规则与日志文件匹配时,它可以执行操作。当然,一个精明的黑客会知道一旦闯入就会禁用Tripwire,这样就不会导致会话中断。

MacWorld提示涉及在OS X上设置Tripwire。这并不简单,本文最后提到未经过测试。


OS X Lion Server自适应防火墙在阻止人员进入方面做得很好。与标准防火墙相比,Tripwire和Snort给我带来什么好处?值得付出努力吗?
bloudraak 2012年

1
Tripwire或Snort都不是防火墙的替代品。它们是入侵检测系统。他们使用多种方法来监视系统日志中是否存在可疑活动,并且可以基于监视结果来采取措施,例如向您发送电子邮件或关闭远程守护程序或关闭网络端口。
伊恩·C(

4

您可以强化ssh并安装denyhosts,sshguard和Snort,Bar,Base和Swatch。

有关详细信息,请参见以下链接:

https://discussions.apple.com/thread/3565475 https://discussions.apple.com/thread/4473229?tstart=0

  1. 关闭root和密码登录:

    vi /etc/sshd_config

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthenticatio no

    然后ssh-keygen在远程客户端上使用以生成可用于远程登录到服务器的公用/专用密钥:  

    client$ ssh-keygen -t rsa -b 2048 -C client_name [Securely copy ~/.ssh/id_rsa.pub from client to server.] server$ cat id_rsa.pub > ~/.ssh/known_hosts  

  2. 安装denyhosts和sshguard。

    • sudo port install denyhosts sshguard
    • sudo port load denyhosts
    • sudo port load sshguard

    您可以配置denyhosts阻止所有流量,而不仅仅是ssh流量。

  3. Snort,带有攻击的世界地图:

    https://discussions.apple.com/thread/4473229?tstart=0


3

直接回答提出的问题。如果有人成功通过ssh登录,我还有另一个脚本会在午夜左右再次通过电子邮件发送给我。

#!/usr/bin/env bash

mm=`date +%b`
dd=`date $1 +%d`
dd=`expr $dd`
if [ "$dd" -ge "10" ]
  then 
    dt=`echo "$mm $dd"` 
  else 
    dt=`echo "$mm  $dd"` 
fi

cat /var/log/secure.log | grep -E '(Accepted|SUCCEEDED)'| grep -E -v '(my.ip.address|192.168.1)' | grep "$dt" >> /tmp/access_granted

/usr/bin/mail -E -s "Access granted" email@myserver.com < /tmp/access_granted
rm /tmp/access_granted

编辑grep以上内容以排除自己的固定IP(如果需要),并使用您的电子邮件地址。您可以在我的其他答案中组合一些代码,以添加VNC失败。


我创建了按计划运行的脚本,并在等待今晚的电子邮件。
bloudraak 2012年

每天做事的麻烦在于,当您随波逐流时,损坏可能已经造成。
伊恩·C(

@Ian C.-同意,但是您可以随时增加电子邮件的发送频率。此外,您必须对设置的入侵防御措施有一定的信心。我对Fail2ban的安装有非常合理的信心。
afragen 2012年

2

为了进一步扩展Fail2ban的功能,设置并运行它后,我将在午夜之前运行一个脚本,该脚本会抓取日志并通过电子邮件将Fail2ban前一天的工作发送给我。

该脚本如下,可以从cron或启动的plist运行。

#!/usr/bin/env bash

mm=`date +%b`
dd=`date $1 +%d`
dd=`expr $dd`
if [ "$dd" -ge "10" ]
  then 
    dt=`echo "$mm $dd"` 
  else 
    dt=`echo "$mm  $dd"` 
fi

cat /var/log/system.log | grep "$dt" | grep org.fail2ban | grep -v COMMAND > /tmp/fail2ban_deny
cat /var/log/fail2ban.log | grep -E '(WARN|ERR|rotation|target)' | grep `date $1 +%Y-%m-%d` >> /tmp/fail2ban_deny
cat /var/log/ipfw.log | grep TCP | grep "$dt" >> /tmp/fail2ban_deny
cat /var/log/secure.log | grep VNC | grep FAILED | grep "$dt" >> /tmp/fail2ban_deny


/usr/bin/mail -E -s "Fail2ban ipfw" email@yourserver.com < /tmp/fail2ban_deny
rm /tmp/fail2ban_deny

您显然需要使用您选择的电子邮件地址。

设置Fail2ban是另外一个问题。我已经写了很多有关它的文章。


0

如果您安装了X代码命令行编译器,则在Mac OS X上安装Google Authenticator PAM插件非常简单。代码和说明在这里:

https://code.google.com/p/google-authenticator/wiki/PamModuleInstructions

初始化令牌(生成供手机上的应用程序生成的代码)后,您将获得两步验证,以保护您的机器。没有初始化令牌的任何帐户将无法登录,因此,如果您不想允许root登录,请不要为该帐户初始化密钥。

但认真的说,如果您必须在互联网上保持SSH开放,则诸如DenyHosts之类的东西就很有意义。不幸的是,自Mac OS X V10.8起,Apple从SSH守护程序中删除了tcpwrappers支持,因此它忽略了/etc/deny.hosts,如果您问我,这是愚蠢的做法,删除了安全功能。

要解决此问题,我使用MacPorts安装了最新的openssh守护程序,并还原了完整的tcpwrappers功能,编辑并使用DenyHosts守护程序来监视/var/log/system.log并禁止猜测登录名和密码的IP。 。而且,每次升级操作系统时,请不要忘记更新MacPorts并检查/重新安装openssh / DenyHosts。

祝好运!


0

我意识到这是一篇过时的文章,但是我认为这可能会帮助无法编程或节省时间的人们精益求精。我只是在午休时间写的,它将通过电子邮件发送成功和失败的尝试以及通过失败的尝试阻止的IP。该程序是用Ruby编写的。Sendmail与邮件和文件尾gem一起安装。

源代码如下:

#!/usr/local/bin/ruby

require 'mail'
require 'file-tail'

def sendMail(mail_subject,mail_body,dest_email,port)
  Mail.defaults do
    delivery_method :smtp, address: "localhost", port: port
  end

  mail = Mail.new do
    from     'root@localhost.com'
    to        dest_email
    subject   mail_subject
    body      mail_body
  end

  mail.delivery_method :sendmail
  mail.deliver
end

File.open('/var/log/auth.log') do |log|
  log.extend(File::Tail)
  log.interval = 10
  log.backward(1)
  log.tail do |line| 
    puts line if line.match(/ssh.*accepted password.*$/i)
    sendMail('New SSH Connection',line,'youremail@gmail.com',445) if line.match(/ssh.*accepted password.*$/i)

    puts line if line.match(/ssh.*failed password.*$/i)
    sendMail('Failed SSH attempt',line,'youremail@gmail.com',445) if line.match(/ssh.*failed password.*$/i)

    puts line if line.match(/sshguard.*$/i)
    sendMail('SSH IP Blocked', line,'youremail@gmail.com',445) if line.match(/sshguard.*$/i)
  end
end
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.