如何:使用 IISLockdown.exe
[ 2005/09/19 22:59 | by ipaddr ]
目标
使用本模块可以实现:
• 使用 IISLockdown 确保运行 ASP.NET 的 IIS Web 服务器的安全。
返回页首
适用范围
本模块适用于下列产品和技术:
• Microsoft® Windows® 2000 Server
• Internet 信息服务
返回页首
如何使用本模块
为了充分理解本模块内容,请:
• 务必具有管理 Internet 信息服务的经验。
• IIS Web 服务器上必须安装 .NET Framework。
• 阅读相关的模块: 如何:使用 URLScan。该模块描述了如何使用与 IISLockdown 一起安装的 URLScan ISAPI 筛选器。
返回页首
摘要
通过运行 IISLockdown 工具,基本可以自动执行保护 Web 服务器安全的过程。它使您能够选择特定类型的服务器角色,然后使用禁用各种功能或确保功能安全的自定义模板来改进该服务器的安全性。
本模块描述了如何使用 IISLockdown 工具确保用来处理 ASP.NET 页的 Internet 信息服务 (IIS) 服务器的安全。
详情参考:
http://www.microsoft.com/china/technet/security/guidance/secmod113.mspx
另外,也可采用SecureIIS来提高IIS的安全性。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
使用本模块可以实现:
• 使用 IISLockdown 确保运行 ASP.NET 的 IIS Web 服务器的安全。
返回页首
适用范围
本模块适用于下列产品和技术:
• Microsoft® Windows® 2000 Server
• Internet 信息服务
返回页首
如何使用本模块
为了充分理解本模块内容,请:
• 务必具有管理 Internet 信息服务的经验。
• IIS Web 服务器上必须安装 .NET Framework。
• 阅读相关的模块: 如何:使用 URLScan。该模块描述了如何使用与 IISLockdown 一起安装的 URLScan ISAPI 筛选器。
返回页首
摘要
通过运行 IISLockdown 工具,基本可以自动执行保护 Web 服务器安全的过程。它使您能够选择特定类型的服务器角色,然后使用禁用各种功能或确保功能安全的自定义模板来改进该服务器的安全性。
本模块描述了如何使用 IISLockdown 工具确保用来处理 ASP.NET 页的 Internet 信息服务 (IIS) 服务器的安全。
详情参考:
http://www.microsoft.com/china/technet/security/guidance/secmod113.mspx
另外,也可采用SecureIIS来提高IIS的安全性。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Linux下Apache+Mysql+Resin的安装
[ 2005/09/19 22:58 | by ipaddr ]
Apache+Mysql+Resin的安装
1.安装Mysql
官方网址:http://www.mysql.org
下载Linux下的RPM包,直接安装(我习惯用4.0.X,4.1.X的,认证方式有点变化)
rpm -ivh *.rpm
自启动:
chkconfig mysql on
ipaddr(aspbiz)原创,转载请注明
2.安装Apache
官方网址:http://www.apache.org
下载Tgz的源代码包:
# tar -zxvf httpd-2.0.5X.tar.gz
# cd httpd-2.0.5X.tar.gz
# ./configure --enable-so
# make
# make install
自启动的话,可以将/usr/local/apache2/bin/apachectl start加到/etc/rc.d/rc.local
也可以自己写一个启动调本,调用apachectl,放在/etc/init.d/下面,用Chkconfig加载.
或者如下:
将apache 加入到 ntsysv中
比如说你的apache源码包在dir目录下,
cp dir/support/apachectl /etc/rc.d/init.d/httpd
编辑该httpd文件,加入如下类似两行
#chkconfig: 345 85 15
#description:some words you like!!
记得chmod a+x httpd
最后chkconfig --add httpd
chkconfig httpd on
3.安装JDK
到Java网站下载:
j2sdk-1_4_2_07-linux-i586.bin
#chmod a+x j2sdk-1_4_2_07-linux-i586.bin
#./j2sdk-1_4_2_07-linux-i586.bin
#mv j2sdk-1_4_2_07 /usr/local/jdk
#vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
如果是RHEL3的话,还需要删除原来的空Java环境
#rm -f /usr/bin/java
#rm -f /usr/bin/javac
#rm -f /etc/alternatives/java
#rm -f /etc/alternatives/javac
重新登录
#java -version
查看是否正确.
4.安装Resin
官方网址:http://www.caucho.com/
下载源代码包:resin-3.0.14-src.tar.gz
# tar zxvf resin-3.0.14-src.tar.gz
# cd resin-3.0.14
# chmod a+x configure
# ./configure --prefix=/usr/local/resin --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install
修改/usr/local/resin/bin/httpd.sh里的环境变量:JAVA_HOME,RESIN_HOME
/usr/local/resin/bin/httpd.sh start
单独启动resin,并通过http://ip:8080/查看是否成功运行.
(怪怪的,我这样安装,/usr/local/resin/bin/httpd.sh start能启动,但访问不了,不知问题出在哪,最后只好用编译好的版本.编译了的版本,直接解压到/usr/local/resin就可.)
将源代码包里resin-3.0.14/contrib下的init.resin 拷到 /etc/init.d 下 改名为 resin
修改里面的JAVA_HOME,RESIN_HOME,USER=apache变量.
chmod a+x resin
chkconfig --add resin
chkconfig resin on
5.整合Apache+Resin
Resin编译时用了--with-apxs,就会自动生成一个Apache模块.并且,在httpd.conf里,自动加上了LoadModule ResinConfigServer CauchoStatus这三个指令.
在httpd.conf里,再加上以下几句:
SetHandler caucho-status
在/usr/local/resin/conf/resin.conf里,修改根文档路径.
<server>
<host id="">
<document-directory>/usr/local/apache2/htdocs</document-directory>
...
</host>
</server>
重启Resin,Apache
6.测试
通过http://ip/caucho-status/查看Resin状态。
在/usr/local/apache2/htdocs里建一个测试文件jsp.jsp
<%@page language="java"%>
2+2=
通过http://ip/jsp.jsp访问看看结果是否正确。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1.安装Mysql
官方网址:http://www.mysql.org
下载Linux下的RPM包,直接安装(我习惯用4.0.X,4.1.X的,认证方式有点变化)
rpm -ivh *.rpm
自启动:
chkconfig mysql on
ipaddr(aspbiz)原创,转载请注明
2.安装Apache
官方网址:http://www.apache.org
下载Tgz的源代码包:
# tar -zxvf httpd-2.0.5X.tar.gz
# cd httpd-2.0.5X.tar.gz
# ./configure --enable-so
# make
# make install
自启动的话,可以将/usr/local/apache2/bin/apachectl start加到/etc/rc.d/rc.local
也可以自己写一个启动调本,调用apachectl,放在/etc/init.d/下面,用Chkconfig加载.
或者如下:
将apache 加入到 ntsysv中
比如说你的apache源码包在dir目录下,
cp dir/support/apachectl /etc/rc.d/init.d/httpd
编辑该httpd文件,加入如下类似两行
#chkconfig: 345 85 15
#description:some words you like!!
记得chmod a+x httpd
最后chkconfig --add httpd
chkconfig httpd on
3.安装JDK
到Java网站下载:
j2sdk-1_4_2_07-linux-i586.bin
#chmod a+x j2sdk-1_4_2_07-linux-i586.bin
#./j2sdk-1_4_2_07-linux-i586.bin
#mv j2sdk-1_4_2_07 /usr/local/jdk
#vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib
如果是RHEL3的话,还需要删除原来的空Java环境
#rm -f /usr/bin/java
#rm -f /usr/bin/javac
#rm -f /etc/alternatives/java
#rm -f /etc/alternatives/javac
重新登录
#java -version
查看是否正确.
4.安装Resin
官方网址:http://www.caucho.com/
下载源代码包:resin-3.0.14-src.tar.gz
# tar zxvf resin-3.0.14-src.tar.gz
# cd resin-3.0.14
# chmod a+x configure
# ./configure --prefix=/usr/local/resin --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install
修改/usr/local/resin/bin/httpd.sh里的环境变量:JAVA_HOME,RESIN_HOME
/usr/local/resin/bin/httpd.sh start
单独启动resin,并通过http://ip:8080/查看是否成功运行.
(怪怪的,我这样安装,/usr/local/resin/bin/httpd.sh start能启动,但访问不了,不知问题出在哪,最后只好用编译好的版本.编译了的版本,直接解压到/usr/local/resin就可.)
将源代码包里resin-3.0.14/contrib下的init.resin 拷到 /etc/init.d 下 改名为 resin
修改里面的JAVA_HOME,RESIN_HOME,USER=apache变量.
chmod a+x resin
chkconfig --add resin
chkconfig resin on
5.整合Apache+Resin
Resin编译时用了--with-apxs,就会自动生成一个Apache模块.并且,在httpd.conf里,自动加上了LoadModule ResinConfigServer CauchoStatus这三个指令.
在httpd.conf里,再加上以下几句:
SetHandler caucho-status
在/usr/local/resin/conf/resin.conf里,修改根文档路径.
<server>
<host id="">
<document-directory>/usr/local/apache2/htdocs</document-directory>
...
</host>
</server>
重启Resin,Apache
6.测试
通过http://ip/caucho-status/查看Resin状态。
在/usr/local/apache2/htdocs里建一个测试文件jsp.jsp
<%@page language="java"%>
2+2=
通过http://ip/jsp.jsp访问看看结果是否正确。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Linux下检测Apache进程数量并自动重启的脚本
[ 2005/09/06 22:59 | by ipaddr ]
在/etc/crontab里,定时执行检测脚本,检测系统的Apache,和Mysql进程是否超出标准,超标的话,自动重启,没有的话,记录进程数据.
Crontab的内容(每30分钟执行一次,并将结果记录在/var/log/chksys.log)
0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log
/usr/local/chksys.sh代码:
#!/bin/bash
#check apache,mysql thread and auto reboot system
#Powered by ipaddr(aspbiz)
#config
MaxApacheThread=300
MaxMysqlThread=250
NeedReboot=0
ApacheThread=`ps -A|grep http|wc -l`
MysqlThread=`ps -A|grep mysql|wc -l`
if [ $ApacheThread -gt $MaxApacheThread ]
then
NeedReboot=1
fi
if [ $MysqlThread -gt $MaxMysqlThread ]
then
NeedReboot=1
fi
if [ $NeedReboot -eq 1 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is busy,reboot"
reboot
else
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is normal"
fi
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Crontab的内容(每30分钟执行一次,并将结果记录在/var/log/chksys.log)
0,30 * * * * root /usr/local/chksys.sh >> /var/log/chksys.log
/usr/local/chksys.sh代码:
#!/bin/bash
#check apache,mysql thread and auto reboot system
#Powered by ipaddr(aspbiz)
#config
MaxApacheThread=300
MaxMysqlThread=250
NeedReboot=0
ApacheThread=`ps -A|grep http|wc -l`
MysqlThread=`ps -A|grep mysql|wc -l`
if [ $ApacheThread -gt $MaxApacheThread ]
then
NeedReboot=1
fi
if [ $MysqlThread -gt $MaxMysqlThread ]
then
NeedReboot=1
fi
if [ $NeedReboot -eq 1 ]
then
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is busy,reboot"
reboot
else
echo "-----------------------------"
echo $(date +"%y-%m-%d %H:%M:%S")
echo "-----------------------------"
echo "Apache:$ApacheThread;Mysql:$MysqlThread."
echo "System is normal"
fi
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
基于RRDTOOL+CACTI性能监视系统的架构
[ 2005/08/31 23:01 | by ipaddr ]
一、概述
Linux下用的最多的是MRTG的性能监视,MRTG配置比较简单,MRTG的确是非常好的东东,但我认为它毕竟已经是一套很旧的软件了,其作者在多年前就已经开发了RRDTool代替该软件,现在已经发展得很成熟。既然有更好的选择,为什么我们还要用MRTG呢?
简单的说,rrdtool就是一个强大的绘图的引擎,很多语言都可以调用rrdtool绘图。
整个系统的架构是这样的:
基于SNMP协议,被监控端是服务器,或一些网络设备,
网络管理工作站,采用Linux(或Freebsd)操作系统,并且安装Net-SNMP工具,使用RRDTOOL采集数据,存储数据,并用Cacti调用rrdtool显示出来。
CACTI采用PHP编写,基于B/S结构。
二、介绍
MRTG的优点:简单、易上手,基本安装完了之后只要更改一下配置文件即可。
缺点:
1、使用文本式的数据库,数据不能重复使用;
2、只能按日、周、月、年来查看数据;
3、只能画两个DS(一条线、一个块);
4、每取一次数据即需要绘图一次,浪费系统资源;
5、无管理功能;
rrdtool的优点:
1、使用rrd存储格式,数据能重复使用,比如我可以将一个rrd文件中的数据与另一个rrd文件中的数据相加。
2、可以定义任意时间段画图,即你可以画出一张半年以来的数据的图,也可以画出一张半小时以来的图。
3、能画任意个DS。
4、CDEF让你能任意摆弄数据。
缺点:
1、rrdtool的作用只是存储数据和画图,它没有mrtg中集成的数据采集功能;
2、在命令行的使用非常复杂,参数极多。
3、无管理功能。
简单的说,rrdtool就是一个强大的绘图的引擎。
由于其非常复杂的命令,对用户非常不友好,我一度想自己用php写一套系统。幸运的是,半年前我找到了cacti(www.cacti.net)。对该工具我只有一个字形容:“great!”。
cacti其实是一套php程序,它运用snmpget采集数据,使用rrdtool绘图。它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。更难能可贵的是,它提供了强大的数据管理和用户管理功能,一张图是属于一个host的,每一个host又可以挂载到一个树状的结构上。用户的管理上,作为一个开源软件,它居然做到为指定一个用户能查看的“树”、host、甚至每一张图,还可以与LDAP结合进行用户的验证!我不由得佩服作者考虑的周到!Cacti还提供自己增加模板的功能,让你添加自己的snmp_query和script!可以说,cacti将rrdtool的所有“缺点”都补足了!
三、监控管理工作站配置
采用Linux系统,CACTI要用到Net-SNMP,RRDTool,Aapche,PHP,Mysql,以下是安装过程:
1. 安装Apache+Mysql+PHP
安装过程比较简单,参考其它的资料,需要注意的是,PHP最好加上SNMP支持,编译的时候,加上—enable-snmp
注意。PHP不能运行在安全模式,否则,Cacti工作不正常。无法调用/usr/local/bin/下面的程序。
2. 安装rrdtool
官方网站:http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
下载:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.x/rrdtool-1.0.50.tar.gz
然后
./configure –prefix=/usr/local/rrdtool
make
make install
与mrtg相比,rrdtool自带了gd库,所以不用先安装gd库.(不过由于rrdtool自带的gd库不支持中文,所以rrdtool画出来的图也不能有中文,否则会出现乱码).
注意:rrdtool1.2的版本由于已经不再自带外部的lib库(如cgilib,zlib等),所以需要从http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs/下载这些库来安装。建议还是使用1.0的版本,比较方便。
安装完后,执行rrdtool看是否正确,
如果执行不成功,提示命令不存在,则需要将所有RRDTool的可执行文件,拷到/usr/local/bin
cp /usr/local/rrdtool/bin/* /usr/local/bin
3. 安装Net-SNMP
RH下面,安装了SNMP服务,但好象没有snmpwalk,snmpget这两个命令,所以需要安装NET-SNMP。NET-SNMP官方网站:http://www.net-snmp.org/
下载net-snmp-5.1.3.1.tar.gz
tar zxvf net-snmp-5.1.3.1.tar.gz
cd net-snmp-5.1.3.1
./configure
make
make install
运行snmpget,snmpwalk测试是否安装成功
RPM包的snmpwalk的名称是:net-snmp-utils.*.rpm,也可以从安装光盘上RPM安装。
4. 安装CACTI
官方网站:http://www.cacti.net/
a) 安装cacti源文件
下载cacti-0.8.6f.tar.gz
将这个压缩包解压到网站根目录
#cp cacti-0.8.6f.tar.gz /usr/local/apache2/htdocs
#cd /usr/local/apache2/htdocs
#tar xzvf cacti-0.8.6f.tar.gz
#mv cacti-0.8.6f cacti
#chown –R apache.apache cacti
#cd cacti
b) 配置Mysql数据库
为cacti配置用户和数据库:
#mysql –u root –p
mysql>create database cactidb;
mysql>grant all privileges on cactidb to cactiuser@localhost identified by ‘password’;
mysql>quit
配置Cacti连接数据库
#vi /usr/local/apache2/htdocs/cacti/include/config.php
$database_type = “mysql”;
$database_default = “cactidb”;
$database_hostname = “localhost”;
$database_username = “cacti”;
$database_password = “password”;
c) 定时crontab运行cacti的收集数据程序
#vi /etc/crontab
*/5 * * * * /usr/local/bin/php /usr/local/apche2/htdocs/cacti/poller.php > /dev/null 2>&1
d) 配置Cacti
在浏览器上输入:
http://IP/cacti
进入cacti的初始设置页面:
在这里我们要输入一些原始的信息:
NEXT -》
输入一些信息,如rrdtool、php、snmpwalk、snmpget的位置,使用ucd-snmp还是net-snmp等 -》
输入原始的用户和密码:admin/admin -》
更改admin用户的密码 -》
点击 Save
安装完成!!!
现在可以在浏览器中进入Cacti的世界了!
5. 测试
四、被监控端配置
大部分情况下,我们监控的是服务器,以RedHat Linux为例,看看如何打开SNMP服务。
只有开启了SNMP服务,监控端才可以收集数据。
打开默认的/etc/snmp/snmp.conf文件,更改如下配置:
1、查找以下字段:
代码:
# sec.name source community
com2sec notConfigUser default public
将"comunity"字段改为你要设置的密码.比如"public".
将“default”改为你想哪台机器可以看到你的snmp信息,如10.10.10.10。
2、查找以下字段:代码:
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact all none none
将"read"字段改为all.
代码:
#access notConfigGroup "" any noauth exact systemview none none
3、查找以下字段:代码:
## incl/excl subtree mask
#view all included .1 80
将该行前面的"#"去掉.
保存关闭.
4、运行/etc/init.d/snmpd start命令运行snmpd.
5、如果有防火墙,打开UDP 161端口。
最后运行netstat -ln查看161端口是否打开了.
使用ntsysv,让snmp服务,每次开机自动运行。
如果没有安装snmp服务,请在RH的安装光盘上找到net-snmp.rpm,再安装。
五、测试
打开本机的SNMP服务,
打开http://localhost/cacti
默认Cacti有LocalHost的四项参数,直接可以查看了。
六、排错
1. 首先检查一下rra/下面,有没有数据
2. snmpwalk -v 2c -c public ServerIP if 用来测试被控对象(serverIP)是否开启了SNMP服务
3. snmpwalk -v 2c ServerIP -c public .1.3.6.1.4.1.2021.10.1.3 查看被控端是否有CPU负载的数据返回
4. /usr/local/bin/php /usr/local/apche2/htdocs/cacti/poller.php 用来测试PHP是否可以采集到数据。如果上面的都正确,但这步出错,很有可能是PHP配置的问题,或开启了SuLinux。
5. 如果按第2步snmpwalk能采集到数据,但第3步无法采集,可能是PHP设置的问题,修改PHP.ini,很有可能是PHP权限问题。
七、rrdtool1.2的安装
1.2版的rrdtool画出的图,比1.0的要漂亮些.1.0用的是GD画图,1.2用的是libart和freetype画图.1.2的画图会慢一点.
1.2版的安装,可以见http://bbs.chinaunix.net/forum/viewtopic.php?t=552224
上面的安装比较麻烦,需要装不少库,其实,可以,可以直接RPM安装,RedHat的系统,直接从安装光盘上找到这几个库,安装就可.主要的包有:
libart_lgpl
libart_lgpl-devel
libpng
libpng-devel
zlib
zlib-devel
freetype
freetype-devel
找到上面这些包,直接rpm –ivh *.rpm
cgilib好象没有,而且,从rrdtool官方网站下载的cgilib无法安装.我们也不需要rrdcgi,所以,可以不考虑了.
安装完后,解压1.2版的rrdtool
./configure –prefix=/usr/local/rrdtool –disable-rrdcgi
make
make install
cp /usr/local/rrdtool/bin/* /usr/local/bin/
参考:
RRDTOOL教学 http://www.study-area.org/tips/rrdtool/rrdtool.html
使用cacti监测系统性能 http://bbs.chinaunix.net/forum/viewtopic.php?t=594019
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Linux下用的最多的是MRTG的性能监视,MRTG配置比较简单,MRTG的确是非常好的东东,但我认为它毕竟已经是一套很旧的软件了,其作者在多年前就已经开发了RRDTool代替该软件,现在已经发展得很成熟。既然有更好的选择,为什么我们还要用MRTG呢?
简单的说,rrdtool就是一个强大的绘图的引擎,很多语言都可以调用rrdtool绘图。
整个系统的架构是这样的:
基于SNMP协议,被监控端是服务器,或一些网络设备,
网络管理工作站,采用Linux(或Freebsd)操作系统,并且安装Net-SNMP工具,使用RRDTOOL采集数据,存储数据,并用Cacti调用rrdtool显示出来。
CACTI采用PHP编写,基于B/S结构。
二、介绍
MRTG的优点:简单、易上手,基本安装完了之后只要更改一下配置文件即可。
缺点:
1、使用文本式的数据库,数据不能重复使用;
2、只能按日、周、月、年来查看数据;
3、只能画两个DS(一条线、一个块);
4、每取一次数据即需要绘图一次,浪费系统资源;
5、无管理功能;
rrdtool的优点:
1、使用rrd存储格式,数据能重复使用,比如我可以将一个rrd文件中的数据与另一个rrd文件中的数据相加。
2、可以定义任意时间段画图,即你可以画出一张半年以来的数据的图,也可以画出一张半小时以来的图。
3、能画任意个DS。
4、CDEF让你能任意摆弄数据。
缺点:
1、rrdtool的作用只是存储数据和画图,它没有mrtg中集成的数据采集功能;
2、在命令行的使用非常复杂,参数极多。
3、无管理功能。
简单的说,rrdtool就是一个强大的绘图的引擎。
由于其非常复杂的命令,对用户非常不友好,我一度想自己用php写一套系统。幸运的是,半年前我找到了cacti(www.cacti.net)。对该工具我只有一个字形容:“great!”。
cacti其实是一套php程序,它运用snmpget采集数据,使用rrdtool绘图。它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。更难能可贵的是,它提供了强大的数据管理和用户管理功能,一张图是属于一个host的,每一个host又可以挂载到一个树状的结构上。用户的管理上,作为一个开源软件,它居然做到为指定一个用户能查看的“树”、host、甚至每一张图,还可以与LDAP结合进行用户的验证!我不由得佩服作者考虑的周到!Cacti还提供自己增加模板的功能,让你添加自己的snmp_query和script!可以说,cacti将rrdtool的所有“缺点”都补足了!
三、监控管理工作站配置
采用Linux系统,CACTI要用到Net-SNMP,RRDTool,Aapche,PHP,Mysql,以下是安装过程:
1. 安装Apache+Mysql+PHP
安装过程比较简单,参考其它的资料,需要注意的是,PHP最好加上SNMP支持,编译的时候,加上—enable-snmp
注意。PHP不能运行在安全模式,否则,Cacti工作不正常。无法调用/usr/local/bin/下面的程序。
2. 安装rrdtool
官方网站:http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
下载:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/rrdtool-1.0.x/rrdtool-1.0.50.tar.gz
然后
./configure –prefix=/usr/local/rrdtool
make
make install
与mrtg相比,rrdtool自带了gd库,所以不用先安装gd库.(不过由于rrdtool自带的gd库不支持中文,所以rrdtool画出来的图也不能有中文,否则会出现乱码).
注意:rrdtool1.2的版本由于已经不再自带外部的lib库(如cgilib,zlib等),所以需要从http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/libs/下载这些库来安装。建议还是使用1.0的版本,比较方便。
安装完后,执行rrdtool看是否正确,
如果执行不成功,提示命令不存在,则需要将所有RRDTool的可执行文件,拷到/usr/local/bin
cp /usr/local/rrdtool/bin/* /usr/local/bin
3. 安装Net-SNMP
RH下面,安装了SNMP服务,但好象没有snmpwalk,snmpget这两个命令,所以需要安装NET-SNMP。NET-SNMP官方网站:http://www.net-snmp.org/
下载net-snmp-5.1.3.1.tar.gz
tar zxvf net-snmp-5.1.3.1.tar.gz
cd net-snmp-5.1.3.1
./configure
make
make install
运行snmpget,snmpwalk测试是否安装成功
RPM包的snmpwalk的名称是:net-snmp-utils.*.rpm,也可以从安装光盘上RPM安装。
4. 安装CACTI
官方网站:http://www.cacti.net/
a) 安装cacti源文件
下载cacti-0.8.6f.tar.gz
将这个压缩包解压到网站根目录
#cp cacti-0.8.6f.tar.gz /usr/local/apache2/htdocs
#cd /usr/local/apache2/htdocs
#tar xzvf cacti-0.8.6f.tar.gz
#mv cacti-0.8.6f cacti
#chown –R apache.apache cacti
#cd cacti
b) 配置Mysql数据库
为cacti配置用户和数据库:
#mysql –u root –p
mysql>create database cactidb;
mysql>grant all privileges on cactidb to cactiuser@localhost identified by ‘password’;
mysql>quit
配置Cacti连接数据库
#vi /usr/local/apache2/htdocs/cacti/include/config.php
$database_type = “mysql”;
$database_default = “cactidb”;
$database_hostname = “localhost”;
$database_username = “cacti”;
$database_password = “password”;
c) 定时crontab运行cacti的收集数据程序
#vi /etc/crontab
*/5 * * * * /usr/local/bin/php /usr/local/apche2/htdocs/cacti/poller.php > /dev/null 2>&1
d) 配置Cacti
在浏览器上输入:
http://IP/cacti
进入cacti的初始设置页面:
在这里我们要输入一些原始的信息:
NEXT -》
输入一些信息,如rrdtool、php、snmpwalk、snmpget的位置,使用ucd-snmp还是net-snmp等 -》
输入原始的用户和密码:admin/admin -》
更改admin用户的密码 -》
点击 Save
安装完成!!!
现在可以在浏览器中进入Cacti的世界了!
5. 测试
四、被监控端配置
大部分情况下,我们监控的是服务器,以RedHat Linux为例,看看如何打开SNMP服务。
只有开启了SNMP服务,监控端才可以收集数据。
打开默认的/etc/snmp/snmp.conf文件,更改如下配置:
1、查找以下字段:
代码:
# sec.name source community
com2sec notConfigUser default public
将"comunity"字段改为你要设置的密码.比如"public".
将“default”改为你想哪台机器可以看到你的snmp信息,如10.10.10.10。
2、查找以下字段:代码:
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact all none none
将"read"字段改为all.
代码:
#access notConfigGroup "" any noauth exact systemview none none
3、查找以下字段:代码:
## incl/excl subtree mask
#view all included .1 80
将该行前面的"#"去掉.
保存关闭.
4、运行/etc/init.d/snmpd start命令运行snmpd.
5、如果有防火墙,打开UDP 161端口。
最后运行netstat -ln查看161端口是否打开了.
使用ntsysv,让snmp服务,每次开机自动运行。
如果没有安装snmp服务,请在RH的安装光盘上找到net-snmp.rpm,再安装。
五、测试
打开本机的SNMP服务,
打开http://localhost/cacti
默认Cacti有LocalHost的四项参数,直接可以查看了。
六、排错
1. 首先检查一下rra/下面,有没有数据
2. snmpwalk -v 2c -c public ServerIP if 用来测试被控对象(serverIP)是否开启了SNMP服务
3. snmpwalk -v 2c ServerIP -c public .1.3.6.1.4.1.2021.10.1.3 查看被控端是否有CPU负载的数据返回
4. /usr/local/bin/php /usr/local/apche2/htdocs/cacti/poller.php 用来测试PHP是否可以采集到数据。如果上面的都正确,但这步出错,很有可能是PHP配置的问题,或开启了SuLinux。
5. 如果按第2步snmpwalk能采集到数据,但第3步无法采集,可能是PHP设置的问题,修改PHP.ini,很有可能是PHP权限问题。
七、rrdtool1.2的安装
1.2版的rrdtool画出的图,比1.0的要漂亮些.1.0用的是GD画图,1.2用的是libart和freetype画图.1.2的画图会慢一点.
1.2版的安装,可以见http://bbs.chinaunix.net/forum/viewtopic.php?t=552224
上面的安装比较麻烦,需要装不少库,其实,可以,可以直接RPM安装,RedHat的系统,直接从安装光盘上找到这几个库,安装就可.主要的包有:
libart_lgpl
libart_lgpl-devel
libpng
libpng-devel
zlib
zlib-devel
freetype
freetype-devel
找到上面这些包,直接rpm –ivh *.rpm
cgilib好象没有,而且,从rrdtool官方网站下载的cgilib无法安装.我们也不需要rrdcgi,所以,可以不考虑了.
安装完后,解压1.2版的rrdtool
./configure –prefix=/usr/local/rrdtool –disable-rrdcgi
make
make install
cp /usr/local/rrdtool/bin/* /usr/local/bin/
参考:
RRDTOOL教学 http://www.study-area.org/tips/rrdtool/rrdtool.html
使用cacti监测系统性能 http://bbs.chinaunix.net/forum/viewtopic.php?t=594019
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Cacti的介绍,请参考上一遍《基于RRDTOOL+CACTI性能监视系统的架构》
1. 监控远程Linux主机
a. 按如上方法开启远程主机的SNMPD服务
b. 在Cacti里,进行如下操作,步骤的过程:添加Devices->Graphs->Tree
i. Console->Management->Devices->add
Description:主机描述,可随便写
Hostname:主机IP地址
Host Template:主机模板,可以选UCD/Net snmp Host,也可以选None
SNMP Community:主机中的Community字段值,默认是public
SNMP Version:一般选Version1或Version2
ii. Console->Management->Devices 选中刚才添加的主机,进入编辑界面
Associated Graph Templates:加入
1) ucd/net - CPU Usage
2) ucd/net - Load Average
3) ucd/net - Memory Usage
如果是本机,可以加入以下模板:
1) Linux - Memory Usage
2) Unix - Ping Latency
3) Unix - Load Average
4) Unix - Logged in Users
5) Unix - Processes
Associated Data Queries:加入
1) SNMP - Interface Statistics
iii. Console->Create ->New Graphs
在列表框中选中刚添加的主机,再选中所有Graph Templates和Data Query,再Create。
iiii. Console->Management->Graph Trees->Default Tree->Add
Parent Item:父节点,默认是根
Tree Item Type:节点类型,Host
Host:选择主机
Sorting Type:排序方式
[Create]
iiiii. Graphs->Default Tree->HostName量看监控结果
2. 监控本地机
默认Cacti自动安装了监控本地机的模板,也可以自己重建,可按上面的方式,在第一步的Host Template中,选Local Linux Host就可,或者直接用IP,不用本地方式。
3. 日志
日志设置:Console -> Settings -> General -> Poller Logging Level,一般选Low既可,可以选Medium查看SNMPWALK的输出,Debug调试。
日志查看:Console -> Utilities -> View Log File
日志清除:Console -> Utilities -> Clear Log File
4. 图表删除
直接在Devices里删除主机,将删除相关所有数据。
在Console -> Graph Management里的Graph Management可单独删除一个图表,在Data Sources可删除一个查询。
5. 树的管理
Console -> Graph Trees,可以很方便的管理多台主机,将多台主机组成一个树形结构,并且,可以为树指定用户权限.
6. 权限的管理
Console -> User Management,可以管理用户,并指定权限.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1. 监控远程Linux主机
a. 按如上方法开启远程主机的SNMPD服务
b. 在Cacti里,进行如下操作,步骤的过程:添加Devices->Graphs->Tree
i. Console->Management->Devices->add
Description:主机描述,可随便写
Hostname:主机IP地址
Host Template:主机模板,可以选UCD/Net snmp Host,也可以选None
SNMP Community:主机中的Community字段值,默认是public
SNMP Version:一般选Version1或Version2
ii. Console->Management->Devices 选中刚才添加的主机,进入编辑界面
Associated Graph Templates:加入
1) ucd/net - CPU Usage
2) ucd/net - Load Average
3) ucd/net - Memory Usage
如果是本机,可以加入以下模板:
1) Linux - Memory Usage
2) Unix - Ping Latency
3) Unix - Load Average
4) Unix - Logged in Users
5) Unix - Processes
Associated Data Queries:加入
1) SNMP - Interface Statistics
iii. Console->Create ->New Graphs
在列表框中选中刚添加的主机,再选中所有Graph Templates和Data Query,再Create。
iiii. Console->Management->Graph Trees->Default Tree->Add
Parent Item:父节点,默认是根
Tree Item Type:节点类型,Host
Host:选择主机
Sorting Type:排序方式
[Create]
iiiii. Graphs->Default Tree->HostName量看监控结果
2. 监控本地机
默认Cacti自动安装了监控本地机的模板,也可以自己重建,可按上面的方式,在第一步的Host Template中,选Local Linux Host就可,或者直接用IP,不用本地方式。
3. 日志
日志设置:Console -> Settings -> General -> Poller Logging Level,一般选Low既可,可以选Medium查看SNMPWALK的输出,Debug调试。
日志查看:Console -> Utilities -> View Log File
日志清除:Console -> Utilities -> Clear Log File
4. 图表删除
直接在Devices里删除主机,将删除相关所有数据。
在Console -> Graph Management里的Graph Management可单独删除一个图表,在Data Sources可删除一个查询。
5. 树的管理
Console -> Graph Trees,可以很方便的管理多台主机,将多台主机组成一个树形结构,并且,可以为树指定用户权限.
6. 权限的管理
Console -> User Management,可以管理用户,并指定权限.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Windows下的SNMP服务的开启
[ 2005/08/31 23:00 | by ipaddr ]
. 安装:
默认Windows是没有安装SNMP服务的.Windows2000下,安装SNMP服务如下操作:
控制面板->添加删除程序->添加删除Windows组件->管理监视工具->SNMP协议
再放入Windows2000安装盘.
b. 给SNMP服务打补丁
这里说的补丁可不是微软的那些让人头疼的补丁,而是一个转为Windows2000的SNMP服务开发的增强工具,叫SNMP4W2K-STD,可以在http://www.wtcs.org/snmp4tpc/snmp4w2k.htm下载。
下载完成后,安装。安装完毕,进入CMD,(注意:进入CMD之前要把CMD的纵缓冲区设置为大于500的数值,否则会因为纵缓冲区不足而引起错误)执行:
C:\Program Files\SNMP4W2K-STD\MIBINST.BAT
根据提示进行选择,不过通常只要一路y就可以完成,最后程序会自动重新启动Windows2000的SNMP服务。这样,就成功的给SNMP服务打上了补丁。
c. 安全配置
默认情况下,Windows2000的SNMP访问密码是public,并且,允许所有主机查询SNMP信息.通常我们只允许个别主机查询,可以如下操作:
在Windows2000的控制面板->管理工具->服务
找到SNMP服务,右击,选择属性->安全
在这里,可以设置团体名,以及只接收哪些主机的SNMP查询.
也可以使用IP安全策略来加强安全。
d. 其它
可以使用Snmputil工具来查询Windows2000的SNMP信息,另外,可以用MTRG,或Cacti+RRDTool来管理MIB.
>>>>>>>>>>>>>>>>>
默认Windows是没有安装SNMP服务的.Windows2000下,安装SNMP服务如下操作:
控制面板->添加删除程序->添加删除Windows组件->管理监视工具->SNMP协议
再放入Windows2000安装盘.
b. 给SNMP服务打补丁
这里说的补丁可不是微软的那些让人头疼的补丁,而是一个转为Windows2000的SNMP服务开发的增强工具,叫SNMP4W2K-STD,可以在http://www.wtcs.org/snmp4tpc/snmp4w2k.htm下载。
下载完成后,安装。安装完毕,进入CMD,(注意:进入CMD之前要把CMD的纵缓冲区设置为大于500的数值,否则会因为纵缓冲区不足而引起错误)执行:
C:\Program Files\SNMP4W2K-STD\MIBINST.BAT
根据提示进行选择,不过通常只要一路y就可以完成,最后程序会自动重新启动Windows2000的SNMP服务。这样,就成功的给SNMP服务打上了补丁。
c. 安全配置
默认情况下,Windows2000的SNMP访问密码是public,并且,允许所有主机查询SNMP信息.通常我们只允许个别主机查询,可以如下操作:
在Windows2000的控制面板->管理工具->服务
找到SNMP服务,右击,选择属性->安全
在这里,可以设置团体名,以及只接收哪些主机的SNMP查询.
也可以使用IP安全策略来加强安全。
d. 其它
可以使用Snmputil工具来查询Windows2000的SNMP信息,另外,可以用MTRG,或Cacti+RRDTool来管理MIB.
>>>>>>>>>>>>>>>>>
iptables在网络中的两个经典应用
[ 2005/08/19 23:02 | by ipaddr ]
a.端口转发:
在详述端口转发之前,先讲一下我日前遇到的一件事情。
本人是搞测试的,有一厂家拿了一个服务器软件叫我测试。基于win2k的,端口号为881,服务器直接连接外部网络,客户端通过服
器ip来访问,而他们没有基于linux的服务器软件,照他们意思就必须将服务器换成windows的。作为一个linux爱好者,我想大家
明白这种痛苦。我翻了一下资料,发现iptables的端口转发功能可以解决,折腾了一下午,终于完成任务。下面将我的方法讲一下:
思想:利用端口转发,当服务器接收到881端口请求以后,将其转到 10.10.2.200:881上,10.10.2.200再将数据返回给请求连接
。
Eth0:连接ADSL,即ppp0接口
Eth1:连接内部网络,ip为10.10.1.1
10.10.2.200为win2k服务器,其端口881提供网络服务。
iptbles脚本:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;将881请求
发至10.10.2.00:881端口
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source
10.10.1.1 ;返回a.b.b.d时数据源来自同一子网,就将其源地址更改为10.10.1.1,从eth0发出,并在连接跟踪表中查出a.b.c.d
从ppp0进来的,又由ppp0将此数据发出。
当然不要忘了加一条允许881端口访问的语句。
iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT
可不可把服务器放在局域内,用端口转发来实现呢?答案当然是肯定的,既然能把881端口转发,那么21,80这些个端口更不在话
,而且很多服务器软件都可以自定义端口,那就在得玩了,只要有合适的端口,即使给局域网每一个用户开一个ftp服务器也是可
的。你想要实现什么服务都可以,当然是基于端口转发的。
局域网内10.10.2.101是win2k,提供www服务,端口为800
通过服务器http://serverip:800 进行访问。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source
10.10.1.1
iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT
由于是基于端口转发实现的,所以服务器上只需装个iptables来转发数据就行了,一切服务由内部服务器完成,这样的话,我
linux服务器才真正的算是个防火墙。
b.IPTABLES防火墙使用经验一谈
最近架设了一台LINUX的小型服务器 因为需要把LINUX的机子作为软路由器来使用 所以把使用的一些经验谈一下。
iptables的功能十分的强大 例如IP转发和伪装 防御DoS,扫描和嗅探试的攻击等等 在这里就不阐述了
我的系统环境: redhat 7.2
adsl 2m
8139fast 网卡
1:linux如何所以软路由功能:
说到这里 大家可能会想 只要在/etc/rc.d/rc.local加上cat 1 > /proc/sys/net/ipv4/ip_forward就可以了 让linux具
ip_forward的功能 但你会发现 就算这样设置你局域网内的其他电脑还是不能共享上网 这是为什么 因为当你只有一个公网的ip
候 你就必须用到iptables的IP伪装功能 把IP的伪装成你公网的IP 那怎么实现呢 你可以这样
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 这样就可以把你所以出去的IP地址伪装成ppp0的IP地址(因为我
ADSL 如有不同可以修改)
2:我不想开放我的端口 但我要在我的电脑上启用http服务 并对外服务:
因为你不想开放除了80以外的端口 你可以这样
iptables –P INPUT –j DROP 我们用-P来拦截全部的通信
然后在来允许哪些端口可以被使用你可以这样写:
iptables –A INPUT –p tcp –dport 80 –j ACCEPT
你可以适当的按照这样的格式来添加自己想开放的端口 当然如果你觉得这样不是很好的管理你也可以新建一个iptables表 你可以
样做
iptables –N test (新建一个test表)
iptables –A test DROP
iptables –A test –p tcp –dport 80 –j ACCEPT(允许80端口被访问)
iptables –A INPUT –j test
iptables –A OUTPUT –j test
iptables –A FORWARD –j test(这3条的意思指让INPUT OUTPUT FORWARD都按照test的设置)
3我想在我内网的电脑上架设ftp服务 我该怎么做:
这就又要用到iptables 的又一个强大的功能端口映射了
你可以这样iptables -t nat -A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination
192.168.0.6:21
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp -m tcp --
dport 25-j SNAT --to-source 192.168.0.1
这写是XCHEN兄给我的指导 再这里先谢谢了 上面2句话的意思是把服务器的25端口映射到192.168.0.6这台电脑上
4:我不想让人家可以PING到我
这大概是做防火墙用到最多的一种了 你可以在iptables写这句话
iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP
如果你前面是新建了一个新的test表 那也可以这样写iptables -A test -p icmp --icmp-type echo-request -i ppp0 -j
DROP
这句话就是不允许人家PING我 因为ping用到的是icmp协议 因为icmp没有端口可言 所以也不需要指定端口了
好了 这就是iptables的几种比较基本的用法
这里在介绍几iptbales常用的一些命令
iptables –F 清空所有的iptables的规则设置
/sbin/iptables-save > iptables – save 把你的规则保存下来 因为你所有设置的规则再重新启动后都不会被保存 所以你必
来写一个脚本来让他开机运行 所以你就可以用这命令来保存你的规则 然后让他开机自动运行就可以了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
在详述端口转发之前,先讲一下我日前遇到的一件事情。
本人是搞测试的,有一厂家拿了一个服务器软件叫我测试。基于win2k的,端口号为881,服务器直接连接外部网络,客户端通过服
器ip来访问,而他们没有基于linux的服务器软件,照他们意思就必须将服务器换成windows的。作为一个linux爱好者,我想大家
明白这种痛苦。我翻了一下资料,发现iptables的端口转发功能可以解决,折腾了一下午,终于完成任务。下面将我的方法讲一下:
思想:利用端口转发,当服务器接收到881端口请求以后,将其转到 10.10.2.200:881上,10.10.2.200再将数据返回给请求连接
。
Eth0:连接ADSL,即ppp0接口
Eth1:连接内部网络,ip为10.10.1.1
10.10.2.200为win2k服务器,其端口881提供网络服务。
iptbles脚本:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 881 -j DNAT --to-destination 10.10.2.200:881 ;将881请求
发至10.10.2.00:881端口
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.200 -p tcp -m tcp --dport 881 -j SNAT --to-source
10.10.1.1 ;返回a.b.b.d时数据源来自同一子网,就将其源地址更改为10.10.1.1,从eth0发出,并在连接跟踪表中查出a.b.c.d
从ppp0进来的,又由ppp0将此数据发出。
当然不要忘了加一条允许881端口访问的语句。
iptables –A INPUT –p tcp –dport 881 –i ppp0 –j ACCEPT
可不可把服务器放在局域内,用端口转发来实现呢?答案当然是肯定的,既然能把881端口转发,那么21,80这些个端口更不在话
,而且很多服务器软件都可以自定义端口,那就在得玩了,只要有合适的端口,即使给局域网每一个用户开一个ftp服务器也是可
的。你想要实现什么服务都可以,当然是基于端口转发的。
局域网内10.10.2.101是win2k,提供www服务,端口为800
通过服务器http://serverip:800 进行访问。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 800 -j DNAT --to-destination 10.10.2.101:800
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -d 10.10.2.101 -p tcp -m tcp --dport 800 -j SNAT --to-source
10.10.1.1
iptables –A INPUT –p tcp –dport 800 –i ppp0 –j ACCEPT
由于是基于端口转发实现的,所以服务器上只需装个iptables来转发数据就行了,一切服务由内部服务器完成,这样的话,我
linux服务器才真正的算是个防火墙。
b.IPTABLES防火墙使用经验一谈
最近架设了一台LINUX的小型服务器 因为需要把LINUX的机子作为软路由器来使用 所以把使用的一些经验谈一下。
iptables的功能十分的强大 例如IP转发和伪装 防御DoS,扫描和嗅探试的攻击等等 在这里就不阐述了
我的系统环境: redhat 7.2
adsl 2m
8139fast 网卡
1:linux如何所以软路由功能:
说到这里 大家可能会想 只要在/etc/rc.d/rc.local加上cat 1 > /proc/sys/net/ipv4/ip_forward就可以了 让linux具
ip_forward的功能 但你会发现 就算这样设置你局域网内的其他电脑还是不能共享上网 这是为什么 因为当你只有一个公网的ip
候 你就必须用到iptables的IP伪装功能 把IP的伪装成你公网的IP 那怎么实现呢 你可以这样
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 这样就可以把你所以出去的IP地址伪装成ppp0的IP地址(因为我
ADSL 如有不同可以修改)
2:我不想开放我的端口 但我要在我的电脑上启用http服务 并对外服务:
因为你不想开放除了80以外的端口 你可以这样
iptables –P INPUT –j DROP 我们用-P来拦截全部的通信
然后在来允许哪些端口可以被使用你可以这样写:
iptables –A INPUT –p tcp –dport 80 –j ACCEPT
你可以适当的按照这样的格式来添加自己想开放的端口 当然如果你觉得这样不是很好的管理你也可以新建一个iptables表 你可以
样做
iptables –N test (新建一个test表)
iptables –A test DROP
iptables –A test –p tcp –dport 80 –j ACCEPT(允许80端口被访问)
iptables –A INPUT –j test
iptables –A OUTPUT –j test
iptables –A FORWARD –j test(这3条的意思指让INPUT OUTPUT FORWARD都按照test的设置)
3我想在我内网的电脑上架设ftp服务 我该怎么做:
这就又要用到iptables 的又一个强大的功能端口映射了
你可以这样iptables -t nat -A PREROUTING -p tcp -m tcp --dport 25 -j DNAT --to-destination
192.168.0.6:21
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.6 -p tcp -m tcp --
dport 25-j SNAT --to-source 192.168.0.1
这写是XCHEN兄给我的指导 再这里先谢谢了 上面2句话的意思是把服务器的25端口映射到192.168.0.6这台电脑上
4:我不想让人家可以PING到我
这大概是做防火墙用到最多的一种了 你可以在iptables写这句话
iptables -A INPUT -p icmp --icmp-type echo-request -i ppp0 -j DROP
如果你前面是新建了一个新的test表 那也可以这样写iptables -A test -p icmp --icmp-type echo-request -i ppp0 -j
DROP
这句话就是不允许人家PING我 因为ping用到的是icmp协议 因为icmp没有端口可言 所以也不需要指定端口了
好了 这就是iptables的几种比较基本的用法
这里在介绍几iptbales常用的一些命令
iptables –F 清空所有的iptables的规则设置
/sbin/iptables-save > iptables – save 把你的规则保存下来 因为你所有设置的规则再重新启动后都不会被保存 所以你必
来写一个脚本来让他开机运行 所以你就可以用这命令来保存你的规则 然后让他开机自动运行就可以了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LINUX查看监听某个端口的程序
[ 2005/08/19 21:55 | by ipaddr ]
lsof -i :53
53为端口号..
WIndows下面,有一个小工具fport可以查看.
----------------------------------
查看端口打开情况:
a.查看所有打开的端口
netstat -na
b.查看正在监听的端口
netstat -na|grep LISTEN
c.查看所有已建立连接的80端口
netstat -na|grep 80|grep EST
>>>>>>>>>>>>>>
53为端口号..
WIndows下面,有一个小工具fport可以查看.
----------------------------------
查看端口打开情况:
a.查看所有打开的端口
netstat -na
b.查看正在监听的端口
netstat -na|grep LISTEN
c.查看所有已建立连接的80端口
netstat -na|grep 80|grep EST
>>>>>>>>>>>>>>
netfilter/iptables模块编译及应用
[ 2005/08/08 23:04 | by ipaddr ]
一,准备原码.
1. 内核原码:为了减少复杂性,不编译所有内核和模块,建议找一个跟当前版本一样的内核原码,推荐安装时光盘的
a. [root@kindgeorge] uname -r (查看当前版本)
2.4.20-8
可以cd /usr/src 查看是否有这个目录2.4.20-8
b. 或者[root@kindgeorge]rpm -qa|grep kernel
kernel-source-2.4.20-8 如果有这个说明已安装了.
如果没有安装,可以在RH第二张光盘中拷贝过来或安装 rpm -ivh kernel-source-2.4.18-3.i386.rpm. 安装后会在/usr/src/出现linux-2.4连接和linux-2.4.20-8目录.
c.在http://www.kernel.org 或www.redhat.com下载一个和当前版本的内核原码.
2. 先获取最新的信息,当然要到http://www.netfilter.org 或 http://www.iptables.org (这两个网址是一样的).
网站左方download栏已经说明了最新版本的iptables-1.3.1
[root@kindgeorge src] cd /usr/src/
a. 获取最新iptables : wget http://www.netfilter.org/files/iptables-1.3.1.tar.bz2
解压:tar xjvf iptables-1.3.1.tar.bz2
b. 获取最新patch-o-matic-ng的地址:ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
[root@kindgeorge src] wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050331.tar.bz2
(ipaddr注:FTP好象上不去,不知是不是作者写错了,可以到这下载最新补丁:http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/ )
解压: tar xjvf patch-o-matic-ng-20050331.tar.bz2
二.安装说明
(一).处理内核源码.
1. [root@kindgeorge src]# cd /usr/src/linux-2.4
2. [root@kindgeorge linux-2.4]# vi Makefile,
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
EXTRAVERSION = -8custom
将“EXTRAVERSION = -8custom”改为“EXTRAVERSION = -8”
即:
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
EXTRAVERSION = -8
为何要修改呢?因为不同版本的内容是不可以使用的,当不修改时,则变成这个版本(2.4.20-8custom)了,不同时是这样出错的:
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: kernel-module version mismatch (版本错误)
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o was compiled for kernel version 2.4.20-8custom
while this kernel is version 2.4.20-8.
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: insmod /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o failed
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: insmod ipt_iprange failed
3. [root@kindgeorge linux-2.4]# make mrproper
4. [root@kindgeorge linux-2.4]# make oldconfig
'make oldconfig' - 采用以前的 .config 文件 (编译时十分有用)
技巧:在make menuconfig时,我们面对众多的选项常常不知道该如何选择,此时可以把安装时的配置文件copy到/usr/src/linux-2.4中:cp /boot/config-2.4.* /usr/src/linux-2.4/.config,再用make menuconfig编译,它会读取.config中原来的配置信息.
(二).给netfilter打补丁
解开tar xjvf patch-o-matic-ng-20050331.tar.bz2 包后,进入该目录,就会发现有很多目录,其实每个目录对应一个模块.
我们可以这样来选择,根据不同贮仓库submitted|pending|base|extra,例如:
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme base .
或:KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme extra
执行后,会测试是否已经应用和提示你是否应用该模块,但这样会遍历所有模块,有很多是用不着的,并且可能和系统版本有冲突,如果不管三七二十一全部选择的话,一般都会在编译和使用时出错.所以推荐用cat /模块目录名/info 和cat /模块目录名/help 看过后,认为适合自己,才选择.
我是针对在上面看过后,有目的的一个一个的应用的,这样做:
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme string
执行后,会测试是否已经应用和提示你是否应用该模块,按"y"应用.然后继续下一个
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme comment
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme connlimit
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme time
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme iprange
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme geoip
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme nth
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme ipp2p
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme quota
上面全部完成后,
cd /usr/src/linux-2.4
make menuconfig,确认[*] Prompt for development and/or incomplete code/drivers要选中
然后进入Networking options
再进入IP:Netfilter Configuration,会看到增加很多模块,每个新增的后面都会出现"NEW",把其想要的选中为模块"M"
保存、退出,至此,给netfilter打补丁工作完成
(三).编译netfilter模块
1.这里只需要编译netfilter,不需要编译整个内核和模块.这里我只需要ipv4的,ipv6我还没用到,所以不管了
cd /usr/src/linux-2.4
make dep
make modules SUBDIRS=net/ipv4/netfilter
2.建立一个新目录备份原来模块,以防万一:
mkdir /usr/src/netfilter
cp /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/*.o /usr/src/netfilter/
3.应用新的模块
cp -f /usr/src/linux-2.4/net/ipv4/netfilter/*.o /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/
4.更新你的modules.dep
depmod -a
当出现这个时,可以不用理会,因为ipchains, ipfwadm模块都没用,也可以把出错的删除.
depmod: *** Unresolved symbols in /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipchains_core.o
depmod: *** Unresolved symbols in /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipfwadm_core.o
(四).编译安装新的iptables
解压后有目录iptables-1.3.1
cd /usr/src/iptables-1.3.1
export KERNEL_DIR=/usr/src/linux-2.4
export IPTABLES_DIR=/usr/src/iptables-1.3.1
make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
三.安装完成,测试及应用
1.内容过滤
iptables -I FORWARD -m string --string "腾讯" -j DROP
iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP
iptables -I FORWARD -d 192.168.3.0/24 -m string --string "宽频影院" -j DROP
iptables -I FORWARD -s 192.168.3.0/24 -m string --string "色情" -j DROP
iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP
2.备注应用
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -j DROP -m comment --comment "the bad guy can not online"
iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"
3.并发连接应用
模块 connlimit 作用:连接限制
--connlimit-above n 限制为多少个
--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用
例如:只允许每个ip同时5个80端口转发,超过的丢弃:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
例如:只允许每组ip同时10个80端口转发:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
例如:为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
4.ip范围应用
iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
5.每隔N个匹配
iptables -t mangle -A PREROUTING -m nth --every 10 -j DROP
6.封杀BT类P2P软件
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
7.配额匹配
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -m quota --quota 500 -j DROP
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -m quota --quota 500 -j ACCEPT
以上均测试通过,只有geoip的geoipdb.bin没下载到,所以没测试
在此仅为抛个砖头,更多的应用,要根据自己的需要来组合各个规则和模块了.
本来此篇文章和<<netfilter/iptables模块功能中文介绍>>是写在一起的,由于篇幅太长,所以份成两篇. 如果有更新请见我的blog: http://kindgeorge.at.3322.org
相关资料:
kindgeorge的
http://blog.chinaunix.net/article.php?articleId=19778&blogId=4543
http://bbs.chinaunix.net/forum/viewtopic.php?t=525525 netfilter/iptables模块功能中文介绍
platinum的 http://bbs.chinaunix.net/forum/viewtopic.php?t=505370 如何给iptables添加新的模块v2.2(含视频教程)
hongfengyue的 http://www.chinaunix.net/jh/4/508312.html iptables 添加模块 (for kernel 2.6)
官方: http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO.html
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1. 内核原码:为了减少复杂性,不编译所有内核和模块,建议找一个跟当前版本一样的内核原码,推荐安装时光盘的
a. [root@kindgeorge] uname -r (查看当前版本)
2.4.20-8
可以cd /usr/src 查看是否有这个目录2.4.20-8
b. 或者[root@kindgeorge]rpm -qa|grep kernel
kernel-source-2.4.20-8 如果有这个说明已安装了.
如果没有安装,可以在RH第二张光盘中拷贝过来或安装 rpm -ivh kernel-source-2.4.18-3.i386.rpm. 安装后会在/usr/src/出现linux-2.4连接和linux-2.4.20-8目录.
c.在http://www.kernel.org 或www.redhat.com下载一个和当前版本的内核原码.
2. 先获取最新的信息,当然要到http://www.netfilter.org 或 http://www.iptables.org (这两个网址是一样的).
网站左方download栏已经说明了最新版本的iptables-1.3.1
[root@kindgeorge src] cd /usr/src/
a. 获取最新iptables : wget http://www.netfilter.org/files/iptables-1.3.1.tar.bz2
解压:tar xjvf iptables-1.3.1.tar.bz2
b. 获取最新patch-o-matic-ng的地址:ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/
[root@kindgeorge src] wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050331.tar.bz2
(ipaddr注:FTP好象上不去,不知是不是作者写错了,可以到这下载最新补丁:http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/ )
解压: tar xjvf patch-o-matic-ng-20050331.tar.bz2
二.安装说明
(一).处理内核源码.
1. [root@kindgeorge src]# cd /usr/src/linux-2.4
2. [root@kindgeorge linux-2.4]# vi Makefile,
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
EXTRAVERSION = -8custom
将“EXTRAVERSION = -8custom”改为“EXTRAVERSION = -8”
即:
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 20
EXTRAVERSION = -8
为何要修改呢?因为不同版本的内容是不可以使用的,当不修改时,则变成这个版本(2.4.20-8custom)了,不同时是这样出错的:
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: kernel-module version mismatch (版本错误)
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o was compiled for kernel version 2.4.20-8custom
while this kernel is version 2.4.20-8.
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: insmod /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o failed
/lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipt_iprange.o: insmod ipt_iprange failed
3. [root@kindgeorge linux-2.4]# make mrproper
4. [root@kindgeorge linux-2.4]# make oldconfig
'make oldconfig' - 采用以前的 .config 文件 (编译时十分有用)
技巧:在make menuconfig时,我们面对众多的选项常常不知道该如何选择,此时可以把安装时的配置文件copy到/usr/src/linux-2.4中:cp /boot/config-2.4.* /usr/src/linux-2.4/.config,再用make menuconfig编译,它会读取.config中原来的配置信息.
(二).给netfilter打补丁
解开tar xjvf patch-o-matic-ng-20050331.tar.bz2 包后,进入该目录,就会发现有很多目录,其实每个目录对应一个模块.
我们可以这样来选择,根据不同贮仓库submitted|pending|base|extra,例如:
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme base .
或:KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme extra
执行后,会测试是否已经应用和提示你是否应用该模块,但这样会遍历所有模块,有很多是用不着的,并且可能和系统版本有冲突,如果不管三七二十一全部选择的话,一般都会在编译和使用时出错.所以推荐用cat /模块目录名/info 和cat /模块目录名/help 看过后,认为适合自己,才选择.
我是针对在上面看过后,有目的的一个一个的应用的,这样做:
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme string
执行后,会测试是否已经应用和提示你是否应用该模块,按"y"应用.然后继续下一个
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme comment
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme connlimit
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme time
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme iprange
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme geoip
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme nth
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme ipp2p
KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme quota
上面全部完成后,
cd /usr/src/linux-2.4
make menuconfig,确认[*] Prompt for development and/or incomplete code/drivers要选中
然后进入Networking options
再进入IP:Netfilter Configuration,会看到增加很多模块,每个新增的后面都会出现"NEW",把其想要的选中为模块"M"
保存、退出,至此,给netfilter打补丁工作完成
(三).编译netfilter模块
1.这里只需要编译netfilter,不需要编译整个内核和模块.这里我只需要ipv4的,ipv6我还没用到,所以不管了
cd /usr/src/linux-2.4
make dep
make modules SUBDIRS=net/ipv4/netfilter
2.建立一个新目录备份原来模块,以防万一:
mkdir /usr/src/netfilter
cp /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/*.o /usr/src/netfilter/
3.应用新的模块
cp -f /usr/src/linux-2.4/net/ipv4/netfilter/*.o /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/
4.更新你的modules.dep
depmod -a
当出现这个时,可以不用理会,因为ipchains, ipfwadm模块都没用,也可以把出错的删除.
depmod: *** Unresolved symbols in /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipchains_core.o
depmod: *** Unresolved symbols in /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/ipfwadm_core.o
(四).编译安装新的iptables
解压后有目录iptables-1.3.1
cd /usr/src/iptables-1.3.1
export KERNEL_DIR=/usr/src/linux-2.4
export IPTABLES_DIR=/usr/src/iptables-1.3.1
make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
三.安装完成,测试及应用
1.内容过滤
iptables -I FORWARD -m string --string "腾讯" -j DROP
iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP
iptables -I FORWARD -d 192.168.3.0/24 -m string --string "宽频影院" -j DROP
iptables -I FORWARD -s 192.168.3.0/24 -m string --string "色情" -j DROP
iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP
2.备注应用
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -j DROP -m comment --comment "the bad guy can not online"
iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP -m comment --comment "denny go to qq.com"
3.并发连接应用
模块 connlimit 作用:连接限制
--connlimit-above n 限制为多少个
--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
这个主要可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用
例如:只允许每个ip同时5个80端口转发,超过的丢弃:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
例如:只允许每组ip同时10个80端口转发:
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP
例如:为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
4.ip范围应用
iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
5.每隔N个匹配
iptables -t mangle -A PREROUTING -m nth --every 10 -j DROP
6.封杀BT类P2P软件
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
7.配额匹配
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -m quota --quota 500 -j DROP
iptables -I FORWARD -s 192.168.3.159 -p tcp --dport 80 -m quota --quota 500 -j ACCEPT
以上均测试通过,只有geoip的geoipdb.bin没下载到,所以没测试
在此仅为抛个砖头,更多的应用,要根据自己的需要来组合各个规则和模块了.
本来此篇文章和<<netfilter/iptables模块功能中文介绍>>是写在一起的,由于篇幅太长,所以份成两篇. 如果有更新请见我的blog: http://kindgeorge.at.3322.org
相关资料:
kindgeorge的
http://blog.chinaunix.net/article.php?articleId=19778&blogId=4543
http://bbs.chinaunix.net/forum/viewtopic.php?t=525525 netfilter/iptables模块功能中文介绍
platinum的 http://bbs.chinaunix.net/forum/viewtopic.php?t=505370 如何给iptables添加新的模块v2.2(含视频教程)
hongfengyue的 http://www.chinaunix.net/jh/4/508312.html iptables 添加模块 (for kernel 2.6)
官方: http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO.html
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache+mod_ssl
[ 2005/08/08 23:03 | by ipaddr ]
参改了一位前人的文章《Apache2 + mod_ssl + php5 完全安装实录》,在此表示感谢
1.安装openssl
一般,RH的系统会自带了RPM包的openssl,可以直接
rpm -ivh openssl*.rpm
另外,需在源代码安装,可参考:
下载最新版本的openssl: http://www.openssl.org/source/
# tar zxvf openssl-0.9.7d.tar.gz
# cd openssl-0.9.7d
# ./config
# make
# make install
2.整合安装mod_ssl
下载apache2: http://httpd.apache.org/download.cgi
我需要mod_ssl的支持,和apache1不同的是,mod_ssl不在是单独的模块,而是放在apache发行包里面了,默认是不启用的,config的时候选择上就可以了。
我使用DSO方式编译安装apache,同时将全部模块都编译好,以方便后来可能的需要。只要编辑httpd.conf,在里面去掉不想要的模块(注释或者删除对应模块的LoadModule行),就可以定制自己的apache咯。
# tar zxvf httpd-2.0.50.tar.gz
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=shared --enable-mods-shared=all --with-ssl=/usr/local/ssl
# make
# make install
Apache有两种使用模块的方法,其一是永久性包含进核心;
如果操作系统支持动态共享对象(DSO),而且能为autoconf所检测,则模块还可以被动态编译。
DSO模块的存储是独立与核心的,可以被核心使用由mod_so模块提供的运行时刻配置指令包含或排除。
如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译任何动态模块,需要明确指定--enable-so。
(http://kajaa.bbs.us/ApacheManual/install.html)
第一次按照上述方法编译的apache,启动的时候会报错:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 251 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/modules/mod_ssl.so into server: /usr/local/apache/modules/mod_ssl.so: undefined symbol: X509_free
原因是什么呢?看 http://www.smartframeworks.com/qt-apache-ssl.html
因为按照下面的方法(参看:Apache2 + mod_ssl + php5 完全安装实录(2))安装的openssl默认是没有编译成动态链接库的,因为其文档说openssl的动态链接库还不成熟,可以使用 ./config shared 编译带动态链接库的openssl,但是还处于试验阶段。
解决这个问题的办法是:将mod_ssl静态的编译到apache里面。
请使用下面的方法重新来过:)
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=static --with-ssl=/usr/local/ssl --enable-mods-shared=all
# make
# make install
(ipaddr注:好象要先mkdir /usr/local/ssl,另外,--enable-mods-shared=all可以不要)
这次启动apache的时候又发现一个错误:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 108 of /usr/local/apache2/conf/ssl.conf:
SSLCertificateFile: file '/usr/local/apache2/conf/ssl.crt/server.crt' does not exist or is empty
这又是什么原因呢?因为我们没有配置ssl,需要生成ssl需要的证书。
以前使用apache1+mod_ssl的时候,make之后有一个这样的步骤
$ make certificate
可以用来生成ssl所用到的证书。
现在没有这个工具了,只能自己动手生成了,对证书不熟悉的人,有一个工具可以使用:http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz
# cd /usr/local/apache2/conf
# tar zxvf ssl.ca-0.1.tar.gz
# cd ssl.ca-0.1
# ./new-root-ca.sh (生成根证书)
No Root CA key round. Generating one
Generating RSA private key, 1024 bit long modulus
...........................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key: (输入一个密码)
Verifying - Enter pass phrase for ca.key: (再输入一次密码)
......
Self-sign the root CA... (签署根证书)
Enter pass phrase for ca.key: (输入刚刚设置的密码)
........
........ (下面开始签署)
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Certification Services Division]:ACSTAR
Common Name (eg, MD Root CA) []:WISCOM CA
Email Address []:acmail@wiscom.com.cn
这样就生成了ca.key和ca.crt两个文件,下面还要为我们的服务器生成一个证书:
# ./new-server-cert.sh server (这个证书的名字是server)
......
......
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Secure Web Server]:ACSTAR
Common Name (eg, www.domain.com) []:acmail.wiscom.com.cn
Email Address []:acmail@wiscom.com.cn
这样就生成了server.csr和server.key这两个文件。
还需要签署一下才能使用的:
# ./sign-server-cert.sh server
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key: (输入上面设置的根证书密码)
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'JiangSu'
localityName :PRINTABLE:'NanJing'
organizationName :PRINTABLE:'Wiscom System Co.,Ltd'
organizationalUnitName:PRINTABLE:'ACSTAR'
commonName :PRINTABLE:'acmail.wiscom.com.cn'
emailAddress :IA5STRING:'acmail@wiscom.com.cn'
Certificate is to be certified until Jul 16 12:55:34 2005 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
(如果这里出现错误,最好重新来过,删除ssl.ca-0.1这个目录,从解压缩处重新开始。)
下面要按照ssl.conf里面的设置,将证书放在适当的位置。
# chmod 400 server.key
# cd ..
# mkdir ssl.key
# mv ssl.ca-0.1/server.key ssl.key
# mkdir ssl.crt
# mv ssl.ca-0.1/server.crt ssl.crt
然后就可以启动啦!
# cd /usr/local/apache2
# ./bin/apachectl startssl
对于这个提示:
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
只需要编辑httpd.conf,找到ServerName xxxx这一行,去掉前面的注释即可。
//很大部分参考《Apache2 + mod_ssl + php5 完全安装实录》,只做了一些小说明,原文作者写得太详细了。
在此基础上可直接安装PHP,不再重复PHP的安装了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1.安装openssl
一般,RH的系统会自带了RPM包的openssl,可以直接
rpm -ivh openssl*.rpm
另外,需在源代码安装,可参考:
下载最新版本的openssl: http://www.openssl.org/source/
# tar zxvf openssl-0.9.7d.tar.gz
# cd openssl-0.9.7d
# ./config
# make
# make install
2.整合安装mod_ssl
下载apache2: http://httpd.apache.org/download.cgi
我需要mod_ssl的支持,和apache1不同的是,mod_ssl不在是单独的模块,而是放在apache发行包里面了,默认是不启用的,config的时候选择上就可以了。
我使用DSO方式编译安装apache,同时将全部模块都编译好,以方便后来可能的需要。只要编辑httpd.conf,在里面去掉不想要的模块(注释或者删除对应模块的LoadModule行),就可以定制自己的apache咯。
# tar zxvf httpd-2.0.50.tar.gz
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=shared --enable-mods-shared=all --with-ssl=/usr/local/ssl
# make
# make install
Apache有两种使用模块的方法,其一是永久性包含进核心;
如果操作系统支持动态共享对象(DSO),而且能为autoconf所检测,则模块还可以被动态编译。
DSO模块的存储是独立与核心的,可以被核心使用由mod_so模块提供的运行时刻配置指令包含或排除。
如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译任何动态模块,需要明确指定--enable-so。
(http://kajaa.bbs.us/ApacheManual/install.html)
第一次按照上述方法编译的apache,启动的时候会报错:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 251 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/modules/mod_ssl.so into server: /usr/local/apache/modules/mod_ssl.so: undefined symbol: X509_free
原因是什么呢?看 http://www.smartframeworks.com/qt-apache-ssl.html
因为按照下面的方法(参看:Apache2 + mod_ssl + php5 完全安装实录(2))安装的openssl默认是没有编译成动态链接库的,因为其文档说openssl的动态链接库还不成熟,可以使用 ./config shared 编译带动态链接库的openssl,但是还处于试验阶段。
解决这个问题的办法是:将mod_ssl静态的编译到apache里面。
请使用下面的方法重新来过:)
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=static --with-ssl=/usr/local/ssl --enable-mods-shared=all
# make
# make install
(ipaddr注:好象要先mkdir /usr/local/ssl,另外,--enable-mods-shared=all可以不要)
这次启动apache的时候又发现一个错误:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 108 of /usr/local/apache2/conf/ssl.conf:
SSLCertificateFile: file '/usr/local/apache2/conf/ssl.crt/server.crt' does not exist or is empty
这又是什么原因呢?因为我们没有配置ssl,需要生成ssl需要的证书。
以前使用apache1+mod_ssl的时候,make之后有一个这样的步骤
$ make certificate
可以用来生成ssl所用到的证书。
现在没有这个工具了,只能自己动手生成了,对证书不熟悉的人,有一个工具可以使用:http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz
# cd /usr/local/apache2/conf
# tar zxvf ssl.ca-0.1.tar.gz
# cd ssl.ca-0.1
# ./new-root-ca.sh (生成根证书)
No Root CA key round. Generating one
Generating RSA private key, 1024 bit long modulus
...........................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key: (输入一个密码)
Verifying - Enter pass phrase for ca.key: (再输入一次密码)
......
Self-sign the root CA... (签署根证书)
Enter pass phrase for ca.key: (输入刚刚设置的密码)
........
........ (下面开始签署)
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Certification Services Division]:ACSTAR
Common Name (eg, MD Root CA) []:WISCOM CA
Email Address []:acmail@wiscom.com.cn
这样就生成了ca.key和ca.crt两个文件,下面还要为我们的服务器生成一个证书:
# ./new-server-cert.sh server (这个证书的名字是server)
......
......
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Secure Web Server]:ACSTAR
Common Name (eg, www.domain.com) []:acmail.wiscom.com.cn
Email Address []:acmail@wiscom.com.cn
这样就生成了server.csr和server.key这两个文件。
还需要签署一下才能使用的:
# ./sign-server-cert.sh server
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key: (输入上面设置的根证书密码)
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'JiangSu'
localityName :PRINTABLE:'NanJing'
organizationName :PRINTABLE:'Wiscom System Co.,Ltd'
organizationalUnitName:PRINTABLE:'ACSTAR'
commonName :PRINTABLE:'acmail.wiscom.com.cn'
emailAddress :IA5STRING:'acmail@wiscom.com.cn'
Certificate is to be certified until Jul 16 12:55:34 2005 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
(如果这里出现错误,最好重新来过,删除ssl.ca-0.1这个目录,从解压缩处重新开始。)
下面要按照ssl.conf里面的设置,将证书放在适当的位置。
# chmod 400 server.key
# cd ..
# mkdir ssl.key
# mv ssl.ca-0.1/server.key ssl.key
# mkdir ssl.crt
# mv ssl.ca-0.1/server.crt ssl.crt
然后就可以启动啦!
# cd /usr/local/apache2
# ./bin/apachectl startssl
对于这个提示:
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
只需要编辑httpd.conf,找到ServerName xxxx这一行,去掉前面的注释即可。
//很大部分参考《Apache2 + mod_ssl + php5 完全安装实录》,只做了一些小说明,原文作者写得太详细了。
在此基础上可直接安装PHP,不再重复PHP的安装了。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>