说明:

PortSentry是***检测工具中配置最简单、效果最直接的工具之一。PortSentryAbacus工程的一个组成部分。Abacus工程的目 标是建立一个基于主机的网络***检测系统,可以从http://www.psonic.com得到关于Abacus工程更为详细的信息。虽然 PortSentryCisco收购后不再开发,但丝毫不影响此软件的强大功能。PortSentry可以实时检测几乎所有类型的网络扫描,并对扫描行 为做出反应。一旦发现可疑的行为,PortSentry可以采取如下一些特定措施来加强防范:
给出虚假的路由信息,把所有的信息流都重定向到一个不存在的主机;
自动将对服务器进行端口扫描的主机加到TCP-Wrappers/etc/hosts.deny文件中去,我个人比较喜欢这种方式,因为线上许多环境并非都能打开iptables,这个选项也是PortSentry默认的功能;
利用Netfilter机制,用包过滤程序,比如iptablesipchain等,把所有非法数据包(来自对服务器进行端口扫描的主机)都过滤掉;
通过syslog()函数给出一个目志消息,甚至可以返回给扫描者一段警告信息。

安装:

http://sourceforge.net/projects/sentrytools/下载软件的最新版portsentry-1.2.tar.gz,用root用户执行如下命令进行安装:
    #tarzxvfportsentry-1.2.tar.gz
    #cdportsentry-1.2_beta
    #make linux
    #makeinstall

会报错,按如下处理:

打开portsentry.c文件,在1590行左右,我们将带有Copyright1997-2003字样的那行调整为一行即可

默认安装位置/usr/local/psionic/portsentry

配置
1.修改配置文件portsentry.conf
通过PortSentry进行***检测,首先需要为它定制一份需要监视的端口清单,以及相应的阻止对策。然后启动后台进程对这些端口进行检测,一旦发现有人扫描这些端口,就启动相应的对策进行阻拦。
1)设置端口清单
下面给出portsentry.conf中关于端口的默认配置情况

 vi /usr/local/psionic/portsentry/portsentry.conf

 

可以有选择地去掉前面的注释来启用默认配置,也可以根据自己的实际情况定制一份新的清单,格式和原来的一样即可。端口列表要根据具体情况而定,假如服务器为Web服务器,那么Web端口就不需要监视。反之,如果是FTP服务器,那么监视Web端口也是有必要的。

 

portsentry.conf里的相关文件
#此文件记录允许合法扫描服务器的主机地址

IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"

#此文件中保留了以往所有***主机的IP历史记录

HISTROY_FILE="/usr/lcal/psionic/portsentry/portsentry.history"

#文件中是已经被阻止连接的主机IP记录BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"

设置路由重定向
通过配置portsentry.conf文件,可以设置一条虚拟路由记录,把数据包重定向到一个未知的主机.使之无法获取信息。相应配置代码如下:

#Generic

#KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666"

#Generic Linux

KILL_ROUTE="/sbin/route add -host $TARGET$ gw 333.444.555.666

针对不同的平台有不同的路由命令,在配置文件中选择适台自己平台的命令即可。我的服务器是CentOS 5.5 x86,以上语法适合Linux平台的机器;PortSentry非常人性化,下面都有系统对应的配置文件,我们只需要依样操作即可。
4)我们还可以利用Linux中的iptables命令,可以切断***主机的连接:

KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"

也可以直接把***者的IP记录到/etc/hosts.deny文件中,利用TCP_Wrappers保护机制来防止***:

KILL_HOSTS_DENY="ALL:$TARGET$ # Portsentry blocked"

系统默认是利用TCP_Wrappers来切断与主机之间的连接
5)定制警告信息
我们也可以定制一条警告信息,警告***者。不过,手册上建议不要使用该选项,因为这样做可能会暴露主机的IDS系统。

PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY."

修改完毕后,改变文件的权限.以保证其安全性:

chmod 600 /usr/local/psionic/portsentry/portsentry.conf

配置portsentry.ignore文件
/usr/local/psionic/portsentry/portsentry.ignore文件中设置了希望PortSentry忽略的主机IP,即允许合法扫描的主机地址下面是配置情况:

