Snort 用户手册
[ 2006/02/10 23:42 | by ipaddr ]
Snort 用户手册
第一章 snort简介
snort有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并
作为连续不断的流显示在终端上。数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,
而且是可配置的。我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动
作。
>>>>>>>>>>>>
第一章 snort简介
snort有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并
作为连续不断的流显示在终端上。数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,
而且是可配置的。我们可以让snort分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动
作。
>>>>>>>>>>>>
入侵测系统+主动防火墙(Snort+Guardian的安装)
[ 2006/02/10 23:42 | by ipaddr ]
Snort 是一个开源的轻量级入侵监测系统,可以监测网络上的异常情况,给出报告;
Guardian是基于Snort+IPTables的一个主动防火墙,它分析Snort的日志文件,根据一定的判据自动将某些恶意的IP自动加入IPTables的输入链,将其数据包丢弃。
我自使用Snort+Guardian以来,每天可以看到很多的恶意行为被终止,心里很是高兴!
推荐大家使用!
安装步骤:
1)安装Snort:
*现在Snort & Guardian,目前下载地址为:
http://www.snort.org/dl/snort-2.3.0RC2.tar.gz
http://www.snort.org/dl/contrib/other_tools/guardian/guardian-1.6.tar.gz
*将上述文件拷贝至/tmp
*tar zxvf *.tgz
*cd snort-2.3.0RC2
*./configure
*make
*make install
*mkdir /etc/snort
*cd /etc/snort
*wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
* tar zxvf snortrules-snapshot-CURRENT.tar.gz
*mkdir /var/log/snort
*cd /etc
*vi snort.conf
修改后一些关键设置如下:
var HOME_NET yournetwork
var RULE_PATH /etc/snort/rules
preprocessor http_inspect: global \
iis_unicode_map /etc/snort/rules/unicode.map 1252
include /etc/snort/rules/reference.config
include /etc/snort/rules/classification.config
如:yournetwork 220.8.0.0/16
同时,可以选择将类似
include $RULE_PATH/local.rules
等,前面的#号去掉,设置自己的规则集
* /usr/local/bin/snort -D -l /var/log/snort -c /etc/snort.conf
* 将上一条命令写入/etc/rc.d/rc.local
2)安装guardian---需要perl支持
* cd /tmp
* tar zxvf guardian-1.6.tar.gz
* cd guardian-1.6
* echo > /etc/guardian.ignore
* cp guardian.pl /usr/local/bin/.
* cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
* cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
* cp guardian.conf /etc/.
* vi /etc/guardian.conf
如下:
HostGatewayByte 1
# guardian的日志文件
LogFile /var/log/guardian.log
#guardian从何处读取snort的日志
AlertFile /var/log/snort/alert
#将你需要忽略的IP放在此文件中
IgnoreFile /etc/guardian.ignore
# 封锁IP的最长时间,99999999为没有时限
TimeLimit 86400
* /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/guardian.conf
* 将上一条命令加入 /etc/rc.d/rc.local
至此,完成设置
注意:
1)snort的规则文件经常更新,可以使用如下脚本自动更新:
#!/bin/sh
cd /etc/snort
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
tar zxvf snortrules-snapshot-CURRENT.tar.gz
exit 0
*将上述脚本存为snortupdate,并放置到/etc/cron.daily/下,可以每天更新一次;
2)guardian有时会自动退出,可以使用如下脚本解决:
#!/bin/sh
/usr/local/bin/killguardian
/usr/local/bin/guardian.pl -c /etc/guardian.conf
exit 0
将上述脚本存为restartguardian,放置到/usr/local/bin
同时,crontab -e,加入如下一句:
* */6 * * * /usr/local/bin/restartguardian
意思为:每6小时重新启动guardian
脚本:killguardian
#!/usr/bin/perl
#杀死当前guardian.pl进程,需要安装perl module Proc::ProcessTable
#访问http://www.cpan.org可以获得上述module
use Proc::ProcessTable;
$t = new Proc::ProcessTable;
foreach $p (@{$t->table})
{
kill 9, $p->pid if $p->cmndline =~ 'guardian.pl';
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Guardian是基于Snort+IPTables的一个主动防火墙,它分析Snort的日志文件,根据一定的判据自动将某些恶意的IP自动加入IPTables的输入链,将其数据包丢弃。
我自使用Snort+Guardian以来,每天可以看到很多的恶意行为被终止,心里很是高兴!
推荐大家使用!
安装步骤:
1)安装Snort:
*现在Snort & Guardian,目前下载地址为:
http://www.snort.org/dl/snort-2.3.0RC2.tar.gz
http://www.snort.org/dl/contrib/other_tools/guardian/guardian-1.6.tar.gz
*将上述文件拷贝至/tmp
*tar zxvf *.tgz
*cd snort-2.3.0RC2
*./configure
*make
*make install
*mkdir /etc/snort
*cd /etc/snort
*wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
* tar zxvf snortrules-snapshot-CURRENT.tar.gz
*mkdir /var/log/snort
*cd /etc
*vi snort.conf
修改后一些关键设置如下:
var HOME_NET yournetwork
var RULE_PATH /etc/snort/rules
preprocessor http_inspect: global \
iis_unicode_map /etc/snort/rules/unicode.map 1252
include /etc/snort/rules/reference.config
include /etc/snort/rules/classification.config
如:yournetwork 220.8.0.0/16
同时,可以选择将类似
include $RULE_PATH/local.rules
等,前面的#号去掉,设置自己的规则集
* /usr/local/bin/snort -D -l /var/log/snort -c /etc/snort.conf
* 将上一条命令写入/etc/rc.d/rc.local
2)安装guardian---需要perl支持
* cd /tmp
* tar zxvf guardian-1.6.tar.gz
* cd guardian-1.6
* echo > /etc/guardian.ignore
* cp guardian.pl /usr/local/bin/.
* cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh
* cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh
* cp guardian.conf /etc/.
* vi /etc/guardian.conf
如下:
HostGatewayByte 1
# guardian的日志文件
LogFile /var/log/guardian.log
#guardian从何处读取snort的日志
AlertFile /var/log/snort/alert
#将你需要忽略的IP放在此文件中
IgnoreFile /etc/guardian.ignore
# 封锁IP的最长时间,99999999为没有时限
TimeLimit 86400
* /usr/bin/perl /usr/local/bin/guardian.pl -c /etc/guardian.conf
* 将上一条命令加入 /etc/rc.d/rc.local
至此,完成设置
注意:
1)snort的规则文件经常更新,可以使用如下脚本自动更新:
#!/bin/sh
cd /etc/snort
wget http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
tar zxvf snortrules-snapshot-CURRENT.tar.gz
exit 0
*将上述脚本存为snortupdate,并放置到/etc/cron.daily/下,可以每天更新一次;
2)guardian有时会自动退出,可以使用如下脚本解决:
#!/bin/sh
/usr/local/bin/killguardian
/usr/local/bin/guardian.pl -c /etc/guardian.conf
exit 0
将上述脚本存为restartguardian,放置到/usr/local/bin
同时,crontab -e,加入如下一句:
* */6 * * * /usr/local/bin/restartguardian
意思为:每6小时重新启动guardian
脚本:killguardian
#!/usr/bin/perl
#杀死当前guardian.pl进程,需要安装perl module Proc::ProcessTable
#访问http://www.cpan.org可以获得上述module
use Proc::ProcessTable;
$t = new Proc::ProcessTable;
foreach $p (@{$t->table})
{
kill 9, $p->pid if $p->cmndline =~ 'guardian.pl';
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
http://uptime.netcraft.com/
这个站点,可以用来查询主机的操作系统,WEB服务器,之类的信息。
>>>
这个站点,可以用来查询主机的操作系统,WEB服务器,之类的信息。
>>>
将Linux系统伪造成Windows
[ 2006/01/04 23:44 | by ipaddr ]
网络上的计算机很容易被黑客利用工具或其它手段进行扫描,以寻找系统中的漏洞,然后再针对漏洞进行攻击。
通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。
针对HTTP服务
通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP服务,而Linux中最常见的是Apache。
默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at apache.linuxforum.net Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。
通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来。但是,Red Hat Linux运行的Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替 换里面的提示内容。
以Apache 2.0.50为例,编辑ap_release.h文件,修改“#define AP_SERVER_BASEPRODUCT \"Apache\"”为“#define AP_SERVER_BASEPRODUCT \"Microsoft-IIS/5.0\"”。编辑os/unix/os.h文件,修改“#define PLATFORM \"Unix\"”为“#define PLATFORM \"Win32\"”。修改完毕后,重新编译、安装Apache。
Apache安装完成后,修改httpd.conf配置文件,将“ServerTokens Full”改为“ServerTokens Prod”;将“ServerSignature On”改为“ServerSignature Off”,然后存盘退出。重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。
针对FTP服务
通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。
以proftpd为例,修改配置文件proftpd.conf,添加如下内容:
ServerIdent on \"Serv-U FTP Server v5.0 for WinSock ready...\"
存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试:
C:\\>ftp 192.168.0.1
Connected to 192.168.0.1.
220 Serv-U FTP Server v5.0 for WinSock ready...
User (192.168.0.1:(none)):
331 Password required for (none).
Password:
530 Login incorrect.
Login failed.
ftp > quit
221 Goodbye.
这样从表面上看,服务器就是一个运行着Serv-U的Windows了。
针对TTL返回值
可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL 值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如,ping一个Red Hat系统,显示如下:
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
用以下命令修改Red Hat Linux的TTL基数为128(本来为64):
# echo 128 > /proc/sys/net/ipv4/ip_default_ttl
若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:
net.ipv4.ip_default_ttl = 128
保存退出后,再ping 192.168.0.1,TTL基数就变为128了。
针对3389端口和22端口
有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:
#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp --dport 22 -j DROP
利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE
第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。
针对netcraft
netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。
上面介绍的几种方法对netcraft来说,均不奏效。针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:
#iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j MASQUERADE
由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。
小结
以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人”,仅是给大家提供一个活学活用的新思路。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
通过伪装Linux系统,给黑客设置系统假象,可以加大黑客对系统的分析难度,引诱他们步入歧途,从而进一步提高计算机系统的安全性。下面以Red Hat Linux为例,针对几种黑客常用的途径介绍一些常用的Linux系统伪装的方法。
针对HTTP服务
通过分析Web服务器的类型,大致可以推测出操作系统的类型,比如,Windows使用IIS来提供HTTP服务,而Linux中最常见的是Apache。
默认的Apache配置里没有任何信息保护机制,并且允许目录浏览。通过目录浏览,通常可以获得类似“Apache/1.3.27 Server at apache.linuxforum.net Port 80”或“Apache/2.0.49 (Unix) PHP/4.3.8”的信息。
通过修改配置文件中的ServerTokens参数,可以将Apache的相关信息隐藏起来。但是,Red Hat Linux运行的Apache是编译好的程序,提示信息被编译在程序里,要隐藏这些信息需要修改Apache的源代码,然后,重新编译安装程序,以实现替 换里面的提示内容。
以Apache 2.0.50为例,编辑ap_release.h文件,修改“#define AP_SERVER_BASEPRODUCT \"Apache\"”为“#define AP_SERVER_BASEPRODUCT \"Microsoft-IIS/5.0\"”。编辑os/unix/os.h文件,修改“#define PLATFORM \"Unix\"”为“#define PLATFORM \"Win32\"”。修改完毕后,重新编译、安装Apache。
Apache安装完成后,修改httpd.conf配置文件,将“ServerTokens Full”改为“ServerTokens Prod”;将“ServerSignature On”改为“ServerSignature Off”,然后存盘退出。重新启动Apache后,用工具进行扫描,发现提示信息中已经显示操作系统为Windows。
针对FTP服务
通过FTP服务,也可以推测操作系统的类型,比如,Windows下的FTP服务多是Serv-U,而Linux下常用vsftpd、proftpd和pureftpd等软件。
以proftpd为例,修改配置文件proftpd.conf,添加如下内容:
ServerIdent on \"Serv-U FTP Server v5.0 for WinSock ready...\"
存盘退出后,重新启动proftpd服务,登录到修改了提示信息的FTP服务器进行测试:
C:\\>ftp 192.168.0.1
Connected to 192.168.0.1.
220 Serv-U FTP Server v5.0 for WinSock ready...
User (192.168.0.1:(none)):
331 Password required for (none).
Password:
530 Login incorrect.
Login failed.
ftp > quit
221 Goodbye.
这样从表面上看,服务器就是一个运行着Serv-U的Windows了。
针对TTL返回值
可以用ping命令去探测一个主机,根据TTL基数可以推测操作系统的类型。对于一个没有经过任何网关和路由的网络,直接ping对方系统得到的TTL 值,被叫做“TTL基数”。网络中,数据包每经过一个路由器,TTL就会减1,当TTL为0时,这个数据包就会被丢弃。
通常情况下,Windows的TTL的基数是128,而早期的Red Hat Linux和Solaris的TTL基数是255,FreeBSD和新版本的Red Hat Linux的TTL基数是64。比如,ping一个Red Hat系统,显示如下:
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Reply from 192.168.0.1: bytes=32 time <10ms TTL=64
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
用以下命令修改Red Hat Linux的TTL基数为128(本来为64):
# echo 128 > /proc/sys/net/ipv4/ip_default_ttl
若想使设置永久生效,可以修改/etc/sysctl.conf配置文件,添加如下一行:
net.ipv4.ip_default_ttl = 128
保存退出后,再ping 192.168.0.1,TTL基数就变为128了。
针对3389端口和22端口
有时通过扫描3389端口和22端口,也可以推测操作系统的类型。Windows下一般利用TCP协议的3389端口进行远程控制,而Linux可能会用TCP协议的22端口,提供带有加密传输的SSH服务。
为了安全,可以利用iptables来限制22端口的SSH登录,让非授权的IP扫描不到TCP 22端口的存在:
#iptables -I INPUT -s ! xx.xx.xx.xx -p tcp --dport 22 -j DROP
利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统伪装出一个提供服务的TCP 3389端口。命令如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -p tcp --dport 3389 -j MASQUERADE
第一条命令表示允许数据包转发;第二条命令表示转发TCP 3389到xx.xx.xx.xx;第三条命令表示使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道。若想使转发永久生效,可以把以上命令添加到/etc/rc.local文件中。
这样,当黑客扫描服务器所开端口的时候,就找不到22号端口,而是看到一个伪装的3389端口,从而不能正确判断出操作系统的类型。
针对netcraft
netcraft是一个很厉害的扫描引擎,它通过简单的TCP 80,就可以知道所测服务器的操作系统、Web服务程序和服务器开机时间(Uptime)等信息。
上面介绍的几种方法对netcraft来说,均不奏效。针对netcraft,可利用iptables进行系统伪装,使netcraft错误判断操作系统:
#iptables -t nat -I PREROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j DNAT --to xx.xx.xx.xx
#iptables -t nat -I POSTROUTING -s 195.92.95.0/24 -p tcp --dport 80 -j MASQUERADE
由于通过抓包发现,netcraft的服务器不止一台,所以需要对它所在网段进行转发欺骗处理。
小结
以上方法只能从某种角度上防止和阻挠黑客对系统漏洞的分析,在一定程度上可减少计算机被攻击的可能性,但仍然是“防君子,不防小人”,仅是给大家提供一个活学活用的新思路。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Linux做路由封P2P的常见方法
[ 2005/12/30 17:41 | by ipaddr ]
Linux做路由封P2P的常见方法:
1. P2PWall:基于iptables的p2p限制工具,支持Kazaa、Kazaa Lite、K++、iMesh、Grokster、WinMX协议,不过这几种协议在国内不多见。连接:http://www.lowth.com/p2pwall/,国内可能需要代理才能上;
2. iptables-p2p:iptables的p2p协议状态检测模块,支持dc、bt、edonkey。连接:http://sourceforge.net/projects/iptables-p2p;
3. l7-filter:Linux应用层协议分类器,支持的协议:http://l7-filter.sourceforge.net/protocols。连接:http://l7-filter.sourceforge.net/;
4. snort-inline:snort有检测p2p协议的规则,当然作为IPS的snort-inline也能够限制p2p协议了,不怕麻烦的话,可以尝试一下,连接:http://snort-inline.sourceforge.net/;
>>>>>>>>>
1. P2PWall:基于iptables的p2p限制工具,支持Kazaa、Kazaa Lite、K++、iMesh、Grokster、WinMX协议,不过这几种协议在国内不多见。连接:http://www.lowth.com/p2pwall/,国内可能需要代理才能上;
2. iptables-p2p:iptables的p2p协议状态检测模块,支持dc、bt、edonkey。连接:http://sourceforge.net/projects/iptables-p2p;
3. l7-filter:Linux应用层协议分类器,支持的协议:http://l7-filter.sourceforge.net/protocols。连接:http://l7-filter.sourceforge.net/;
4. snort-inline:snort有检测p2p协议的规则,当然作为IPS的snort-inline也能够限制p2p协议了,不怕麻烦的话,可以尝试一下,连接:http://snort-inline.sourceforge.net/;
>>>>>>>>>
有关MAC/IP原理浅析及解决方法
[ 2005/12/28 22:46 | by ipaddr ]
转至CU
IP/MAC捆绑原理及ARP
链路层用mac,网络层用ip:
网络中传输的是IP地址--三层32位地址,终端需要的是MAC地址--两层48位地,
ARP(RARP)都属于3层协议
网络通信中,两个节点想要通信,必须先知道源与目标的MAC地址。为了让系
统能快速地找到远程节点的MAC,每一个本地的内核都保存有一个即时的查询表
(ARP缓存)。
ARP中有映射远程主机的IP--->对应的MAC地址的一个列表。地址解析协议
(ARP)缓存是一个TSR的数据结构,由本地的内核来管理的。Default ARP缓
存中留有last 10 mins本地系统与之通信的节点的IP地址(和对应的MAC地址)。
当一个远程MAC存在于本地ARP 缓存中,转换远程节点的IP地址为MAC地址
no problem。然而,系统在知道一个远程IP,但MAC不在本地ARP缓存中时,是这
样来获取远程MAC的:本地主机发送一个Broadcast package,询问各节点是否有对
应的IP。回应是唯一的。在回应包中就包含此MAC。在收到返回包后,本地节点就
会在本地ARP缓存中记录远程MAC。
如果将IP/MAC对应关系中那些合法IP地址建立静态的MAC/IP绑定,那么即使
非法用户盗用IP地址,linux路由器在回应这些IP发出的连接请求时则不会通过arp协
议询问其MAC,而是使用Linux建立的静态MAC, 发出应答数据,这样.......
两种方法
1.
建立/etc/ether,指定正确的IP/MAC对应关系:
168.192.12.6 XX:AS:YOUR:MAC:WISH:XX
在/etc/rc.d/rc.local中加:
arp -f
2.
# arp -i eth0 -s 168.192.12.6 XX:AS:YOUR:MAC:WISH:XX
_____________________________________________________
理智告诉我们:缺憾同优点孪生
IP/MAC捆绑缺陷
这种方法本意是用来管理内网的IP,但无心插柳........不过,
缺陷随之表现:即router对发出的包不检查,即使网卡MAC 是未登记的,也可以向外发数据包,而且
可以用伪造的IP,(有的路由器检查源IP范围), 这时候伪造的IP也必须属于子网内的IP.
还有的server是这样做的:把没有登记的IP对应的MAC一致设为XXXXXXXXXX,这种方法很危险,只要
把网卡的MAC改成XXXXXXXXXX, 就能以任何没有登记的IP出去.......
采用IP/MAC来防止IP盗用不是根本办法:因为不仅所有的网卡MAC都可以修改,而且网卡发
出包的源MAC地址并不是网卡本身write的,而由驱动或APP提供的:他们先从网卡上得到了MAC地址,
每次发送包的时候用此MAC地址,所以等于没有!配置程序修改MAC仅仅靠修改其driver就可以
(Win下利用NDIS就可以).
注:但基于Link的TCP来说,伪造IP就不是"太"容易,需要TCP连接序号的预测的知识--大有学问呀.
如有兴趣,到安全网站上去看看,尤其是国外的
_____________________________________________________
软件修改MAC的原理
MAC写在ROM中,在网卡组帧时需要将MAC写入帧中,其并不是直接从ROM中写入帧的,
而是从网卡的ARegs中读出,然后由硬件写入帧中,ARegs的内容是Driver在网卡
初始化时从ROM中读入的.
So,我们可以截取NC Driver中相关代码,进而修改MAC.
在linux下简单实现
#/sbin/ifconfig eth0 down
#/sbin/ifconfig eth0 hw ether 00:AS:YOU:WISH:00
#/sbin/ifconfig eht0 up
_____________________________________________________
关于Switch/MAC/Port
一般的局域网采用HUB连接,如果换用Switch, 某些Switch可以锁定端口和MAC, 某个端口
只允许指定MAC接入,再加上IP/MAC绑定(还要将Switch加锁), 情况会好许多. 这时
如有人盗用IP除了要改IP,改MAC,还要将机器搬过来换网线(只要在雇两个保安就可以解决:))
这是Linux的ifconfig后一般没有信息(除了log).关键在于合法IP的MAC地址是在router处定好的,
router不会发ARP查询MAC, 因此至少从router外来的包,ARP不会乱:IP的MAC合法,
而非法盗用的IP相当于进入promisc模式, 从合法IP机包中取出属于自己的IP包(port不对的丢弃).
ping, traceroute等ICMP双方(合法非法IP机)可以用, UDP也可以. 但TCP不行(telnet, ftp等),
即合法IP机TCP可用, 盗用者不可用(要是TCP也可以了, 那盗用IP就非常简单了, 根本不用改MAC,
ifconfig/route就可以了)
CU精华文章
路由器的网络地址转换、管理登陆限制、MAC与IP的绑定(作者:xjc1027)
http://chinaunix.net/jh/30/13886.html
_____________________________________________________
几个注意点
1.
攻击方法是把攻击者自己的服务器绑定成攻击目标的IP,这样后者无法正常工作:报警说某一个MAC
地址的IP与其冲突,如何利用这个MAC地址查找到当前的绑定IP?
如果是在同一个网段里的可以发arp请求包,然后再解析arp回复包,即取得mac地址,
至于不在一个网段内的就不能直接取mac了.
2.DHCp&MAC&IP
配置DHCP让一个具体的MAC绑定到一个固定的IP上完全可以,在isc的dhcpd中有一个host字段,
可以定义这个功能,在dhcpd.conf文件中有详细的例子.
自动分配固定内部IP给相应的MAC网卡,对不上MAC的不能上网,但可以强行写上IP,网关,DNS一样
可以上网.修改一下就能实现控制用户上网(不要让人知道你的网关)
内网ip最好不要像192.168.0.0/24一样,否则非上网权限用Winxp的用户无需写任何设置一样可以上
-----------------------------------------------------------------
dhcpd.conf
option domain-name "your";
option routers 192.168.1.254;
option domain-name-servers 192.168.1.254;61.144.56.101;
ddns-update-style none;
default-lease-time 88600;
max-lease-time 887200;
subnet 192.168.1.0 netmask 255.255.255.0 {
# range 192.168.1.0 192.168.1.0;
}
host usr1 { #user1
hardware ethernet 00:90:99:BD:85:F7;
fixed-address 192.168.1.21;
}
host usr2 { #user2
hardware ethernet 00:A0:C9:75:A7:45;
fixed-address 192.168.1.22;
}
host usr3 { #user3
hardware ethernet 00:D0:09:59:02:DB;
fixed-address 192.168.1.23;
}
当MAC是以上的主机user1.2.3请求分配IP地址时,DHCP会固定的分配相应的IP
--------------------------------------------------------------------
关于用编程获得MAC.IP
CU精华区里有几篇文章很好
1.本地机
http://chinaunix.net/forum/viewtopic.php?t=85716&highlight=MAC
(作者:gadfly)
shell下大致方法:
ifconfig -a
set - -
Ip=$..............
MAC=$..........
2.子网其他机器
http://chinaunix.net/forum/viewtopic.php?p=870221&highlight=mac#870221
(解答者:gadfly)
---------------------------------------------------------------------
现在防地址盗用的最好方法:
MAC/IP + VLAN/PVC
VLAN + PPPoE
Port + MAC/IP
-----------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IP/MAC捆绑原理及ARP
链路层用mac,网络层用ip:
网络中传输的是IP地址--三层32位地址,终端需要的是MAC地址--两层48位地,
ARP(RARP)都属于3层协议
网络通信中,两个节点想要通信,必须先知道源与目标的MAC地址。为了让系
统能快速地找到远程节点的MAC,每一个本地的内核都保存有一个即时的查询表
(ARP缓存)。
ARP中有映射远程主机的IP--->对应的MAC地址的一个列表。地址解析协议
(ARP)缓存是一个TSR的数据结构,由本地的内核来管理的。Default ARP缓
存中留有last 10 mins本地系统与之通信的节点的IP地址(和对应的MAC地址)。
当一个远程MAC存在于本地ARP 缓存中,转换远程节点的IP地址为MAC地址
no problem。然而,系统在知道一个远程IP,但MAC不在本地ARP缓存中时,是这
样来获取远程MAC的:本地主机发送一个Broadcast package,询问各节点是否有对
应的IP。回应是唯一的。在回应包中就包含此MAC。在收到返回包后,本地节点就
会在本地ARP缓存中记录远程MAC。
如果将IP/MAC对应关系中那些合法IP地址建立静态的MAC/IP绑定,那么即使
非法用户盗用IP地址,linux路由器在回应这些IP发出的连接请求时则不会通过arp协
议询问其MAC,而是使用Linux建立的静态MAC, 发出应答数据,这样.......
两种方法
1.
建立/etc/ether,指定正确的IP/MAC对应关系:
168.192.12.6 XX:AS:YOUR:MAC:WISH:XX
在/etc/rc.d/rc.local中加:
arp -f
2.
# arp -i eth0 -s 168.192.12.6 XX:AS:YOUR:MAC:WISH:XX
_____________________________________________________
理智告诉我们:缺憾同优点孪生
IP/MAC捆绑缺陷
这种方法本意是用来管理内网的IP,但无心插柳........不过,
缺陷随之表现:即router对发出的包不检查,即使网卡MAC 是未登记的,也可以向外发数据包,而且
可以用伪造的IP,(有的路由器检查源IP范围), 这时候伪造的IP也必须属于子网内的IP.
还有的server是这样做的:把没有登记的IP对应的MAC一致设为XXXXXXXXXX,这种方法很危险,只要
把网卡的MAC改成XXXXXXXXXX, 就能以任何没有登记的IP出去.......
采用IP/MAC来防止IP盗用不是根本办法:因为不仅所有的网卡MAC都可以修改,而且网卡发
出包的源MAC地址并不是网卡本身write的,而由驱动或APP提供的:他们先从网卡上得到了MAC地址,
每次发送包的时候用此MAC地址,所以等于没有!配置程序修改MAC仅仅靠修改其driver就可以
(Win下利用NDIS就可以).
注:但基于Link的TCP来说,伪造IP就不是"太"容易,需要TCP连接序号的预测的知识--大有学问呀.
如有兴趣,到安全网站上去看看,尤其是国外的
_____________________________________________________
软件修改MAC的原理
MAC写在ROM中,在网卡组帧时需要将MAC写入帧中,其并不是直接从ROM中写入帧的,
而是从网卡的ARegs中读出,然后由硬件写入帧中,ARegs的内容是Driver在网卡
初始化时从ROM中读入的.
So,我们可以截取NC Driver中相关代码,进而修改MAC.
在linux下简单实现
#/sbin/ifconfig eth0 down
#/sbin/ifconfig eth0 hw ether 00:AS:YOU:WISH:00
#/sbin/ifconfig eht0 up
_____________________________________________________
关于Switch/MAC/Port
一般的局域网采用HUB连接,如果换用Switch, 某些Switch可以锁定端口和MAC, 某个端口
只允许指定MAC接入,再加上IP/MAC绑定(还要将Switch加锁), 情况会好许多. 这时
如有人盗用IP除了要改IP,改MAC,还要将机器搬过来换网线(只要在雇两个保安就可以解决:))
这是Linux的ifconfig后一般没有信息(除了log).关键在于合法IP的MAC地址是在router处定好的,
router不会发ARP查询MAC, 因此至少从router外来的包,ARP不会乱:IP的MAC合法,
而非法盗用的IP相当于进入promisc模式, 从合法IP机包中取出属于自己的IP包(port不对的丢弃).
ping, traceroute等ICMP双方(合法非法IP机)可以用, UDP也可以. 但TCP不行(telnet, ftp等),
即合法IP机TCP可用, 盗用者不可用(要是TCP也可以了, 那盗用IP就非常简单了, 根本不用改MAC,
ifconfig/route就可以了)
CU精华文章
路由器的网络地址转换、管理登陆限制、MAC与IP的绑定(作者:xjc1027)
http://chinaunix.net/jh/30/13886.html
_____________________________________________________
几个注意点
1.
攻击方法是把攻击者自己的服务器绑定成攻击目标的IP,这样后者无法正常工作:报警说某一个MAC
地址的IP与其冲突,如何利用这个MAC地址查找到当前的绑定IP?
如果是在同一个网段里的可以发arp请求包,然后再解析arp回复包,即取得mac地址,
至于不在一个网段内的就不能直接取mac了.
2.DHCp&MAC&IP
配置DHCP让一个具体的MAC绑定到一个固定的IP上完全可以,在isc的dhcpd中有一个host字段,
可以定义这个功能,在dhcpd.conf文件中有详细的例子.
自动分配固定内部IP给相应的MAC网卡,对不上MAC的不能上网,但可以强行写上IP,网关,DNS一样
可以上网.修改一下就能实现控制用户上网(不要让人知道你的网关)
内网ip最好不要像192.168.0.0/24一样,否则非上网权限用Winxp的用户无需写任何设置一样可以上
-----------------------------------------------------------------
dhcpd.conf
option domain-name "your";
option routers 192.168.1.254;
option domain-name-servers 192.168.1.254;61.144.56.101;
ddns-update-style none;
default-lease-time 88600;
max-lease-time 887200;
subnet 192.168.1.0 netmask 255.255.255.0 {
# range 192.168.1.0 192.168.1.0;
}
host usr1 { #user1
hardware ethernet 00:90:99:BD:85:F7;
fixed-address 192.168.1.21;
}
host usr2 { #user2
hardware ethernet 00:A0:C9:75:A7:45;
fixed-address 192.168.1.22;
}
host usr3 { #user3
hardware ethernet 00:D0:09:59:02:DB;
fixed-address 192.168.1.23;
}
当MAC是以上的主机user1.2.3请求分配IP地址时,DHCP会固定的分配相应的IP
--------------------------------------------------------------------
关于用编程获得MAC.IP
CU精华区里有几篇文章很好
1.本地机
http://chinaunix.net/forum/viewtopic.php?t=85716&highlight=MAC
(作者:gadfly)
shell下大致方法:
ifconfig -a
set - -
Ip=$..............
MAC=$..........
2.子网其他机器
http://chinaunix.net/forum/viewtopic.php?p=870221&highlight=mac#870221
(解答者:gadfly)
---------------------------------------------------------------------
现在防地址盗用的最好方法:
MAC/IP + VLAN/PVC
VLAN + PPPoE
Port + MAC/IP
-----------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
多个PPTP VPN客户机通过LINUX网关连接VPN服务器
[ 2005/12/28 22:42 | by ipaddr ]
多个PPTP VPN客户机通过LINUX网关连接VPN服务器
PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。
所以,当只有单个客户机通过linux网关连接VPN的时候,最简单的办法是用iptables把所有GRE协议的包转发给客户机。比如客户机的ip是192.168.0.2,iptables命令是
iptables -t nat -I PREROUTING -p gre -j DNAT --to-destination 192.168.0.2
上面的命令感觉很奇怪,当这个规则输入了,即使立刻删除,也依旧生效,一直过了好久才断掉。
当然,如果客户机连接的vpn ip地址互不相同,还可以根据源ip地址DNAT。但是,当多台机器要连接相同的pptp vpn服务器时,问题就出现了,简单的DNAT规则并不能生效,因为他们都是GRE协议。唯一能分辨的就只有GRE包里面的Class ID。这个ID在默认的linux防火墙上并没有得到支持。解决方法有两个
1,使用2.0版本以上的iptables,里面内置了ip_nat_gre等模块用于支持gre包的ip伪装。这个方案比较复杂,工程浩大,还要给内核打补丁。以后更新内核的时候也更加麻烦。
2,使用pptp proxy(http://www.mgix.com/pptpproxy/)。这是一个用户空间下的gre包转发工具。只要下载源码,编译,得到了pptpproxy。比如你的linux网关内网ip是192.168.0.254,vpn服务器是202.202.202.202,只要运行
pptpproxy -p 192.168.0.254,202.202.202.202
就可以了
这时,vpn客户机只要把192.168.0.254作为vpn服务器ip地址就可以了。
当然,让pptp监听在127.0.0.1,然后配合一些iptables转发规则,甚至可以做成一个透明pptpproxy代理。
pptpproxy还支持多vpn server代理。
如果你运行的是*BSD或者MAC,也许frickin(http://frickin.sourceforge.net/)更符合你的需要
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。
所以,当只有单个客户机通过linux网关连接VPN的时候,最简单的办法是用iptables把所有GRE协议的包转发给客户机。比如客户机的ip是192.168.0.2,iptables命令是
iptables -t nat -I PREROUTING -p gre -j DNAT --to-destination 192.168.0.2
上面的命令感觉很奇怪,当这个规则输入了,即使立刻删除,也依旧生效,一直过了好久才断掉。
当然,如果客户机连接的vpn ip地址互不相同,还可以根据源ip地址DNAT。但是,当多台机器要连接相同的pptp vpn服务器时,问题就出现了,简单的DNAT规则并不能生效,因为他们都是GRE协议。唯一能分辨的就只有GRE包里面的Class ID。这个ID在默认的linux防火墙上并没有得到支持。解决方法有两个
1,使用2.0版本以上的iptables,里面内置了ip_nat_gre等模块用于支持gre包的ip伪装。这个方案比较复杂,工程浩大,还要给内核打补丁。以后更新内核的时候也更加麻烦。
2,使用pptp proxy(http://www.mgix.com/pptpproxy/)。这是一个用户空间下的gre包转发工具。只要下载源码,编译,得到了pptpproxy。比如你的linux网关内网ip是192.168.0.254,vpn服务器是202.202.202.202,只要运行
pptpproxy -p 192.168.0.254,202.202.202.202
就可以了
这时,vpn客户机只要把192.168.0.254作为vpn服务器ip地址就可以了。
当然,让pptp监听在127.0.0.1,然后配合一些iptables转发规则,甚至可以做成一个透明pptpproxy代理。
pptpproxy还支持多vpn server代理。
如果你运行的是*BSD或者MAC,也许frickin(http://frickin.sourceforge.net/)更符合你的需要
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
让Linux NAT服务器支持UPnP
[ 2005/12/19 22:47 | by ipaddr ]
让Linux NAT服务器支持UPnP
=========================================
作者:Nanu
如需转载请注明作者,谢谢!
参考文献:
《UPnP on your Linux 2.4 firewall how-to》 by bijl
《让 Linux NAT 服务器支持 UPnP》 by lonestar
《UPnP为我们献上一道怎样的大餐》 by Sharon Crawford
=========================================
注意:如果对网络安全要求较高或要求高可控制性的网络,则不要安装配置UPnP支持,否则会导致网络NAT映射比较混乱,从而引发许多问题。建议小型网络或者家庭网络使用UPnP。
最近经常使用一些P2P类型软件,发现老得在Linux服务器上手动设置NAT,非常麻烦,而看着许多P2P软件都支持UPnP就眼馋,如果能让Linux支持UPnP那就简单方便多了!于是在网上搜索了一下有关让Linux支持UPnP的文章,于是就写了这篇文章。
一、什么是UPnP
1. UPnP简介
--------------
UPnP(Universal Plug and Play)技术对即插即用进行了扩展,它简化了家庭或企业中智能设备的联网过程。在结合了UPnP技术的设备以物理形式连接到网络中之后,它们可以通过网络自动彼此连接在一起,而且连接过程无需用户的参与
UPnP规范基于TCP/IP协议和针对设备彼此间通讯而制订的其它Internet协议。这就是它之所以被称作"通用(Universal)"的原因所在--UPnP技术不依赖于特定的设备驱动程序,而是使用标准的协议。UPnP设备可以自动配置网络地址,宣布它们在某个网络子网的存在,以及互相交换对设备和服务的描述。基于Windows XP的计算机可以充当一个UPnP控制点,通过程序界面对设备进行发现和控制。
如果与以前的即插即用相比,这种技术似乎并不具有什么革命性的意义。在操作系统中增加即插即用技术使得在单个计算机上安装、配置和添加外设的工作变得更容易了。但是UPnP为家庭用户或者小型办公环境中的非专业用户所带来的是一道更加美味的"大餐",他们可以利用UPnP玩多人游戏,进行实时通信(Internet电话,电话会议)以及使用类似Windows XP的远程协助这样的其它技术。
2. NAT 穿越技术
------------------
NAT穿越技术允许网络应用程序对它们是否位于一个具有UPnP能力的NAT设备之后进行检测。然后,这些程序将获得共享的全球可路由IP地址,并且配置端口映射以将来自NAT外部端口的数据包转发到应用程序使用的内部端口上--所有这一切都是自动完成的,用户无需手动映射端口或者进行其它工作。NAT穿越技术允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。
二、在Linux中部署UPnP支持
我们假设该Linux的内核版本是2.4.x,使用拨号上网,外网接口是ppp0,内网接口是eth0,并且已经启用iptables设定了 NAT。
在Linux中部署UPnP主要使用2个软件的配合:UPnP SDK for Linux和LinuxIGD。
下载地址:
UPnP SDK for Linux: http://sourceforge.net/projects/upnp/
LinuxIGD: http://linux-igd.sourceforge.net/
注意:要下载upnpsdk-1.0.4.tar.gz,1.0.4以上的版本不能和LinuxIGD很好的协同工作!
A. 安装:
----------
1. 解包UPnP SDK
# tar xzvf upnpsdk-1.0.4.tar.gz
2. 修改源代码
为了能够使Windows MSN Messenger在UPnP下正常通讯,所以必须修改源代码:
# cd upnpsdk-1.0.4
# vi src/ssdp/ssdplib.c
将第406行的:
SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);
改为:
SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);
3. 编译安装UPnP SDK
# make
# make install
4. 解包Linux-IGD
# tar xzvf linuxigd-0.92.tgz
5. 编译安装Linux-IGD
# cd linux-igd
# make
# make install
B. 配置
--------
1. 增加多播路由
# route add -net 239.0.0.0 netmask 255.0.0.0 eth0
2. 为iptables建议一个软链接
# cd /usr/sbin
# ln -s /sbin/iptables ./
启动UPnP
# upnpd ppp0 eth0
诊断UPnP运行状态
# tail /var/log/messages
如果能够看到:
Dec 14 16:01:49 doorway -- MARK --
Dec 14 16:02:15 doorway upnpd: The Linux UPnP Internet Gateway Device Ver 0.92 by Dime (dime@gulfsales.com)
Dec 14 16:02:15 doorway upnpd: Special Thanks for Intel's Open Source SDK and original author Genmei Mori's work.
则说明UPnP已经成功启动。
C. 测试
--------
以支持UPnP的P2P网络电视PPLive为例,在PPLive中打开UPnP支持选项,然后连接一个频道。
在Linux中执行:
# tail /var/log/debug -f
如果能看到:
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 17 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156
则说明PPLive已经向UPnP请求进行端口映射了。只要看到这样的字样,就说明UPnP已经完全工作起来了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
=========================================
作者:Nanu
如需转载请注明作者,谢谢!
参考文献:
《UPnP on your Linux 2.4 firewall how-to》 by bijl
《让 Linux NAT 服务器支持 UPnP》 by lonestar
《UPnP为我们献上一道怎样的大餐》 by Sharon Crawford
=========================================
注意:如果对网络安全要求较高或要求高可控制性的网络,则不要安装配置UPnP支持,否则会导致网络NAT映射比较混乱,从而引发许多问题。建议小型网络或者家庭网络使用UPnP。
最近经常使用一些P2P类型软件,发现老得在Linux服务器上手动设置NAT,非常麻烦,而看着许多P2P软件都支持UPnP就眼馋,如果能让Linux支持UPnP那就简单方便多了!于是在网上搜索了一下有关让Linux支持UPnP的文章,于是就写了这篇文章。
一、什么是UPnP
1. UPnP简介
--------------
UPnP(Universal Plug and Play)技术对即插即用进行了扩展,它简化了家庭或企业中智能设备的联网过程。在结合了UPnP技术的设备以物理形式连接到网络中之后,它们可以通过网络自动彼此连接在一起,而且连接过程无需用户的参与
UPnP规范基于TCP/IP协议和针对设备彼此间通讯而制订的其它Internet协议。这就是它之所以被称作"通用(Universal)"的原因所在--UPnP技术不依赖于特定的设备驱动程序,而是使用标准的协议。UPnP设备可以自动配置网络地址,宣布它们在某个网络子网的存在,以及互相交换对设备和服务的描述。基于Windows XP的计算机可以充当一个UPnP控制点,通过程序界面对设备进行发现和控制。
如果与以前的即插即用相比,这种技术似乎并不具有什么革命性的意义。在操作系统中增加即插即用技术使得在单个计算机上安装、配置和添加外设的工作变得更容易了。但是UPnP为家庭用户或者小型办公环境中的非专业用户所带来的是一道更加美味的"大餐",他们可以利用UPnP玩多人游戏,进行实时通信(Internet电话,电话会议)以及使用类似Windows XP的远程协助这样的其它技术。
2. NAT 穿越技术
------------------
NAT穿越技术允许网络应用程序对它们是否位于一个具有UPnP能力的NAT设备之后进行检测。然后,这些程序将获得共享的全球可路由IP地址,并且配置端口映射以将来自NAT外部端口的数据包转发到应用程序使用的内部端口上--所有这一切都是自动完成的,用户无需手动映射端口或者进行其它工作。NAT穿越技术允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。
二、在Linux中部署UPnP支持
我们假设该Linux的内核版本是2.4.x,使用拨号上网,外网接口是ppp0,内网接口是eth0,并且已经启用iptables设定了 NAT。
在Linux中部署UPnP主要使用2个软件的配合:UPnP SDK for Linux和LinuxIGD。
下载地址:
UPnP SDK for Linux: http://sourceforge.net/projects/upnp/
LinuxIGD: http://linux-igd.sourceforge.net/
注意:要下载upnpsdk-1.0.4.tar.gz,1.0.4以上的版本不能和LinuxIGD很好的协同工作!
A. 安装:
----------
1. 解包UPnP SDK
# tar xzvf upnpsdk-1.0.4.tar.gz
2. 修改源代码
为了能够使Windows MSN Messenger在UPnP下正常通讯,所以必须修改源代码:
# cd upnpsdk-1.0.4
# vi src/ssdp/ssdplib.c
将第406行的:
SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);
改为:
SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);
3. 编译安装UPnP SDK
# make
# make install
4. 解包Linux-IGD
# tar xzvf linuxigd-0.92.tgz
5. 编译安装Linux-IGD
# cd linux-igd
# make
# make install
B. 配置
--------
1. 增加多播路由
# route add -net 239.0.0.0 netmask 255.0.0.0 eth0
2. 为iptables建议一个软链接
# cd /usr/sbin
# ln -s /sbin/iptables ./
启动UPnP
# upnpd ppp0 eth0
诊断UPnP运行状态
# tail /var/log/messages
如果能够看到:
Dec 14 16:01:49 doorway -- MARK --
Dec 14 16:02:15 doorway upnpd: The Linux UPnP Internet Gateway Device Ver 0.92 by Dime (dime@gulfsales.com)
Dec 14 16:02:15 doorway upnpd: Special Thanks for Intel's Open Source SDK and original author Genmei Mori's work.
则说明UPnP已经成功启动。
C. 测试
--------
以支持UPnP的P2P网络电视PPLive为例,在PPLive中打开UPnP支持选项,然后连接一个频道。
在Linux中执行:
# tail /var/log/debug -f
如果能看到:
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 17 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156
则说明PPLive已经向UPnP请求进行端口映射了。只要看到这样的字样,就说明UPnP已经完全工作起来了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
clamav第三方软件
[ 2005/12/15 22:47 | by ipaddr ]
clamav是一款Linux,Unix下的免费病毒扫描引擎(只是扫描),并且可在线更新。
clamav非常强大,可以做很多应用的病毒扫描引擎,比如Proxy病毒扫描,邮件病毒扫描,Ftp扫描等等。
Clamav官方网站列出了常见的第三方软件,用来实现和不同的应用结合,主要有以下几类:
MTA+ClamAV
POP3+ClamAV
Web/FTP+ClamAV
FileSystem+ClamAV
MUA+ClamAV
GUI+ClamAV
Library+ClamAV
Miscellaneous
详情可查看官方网站说明:
http://www.clamav.net/3rdparty.html
>>>>>>>>>>>>>>>>>>>
clamav非常强大,可以做很多应用的病毒扫描引擎,比如Proxy病毒扫描,邮件病毒扫描,Ftp扫描等等。
Clamav官方网站列出了常见的第三方软件,用来实现和不同的应用结合,主要有以下几类:
MTA+ClamAV
POP3+ClamAV
Web/FTP+ClamAV
FileSystem+ClamAV
MUA+ClamAV
GUI+ClamAV
Library+ClamAV
Miscellaneous
详情可查看官方网站说明:
http://www.clamav.net/3rdparty.html
>>>>>>>>>>>>>>>>>>>
下面是一位高手整理的问题精华,大家好好看看吧,收获肯定很大的!
1.如何让asp脚本以system权限运行?
修改你asp脚本所对应的虚拟目录,把"应用程序保护"修改为"低"....
2.如何防止asp木马?
基于FileSystemObject组件的asp木马
cacls %systemroot%\system32\scrrun.dll /e /d guests //禁止guests使用
regsvr32 scrrun.dll /u /s //删除
基于shell.application组件的asp木马
cacls %systemroot%\system32\shell32.dll /e /d guests //禁止guests使用
regsvr32 shell32.dll /u /s //删除
3.如何加密asp文件?
从微软免费下载到sce10chs.exe 直接运行即可完成安装过程。
安装完毕后,将生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。
运行screnc - l vbscript source.asp destination.asp
生成包含密文ASP脚本的新文件destination.asp
用记事本打开看凡是""之内的,不管是否注解,都变成不可阅读的密文了
但无法加密中文。
4.如何从IISLockdown中提取urlscan?
iislockd.exe /q /c /t:c:\urlscan
5.如何防止Content-Location标头暴露了web服务器的内部IP地址?
执行
cscript c:\inetpub\adminscripts\adsutil.vbs set w3svc/UseHostName True
最后需要重新启动iis
6.如何解决HTTP500内部错误?
iis http500内部错误大部分原因
主要是由于iwam账号的密码不同步造成的。
我们只要同步iwam_myserver账号在com+应用程序中的密码即可解决问题。
执行
cscript c:\inetpub\adminscripts\synciwam.vbs -v
7.如何增强iis防御SYN Flood的能力?
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
'启动syn攻击保护。缺省项值为0,表示不开启攻击保护,项值为1和2表示启动syn攻击保护,设成2之后
'安全级别更高,对何种状况下认为是攻击,则需要根据下面的TcpMaxHalfOpen和TcpMaxHalfOpenRetried值
'设定的条件来触发启动了。这里需要注意的是,NT4.0必须设为1,设为2后在某种特殊数据包下会导致系统重启。
"SynAttackProtect"=dword:00000002
'同时允许打开的半连接数量。所谓半连接,表示未完整建立的TCP会话,用netstat命令可以看到呈SYN_RCVD状态
'的就是。这里使用微软建议值,服务器设为100,高级服务器设为500。建议可以设稍微小一点。
"TcpMaxHalfOpen"=dword:00000064
'判断是否存在攻击的触发点。这里使用微软建议值,服务器为80,高级服务器为400。
"TcpMaxHalfOpenRetried"=dword:00000050
'设置等待SYN-ACK时间。缺省项值为3,缺省这一过程消耗时间45秒。项值为2,消耗时间为21秒。
'项值为1,消耗时间为9秒。最低可以设为0,表示不等待,消耗时间为3秒。这个值可以根据遭受攻击规模修改。
'微软站点安全推荐为2。
"TcpMaxConnectResponseRetransmissions"=dword:00000001
'设置TCP重传单个数据段的次数。缺省项值为5,缺省这一过程消耗时间240秒。微软站点安全推荐为3。
"TcpMaxDataRetransmissions"=dword:00000003
'设置syn攻击保护的临界点。当可用的backlog变为0时,此参数用于控制syn攻击保护的开启,微软站点安全推荐为5。
"TCPMaxPortsExhausted"=dword:00000005
'禁止IP源路由。缺省项值为1,表示不转发源路由包,项值设为0,表示全部转发,设置为2,表示丢弃所有接受的
'源路由包,微软站点安全推荐为2。
"DisableIPSourceRouting"=dword:0000002
'限制处于TIME_WAIT状态的最长时间。缺省为240秒,最低为30秒,最高为300秒。建议设为30秒。
"TcpTimedWaitDelay"=dword:0000001e
8.如何避免*mdb文件被下载?
安装ms发布的urlscan工具,可以从根本上解决这个问题。
同时它也是一个强大的安全工具,你可以从ms的网站上获取更为详细的信息。
9.如何让iis的最小ntfs权限运行?
依次做下面的工作:
a.选取整个硬盘:
system:完全控制
administrator:完全控制
(允许将来自父系的可继承性权限传播给对象)
b.\program files\common files:
everyone:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
c.\inetpub\wwwroot:
iusr_machine:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
e.\winnt\system32:
选择除inetsrv和centsrv以外的所有目录,
去除“允许将来自父系的可继承性权限传播给对象”选框,复制。
f.\winnt:
选择除了downloaded program files、help、iis temporary compressed files、
offline web pages、system32、tasks、temp、web以外的所有目录
去除“允许将来自父系的可继承性权限传播给对象”选框,复制。
g.\winnt:
everyone:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
h.\winnt\temp:(允许访问数据库并显示在asp页面上)
everyone:修改
(允许将来自父系的可继承性权限传播给对象)
10.如何隐藏iis版本?
一个黑客可以可以轻易的telnet到你的web端口,发送get命令来获取很多信息
iis存放IIS BANNER的所对应的dll文件如下:
WEB:C:\WINNT\SYSTEM32\INETSRV\W3SVC.DLL
FTP:C:\WINNT\SYSTEM32\INETSRV\FTPSVC2.DLL
SMTP:C:\WINNT\SYSTEM32\INETSRV\SMTPSVC.DLL
你可以用16进制编辑器去修改那些dll文件的关键字,比如iis的Microsoft-IIS/5.0
具体过程如下:
1.停掉iis iisreset /stop
2.删除%SYSTEMROOT%\system32\dllcache目录下的同名文件
3.修改
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1.如何让asp脚本以system权限运行?
修改你asp脚本所对应的虚拟目录,把"应用程序保护"修改为"低"....
2.如何防止asp木马?
基于FileSystemObject组件的asp木马
cacls %systemroot%\system32\scrrun.dll /e /d guests //禁止guests使用
regsvr32 scrrun.dll /u /s //删除
基于shell.application组件的asp木马
cacls %systemroot%\system32\shell32.dll /e /d guests //禁止guests使用
regsvr32 shell32.dll /u /s //删除
3.如何加密asp文件?
从微软免费下载到sce10chs.exe 直接运行即可完成安装过程。
安装完毕后,将生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。
运行screnc - l vbscript source.asp destination.asp
生成包含密文ASP脚本的新文件destination.asp
用记事本打开看凡是""之内的,不管是否注解,都变成不可阅读的密文了
但无法加密中文。
4.如何从IISLockdown中提取urlscan?
iislockd.exe /q /c /t:c:\urlscan
5.如何防止Content-Location标头暴露了web服务器的内部IP地址?
执行
cscript c:\inetpub\adminscripts\adsutil.vbs set w3svc/UseHostName True
最后需要重新启动iis
6.如何解决HTTP500内部错误?
iis http500内部错误大部分原因
主要是由于iwam账号的密码不同步造成的。
我们只要同步iwam_myserver账号在com+应用程序中的密码即可解决问题。
执行
cscript c:\inetpub\adminscripts\synciwam.vbs -v
7.如何增强iis防御SYN Flood的能力?
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
'启动syn攻击保护。缺省项值为0,表示不开启攻击保护,项值为1和2表示启动syn攻击保护,设成2之后
'安全级别更高,对何种状况下认为是攻击,则需要根据下面的TcpMaxHalfOpen和TcpMaxHalfOpenRetried值
'设定的条件来触发启动了。这里需要注意的是,NT4.0必须设为1,设为2后在某种特殊数据包下会导致系统重启。
"SynAttackProtect"=dword:00000002
'同时允许打开的半连接数量。所谓半连接,表示未完整建立的TCP会话,用netstat命令可以看到呈SYN_RCVD状态
'的就是。这里使用微软建议值,服务器设为100,高级服务器设为500。建议可以设稍微小一点。
"TcpMaxHalfOpen"=dword:00000064
'判断是否存在攻击的触发点。这里使用微软建议值,服务器为80,高级服务器为400。
"TcpMaxHalfOpenRetried"=dword:00000050
'设置等待SYN-ACK时间。缺省项值为3,缺省这一过程消耗时间45秒。项值为2,消耗时间为21秒。
'项值为1,消耗时间为9秒。最低可以设为0,表示不等待,消耗时间为3秒。这个值可以根据遭受攻击规模修改。
'微软站点安全推荐为2。
"TcpMaxConnectResponseRetransmissions"=dword:00000001
'设置TCP重传单个数据段的次数。缺省项值为5,缺省这一过程消耗时间240秒。微软站点安全推荐为3。
"TcpMaxDataRetransmissions"=dword:00000003
'设置syn攻击保护的临界点。当可用的backlog变为0时,此参数用于控制syn攻击保护的开启,微软站点安全推荐为5。
"TCPMaxPortsExhausted"=dword:00000005
'禁止IP源路由。缺省项值为1,表示不转发源路由包,项值设为0,表示全部转发,设置为2,表示丢弃所有接受的
'源路由包,微软站点安全推荐为2。
"DisableIPSourceRouting"=dword:0000002
'限制处于TIME_WAIT状态的最长时间。缺省为240秒,最低为30秒,最高为300秒。建议设为30秒。
"TcpTimedWaitDelay"=dword:0000001e
8.如何避免*mdb文件被下载?
安装ms发布的urlscan工具,可以从根本上解决这个问题。
同时它也是一个强大的安全工具,你可以从ms的网站上获取更为详细的信息。
9.如何让iis的最小ntfs权限运行?
依次做下面的工作:
a.选取整个硬盘:
system:完全控制
administrator:完全控制
(允许将来自父系的可继承性权限传播给对象)
b.\program files\common files:
everyone:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
c.\inetpub\wwwroot:
iusr_machine:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
e.\winnt\system32:
选择除inetsrv和centsrv以外的所有目录,
去除“允许将来自父系的可继承性权限传播给对象”选框,复制。
f.\winnt:
选择除了downloaded program files、help、iis temporary compressed files、
offline web pages、system32、tasks、temp、web以外的所有目录
去除“允许将来自父系的可继承性权限传播给对象”选框,复制。
g.\winnt:
everyone:读取及运行
列出文件目录
读取
(允许将来自父系的可继承性权限传播给对象)
h.\winnt\temp:(允许访问数据库并显示在asp页面上)
everyone:修改
(允许将来自父系的可继承性权限传播给对象)
10.如何隐藏iis版本?
一个黑客可以可以轻易的telnet到你的web端口,发送get命令来获取很多信息
iis存放IIS BANNER的所对应的dll文件如下:
WEB:C:\WINNT\SYSTEM32\INETSRV\W3SVC.DLL
FTP:C:\WINNT\SYSTEM32\INETSRV\FTPSVC2.DLL
SMTP:C:\WINNT\SYSTEM32\INETSRV\SMTPSVC.DLL
你可以用16进制编辑器去修改那些dll文件的关键字,比如iis的Microsoft-IIS/5.0
具体过程如下:
1.停掉iis iisreset /stop
2.删除%SYSTEMROOT%\system32\dllcache目录下的同名文件
3.修改
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>