Linux下PortSentry的配置
前年写过《IDS与IPS功能分析》一文,受到广大读者关注,现将近期有关IDS配置的文章和大家分享。
Internet上的服务器一般都会被安置在防火墙的DMZ(Demilitarized Zone)区,受到防火墙的保护。这在一定程度可以防止具有已知非法特征的危险连接和恶意攻击,但是却防止不了合法用户的非法访问。什么时候会出现合法用户的非法访问呢?举例说明,比如,合法用户的机器被他人控制,成为了黑客的攻击跳板,或者是合法用户想做一些别有用心的探测等。除此之外,有些攻击者还会用端口扫描程序扫描服务器的所有端口,以收集有用的信息(比如,哪些端口是打开的?哪些是关闭的? )。服务器端口被扫描往往是入侵的前奏。防火墙的脚本大都是基于规则的静态表示,对于网络上动态的探测就显得有点束手无策。因此,现在正在形成一个新的安全学科领域,称为“入侵检测”。
一、入侵检测工具简介
入侵检测工具主要是用来检测已经发生的和正在进行的攻击,有些工具甚至可以和防火墙实现“联动”,采取一定的措施来阻止这些攻击。
目前入侵检测技术采取的措施主要分为主动和被动两种。主动方式会通过网络监测器监听网络通信,一旦察觉到可疑的活动(比如特定数据包的流入),就会采取相应的措施。当网络上有瞬间的攻击及大流量非法数据发生时,主动方式允许系统在攻击者发动攻击的第一时间内做出反应,把攻击者狙击在外。被动方式是通过事后分析日志记录,当注意到有可疑活动时,系统才会采取相应的措施。
主流的入侵检测工具软件有CHKWTMP、TCPLogd、Shadow、Snon、MoM 等。其中,MoM 比较复杂,功能也很强劲,支持分布式的入侵检测。本文重点介绍简单实用的PortSentry。PortSentry是入侵检测工具中配置最简单、效果最直接的工具之一。PortSentry是Abacus工程的一个组成部分。Abacus工程的目标是建立一个基于主机的网络入侵检测系统,可以从http://www.psonic.com的到关于Abacus工程更为详细的信息。它可以实时检测几乎所有类型的网络扫描,并对扫描行为做出反应。一旦发现可疑的行为,PortSentry可以采取如下一些特定措施来加强防范:
◆ 给出虚假的路由信息,把所有的信息流都重定向到一个不存在的主机;
◆ 自动将对服务器进行端口扫描的主机加到TCP-Wrappers的/etc/hosts.deny文件中去;
◆ 利用Netfilter机制,用包过滤程序,比如iptables和ipchain等,把所有非法数据包(来自对服务器进行端口扫描的主机)都过滤掉;
◆ 通过syslog()函数给出一个目志消息,甚至可以返回给扫描者一段警告信息。
二、PortSentry的安装配置
下面详细介绍PortSentry工具的安装和配置方法。
1.安装
从http://sourceforge.net/projects/sentrytools/下载软件的最新版portsentry-1.2.tar.gz,用root用户执行如下命令进行安装:
#tar zxvf portsentry-1.2.tar.gz
#cd portsentry-1.2
#make
#make install
2.修改配置文件portsentry.conf
通过PortSentry进行入侵检测,首先需要为它定制一份需要监视的端口清单,以及相应的阻止对策。然后启动后台进程对这些端口进行检测,一旦发现有人扫描这些端口,就启动相应的对策进行阻拦。
(1)设置端口清单
下面给出portsentry.conf中关于端口的默认配置情况:
#Un-comment these if you are really anal;
#TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,513,514,515,540,636,1080,1424,2000,2001,[..]
#UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,635,640,641,666,700,2049,31335,27444,34555,[..]
#Use these if you just want to be aware:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,[..]
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"
#Use these for juse bare-bones
#TCP_PORTS="1,11,15,110,111,143,540,635,180,1524,2000,12345,12346,20034,32771,32772,32773,32774,49724,54320"
#UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,32773,32774,31337,54321"
可以有选择地去掉前面的注释来启用默认配置,也可以根据自己的实际情}兄定制一份新的清单,格式和原来的一样即可。端口列表要根据具体情况而定,假如服务器为Web服务器.那么Web端口就不需要监视.反之,如果是FTP服务器,那么监视Web端口也是有必要的。
(2)给定相关文件
在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"
(3)设置路由重定向
通过配置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
针对不同的平台有不同的路由命令.在配置文件中选择适台自己平台的命令即可。
(4)利用其它工具
直接利用Linux中的ipchain,iptables,ipfw和Netfilter等命令,可以切断攻击主机的连接:
KILL_ROUTE="/usr/local/sbin/iptables -I INPUT -s $TARGET$ -j DROP"
也可以直接把攻击者的IP记录到/etc/hosts.deny文件中,利用TCP-Wrappers保护机制来防止攻击:
KILL_HOSTS_DENY="ALL:$TARGET$ # Portsentry blocked"
(5)定制警告信息
可以定制一条警告信息,嘲笑一下攻击者。不过,手册上建议不要使用该选项,因为这样做可能会暴露主机的IDS系统。
PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY."
修改完毕后,改变文件的权限.以保证其安全性:
#chmod 600 /usr/local/psionic/portsentry/portsentry.conf
3.配置portsentry.ignore文件
/usr/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 所有的本地网络IP
192.168.0.223
192.168.254.1
127.0.0.1
#Exclude the default gateway(s) 默认网关IP
192.168.0.10
#Exclude the nameservers (域名服务器IP)
202.101.170.3
202.96.9.18
修改完成后同样需要改变文件默认的权限:
#chmod 600 /usr/local/psionic/portsentry/portsentry.ignore
三、启动检测模式
最后介绍一下PortSentry的启动检测模式。对应TCP和UDF两种协议方式.分别有三种启动模式,如下所示:
◆ portsentry-tcp,TCP的基本端口绑定模式;
◆ portsentry-udp,UDP的基本端口绑定模式;
◆ portsentry-stcp,TCP的秘密扫描检测模式;
◆ portsentry-sudp,UDP的秘密扫描检测模式;
◆ portsentry-atcp,TCP的高级秘密扫描检测模式;
◆ portsentry-audp,UDP的高级秘密扫描检测模式。
一般情况下,建议使用秘密扫描检测模式或高级秘密扫描检测模式。使用高级秘密扫描检测模式(Advanced Stealth Scan Detection Mode),PortSentry会自动检查服务器上正在运行的端口, 然后把这些端口从配置文件中移去, 只监控其它的端口。这样会加快对端口扫描的反应速度,并且只占用很少的CPU时间。
启动PortSentry的命令如下:
#/usr/psionic/portsentry/portsentry -atcp
#/usr/psionic/portsentr/portsentr -sudp
可以把启动命令加到“/etc/rc.d/rc.local”脚本文件中,果想让它和其它后台进程一样可以随时启动、停止并查看进程状态, 可以去这样当重新启动计算机的时候PortSentry就会自动运行。如果想让它和其它后台进程一样可以随时启动、停止并查看进程状态,可以去http://linux.cudeso.be/linuxdoc/portsentry.php下载一个后台管理脚本,把该脚本放在/etc/rc.d/下对应的运行级别目录中即可。
四、测试
启动PortSentry后,可以用扫描器扫描服务器,进行测试PortSentry检测到扫描后,会采取措施进行阻击,并在/Usr/local/psionic/portsentry 目录下生成对应的
portsentry.blocked.atcp文件或portsentry.blocked.audp文
件,文件记录了发动攻击的主机的信息。
同时,TCP-Wrappers会把非法主机的IP添加到/etc/host.deny文件中。这样既切断了与非法主机之间的通信,又在服务器上还保留了其犯罪的证据和时间记录,让它无处遁形,不可能再有进一步的非法行为。
本文出自 “李晨光原创技术博客” 博客,谢绝转载!
- Linux下安装和配置JDK与Tomcat(升级版)
在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
为了更好的排版, 所以将IK分词器的安装重启了一篇博文, 大家可以接上solr的安装一同查看.[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://ww ...
- Linux下Redis服务器安装配置
说明:操作系统:CentOS1.安装编译工具yum install wget make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel ...
- Linux下SVN服务器安装配置及客户端安装说明
原文地址:http://wenku.baidu.com/link?url=h3dVAMx4azpOXEND5HQEE6nliE8-zc0GSQ03yv4cUs1vXMALXF64UsK7kT7kXm_ ...
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- linux下golang的配置
linux下golang的配置 之前开发golang一直在windows下,今天在linux下试了一下 ,遇到一些梗,比如go 找不到 sync包.花了一小时全部解决,把过程记录一下. 安装 go 我 ...
- 转载-Linux下svn搭建配置流程
Linux下svn搭建配置流程 一. 源文件编译安装.源文件共两个,为: 1. 下载subversion源文件 subversion-1.6.1.tar.gz http://d136 ...
- Linux下PHP安装配置MongoDB数据库连接扩展
Web服务器: IP地址:192.168.21.127 PHP安装路径:/usr/local/php 实现目的: 安装PHP的MongoDB数据库扩展,通过PHP程序连接MongoDB数据库 具体操作 ...
- Linux下安装与配置Nginx
一.准备 Nginx版本:nginx-1.7.7.tar.gz 请自行到官网下载对应的版本. 二.步骤 ♦在Linux新建一个queenLove用户 [root@localhost /]# use ...
随机推荐
- 九、 HBase SHELL、 JAVA 和 Thrift 客户端
HBase 由 Java 语言实现,同时他也是最主要最高效的客户端. 相关的类在org.apache.hadoop.hbase.client 包中.涵盖所有 增删改查 API . 主要的类包含: HT ...
- struts2怎么返回一个字符串给jsp?(使用json)
我们都知道使用servlet时可以直接用PrintWriter对象的print方法来向页面传送一些字符串(可以是html标签和内容),然后在用RequestDispatcher来转向网页 虽Strut ...
- MethodFilterInterceptor(方法拦截器)配置excludeMethors
由于该类有setExcludeMethods方法,因此在xml中可以配置一个excludeMethods参数 刚开始老是拦截不成功,tomcat显示这个参数没找到,后来终于找到错误:不应该在拦截器栈中 ...
- C++ priority_queue的使用 & Java PriorityQueue
刚刚那道BST的题目,也用到了priority_queue,那是那个没有定义比较函数. 那么下面这个,就要定义比较函数. 它的模板声明带有三个参数,priority_queue<Type, Co ...
- Linux同步与相互排斥应用(零):基础概念
[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途] 当操作系统进入多道批处理系统时 ...
- Python使用Redis实现一个简单作业调度系统
Python使用Redis实现一个简单作业调度系统 概述 Redis作为内存数据库的一个典型代表,已经在非常多应用场景中被使用,这里仅就Redis的pub/sub功能来说说如何通过此功能来实现一个简单 ...
- 智课雅思词汇---四、clos和cap和ced是什么意思
智课雅思词汇---四.clos和cap和ced是什么意思 一.总结 一句话总结: cap/capt/cip/cep/ceiv:to take,seize(拿,抓住) cede:to go,yield( ...
- Android的矩阵(一):ColorMatrix
最近的学习过程中看到关于android色彩矩阵的内容,以前看到这部分内容,基本都是跳过的,没有认真细读. 自己给自己找的借口是: 1,大一学的矩阵内容早就忘的干干净净了,当时学的时候就很烦人,所以现在 ...
- HUE配置文件hue.ini 的filebrowser模块详解(图文详解)(分HA集群和非HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- Alternating Sum
http://codeforces.com/problemset/problem/963/A 不考虑正负的话,每两项之间之间公比为b/a,考虑正负,则把k段作为循环节,循环节育循环节之间公比为(b/a ...