#Put hosts in here you never want blocked,This includes the IP addresses

#of all local interfaces on the protected host(i.e virtual host,mult-home)

#keep 127.0.0.1 and 0.0.0.0 to keep people from playing games.

127.0.0.1/32

0.0.0.0

#Exclude all local interfaces

192.168.1.103

192.168.1.102

127.0.0.1

记得带上本机地址,以防万一。
修改完成后同样需要改变文件默认的权限:

chmod 600 /usr/local/psionic/portsentry/portsentry.ignore

使用:

最后介绍一下PortSentry的启动检测模式。对应TCPUDF两种协议方式,PortSentry分别有三种启动模式,即基本、秘密和高级秘密扫描检测模式,合计6个模式。
◆ portsentry-tcpTCP的基本端口绑定模式;
◆ portsentry-udpUDP的基本端口绑定模式;
◆ portsentry-stcpTCP的秘密扫描检测模式;
◆ portsentry-sudpUDP的秘密扫描检测模式;
◆ portsentry-atcpTCP的高级秘密扫描检测模式;
◆ portsentry-audpUDP的高级秘密扫描检测模式。
一般情况下,建议使用秘密扫描检测模式或高级秘密扫描检测模式。
使用高级秘密扫描检测模式(Advanced Stealth Scan Detection Mode),PortSentry会自动检查服务器上正在运行的端口, 然后把这些端口从配置文件中移去, 只监控其它的端口。这样会加快对端口扫描的反应速度,并且只占用很少的CPU时间,这种模式非常智能,我比较喜欢用
启动PortSentry的命令如下:

#/usr/local/psionic/portsentry/portsentry -atcp

可以把启动命令加到“/etc/rc.d/rc.local”脚本文件中,果想让它和其它后台进程一样可以随时启动、停止并查看进程状态, 可以去这样当重新启动计算机的时候PortSentry就会自动运行。

测试:

我们在192.168.64.98上启动PortSentry后,先暂时清掉portsentry.ignore里的文件,然后在另一台 192.168.64.140的机器上启动扫描命令nmap -sS 192.168.64.98。稍等片刻,就会发现/etc/hosts.deny里会出现ALL:192.168.64.140的字样,证明此软件配置都是 生效的。

[root@localhost ~]# nmap -sS 192.168.64.98

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-07-19 14:43 CST

Interesting ports on webServer1 (192.168.64.98):

Not shown: 1672 closed ports

PORT      STATE SERVICE

22/tcp    open  ssh

80/tcp    open  http

111/tcp   open  rpcbind

443/tcp   open  https

3306/tcp  open  mysql

8081/tcp  open  blackice-icecap

9999/tcp  open  abyss

10000/tcp open  snet-sensor-mgmt

MAC Address: 84:2B:2B:BD:BD:E6 (Unknown)

Nmap finished: 1 IP address (1 host up) scanned in 0.187 seconds

 

 

140上查看hosts.deny

[root@server89 portsentry]# vi /etc/hosts.deny 

 

 

ALL: 192.168.64.133

日志:

vi /var/log/messages

Jul 19 14:48:28 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 389

Jul 19 14:48:28 server89 portsentry[20005]: attackalert: Host 192.168.64.133 has been blocked via wrappers with string: "ALL: 192.168.64.133"

Jul 19 14:48:34 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 21

Jul 19 14:48:34 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:48:39 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 23

Jul 19 14:48:39 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:48:44 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 554

Jul 19 14:48:44 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:48:49 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 256

Jul 19 14:48:49 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:48:54 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 636

Jul 19 14:48:54 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:48:59 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 616

Jul 19 14:48:59 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:49:04 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 620

Jul 19 14:49:04 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:49:09 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 440

Jul 19 14:49:09 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:49:14 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 68

Jul 19 14:49:14 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring

Jul 19 14:49:19 server89 portsentry[20005]: attackalert: TCP SYN/Normal scan from host: bogon/192.168.64.133 to TCP port: 832

Jul 19 14:49:19 server89 portsentry[20005]: attackalert: Host: bogon/192.168.64.133 is already blocked Ignoring