portsentry 屏蔽恶意扫描端口

nmap扫描
nmap -sS -O 127.0.0.1
nmap -sU -O 127.0.0.1
输出显示了本地主机上哪些端口目前分别提供的TCP和UDP服务

启动服务:

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

service portsentry start

service portsentry stop

重启服务:

service portsentry restart 或者 /usr/local/psionic/portsentry/portsentry -atcp


一、PortSentry的安装

  下面详细介绍PortSentry工具的安装和配置方法。

  1.从http://sourceforge.net/projects/sentrytools/下载软件的最新版portsentry-1.2.tar.gz,用root用户执行如下命令进行安装:

  #tarzxvfportsentry-1.2.tar.gz

  #cdportsentry-1.2_beta

  #make

  #makeinstall

  进行到这步时发现报错,系统生成不了protsentry执行文件,我们查看Makefile文件时发现,make后面根据操作系统的不同有许多选项。

  所以我们重新执行此步操作,将目录删除重新解压缩

  然后我们执行makelinux,发现系统仍然报错,如下:

  SYSTYPE=linux

  Making./portsentry.c:1585:error:missingterminating"character

  ./portsentry.c:1595:error:expected?.?.before?.?.token

  make:***[linux]Error1解决方法:

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

  调整后我们再执行makelinux&&makeinstall后,PortSentry顺利安装成功,其安装路径为/usr/local/psionic/portsentry,如下所示表示成功安装此软件:

  Edit/usr/local/psionic/portsentry/portsentry.confandchange
yoursettingsifyouhaven'talready.(route,etc)
WARNING:Thisversionandabovenowuseanew
directorystructureforstoringtheprogram
andconfigfiles(/usr/local/psionic/portsentry)。
Pleasemakesureyoudeletetheoldfileswhen
thetestingofthisinstalliscomplete.
cc-O-Wall-DLINUX-DSUPPORT_STEALTH-o./portsentry./portsentry.c\
./portsentry_io.c./portsentry_util.c
./portsentry.c:Infunction?.ortSentryModeTCP?.
./portsentry.c:1187:warning:pointertargetsinpassingargument3of?.ccept?.differinsignedness
./portsentry.c:Infunction?.ortSentryModeUDP?.
./portsentry.c:1384:warning:pointertargetsinpassingargument6of?.ecvfrom?.differinsignedness
./portsentry.c:Infunction?.sage?.
./portsentry.c:1584:error:missingterminating"character
./portsentry.c:1585:error:?.ourceforget?.undeclared(firstuseinthisfunction)
./portsentry.c:1585:error:(Eachundeclaredidentifierisreportedonlyonce
./portsentry.c:1585:error:foreachfunctionitappearsin.)
./portsentry.c:1585:error:expected?.?.before?.ot?
./portsentry.c:1585:error:stray?.?.inprogram

  二、PortSentry的配置

  1.修改配置文件portsentry.conf

  通过PortSentry进行入侵检测,首先需要为它定制一份需要监视的端口清单,以及相应的阻止对策。然后启动后台进程对这些端口进行检测,一旦发现有人扫描这些端口,就启动相应的对策进行阻拦。

  (1)设置端口清单

  下面给出portsentry.conf中关于端口的默认配置情况:

  #Un-commenttheseifyouarereallyanal;
#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,[]
#Usetheseifyoujustwanttobeaware:
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"
#Usetheseforjusebare-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里的相关文件

  在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/routeadd$TARGET�K。444.555.666"

  #GenericLinux

  KILL_ROUTE="/sbin/routeadd-host$TARGET$gw333.444.555.666

  针对不同的平台有不同的路由命令,在配置文件中选择适台自己平台的命令即可。我的服务器是CentOS5.5x86_64,以上语法适合Linux平台的机器;PortSentry非常人性化,下面都有系统对应的配置文件,我们只需要依样操作即可。

  (4)我们还可以利用Linux中的iptables命令,可以切断攻击主机的连接:

  KILL_ROUTE="/usr/local/sbin/iptables-IINPUT-s$TARGET$-jDROP"

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

  KILL_HOSTS_DENY="ALL:$TARGET$#Portsentryblocked"

  系统默认是利用TCP_Wrappers来切断与主机之间的连接


4,更改protsentry.modes文件

/etc/protsentry/portsentry.modes文件定义了在启动时,portsentry命令运行的模式.下面的是默认条件所显示的:
tcp
udp
#stcp
#sudp
#atcp
#audp

tcp和udp分别是protsentry进行TCP和UDP服务的基本模式,其它可选选项包括stcp(stealth TCP),atcp(advanced stealth TCP),sudp(sealth UDP),和audp(advanced stealth UDP).只运行一个TCP和一个UDP服务TCP,因此,要使用stealth或者advancedstelth服务,确保在相应的basic服务前面加上一个#号要激活新的服务,运行:
/etc/init.d/portsentry restart 或者:
service portsentry restart
新的模式立即生效,当系统重启后,新的模式仍然有效.

5,测试portsentry
可以测试端口是否被用不同的方式正确保护.你需要做的是运行潜在的入侵者会运行的一个程序,看是否会引起portsentry的正确的反应例如用端口扫描程序来看端口是否暴露在外面,也可以用命令,像te.net引发一个特殊的端口,看是否portsentry能抓住它常用的端口扫描程序是nmap,它扫描tcp/udp端口,给nmap一个IP或者主机地址,它就会扫描此主机的大约1500个端口,检查哪个端口是打开的,并且推测提供了哪些可以被攻击的服务.


例如:
1),先关闭portsentry
service protsentry stop
2)用nmap扫描
nmap -sS -O 127.0.0.1
nmap -sU -O 127.0.0.1
输出显示了本地主机上哪些端口目前分别提供的TCP和UDP服务
3)如果有你不想打开的服务,可以通过使用chkconfig servicename
off来关闭.通过编辑/etc/xinetd.d目录下的文件,以及将disable=no更改为yes或者改变防火墙规则.
4)如果你想使来自你的主机的服务可用,要使相应的端口不被portsentry监视.从/etc/portsentry/portsentry.conf文件中的TCP_PORT和/或UDP_PORT选项删除该端口号.
5)从新启动:
service protsentry start
6)如前,再次运行nmap,提供合法服务的端口,以及被portsentry监视的端口,全部显示
7)检查/var/log/messages文件以确保portsentry没有试图监视任何正在提供服务的端口.
这样,当确定了portsentry建立了所希望的方式后,在网络的另外一个主机运行nmap来扫描本地主机,如果运行正常的花,远程主机扫描你的主机的第一个端口,将阻塞所有随后的扫描.
> 6,跟踪portsentry入侵
除了对入侵者采取行动之外,portsentry还实用syslog记录他的活动.portsentry启动/关闭/扫描检测等活动都被记录/var/log/messages文件



确定配制文件

除了protsentry.conf,portsentry还提供了一些其它的配置文件,我们可以在portsentry.conf中找到这些文件的位置:
#
# Hosts to ignore
IGNORE_FILE="/etc/portsentry/portsentry.ignore"
# Hosts that have been denied (running history)
HISTORY_FILE="/etc/portsentry/portsentry.history"
# Hosts that have been denied this session only (temporary until next restart)
BLOCKED_FILE="/etc/portsentry/portsentry.blocked"
#
/etc/portsentry/portsentry.ignore:包括了不想阻塞的所有IP地址的列表,默认是分配给本地主机的所有IP地址都被添加到此文件
/etc/portsentry/portsentry.history:此文件曾经访问你的主机而被阻塞的所有IP地址的列表
/etc/portsentry/portsentry.blocked.*:此文件包括当前访问你的主机而被阻塞的所有主机IP的列表
portsentry.blocked.tcp:文件包括不恰当扫描TCP端口的主机IP地址
portsentry.blocked.udp:文件包括不恰当扫描UDP端口的主机的IP地址
访问本地主机的端口只会在当前会话中被阻塞,也就是说,知道系统reboot或者portsentryRELOAD,因此,要永久的排斥这些远程主机,就需要引入一些其它的限制措施,例如,使用/etc/hosts.deny文件,防火墙规则或者重路由等

3)选择响应方式
扫描端口,就象敲房子的门,检查是否上锁一样,大多数情况下,这表明有人在寻找你的系统的弱点,这就是为什么当另外一个主机扫描你的端口,portsentry的反应是阻塞他进一步的访问的原因!不过,没有永久阻塞访问的行为.在portsetnry.conf文件中,BLOCK_UDP和BLOCK_TCP选项设置端口被扫描时采取的自动响应方式:
BLOCK_UDP="2"
BLOCK_TCP="2"
引号里的数字绝顶了另外的主机扫描你的端口时portsentry的反应!
@"0"表示扫描端口会被记录日志,但是并不阻塞
@"1"表示触发KILL_ROUTE和KILL_HOSTS_DENY的运行.
@"2"表示对扫描协议服务(TCP或UDP)的访问被临时阻塞并被记录,而且,如果KILL_RUN_CMD选项运行任何命令,则该命令被执行(2是默认选项)
@KILL_ROUTE:这个选项运行/sbin/route命令对远程主机到一个无响应的主机的请求重路由:
KILL_ROUTE="/sbin/route add -host $TARGET$ gw 333.444.555.666"
也可以用iptables规则拒绝访问
@HILL_HOSTS_DENY:这个选项用来拒绝对任何TCP包封保护的网络服务的请求:
KILL_HOSTS_DENY="ALL: $TARGET$"
用入侵者的IP代替$TARGET$变量,并且将所说的行加入到/etc/sysconfig/iptables里
如果远程主机的IP是1.2.3.4,那么在/etc/hots.deny中应该是这样的:
ALL:1.2.3.4

@KILL_RUN_CMD:不是用防火墙,重路由,或者TCP封装拒绝远程主机的访问,而是用你喜欢的命令来响应.将BLOCK_TCP和BLOCK_UDP选项的值设定是2,运行KILL_RUN_CMD的值响应对监视端口的扫描.如:
KILL_RUN_CMD="/path/script $TARGET$ $PORT$"
记住:不要用KILL_RUN_CMD报复扫描你的主机,因为很有可能扫描你的主机本身自己也被攻击,还有,报复,只能刺激入侵者下一步的攻击!
@PORT_BANNER:可以发送信息给通过设置PORT_BANNER选项关闭portsentry监视的人,默认是没有信息被定义的.然而,可以去掉下面的注释使用该信息(不要滥用信息):
PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED ** YOUR CONNECTION ATTEMPT HASBEEN LOGGED. GO AWAY."
在关闭上面描述的响应前,可以使用SCAN_TRIGGER选项来设置portsentry将接收的入侵主机的扫描号,默认设置如下:
SCAN_TRIGGER="0"
"0"意味着不接受任何入侵系统的扫描.
continue....


你可能感兴趣的:(portsentry)