Cacti 使用udp ping与iptables的问题

Wednesday, December 31, 2008

在centos5.2使用cacti监控网络,默认防火墙开启的情况下,需要设置本机80端口的开放,udp161端口的开发以及icmp的相关链接的开发,否则cacti会收不到数据。

cacti使用udp ping,就是发送一个udp到对方的高端口,然后对方自动产生并返回一个icmp的包,cacti如果收到这个包,就会再次发送snmp的请求过去,对方收到后返回对应的数据。

用tcpdump看到的icmp的信息的,
tcpdump host 192.168.0.11 and 192.168.0.10

14:18:34.423454 IP demo2.1028 > demo.33439: UDP, length 27
14:18:34.424331 IP demo > demo2: ICMP demo udp port 33439 unreachable, length 63
14:18:36.985281 IP demo2.1028 > demo.33439: UDP, length 27
14:18:36.986240 IP demo > demo2: ICMP demo udp port 33439 unreachable, length 63
14:18:39.423301 arp who-has demo tell demo2
14:18:39.423324 arp reply demo is-at 00:0c:29:7b:19:84 (oui Unknown)

解决方法
命令行添加:
iptables -A INPUT -p udp -m udp --dport 161 -j ACCEPT
iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dports 80 -j ACCEPT

或修改/etc/sysconfig/iptables
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p udp -m udp -m multiport --dports 631,161 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 22,80 -j ACCEPT

具体情况请对号入座。
使用配置文件修改后重启iptables或restore
shell > service iptables restart

shell > iptables-restore

reference:http://linux.chinaunix.net/bbs/viewthread.php?tid=910326

Posted by Michael.Ding at 4:03 PM 0 comments

Cacti的安装(for CentOS 5.2)

系统环境:CentOS 5.2 (Linux)最小化安装+ Development Tools (可以使用yum -y groupinstall Development\ Tools来安装)。

#Cacti Readme 中描述所需要的软件包
PHP 4.3.6+
MySQL 4.1.x or 5.x
RRDTool 1.0.49+ or 1.2.x
NET-SNMP 5.1.2+

#更详细的依赖关系
* httpd
* php
* php-mysql
* php-snmp
* mysql
* mysql-server
* net-snmp

1. Disable SELinux 关闭SELinux
vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled
设置完需要重新启动

之所以要关闭SELinux是因为国内对SELinux的应用还不普及,假如了解SELinux的使用,那么可以不关闭。正确设置相应的权限即可。

2. 下载 Cacti http://www.cacti.net
wget http://www.cacti.net/downloads/cacti-0.8.7b.tar.gz

3. 安装所需的包

yum -y install httpd
yum -y install php
yum -y install php-mysql
yum -y install php-snmp
yum -y install mysql-server
yum -y install perl
yum -y install net-snmp-utils

有可能需要安装(没有安装Development Tools的情况下):

yum -y install libpng
yum -y install freetype
yum -y install libart_lgpl

4. 将httpd和mysqld设置成自动启动

chkconfig httpd on
chkconfig mysqld on
5. 下载 rrdtool http://oss.oetiker.ch/rrdtool/download.var
wget http://dag.wieers.com/rpm/packages/rrdtool/perl-rrdtool-1.2.23-1.el5.rf.i386.rpm
wget http://dag.wieers.com/rpm/packages/rrdtool/rrdtool-1.2.23-1.el5.rf.i386.rpm
6. 安装 rrdtool
rpm -ivh perl-rrdtool-1.2.23-1.el5.rf.i386.rpm rrdtool-1.2.23-1.el5.rf.i386.rpm

7. 修改mysqld配置,将默认字符集设置成utf-8,这样可以方便cacti中显示中文菜单
vi /etc/my.cnf
[mysqld]
collation-server = utf8_general_ci
default-collation = utf8_general_ci
character-set-server = utf8
default-character-set = utf8
[mysql]
default-character-set = utf8

8. 建立cacti所需数据库,并设置相关权限,下面其实建了两个用户,适应不同mysql环境。
mysqladmin create cacti
mysql cacti <> grant all on cacti.* to cacti@127.0.0.1 identified by 'cacti';
mysql> grant all on cacti.* to cacti@localhost identified by 'cacti';
mysql> flush privileges;
mysql> update user set password=old_password('cactipasswd') where user='cacti';
mysql> flush privileges;

9. 修改cacti配置文件
vi include/config.php ( cacti目录下)
$database_type = “mysql”;
$database_default = “cacti”;
$database_hostname = “localhost”;
$database_username = “cacti”;
$database_password = “cacitpasswd”;
$database_port = “3306″;

10. 为cacti配置apache访问
vi /etc/httpd/conf.d/cacti.conf
Alias /cacti /srv/_webapp/cacti



Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all



11. 设置cacti数据保存目标权限
chown -R apache rra log ( cacti目录下)

12.设置cacti采集
vi /etc/cron.d/cacti
*/5 * * * * apache /usr/bin/php -q /srv/_webapp/cacti/poller.php > /srv/_webapp/cacti/log/poller.log 2>&1

13. 未提到过的配置文件,均使用系统默认。

reference:http://www.bsdmap.com/2008/12/07/how-to-install-cacti/
修改mysql部分的指令。

Posted by Michael.Ding at 2:41 PM 0 comments

一台服务器上安装不同版本的Mysql

Tuesday, December 30, 2008

  公司短信项目的一个服务器A新上一个WEB项目,可能会频繁重启服务器,所以提出把该服务器上的数据库迁移到另外一台短信服务器B上。

  A服务器Mysql数据库版本5.0
  B服务器Mysql数据库版本4.0

  4.0不支持GBK字符集,所以就有了在B服务器上安装2个Mysql数据库版本的想法,且不需要对原4.0数据进行升级。

以下是步骤和碰到的一些问题:
1)下载mysql-5.0.67-linux-i686-glibc23.tar.gz
shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql5
shell> cd mysql5
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
注意:可能 执行scripts/mysql_install_db --user=mysql会有问题,不要管他,继续就可以了。

2)建立my.cnf文件
shell>mv support-files/my-huge.cnf ./my.cnf

3)修改my.cnf文件
shell> vi my.cnf

[client]
#password = your_password
port = 3307
pid-file = /usr/local/mysql5/data/localhost.localdomain.pid
socket = /tmp/mysql5.sock

[mysqld]
port = 3307
pid-file = /usr/local/mysql5/data/localhost.localdomain.pid
socket = /tmp/mysql5.sock
basedir = /usr/local/mysql5
datadir = /usr/local/mysql5/data
default-character-set=gbk
innodb_data_home_dir = /usr/local/mysql5/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql5/data/
innodb_log_arch_dir = /usr/local/mysql5/data/

注意:
default-character-set=gbk根据自己的需要进行添加,不加的话localhost.localdomain.err会报Fatal error: Can't open privilege tables: File '/usr/local/mysql-5.0.45-linux-i686/share/mysql/charsets/?.conf' not found (Errcode: 2)错误;
innodb_data_home_dir = /usr/local/mysql5/data/
innodb_log_group_home_dir = /usr/local/mysql5/data/不修改的话localhost.localdomain.err会报
InnoDB: Resetting space id's in the doublewrite buffer
081230 10:28:17 InnoDB: Started; log sequence number 0 43665
InnoDB: You are upgrading to an InnoDB version which allows multiple
InnoDB: tablespaces. Wait that purge and insert buffer merge run to
InnoDB: completion...
InnoDB: Full purge and insert buffer merge completed.
InnoDB: You have now successfully upgraded to the multiple tablespaces
InnoDB: format. You should NOT DOWNGRADE to an earlier version of
InnoDB: InnoDB! But if you absolutely need to downgrade, see
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/multiple-tablespaces.html
InnoDB: for instructions.

4)启动Mysql
shell> /usr/local/mysql5/bin/mysqld_safe --defaults-file=/usr/local/mysql5/my.cnf --user=mysql &

5)进入Mysql
shell> /usr/local/mysql5/bin/mysql -uroot -p -S/tmp/mysql5.sock

6)管理Mysql
shell> /usr/local/mysql5/bin/mysqladmin -uroot -p -S/tmp/mysql5.sock shutdown

Posted by Michael.Ding at 10:54 AM 0 comments

[转载]大型网站运维探讨和心得

Thursday, December 25, 2008

看到一篇不错的心得体会;相信我们做技术的都会有或多或少的担忧自己的未来职业发展:

今天看到一篇心得体会,转过来和大家一起探讨一下:

一、什么是大型网站运维?

  首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的;然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范、知名度、服务器量级、pv量等考虑,其它因素不是重点;因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排名前10),如sina、baidu、QQ,51.com等等;其它小型网站可能没有真正意义上的运维工程师,这与网站规范不够和成本因素有关,更多的是集合网络、系统、开发工作于一身的“复合性人才”,就如有些公司把一些合同采购都纳入了运维职责范围,还有如IDC网络规划也纳入运维职责。所以,非常重要一定需要明白:运维对其它关联工种必须非常了解熟悉:网络、系统、系统开发、存储,安全,DB等;我在这里所讲的运维工程师就是指专职运维工程师。

我们再来说说一般产品的“出生”流程:

  1. 首先公司管理层给出指导思想,PM定位市场需求(或copy成熟应用)进行调研、分析、最终给出详细设计。
  2. 架构师根据产品设计的需求,如pv大小预估、服务器规模、应用架构等因素完成网络规划,架构设计等(基本上对网络变动不大,除非大项目)
  3. 开发工程师将设计code实现出来、测试工程师对应用进行测试。
  4. 好,到运维工程师出马了,首先明确一点不是说前三步就与运维工作无关了,恰恰相反,前三步与运维关系很大:应用的前期架构设计、软/硬件资源评估申请采购、应用设计性能隐患及评估、IDC、服务性能\安全调优、服务器系统级优化(与特定应用有关)等都需运维全程参与,并主导整个应用上线项目;运维工程师负责产品服务器上架准备工作,服务器系统安装、网络、IP、通用工具集安装。运维工程师还需要对上线的应用系统架构是否合理、是否具备可扩展性、及安全隐患等因素负责,并负责最后将产品(程序)、网络、系统三者进行拼接并最优化的组合在一起,最终完成产品上线提供用户使用,并周而复使:需求->开发(升级)->测试->上线(性能、安全问题等之前预估外的问题随之慢慢就全出来了)在这里提一点:网站开发模式与传统软件开发完全不一样,网站一天开发上线1~5个升级版本是家常便饭,用户体验为王嘛,如果某个线上问题像M$ 需要1年解决,用户早跑光了;应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作、服务监控、应用状态统计、日常服务状态巡检、突发故障处理、服务日常变更调整、集群管理、服务性能评估优化、数据库管理优化、随着应用PV增减进行应用架构的伸缩、安全、运维开发工作:a 、尽量将日常机械性手工工作通过工具实现(如服务监控、应用状态统计、服务上线等等),提高效率。b、解决现实中服务存在的问题,如高可靠性、可扩展性问题等。c、大规模集群管理工具的开发,如1万台机器如何在1分钟内完成密码修改、或运行指定任务?2000台服务器如何快速安装操作系统?各分布式IDC、存储集群中数PT级的数据如何快速的存储、共享、分析?等一系列挑战都需运维工程师的努力。
  在此说明一下其它配合工种情况,在整个项目中,前端应用对于网络/系统工程师来说是黑匣子,同时开发工程师职责只是负责完成应用的功能性开发,并对应用本身性能、安全性等应用本身负责,它不负责或关心网络/系统架构方面事宜,当然软/硬件采购人员等事业部其它同事也不会关心这些问题,各司其职,但项目的核心是运维工程师~!所有其它部门的桥梁。

  上面说了很多,我想大家应该对运维有一些概念了,在此打个比方吧,如果我们是一辆高速行驶在高速公路上的汽车,那运维工程师就是司机兼维修工,这个司机不简单,有时需要在高速行驶过程中换轮胎、并根据道路情况换档位、当汽车速度越来越快,汽车本身不能满足高速度时对汽车性能调优或零件升级、高速行进中解决汽车故障及性能问题、时刻关注前方安全问题,并先知先觉的采取规避手段。这就是运维工作~!

  最后说一下运维工程师的职责:”确保线上稳定“,看似简单,但实属不容易,运维工程师必须在诸多不利因素中进行权衡:新产品模式对现有架构及技术的冲击、产品高频度的升级带来的线上BUG隐患、运维自动化管理承度不高导致的人为失误、IT行业追求的高效率导致流程执行上的缺失、用户增涨带来的性能及架构上的压力、IT行业宽松的技术管理文化、创新风险、互联网安全性问题等因素,都会是网站稳定的大敌,运维工程师必须把控好这最后一关,需具体高度的责任感、原则性及协调能力,如果能做到各因素的最佳平衡,那就是一名优秀的运维工程师了。
另外在此聊点题外话,我在这里看到有很多人要sina、QQ、baidu,51.com等聊自已的运维方面的经验,其实这对于它们有点免为其难:

  1. 各公司自已网络架构、规模、或多或少还算是公司的核心秘密,要保密,另外,对于大家所熟知的通用软件、架构,由于很多公司会根据自已实际业务需要,同时因为原版性能、安全性、已知bug、功能等原因,进行过二次开发(如apache,php,mysql),操作系统内核也会根据不同业务类型进行定制的,如某些应用属于运算型、某些是高IO型、或大存储大内存型。根据这些特点进行内核优化定制,如sina就在memcache上进行过二次开发,搞出了一个MemcacheDB,具体做得如何我们不谈,但开源了,是值得称赞的,国内公司对于开源基本上是索取,没有贡献;另外,服务器也不是大家所熟知的型号,根据业务特点,大部份都是找DELL/HP/ibm进行过定制;另外,在分布式储存方面都有自已解决方案,要不就是使用现成开源hadoop等解决方案,或自已开发。但90%都是借鉴google GFS的思想:分布式存储、计算、大表。
  2. 各公司业务方向不一样,会导致运维模式或方法都不一样,如51.com和baidu运维肯定区别很大,因为他们业务模式决定了其架构、服务器量级、 IDC分布、网络结构、通用技术都会不一样,主打新闻门户的sina与主打sns的51.com运维模式差异就非常大,甚至职责都不大一样;但有一点,通用技术及大致架构上都大同小异,大家不要太神化,更多的公司只是玩垒积木的游戏罢了,没什么技术含量。
  3. 如上面所讲,目前大型网站运维还处于幼年时期理念和经验都比较零散,没有成熟的知识体系,可能具体什么是运维,大家都要先思索一番,或压根没想过,真正讨论也只是运维工作的冰山一角,局限于具体技术细节,或某某著名网站大的框架,真正运维体系化东西没有,这也许是目前网上运维相关资料比较少的原故吧。或者也是国内运维人员比较难招,比较牛的运维工程师比较少见的原因之一吧。

二、运维工作师需要什么样的技能及素质

  做为一名运维工程师需要什么样的技能及素质呢,首先说说技能吧,如大家上面所看到,运维是一个集多IT工种技能与一身的岗位,对系统->网络 ->存储->协议->需求->开发->测试->安全等各环节都需要了解一些,但对于某些环节需熟悉甚至精通,如系统 (基本操作系统的熟悉使用,*nix,windows..)、协议、系统开发(日常很重要的工作是自动运维化相关开发、大规模集群工具开发、管理)、通用应用(如lvs、ha、web server、db、中间件、存储等)、网络,IDC拓朴架构;

技能方面总结以下几点:

  1. 开发能力,这点非常重要,因为运维工具都需要自已开发,开发语言:c/c++(必备其中之一)、perl、python、php(其中之一)、shell(awk,sed,expect….等),需要有过实际开发经验,否则工作会非常痛苦。
  2. 通用应用方面需要了解:操作系统(目前国内主要是linux、bsd)、webserver相关 (nginx,apahe,php,lighttpd,java。。。)、数据库(mysql,oralce)、其它杂七八拉的东东。。。系统优化,高可靠性。。。这些只是加分项,不需必备,可以边工作边慢慢学,这些东西都不难。当然在运维中,有些是有分工偏重点不一样。
  3. 系统、网络、安全,存储,CDN,DB等需要相当了解,知道其相关原理。
个人素质方面:
  1. 沟通能力、团队协作:运维工作跨部门、跨工种工作很多,需善于沟通、并且团队协作能力要强;这应该是现代企业的基本素质要求了,不多说。
  2. 工作中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;心细,运维工程师是网站admin,最高线上权限者,一不小心就会遗憾终生或打入十八层地狱。
  3. 主动性、执行力、精力旺盛、抗压能力强:由于IT行业的特性,变化快;往往计划赶不上变化,运维工作就更突出了,比如国内各大公司服务器往往是全国各地,哪里便宜性价比高,就那往搬,进行大规模服务迁移(牵扯的服务器成百上千台),这是一个非常头痛的问题;往往时间非常紧迫,如限1周内完成,这种情况下,运维工程师的主动性及执行力就有很高的要求了:计划、方案、服务无缝迁移、机器搬迁上架、环境准备、安全评估、性能评估、基建、各关联部门扯皮,7X24小紧急事故响应等。
  4. 其它就是一些基本素质了:头脑要灵光、逻辑思维能力强、为人谦虚稳重、亲和力、乐于助人、有大局观。
  5. 最后一点,做网站运维需要有探索创新精神,通过创新型思维解决现实中的问题,因为这是一个处于幼年的职业(国外也一样,但比国内起步早点),没有成熟体系或方法论可以借鉴,只能靠大家自已摸索努力。

三、怎样才算是一个合格的运维工程师

  1. 保证服务达到要求的线上标准,如99.9%;保证线上稳定,这是运维工程师的基本责职所在。
  2. 不断的提升应用的可靠性与健壮性、性能优化、安全提升;这方面非常考验主动性、和创新思维。
  3. 网站各层面监控、统计的覆盖度,软件、硬件、运行状态,能监控的都需要监控统计,避免监控死角、并能实时了解应用的运转情况。
  4. 通过创新思维解决运维效率问题;目前各公司大部份运维主要工作还是依赖人工操作干预,需要尽可能的解放双手。
  5. 运维知识的积累与沉淀、文档的完备性,运维是一个经验性非常强的岗位,好的经验与陷阱都需积累下来,避免重复性范错。
  6. 计划性和执行力;工作有计划,计划后想法设法达到目标,不找借口。
  7. 自动化运维;能对日常机械化工作进行提炼、设计并开发成工具、系统,能让系统自动完成的尽量依靠系统;让大家更多的时间用于思考、创新思维、做自已喜欢的事情。
  以上只是技术上的一些层面,当然个人意识也是很重要的。

四、运维职业的迷惘、现状与发展前景

  运维岗位不像其它岗位,如研发工程师、测试工程师等,有非常明确的职责定位及职业规划,比较有职业认同感与成就感;而运维工作可能给人的感觉是哪方面都了解一些,但又都比上专职工程师更精通、感觉平时被关注度比较低(除非线上出现故障),慢慢的大家就会迷惘,对职业发展产生困惑,为什么会有这种现象呢?除了职业本身特点外,主要还是因为对运维了解不深入、做得不深入导致;其实这个问题其它岗位也会出现,但我发现运维更典型,更容易出现这个问题;

  针对这个问题我谈一下网站运维的现状及发展前景(也在思考中,可能不太深入全面,也请大家斧正补充)

运维现状:
  1. 1、处于刚起步的初级阶段,各大公司有此专职,但重视或重要承度不高,可替代性强;小公司更多是由其它岗位来兼顾做这一块工作,没有专职,也不可能做得深入
  2. 技术层次比较低;主要处于技术探索、积累阶段,没有型成体系化的理念、技术。
  3. 体力劳动偏大;这个问题主要与第二点有关系,很多事情还是依靠人力进行,没有完成好的提练,对于大规模集群没有成熟的自动化管理方法,在此说明一下,大规模集群与运维工作是息息相关的如果只是百十来台机器,那就没有运维太大的生存空间了。
  4. 优秀运维人才的极度缺乏;目前各大公司基本上都靠自已培养,这个现状导致行业内运维人才的流动性非常低,非常多好的技术都局限在各大公司内部,如 google 50万台机器科学的管理,或者国内互联公司top 10 的一些运维经验,这些经验是非常有价值的东西并决定了一个公司的核心竞争力;这些问题进而导致业内先进运维技术的流通、贯通、与借签,并最终将限制了运维发展。
  5. 很多优秀的运维经验都掌握在大公司手中;这不在于公司的技术实力,而在于大公司的技术规模、海量PV、硬件规模足够大,如baidu可怕的流量、 51.com海量数据~~~~这些因素决定了他们遇到的问题都是其它中/小公司还没有遇到的,或即将遇到。但大公司可能已有很好的解决方案或系统。
发展前景:
  1. 从行业角度来看,随着中国互联网的高速发展(目前中国网民已跃升为全球第一)、网站规模越来越来大、架构越来越复杂;对专职网站运维工程师、网站架构师的要求会越来越急迫,特别是对有经验的优秀运维人才需求量大,而且是越老越值钱;目前国内基本上都是选择毕业生培养(限于大公司),培养成本高,而且没有经验人才加入会导致公司技术更新缓慢、影响公司的技术发展;当然,毕业生也有好处:白纸一张,可塑性强,比较认同并容易融入企业文化。
  2. 从个人角度,运维工程师技术含量及要求会越来越高,同时也是对公司应用、架构最了解最熟悉的人、越来越得到重视。
  3. 网站运维将成为一个融合多学科(网络、系统、开发、安全、应用架构、存储等)的综合性技术岗位,给大家提供一个很好的个人能力与技术广度的发展空间。
  4. 运维工作的相关经验将会变得非常重要,而且也将成为个人的核心竞争力,具备很好的各层面问题的解决能力及方案提供、全局思考能力等。
  5. 特长发控和兴趣的培养;由于运维岗位所接触的知识面非常广阔,更容易培养或发挥出个人某些方面的特长或爱好,如内核、网络、开发、数据库等方面,可以做得非常深入精通、成为这方面的专家。
  6. 如果真要以后不想做运维了,转到其它岗位也比较容易,不会有太大的局限性。当然了,你得真正用心去做。
  7. 技术发展方向、网站/系统架构师。

五、运维关键技术点解剖

1、 大规模集群管理问题

  首先我们先要明确集群的概念,集群不是泛指各功能服务器的总合,而是指为了达到某一目的或功能的服务器、硬盘资源的整合(机器数大于两台),对于应用来说它就是一个整体,目前常规集群可分为:高可用性集群(HA),负载均衡集群(如lvs),分布式储、计算存储集群(DFS,如google gfs ,yahoo hadoop),特定应用集群(某一特定功能服务器组合、如db、cache层等),目前互联网行业主要基于这四种类型;对于前两种类似,如果业务简单、应用上post操作比较少,可以简单的采用四层交换机解决(如f5),达到服务高可用/负责均衡的作用,对于资源紧张的公司也有一些开源解决办法如 lvs+ha,非常灵活;对于后两种,那就考验公司技术实力及应用特点了,第三种DFS主要应用于海量数据应用上,如邮件、搜索等应用,特别是搜索要求就更高了,除了简单海量存储,还包括数据挖掘、用户行为分析;如google、yahoo就能保存分析近一年的用户记录数据,而baidu应该少于30天、 soguo就更少了。。。这些对于搜索准备性、及用户体验是至关重要的。

  接下来,我们再谈谈如何科学的管理集群,有以下关键几点:

I、监控

  主要包括故障监控和性能、流量、负载等状态监控,这些监控关系到集群的健康运行,及潜在问题的及时发现与干预;
  • 服务故障、状态监控:主要是对服务器自身、上层应用、关联服务数据交互监控;例如针对前端web server,我们就可以有很多种类型的监控,包括应用端口状态监控,便于及时发现服务器或应用本身是否crash、通过icmp包探测服务器健康状态,更上层可能还包括应用各频道业务的监控,常用方法是采用面业特征码进行判断,或对重点页面进行签名,以网站被黑篡改(报警、并自动恢复被篡改数据)等等,这些只是一部份,还有N多监控方式,依应用特点而定,还有一些问题需解决,如集群过大,如何高性能的进行监控也是一个现实问题。
  • 其它就是集群状态类的监控或统计,为我们合理管理调优集群提供数据参考、包括服务瓶颈、性能问题、异常流量、攻击等问题。
II、故障管理
  • 硬件故障问题;对于成百上千或上万机器的N多集群,服务器死机、硬件故障概率是非常大的,几乎每时每刻都有服务硬件问题,死机、硬盘损坏、电源、内存、交换机。针对这种情况,我们在设计网站架构时需要充分考虑到这些问题,并将其视为常态;更多的依靠应用的冗余机制来规避这种风险,但给系统工程师足够宽裕的处理时间。(如google不是号称同时死800台机器,服务不会受到任何影响吗);这就是考验运维工程师及网站架构师功能的地方了,好的设计能达到google所描述自恢复能力,如gfs,糟糕的设计那就是一台服务器的死机可能会造成大面积服务的连锁故障反映,直接对用户拒绝响应。
  • 应用故障问题;可能是某一bug被触发、或某一性能阀值被超越、攻击等情况不一而定,但重要的一点,是要有对这些问题的预防性措施,不能想当然,它不会出问题,如真出问题了,如何应对? 这需要运维工程师平时做足功夫,包括应急响应速度、故障处理的科学性、备用方案的有效等。
III、自动化

  自动化:简而言之,就是将我们日常手动进行的一些工作通过工具,系统自动来完成,解放我们的双手及枯燥的重复性劳动,例如:没有工具前,我们安装系统需要一台一台裸机安装,如2000台,可能需要10人/10天,搞烂N张光盘,人力成本更大。。。而现在通过自动化工具,只需几个简单命令就能搞定、还有如机器人类程序,自动完成以往每天人工干预的工作,使其自动完成、汇报结果,并具备一定的专家系统能力,能做一些简单的是/非判断、优化选择等。。。这些好处非常明显不再多说。。。应该说,自动化运维是运维工程师职业化的一个追求,利已利公,虽然这是一个异常艰巨的任务:不断变更的业务、不规范化的应用设计、开发模式、网络架构变更、IDC变更、规范变动等因素,都可能会对现有自动化系统产生影响,所以需要模块化、接口化、变因参数化等因此,自动化相关工作,是运维工程师的核心重点工作之一,也是价值的体现。

大并发网站的设计

  网站架构设计中,非常重要的一个要素,就是确保架构的可扩展性、这是高并发网站的基石。往往,一个网站的大流量不是与生具来的,而是有一个积累过程~~最 后变成巨无霸,包括google、yahoo这种全球流量大户,而在这个成长过程中所积累的经验才是最值得我们学习的,包括思考方式、问题解决、改进过 程。没有最好的架构设计方案,只有更好。。。,因此在此不会给大家一个终极方案。。。,在此介绍的这些经验,更多的是让大家真正掌握架构设计方法、理念、 灵魂,并真正的能利用到实际中。为了让大家更易理解,我在此主题讨论中将会借用本版”jiang2798 “贴的"google架构、youtube架构"等经典案例和大家分析一下,再谈谈一些通用性原则及技巧。

高并发架构需满足的一些因素、要点:

I 负载均衡架构

  首先网站前端需要采用负载均衡群集解决用户高并发的响应,目前常用方法包括 a、squid反向代理,这也是各大网站常用的方法,包括sohu、sina...;b、DNS轮循;c、采四层硬件设备,包括google、baidu 使用这种方式。。。对于lvs,小频道或不重要应用可以尝试使用,对于大流量、实时性要求高的网站目前还不成熟。

II 高性能中间件选择、优化

  中间件选择、优化非常重要,当服务流量大于一定承度时,性能的稍微提升,对于整体硬件成本控制、服务的整体性能提升都是非常可观的。对于web server 目前常用的属apache,但apache 多进程(线程池)架构有一些缺点,进程频繁生成\注销系统开销大,特别当流量大时更是明显,对于应用逻辑简单的可以考虑lighttpd 采用单进程+epoll并发模式,效率高,但对多CPU支持有问题,但可采用启多服务解决这个问题;如果由于应用架构原因必须使用apache,可考虑 apache module 性能比普通CGI成倍提升。。。其它原则,包括各中间件各版本测试、包括性能、安全上的考良,找到平衡点,不要太关注某一点因素,导致整体架构上出现隐 患,另外一点非常重要,那就中间件的参数优化,这些方面大家可以google、baidu上找找,比较多,但有个原则那就是需要根据服务器实际资源情况进 行优化,如httpd最大进程数设多大合适呢?有些朋友,就随手来个2048,觉得这样肯定不会再出现httpd由于进程阀值过低导致拒绝服务,但这有个隐患,因为生成进程,是需要硬件资源的,当进程数达到一定承度,可能服务器内存会溢出,导致服务器crash,特别是内存消耗量大的应用。。。这样的案例很多,需谨记。

III 扩展性问题
扩展性对于高速发展期间的网站非常重要,大家可以经常在网上看到某某网站的发展励途,那简直就是一部进化史,过程曲折而痛苦~~。因此成熟的经验就非常重要了,扩展性可以从两个方面来看:网络系统上的扩展性及应用本身的扩展性,首先在网络上需层次分明,尽量扁平化,全网冗余不能存在故障点,尽量按业务类型进行划分网络结构(pv大小、优先级)防止互扰,重要的一点:网络设计中,简单就是美~~,在不影响扩展性的前提下,不要搞得太复杂;网络硬件资 源、机架位、IDC都需提前至少半年进行规划,这些规划的重要依据是公司业务发展的前景评估,这就体现公司的战略眼光了,包括是否需要外地IDC(依用户群体而定)。。。;另外,选一个好点的IDC是非常必要的,否则就得疲于IDC迁移了,北京地区好IDC还是不少的:皂君庙(有点老了。)、土城、联通、 酒仙桥、爱立信、互联世纪、奥运官方机房数字北京据说马上也能入驻了。。。当然了,有钱也能像google一样自已搞个IDC,国内谁有这个实力?
另一点就是应用本身的扩展性了,原则其实很简单,应用设计时应尽量确保应用的层次化、采用高性能的中间件、逻辑复杂及大数据量交互的功能尽量做成独立模块\后台、cache层、数据库分层(读/写操作分离),不要图前期简单直接将功能全部揉进前端CGI中,这很致命,随时都可能会遇到性能瓶颈、而且毫无扩展性。。。
当以上两点很好的解决后,现在唯一的问题就是每半年根据业务的PV增涨、新业务发展,预购服务器了。。。;当然了,对现有架构优化,性能提升才是根本解决之道,特别是现在全球经济不景气,大家都不好过,这就是运维工程师的责任了,优化再优化~~

IV 应用设计、开发中的注意点

  架构层设计好后,应用层设计就是我们重点关注对象了,这也是一个项目成功的关键,好的设计主要体现在:性能(高并发承载能力)、可扩展性、可维护、安全性 (数据完整性、应用稳定性、前端应用安全如SQL注入。。。)、模块冗余、负载均衡等等,技术点:线程池、epoll、TCP(长/短)连接的选择、功能模块的细化及后台化、模块冗余/负载均衡考虑(可扩展性)、高频数据cache缓存、数据分层、应用单故障点的解决(数据唯一性问题)等。。。有两点要注意:1、应用设计时要允分考虑服务器、硬件设备甚基于IDC的不可靠性;也就是说我们在应用设计时需要考虑到应用运行过程中,随时都可能会有1~2台服务器或更多服务器出现故障情况(网络故障、灾难、攻击、停电((整个IDC全挂))。。。),如google GFS就是一个典型,我们不能将应用的稳定性寄托于硬件的稳定上,特别是门户型公司大部份采用的都是X86普通机型,服务器crash是家常便饭、随时随刻(当总量到一定量级时),所以我们在做应用架构设计时需允分考虑这些问题发生时的对策,做到允分的冗余/负载均衡(这两点可统一),如多IDC间通过智能CDN的流控、单IDC应用模块多节点冗余/负载均衡等,即使某些应用由于特殊原因无法做到这点,也需允分考虑应急预案。。好的设计在这些突发情况下可以做到不用人工干预,当然难度也很大。。。记得前年李开复在北大演讲时说过:google一个IDC同时故障800台机器,不会影响到任何应用的正常响应 (有点怀疑,可能是他挑选的某类服务器,呵呵);2、大流量应用/模块中能不使用数据库就不要使用数据库,下一节会讨论这方面问题

  网站安全是一个系统性工作,影响安全的因素也很多,如DDOS(最常见的)、应用漏洞、系统层面漏洞、内部安全流程漏洞等(人为失误),可以从以下几方面着手考虑:
  1. 网络层,首先在网络设计时需考虑到安全因素;在主干出口处,对非业务端口进行屏蔽(如非80端口全部屏蔽),对于非常规数据包进行限速,如 icmp,udp等,但是需考虑主干设备性能,不能因为安全限制导致设备性能明显下降,需要做到平衡,否则又会出现一个新的隐患点;另一方面就是主干带宽 要足够富余,做到冗余互备(vrrp、hsrp),以抵抗DDOS的所带来的带宽消耗(对于大型网站DOS随时都存在,只是规模大小不一样),另外,现在 部份4~7l硬件具有一定的syn 代理功能,可以抵御一定规模的flood,但主要还得拼资源、带宽、硬件性能;另外,需做好主干数据镜像分析,对于一些有规律的攻击定位到特征、甚至是攻 击源,进行针对性的防御。对于公司重点业务可以在网络层进行物理隔离,增强关键性业务的健壮性,甚至是将业务冗余分布至不同IDC,做到跨地域容灾(如地 震)
  2. 系统层
     系统层主要是操作系统安全加固、系统安全BUG解决、对非业务端口进行屏蔽、非业务软件清除、跟踪系统工具软件最新安全动态,并做到及时更新。特别是直接 对外提供服务的服务器(处于外网),更需做好定期安全审查评估,由于一般公司服务器内网都是相通过,攻占一台外网机器可能会导致公司整个内网全暴露,很恐怖
  3. 应用层面
      应用方面安全就不多说了,主要是开发细节上需把好关,不留逻辑上的漏洞,并对上传接口严格控制、越界检查、SQL安全性考虑等,特别是对于用户具备上传接 口的应用(如mail、bbs、blog、云计算等应用),漏洞是很多的;系统应用,如中间件也需做好相应的安全配置。。。不多说了,大家上网能馊到一大 堆。需要多关注网上关于自身网站安全漏洞方面的信息(或定期搜索),因为往往应用上的漏洞,都是用户先发现的,用户是最好的测试人员,发现后需第一时间修 复,并对同类业务进行全面排查;对于特定重点页面也可以进行监控,并采用程序自动恢复主要页面(功能上如有问题,可显示业务升级提示),以免应用被攻破后 对公司形象造成影响
  4. 内网安全管理
      对于日常内网准入方面需有严格流程,统一入口,技术方面如vpn、rsa,securID(如sina就用的动态密钥)等,没有条件的也需定期更新入口密码
  5. 安全巡查
      偶尔由于人为失误会导致一些漏洞的出现,如由于工作需要临时变更了某些安全参数,但忘记开启。。。这个问题其实是最大的,往往出问题也多是人为失误,需要 定期对全网关键安全点进行巡查;而且这也是404审计的一个重点,想必在sohu、sina、网易等美国上市公司里做安全的兄弟应该很有感触吧

转自chinaunix

Install AMP under Vista.

Thursday, December 18, 2008

1: Install Apache server for windows.
2: Unzip PHP zip package.
Note: Add both PHP ext path and PHP path into windows Environments.Very important.
3: Install mysql server for windows.

Posted by Michael.Ding at 10:01 AM 0 comments

限制部分Postfix用户只能内部收发的例子(完整版) (已验证)

Friday, December 12, 2008

最近本来已经很太平的公司邮箱系统又开始有垃圾邮件了,而且还有羊毛文的。

经过几天的观察,大都是通过公司群发邮件列表发到每个用户邮箱的。

原因找到了,想到2个方案进行解决
1、修改公司群发邮件列表mail地址。
2、限定公司群发列表的收发权限。

最后还是采用了方案2,网上搜索了一下,并结合自己的内容,进行了测试。

以下是具体的实施步骤。

1)在main.cf里定义如下的smtpd_restriction_classes:
# restrictions
smtpd_restriction_classes=local_in_only local_out_only
local_in_only=check_sender_access hash:/usr/local/etc/postfix/local_domains,reject
local_out_only=check_recipient_access hash:/usr/local/etc/postfix/local_domains,reject

解释:
local_in_only=check_sender_access hash:/usr/local/etc/postfix/local_domains,reject
接收限制,规则外部发送者的域名hash表
local_out_only=check_recipient_access hash:/usr/local/etc/postfix/local_domains,reject
发送限制,规则外部接受者的域名hash表

注意要顶格写,否则会报错

2)将main.cf里的smtpd_recipient_restrctions定义为:
smtpd_recipient_restrictions =
check_recipient_access hash:/usr/local/etc/postfix/local_in_senders,
check_sender_access hash:/usr/local/etc/postfix/local_out_senders,

解释:
check_recipient_access hash:/usr/local/etc/postfix/local_in_senders,
接受限制,检查内部接受者是否在local_in_senders,接受限制表中
check_sender_access hash:/usr/local/etc/postfix/local_out_senders,
发送限制,检查内部接受者是否在local_iout_senders,发送限制表中

3)编辑/usr/local/etc/postfix/local_domains:
internal.foo.com OK
internal.bar.com OK

4)编辑/usr/local/etc/postfix/local_in_senders:
foo@extmail.org local_in_only
bar@extmail.org local_in_only

5)编辑/usr/local/etc/postfix/local_out_senders:
foo@extmail.org local_out_only
bar@extmail.org local_out_only

6)为3,4,5的文件建立hash
postmap hash:/usr/local/etc/postfix/local_domains
postmap hash:/usr/local/etc/postfix/local_in_senders
postmap hash:/usr/local/etc/postfix/local_out_senders

注意:最好用root生成上述hash

7)重启postfix
/usr/local/etc/rc.d/postfix restart

这样就定义了extmail.org域名里两个用户foo和bar,只允许和internal.foo.com和internel.bar.com 两个内部域的用户来往邮件,对于外部的邮件则没有收或发的能力。如果外部邮件企图给这2个用户发送,则遇到如下错误:


QUOTE:
554 5.7.1 : Recipient address rejected: Access denied

如果这2个内部用户要给外部用户发email,将遇到如下错误:


QUOTE:
554 5.7.1 : Sender address rejected: Access denied

目前这样的配置就可以比较完整的实现内部用户的功能需求了。其实这种配置的方法和之前的帖子道理一样,关键得分清楚什么阶段,调用什么restrictions即可。

参考:
1)http://blog.chinaunix.net/u1/54725/showart_437496.html
2)http://www.extmail.org/forum/viewthread.php?tid=524&extra=&page=1

Posted by Michael.Ding at 2:41 PM 0 comments

tomcat rewrite 实现

Wednesday, December 3, 2008

Check that users are using the correct domain name to get to your site. ie, users gong to http://example.com/blah will be redirected to http://www.example.com/blah


Domain Name Check
www.example.com
^/(.*)$
http://www.example.com/$1


if web server contains two hostnames, change the condition as following

example.com

done

reference:http://tuckey.org/urlrewrite/

Posted by Michael.Ding at 5:53 PM 0 comments

linux 和 window 上route命令使用

Thursday, October 9, 2008

linux:
route add -net 192.168.81.0 netmask 255.255.255.0 gw 172.168.100.2
window:
route add 192.168.81.0 mask 255.255.255.0 172.168.100.2 -p

Posted by Michael.Ding at 6:12 PM 0 comments

freebsd ports 使用http代理

ee /etc/make.conf
添加
FETCH_ENV?=HTTP_PROXY=http://user:password@proxyurl:proxyport

Posted by Michael.Ding at 5:46 PM 0 comments

iptables的ipp2p模块加载

Tuesday, October 7, 2008

reference:
http://wiki.centos.org/HowTos/I_need_the_Kernel_Source
http://sourceforge.net/project/showfiles.php?group_id=80085
http://blog.chinaunix.net/u/28814/showart.php?id=1220921
http://linux.chinaunix.net/bbs/thread-1032941-1-1.html
http://linux.chinaunix.net/bbs/viewthread.php?tid=914377

出现error
重启机器后发现dmesg
e1000 device eth0 does not seem to be present, delaying initialization.
处理方式
depmod -a
modprobe e1000
lsmod
service network restart

补充命令:lspci
本文介绍在Linux下使用lspci命令查看PCI设备详细信息,也可以认为是lspci命令的功能介绍。

当前很多常用硬件都是PCI(Peripheral Component Interconnect)设备,如声卡、网卡、USB控制器等,稍老一点的显卡一般也是PCI设备。很可能由于要安装驱动或其它的需要查看PCI设备的详细信息。linux中的lspci命令方便地实现了这一点。

lspci最简单的使用方法是:

$lspci

它显示出通常对我们最有用的信息。

如果要更的详细信息,可以:

$lspci -v
$lspci -vv
$lspci -vvv

如果有的项目不能正常翻译成人能理解的文字,可以

$update-pciids

请确认您已连到互联网,能访问国外网。

Posted by Michael.Ding at 1:41 PM 0 comments

Freebsd下普通用户使用sudo执行命令

cd /usr/ports/security/sudo
make install clean

ee /usr/local/etc/sudoers
修改
# %wheel ALL=(ALL) NOPASSWD: ALL

%wheel ALL=(ALL) NOPASSWD: ALL

这样whell组用户就可以通过sudo执行所有命令,且不需要输入密码。

给普通用户使用bash
cd /usr/ports/shells/bash
make install clean

默认bash路径为/usr/local/bin/bash
在用户home目录下建立.bash_profile和.bashrc提高用户使用bash的方便程度
ee .bash_profile
添加
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

ee .bashrc
添加
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -lA'

source .bash_profile
source .bashrc

顺便提一下freebsd默认的csh是不带tab补全的,使用起来十分不方便,可以通过修改/etc/csh.cshrc
添加
set autolist

Posted by Michael.Ding at 11:46 AM 0 comments

使用chkrootkit工具保护服务器(转)

Saturday, October 4, 2008

在保护linux 服务器时除了Tripwire 这样强大工具外,还有一个简单又好用的工具–chkrootkit。chkrootkit 顾名思义是监测系统是否被安装了rootkit 的一个安全工具。

安装chkrootkit,你可以自己去 http://www.chkrootkit.org/download/ 下载源码包,然后自己编译,也可以和我一样偷懒用别人做好的二进制包.

centos 下用非官方源安装chkrootkit:
首先添加dag 源for centos(我的系统是centos5.2)

# vi /etc/yum.repos.d/dag.repo
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1

# rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

yum 安装chkrootkit
# yum update
# yum install chkrootkit

chkrootkit的应用
chkrootkit 的使用非常简单直接运行 chkrootkit 命令,然后会有如下输出

ROOTDIR is `/’
Checking `amd’… not found
Checking `basename’… not infected
Checking `biff’… not found
Checking `chfn’… not infected
Checking `chsh’… not infected
Checking `cron’… not infected
Checking `crontab’… not infected
Checking `date’… not infected
Checking `du’… not infected
Checking `dirname’… not infected
Checking `echo’… not infected
Checking `egrep’… not infected
Checking `env’… not infected
.
.
.

如果有rootkit会报“INFECTED” 所以可以直接用chkrootkit -n|grep ‘INFECTED’更直接一些。

定时检测并在出问题时给管理员发邮件。
创建如下脚本chkrootkit.sh并放入crontab 定时运行。

# cat chkrootkit.sh
#!/bin/bash
PATH=/usr/bin:/bin

TMPLOG=`mktemp`

# Run the chkrootkit
/usr/bin/chkrootkit > $TMPLOG

# Output the log
cat $TMPLOG | logger -t chkrootkit

# bindshe of SMTPSllHow to do some wrongs
if [ ! -z "$(grep 465 $TMPLOG)" ] && \
[ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
sed -i ‘/465/d’ $TMPLOG
fi

# If the rootkit have been found,mail root
[ ! -z "$(grep INFECTED $TMPLOG)" ] && \
grep INFECTED $TMPLOG | mail -s “chkrootkit report in `hostname`” root

# chmod 700 chkroot.sh
# mv chkrootkit /etc/cron.daily

这样系统会每天运行chkrootkit 检测系统,并在检测到rootkit 时给root 发一封邮件。

把给root 用户的系统邮件转发的管理员的gmail 邮箱

虽然可以登陆到系统去看系统邮件,但显然能用gmail 查看是更方便的选择。
1.安装sendmail 邮件转发要用到sendmail,
# yum sendmail
# /etc/intit.d/sendmail start (sendmail服务)
2.设置转发,编辑/etc/aliases,在文件最后加入
root: youname@gmail.com 然后运行newaliases 命令更新aliases
这样系统就会把给root 的邮件转发的你gmail 邮箱里去了。

本文中严重参考入侵监测系统的构建( chkrootkit ) 一文,感谢该文作者的工作。

Posted by Michael.Ding at 1:40 AM 0 comments

CentOS5取得 kernel source

Monday, September 29, 2008

Posted by Michael.Ding at 8:52 PM 0 comments

CentOS 5 上安装crond服务

Monday, September 22, 2008

最小安装的CentOS5上安装crond服务

# yum install crontabs(Root crontab files used to schedule the execution of programs.)
# yum install vixie-cron(The Vixie cron daemon for executing specified programs at set times.)

linux下的定时执行工具crontab(转贴自百度)
reference:http://hi.baidu.com/monobao/blog/item/01e9ecdcbc6a14a1cc11665b.html
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起linux 定时 crontab可以用以下的方法启动、关闭这个服务:

  /sbin/service crond start //启动服务

  /sbin/service crond stop //关闭服务

  /sbin/service crond restart //重启服务

  /sbin/service crond reload //重新载入配置

  你也可以将这个服务在系统启动的时候自动启动:

  在/etc/rc.d/rc.local这个脚本的末尾加上:

  /sbin/service crond start

  现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:

  1.直接用crontab命令编辑

  cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

  crontab -l //列出某个用户cron服务的详细内容

  crontab -r //删除没个用户的cron服务

  crontab -e //编辑某个用户的cron服务

  比如说root查看自己的cron设置:crontab -u root -l

  再例如,root想删除fred的cron设置:crontab -u fred -r

  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:

  分钟 (0-59)

  小时 (0-23)

  日期 (1-31)

  月份 (1-12)

  星期 (0-6)//0代表星期天

  除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题:

  每天早上6点

  0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

  每两个小时

  0 */2 * * * echo "Have a break now." >> /tmp/test.txt

  晚上11点到早上8点之间每两个小时,早上八点

  0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

  每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

  0 11 4 * 1-3 command line

  1月1日早上4点

  0 4 1 1 * command line

  每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

  2.编辑/etc/crontab 文件配置cron

  cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

  SHELL=/bin/bash

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号

  HOME=/ //使用者运行的路径,这里是根目录

  # run-parts

  01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本

  02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本

  22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本

  42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本

  大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

Posted by Michael.Ding at 12:38 PM 0 comments

CentOS 5设置NTP服务器

其实非常简单,因为在CentOS 5不再区分客户端和服务器,只要配置了NTP,它就会提供NTP服务。这一点与Solaris不同,其中提供了ntp.client和ntp.server可供选择,想使用哪个直接用相应文件覆盖/etc/ntp.conf即可。

1)确认已经ntp程序包:
# yum install ntp

2)配置时间源
# vi /etc/ntp.conf
server time.lib.tsinghua.edu.cn
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org

3)配置是否为其他PC提供时间服务
# vi /etc/ntp.conf
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

4)配置开机时自动运行时间服务
# chkconfig ntpd on

5)启动或停止时间服务
# service ntpd start
# service ntpd stop
# service ntpd restart

6)验证ntp服务已经运行
# pgrep ntpd

7)初始同步
# ntpdate -u time.lib.tsinghua.edu.cn

8)确认同步成功
# ntpq -p

当然,如果要提供时间服务,还必须相应的设置iptable防火墙的配置。CentOS的时间服务使用udp 123端口。

Posted by Michael.Ding at 11:34 AM 0 comments

iptables+squid透明代理

squid 2.6 简单配置
=========================
cat squid.conf|sed '/^\#/d'|sed '/^$/d'或者grep -v -E '^$|^#' squid.conf

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow all
icp_access allow all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 96 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mgr tech@xintv.com
visible_hostname CentOS5
error_directory /usr/share/squid/errors/Simplify_Chinese
coredump_dir /var/spool/squid

==============================
iptables 命令

如果防火墙和代理服务器在一起
eth0:内网IP eth1:外网IP
iptables -t nat -A PREROUTING -s 172.168.100.0/24 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

如果不在一起,代理服务器:172.168.100.191
iptables -t nat -A PREROUTING -s 172.168.100.0/24 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to 172.168.100.191:3128
iptables -t nat -A POSTROUTING -o eth0 -s 172.168.100.0/24 -d 172.168.100.191 -j SNAT --to 172.168.100.201

===========================
iptables 的一些管理
acl badsite url_regex -i taobao.com
http_access deny badsite
限制访问特定的网站
acl numconn maxconn 2
http_access deny all numconn
限制访问每个IP的链接数(注意:client_db要设为on)

===========================
开启ip_forward转发
只修改当前环境的转发
echo 1 > /proc/sys/net/ipv4/ip_forward
永久修改环境的转发
vi /etc/sysctl.conf
修改
net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1

直接vi编辑/proc/sys/net/ipv4/ip_forward是会报错的,因为/proc里面是虚拟档案系统目录,都是在ram上。里面的文档通过重导或者修改sysctl.conf达到修改的目的。通过重导重启以后,或者重启网卡后就恢复原状了。

reference for iptables
http://iptables-tutorial.frozentux.net/cn/iptables-tutorial-cn-1.1.19.html
http://bbs.chinaunix.net/viewthread.php?tid=477137
http://bbs.chinaunix.net/viewthread.php?tid=281136
http://blog.platinum.net.cn/index.php?op=ViewArticle&articleId=59&blogId=1
http://bbs.chinaunix.net/viewthread.php?tid=536582&extra=&page=1
http://www.chinaunix.net/jh/4/293819.html
http://bbs.chinaunix.net/viewthread.php?tid=559519
http://bbs.chinaunix.net/viewthread.php?tid=602090
http://www.linuxaid.com.cn/engineer/ideal/article/policy_pouting.htm
http://bbs.chinaunix.net/viewthread.php?tid=304033
http://chinaunix.net/jh/38/505206.html
http://www.vbird.org/linux_server/0420squid.php

========================
ipp2p模块
http://linux.chinaunix.net/bbs/viewthread.php?tid=914377

========================
命令补充
# lsmod
lsmod(list modules)

功能说明:显示已载入系统的模块。

语  法:lsmod

补充说明:执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。

# modinfo
modinfo(module infomation)

功能说明:显示kernel模块的信息。

语  法:modinfo [-adhpV][模块文件]

补充说明:modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。

参  数:
-a或--author  显示模块开发人员。
-d或--description  显示模块的说明。
-h或--help  显示modinfo的参数使用方法。
-p或--parameters  显示模块所支持的参数。
-V或--version  显示版本信息。

# modprobe
modprobe(module probe)

功能说明:自动处理可载入模块。

语  法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]

补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

参  数:
-a或--all  载入全部的模块。
-c或--show-conf  显示所有模块的设置信息。
-d或--debug  使用排错模式。
-l或--list  显示可用的模块。
-r或--remove  模块闲置不用时,即自动卸载模块。
-t或--type  指定模块类型。
-v或--verbose  执行时显示详细的信息。
-V或--version  显示版本信息。
-help  显示帮助。

Posted by Michael.Ding at 10:46 AM 0 comments

ROUTEOS使用笔记

ROUTEOS使用笔记
宽带和ADSL(PPPoE)不一样。
宽带:单击IP,DHCP Clients,Enable,Add Default Route,Interface 选择ether2,hostname为Client1,OK。再次打开DHCP Clients,查

看Status页看是否获取IP地址,如果获取了就完工了。
ADSL拨号设置如下:
在WINBOX中,点interfaces-->增加(+)-->pppoe clients-->dial out
在user框输入adsl拨号用户名,在password框输入密码,并对选项框打勾(保存ADSL密码)-->APPLY.
------------------------------------------------------------------------------------------
设置NAT共享上网ip --》firewall -source nat ,选择 + 号,选择action,action里面选择 masquerade

/ip firewall mangle add protocol tcp tcp-options syn-only tcp-mss 1448
------------------------------------------------------------------------
开DHCP
添加ip pool地址池
再开 ip dhcp server设上网关和dns
---------------------------------------------------------------------------
用RouterOS封PP点点通和VPP

因为本网吧经常有人利用PP点点通和VPP下载黄色电影,不但影响不好,而且很占
网络资源,降底网速,其它玩游戏者老是叫卡.所以作了以下处理:

用WINBOX登录,在IP-->Firewall的forward处添加:
第一条规则:
General页中的Dst.address改为210.15.29.67/32
Action页中的Action改为drop或reject
第二条规则:
General页中的Dst.address改为210.15.29.68/32
Action页中的Action改为drop或reject
第三条规则:
Advanced页中的content改为pp365
Action页中的Action改为drop或reject

这样设置后,别人登录PP点点能或VPP时就会提示说网络不通.
不知道PP和VPP还有没有其它服务器,有的话请告诉我IP址.

装个天网防火墙,然后分别登录pp点点通和pp,登陆的时候防火墙会提示ip连接的,将ip记下来,然后写在防火墙的规则里面.

用CommView可以看连接的。我就是用它来看QQ的连接。并封掉了其IP。QQGame也玩不了了
-------------------------------------------------------------------
ROUTEROS下限IP的TCP连接数(限线程),
来自每个IP地址最多允许有15个并发连接

/ip firewall rule forward add protocol=tcp tcp-options=syn-only connection-limit=15 \
action=drop

專門限制一個IP的連接數
/ip firewall rule forward add protocol=tcp tcp-options=syn-only
src-address=192.168.0.249/32 connection-limit=15 action=drop
--------------------------------------------------------------------------------------
如果有一些网页打不开,你ISP的MTU=1492,请在IP > Firewall > Mangle > 单击红加号 > Protocol选择TCP > Tcp Options 选择 sync >

Actions选择 accept >TCP MSS:1448。
------------------------------------------------------------------------------------------
ip -》firewall -》filter fules ,选择 + 号,in interface 选择内网网卡(local),其他默认
这条路由允许来自内网的连接,如果有限制,可以修改 src address 的ip段,或者content 内容过滤

ip -》firewall -》filter chains 选中 input ,选择 drop
这条规则禁止所有的外部连接

以上两条规则,屏蔽来自外网的所有连接

一些恶意网站和广告,也可以从这里屏蔽
例如,可以加一条规则,禁止登陆新浪聊天室:
ip -》firewall -》filter fules ,选择forward
选择+号,advanced 里面content 输上chat.sina.com ,action里面选择return,即可
如果chat.sina.com 换成ad4.sina.com.cn ,新浪主页的广告就没有了
防火墙设置需要较强的网络知识,可以参考有关资料,或者天网等防火墙里面的规则

---------------------------------------------------------------------------------------------------
如果内部有需要对外发布的服务,例如ftp、web等,可以在ip firewall 的destination nat中设置,添加是注

意:dst.address 要用你对外的ip,选择相应的协议,端口号,另外acction中选择 nat ,天上内网对应主机

ip 、端口号。
--------------------------------------------------------------------------------------------------
全面解决ROUTER OS IP 限速问题

比如我要限:172.18.62.63的下载为:上限100Kbit-下限256Kbit,上行为:上限100Kbit-200Kbit下限,具体可以这样做:


1、下载带宽 IP---Simple Queues---"+"
Name=down SrcAddress=0.0.0.0/0 DstAddress=192.168.0.8/32 terface=eth1(内网网卡) limit at=100000 Maxlimit=256000
2、上传带宽 IP---Firewall---Mangle---"+"
SrcAddress=192.168.0.8/32 InInterface=eth1(内网网卡)DstAddress=0.0.0.0/0 Protocol=all Action=accept FlowMark=UP
3.Queues---QueuesTree---"+"
Name=UP Parent=eth2(外网网卡) Flow=UP limit=100000MaxLimit=200000

你要限多少个IP,就写多少个。我写了近:300来个IP,上行下行没有问题。
我这里是250台这样的网络,才4M的带宽,随时保持60-100来户人同时在线。ROUTER OS运行了4天4夜,PING 值一般小于:10MS,没有发现丢包现像

,速度用户反馈速度很快,不过我的防火墙设了一些规则,朋友们如果感兴趣,自己编些规则,与天网差不多,如果不熟TCP/IP的朋友,买一本回

来,不出1个月,你就精通了。
在Queues---QueuesTree里面还可以看在线用户当前速率。
方便无比。你要限谁就限谁。
我这里有6万个IP,我只开放172.18.60.0-172.18.60.127;172.18.61.0-172.18.61.127;
172.18.62.0-172.18.62.63

所以限了近:300来个IP。还可以限一个网段如:172.18.60.0/25
限制一个网段用PCQ

1. Mark all packets with flow all:用flow all 标记所有数据包
/ip firewall mangle add action=accept mark-flow=all

2. Create two PCQ queue types - one for download and one for upload. For download traffic:创建两条PCQ类型,下载和上传
queues will be classified by dst-address and for upload - by src-address:
/queue type add name=PCQ-Download kind=pcq pcq-rate=65536 \
pcq-classifier=dst-address
/queue type add name=PCQ-Upload kind=pcq pcq-rate=32768 \
pcq-classifier=src-address

3. Add two queue rules - one for download and one for upload:添加PCQ规则,下载和上传/
queue tree add parent=Local queue=PCQ-Download flow=all
/queue tree add parent=Public queue=PCQ-Upload flow=all
-----------------------------------------------------------------------------------------------
关于解决不能上百度的问题
把TCP MSS 1448改成1432
----------------------------------------------------------------------------------------------------
这是官方的在线模拟
http://demo.mt.lv/
下载 MikroTik WinBox Console
我们做好的管理登陆界面也是这样的,
打开winbox
在Connect To填 demo.mt.lv
用户名Login填 demo
密码留空
然后点connect连接
---------------------------------------------------------------------------------------------------------------
RouterOS的端口映射很简单.
在终端中的ip/firewall/dst-nat里面
比如我要映射80端口到192.168.0.100,外网地址是218.26.x.x(假设)
输入add action=nat protocol=tcp dst-address=218.26.x.x/32:80 to-dst-address=192.168.0.100
就ok了,需要注意的是做nat的时候,dst-address的子网掩码必须是32,也就是255.255.255.255,否则不行,很多朋友出问题就是出在这里.
----------------------------------------------------------------------------------------------------------
记录网卡MAC地址才能限制网卡上网。具体设置如下。
在防火墙里面的filter rules项选择forward然后添加一项设定也就是“+”号,
在advanced项里面的src .mac.address项里面加入网卡的MAC地址,然后在ACTION中选择DROP项。这样子添加后,那块网卡的ip地址无论咋换,都

无法上网。除非它把网卡换了。我就是这样子作出来得,效果不错。
-----------------------------------------------------------------------------------------
[admin@MikroTik] system backup>save导出配置文件,就是备份
[admin@MikroTik] system backup>load导入配置文件,就是恢复
-----------------------------------------------------------------------
如果改了端口用winbox打不开了的解决方法
用SSH进入

/ip ser

/ip ser/>set www port 80

/ip ser/>set ftp port 21
-------------------------------------------------------
官方防火墙设置如下:

/ ip firewall
set input name="input" policy=accept comment=""
set forward name="forward" policy=accept comment=""
set output name="output" policy=accept comment=""
add name="virus" policy=none comment=""
/ ip firewall rule forward
add connection-state=invalid action=drop comment="Drop invalid \
connections" disabled=no
add connection-state=established action=accept comment="Established \
connections" disabled=no
add connection-state=related action=accept comment="Related connections" \
disabled=no
add action=jump jump-target=virus comment="!!! Check for well-known \
viruses !!!" disabled=no
add protocol=udp action=accept comment="UDP" disabled=no
add protocol=icmp limit-count=50 limit-burst=2 limit-time=5s \
action=accept comment="Allow limited pings" disabled=no
add protocol=icmp action=drop comment="Drop excess pings" disabled=no
/ ip firewall rule input
add connection-state=invalid action=drop comment="Drop invalid \
connections" disabled=no
add tcp-options=non-syn-only connection-state=established action=accept \
comment="Accept established connections" disabled=no
add connection-state=related action=accept comment="Accept related \
connections" disabled=no
add action=jump jump-target=virus comment="!!! Check for well-known \
viruses !!!" disabled=no
add protocol=udp action=accept comment="UDP" disabled=no
add protocol=icmp limit-count=50 limit-burst=2 limit-time=5s \
action=accept comment="Allow limited pings" disabled=no
add protocol=icmp action=drop comment="Drop excess pings" disabled=no
add dst-address=:22 protocol=tcp action=accept comment="SSH for demo \
purposes" disabled=no
add dst-address=:23 protocol=tcp action=accept comment="Telnet for demo \
purposes" disabled=no
add dst-address=:80 protocol=tcp action=accept comment="http for demo \
purposes" disabled=no
add dst-address=:3987 protocol=tcp action=accept comment="winbox for \
demo purposes" disabled=no
add src-address=159.148.172.192/28 action=accept comment="From \
Mikrotikls network" disabled=no
add src-address=10.0.0.0/8 action=accept comment="From Mikrotikls \
network" disabled=no
add action=drop log=yes comment="Log and drop everything else" \
disabled=no
/ ip firewall rule output
add protocol=tcp tcp-options=syn-only action=drop log=yes comment="" \
disabled=no
/ ip firewall rule virus
add dst-address=:134-139 protocol=tcp action=drop comment="Drop Blaster \
Worm" disabled=no
add dst-address=:134-139 protocol=udp action=drop comment="Drop \
Messenger Worm" disabled=no
add dst-address=:445 protocol=tcp action=drop comment="Drop Blaster \
Worm" disabled=no
add dst-address=:445 protocol=udp action=drop comment="Drop Blaster \
Worm" disabled=no
add dst-address=:593 protocol=tcp action=drop comment="________" \
disabled=no
add dst-address=:1024-1030 protocol=tcp action=drop comment="________" \
disabled=no
add dst-address=:1080 protocol=tcp action=drop comment="Drop MyDoom" \
disabled=no
add dst-address=:1214 protocol=tcp action=drop comment="________" \
disabled=no
add dst-address=:1363 protocol=tcp action=drop comment="ndm requester" \
disabled=no
add dst-address=:1364 protocol=tcp action=drop comment="ndm server" \
disabled=no
add dst-address=:1368 protocol=tcp action=drop comment="screen cast" \
disabled=no
add dst-address=:1373 protocol=tcp action=drop comment="hromgrafx" \
disabled=no
add dst-address=:1377 protocol=tcp action=drop comment="cichlid" \
disabled=no
add dst-address=:1433-1434 protocol=tcp action=drop comment="Worm" \
disabled=no
add dst-address=:2745 protocol=tcp action=drop comment="Bagle Virus" \
disabled=no
add dst-address=:2283 protocol=tcp action=drop comment="Drop Dumaru.Y" \
disabled=no
add dst-address=:2535 protocol=tcp action=drop comment="Drop Beagle" \
disabled=no
add dst-address=:2745 protocol=tcp action=drop comment="Drop Beagle.C-K" \
disabled=no
add dst-address=:3127-3128 protocol=tcp action=drop comment="Drop \
MyDoom" disabled=no
add dst-address=:3410 protocol=tcp action=drop comment="Drop Backdoor \
OptixPro" disabled=no
add dst-address=:4444 protocol=tcp action=drop comment="Worm" \
disabled=no
add dst-address=:4444 protocol=udp action=drop comment="Worm" \
disabled=no
add dst-address=:5554 protocol=tcp action=drop comment="Drop Sasser" \
disabled=no
add dst-address=:8866 protocol=tcp action=drop comment="Drop Beagle.B" \
disabled=no
add dst-address=:9898 protocol=tcp action=drop comment="Drop Dabber.A-B" \
disabled=no
add dst-address=:10000 protocol=tcp action=drop comment="Drop Dumaru.Y" \
disabled=no
add dst-address=:10080 protocol=tcp action=drop comment="Drop MyDoom.B" \
disabled=no
add dst-address=:12345 protocol=tcp action=drop comment="Drop NetBus" \
disabled=no
add dst-address=:17300 protocol=tcp action=drop comment="Drop Kuang2" \
disabled=no
add dst-address=:27374 protocol=tcp action=drop comment="Drop SubSeven" \
disabled=no
add dst-address=:65506 protocol=tcp action=drop comment="Drop PhatBot, \
Agobot, Gaobot" disabled=no
------------------------------------------------------
解决因防火墙屏蔽来自内网的所有连接
进入后输入 /ip f ru o 可打开OUTPUT 输入 //ip f ru in 可打开INPUT
再、输入p 可看结果
按REM O(此0为数字)可删除相应0的规则
你输入/ip f set i p a 可恢复系统默认input改回accept。
或者,使用system 里面的reset 复位路由(会删除所有规则)
----------------------------------------------------------------------
HotSpot设置一步一步指导
首先你要安装好routeros 2.8.7以上的版本。


CODE
[admin@MikroTik] > system reset



(系统自动复位清除设置并重新启动)

让我们来看看这个机器上有哪些网卡:

CODE
[admin@MikroTik] > /interface print

Flags: X – disabled, D – Dynamic, R - Running
# NAME TYPE MTU
0 X ether1 ether 1500
1 X ether2 ether 1500


你可以看到这个机器上有两张网卡显示,但是却是禁止的。
让我们来来给网卡指定名字,让以后看起来更方便

CODE
[admin@MikroTik] interface> set 0 name=”hotspot”
[admin@MikroTik] interface> set 1 name=”internet”
[admin@MikroTik] interface> print

Flags: X – disabled, D – Dynamic, R - Running
# NAME TYPE MTU
0 R internet ether 1500
1 R hotspot ether 1500



我们能根据名字更容易的查看某一张网卡的状态,让我们来给网卡指定IP地址。
设置routeros的inernet网卡的地址为192.168.1.2,设置网关为192.168.1.1,dns用你的isp给你的。我们用212.159.13.50

CODE
[admin@MikroTik] > /ip
[admin@MikroTik] ip> address add address=192.168.1.2/24 interface=internet
[admin@MikroTik] ip> route add gateway=192.168.1.1
[admin@MikroTik] ip> dns
[admin@MikroTik] ip dns> set primary-dns=212.159.13.50
[admin@MikroTik] ip dns> set secondary-dns=212.159.11.50



启用dns缓存

CODE
[admin@MikroTik] ip dns> set allow-remote-requests=yes
[admin@MikroTik] ip dns> ..


现在设置hotspot这张网卡

CODE
[admin@MikroTik] ip> hotspot
[admin@MikroTik] ip hotspot> setup
Select interface on which to run HotSpot
Hotspot interface: hotspot
Enable universal client configuration?
Enable universal client: yes


这个功能是允许远程机器连接到即使他们使用完全不同的网络设置

CODE
Local address of hotspot network gateway: 10.5.50.1/24
Masquerade hotspot network: yes
Address pool of hotspot network will be: 10.5.50.2-10.5.50.254
ip address of smtp server: 192.168.1.3


我们必须输入你的ISP的smtp服务器的IP,如果你没有,你可以给一个“internet” 段的IP。

CODE
Use local DNS cache?
use local DNS cache: yes
Setup DNS Configuration
dns servers: 192.168.1.2



设置dns

CODE
Name of hotspot user: admin
Password for the user: admin


设置hotspot超级管理员的用户名和口令(一定要保证安全)

CODE
Select another port for (www) service
Another port for service: 8081


指定另外一个端口8081给winbox用

CODE
Use transparent web proxy for hotspot clients?
Use transparent web proxy: yes


使用web代理缓存

最后就设置好了。
-----------------------------------------------------------------------------
如何映射和回流(详细,有图)

映射
winbox----ip-----firewall-----Destination nat
+---- ⑴General 页
SRC。ADDRES |__ __ _ 默认
SRC。PORT |
INTEface all
Dst.address 外网ip /32(此32是定值)
Dst.port 映射端口(我这里是27015-27016)
⑵ ACTION 页
Action: nat
To Dst. address 192.168.1.253-192.168.1.253(内网提供服务的机器IP)
To Dst. Ports:27015-27016

回流

winbox----ip-----firewall-----Source NAT
+----- ⑴GERENAL页
Src.Address 192.168.1.253(内网提供服务器机器的IP) /32(此32是定值)
src.port
Dst.Address 192.168.1.0(你内网IP的前3位+0)/24(这里是你掩码的换算值)
Protocol 你自己的协议
⑵ Action页
action: nat
to Src.addresses 0.0.0.-0.0.0.0
TO src.ports:27015-27016
----------------------------------------------------------------------------
RouterOS整体限速
ip firewall mangle add action=accept mark-flow=all
以限制下载速度64K上行速度32K为例
/queue type add name=PCQ-Download kind=pcq pcq-rate=65536 pcq-classifier=""
/queue type add name=PCQ-Upload kind=pcq pcq-rate=32768 pcq-classifier=""
在WINBOX里PCQ-Download勾上Src.,PCQ-Upload勾上Dst.
/queue tree add parent=Local queue=PCQ-Download flow=all //Local为本地网卡
/queue tree add parent=Public queue=PCQ-Upload flow=all //Public为外网网卡

以上方法同样适用于对P2P限速。在ip firewall mangle里Advanced下p2p加上P2P-ALL就可以了。
------------------------------------------------------------------------------------
1。备份和恢复设置

绝对是好东东!你想想辛辛苦苦设置好的防火墙规则,网卡设置,各个路由,端口映射万一弄错了或重新安装时,是不是都要重新自已设置?这个

巨麻烦!!!但ROUETOS却为你考虑得很周到,可以手工备份你的设置文件,需要时只要一个命令即可恢复!

大家可以用WINBOX登陆,注意用ADMIN帐号,在左边是不是有个FILES?点开,再点对话框上面的BACKUP,这样就把当前的设置保存一个文件里面了

,再用IE登陆你的路由,用ftp://网管帐号:密码@路由IP:端口,登陆到你的路由后就会到你保存的文件了!用IE直接下载吧!

当你重新安装时,只要把内网弄通,用IE再登陆你的路由,把这个设置文件传上去,在WINBOX左边下面有个TE开头的英文,这是终端模拟,点开后

就像在路由上操作一样,用以下命令恢复你以前的设置:

system回车

backup回车

load name=你保存的设置文件名 回车

提示重启就一下子恢复到你以前设置了!!

是不是方便实用啊?

大家可能会说用WINBOX备份不爽,那我们也可以用终端备份呀!

在WINBOX左边下面有个TE开头的英文,这是终端模拟,点开后就像在路由上操作一样,用以下命令备份你以前的设置:

system回车

backup回车

save name=你保存的设置文件名 回车

建议文件名用日期表示可以很直观。这样就按你的文件名保存了。

用LOAD NAME命令就是恢复了。。。]

2.恢复路由本身默认值。

如果设错了规则或者地址,造成win不能进入管理界面,可以这样复原:
使用 admin 登陆
system 回车
reset 选择 y
将删除所有改动,恢复新装的状态

这个是恢复到出厂设置,很适合刚开始设置ROUTEOS时用用!

3。备份ROUTEOS

可以用GHOST8。0备份,注意是要用全盘备份,DISK TO IMG才行。

4。简单化输入

在ROUTEOS是不是感觉输入命令很麻烦?

其实ROUTEOS可以只要输入前两位字母就可以了。。。

比如上面的命令:

system

backup

这是进入目录的,可以简化成:

sy

ba

即可!很适合一些懒人。。。哈哈

5。检查磁盘

在路由或终端模拟下用下面命令:

system

check-disk

检查磁盘,要重启。 但是很慢,一分钟一G。。。哈哈

6。关机

可以在WINBOX中关机,也可以用命令关:

system

sh

即可

Posted by Michael.Ding at 10:22 AM 0 comments

Linux下常用系统监控检测工具一览

Monday, August 25, 2008

比较成熟的Linux系统监控,检查工具,随便收集了一下,先放在这里,免得忘了!

nmap

snort

nc

ntop

Ethereal

checkpoint

websence

phoen

tcpdump

hotsanic

srvreport

nagios

cacti

Posted by Michael.Ding at 11:20 AM 0 comments

Tuesday, August 12, 2008

在tomcat_home\common下放入jdbc的三个驱动程序,或者放在java_home的jre\lib\ext目录下。
方式一、全局数据库连接池
1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加如下代码:
<Resource name="jdbc/hdh"
type="javax.sql.DataSource"
password="111"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
validationQuery="select 1"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1917;DatabaseName=WEGROUP"
maxActive="4"/>
2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:
<ResourceLink global="jdbc/hdh" name="jdbc/hdh" type="javax.sql.DataSource"/>
或者在tomcat\conf\context.xml的Context中增加:
<ResourceLink global="jdbc/hdh" name="jdbc/hdh" type="javax.sql.DataSource"/>
方式二、局部数据库连接池
在tomcat\webapps\myapps\META-INF\context.xml的Context中增加:
<Resource name="jdbc/hdh"
type="javax.sql.DataSource"
password="111"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
validationQuery="select 1"
username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WEGROUP"
maxActive="4"/>


参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。



三、注意事项

我的配置环境是:

tomcat5.5

jdk1.5

使用tomcat6与jdk1.5搭配的时候出现有applicationservlet问题。

四、测试代码

<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%
try {
ResultSet rs = null;
Statement stmt = null;
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/mssqlcsjcms");
Connection conn = ds.getConnection();

if(!conn.isClosed())
{
stmt = conn.createStatement();
//stmt.executeQuery("create table tb(fff varchar2(10))");
//stmt.executeUpdate("insert into tb values('456')");

rs = stmt.executeQuery("select * from tb_Users");
while (rs.next()){
out.println("" + rs.getString("UserName") + "");
out.println(":"+"
");
//out.println(" + rs.getString('answers') + ");
}
rs.close();

out.println("成功");
}
conn.close();
}
catch(SQLException e) {
out.println("发生错误:"+e.toString());
}
%>

Posted by Michael.Ding at 1:08 PM 0 comments

Tomcat中连接池配置

在tomcat_home\common下放入jdbc的三个驱动程序,或者放在java_home的jre\lib\ext目录下。
方式一、全局数据库连接池
1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加如下代码:


2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:


或者在tomcat\conf\context.xml的Context中增加:


方式二、局部数据库连接池
在tomcat\webapps\myapps\META-INF\context.xml的Context中增加:




参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。



三、注意事项

我的配置环境是:

tomcat5.5

jdk1.5

使用tomcat6与jdk1.5搭配的时候出现有applicationservlet问题。

Posted by Michael.Ding at 1:04 PM 0 comments

用expect完成用户密码的批量修改

Monday, August 11, 2008

Quote: http://www.cublog.cn/u/12442/showart_345967.html
第三方工具expect,专门用来实现需要交互式操作的命令的自动无人工干预操作。这些命令常见的有:passwd、fsck、telnet、ftp等。

1、创建用户/密码对文件

# cat user.password
usr2:abcd2
usr3:abcd3
#=========END=======================================================

2、创建expect.sh脚本文件

# cat expect.sh
#!/usr/local/bin/expect

if {$argc<2} {
send_user "usage: $argv0 username password\n"
exit
}

set username [lindex $argv 0]
set password [lindex $argv 1]
send_user "execute:$argv0 $username $password\n"

spawn -noecho passwd [lindex $argv 0] #-noecho不回显spawn正在调用的命令
expect {
"*口令*" {send "$password\n"}
"*word*" {send "$password\n"}
}
expect {
"*口令*" {send "$password\n"}
"*word*" {send "$password\n"}
}
#expect "*word*"
#send "$password\n"
expect eof
exit
#=========END=======================================================

3、创建autochg.sh文件,在此文件中调用expect.sh

# cat autochg.sh
#!/usr/bin/bash

for i in `cat $1`
do
USERNAME=${i%:*} #自右起第一个冒号后的字符都不要
PASSWORD=${i#*:} #自左起第一个冒号前的字符都不要
./expect.sh $USERNAME $PASSWORD
done
#=========END=======================================================

# chmod u+x expect.sh autochg.sh
# ./autochg.sh user.password

Tips:
expect << END
......
END
END还必须顶格写,不能缩进,版式好难看

Reference:http://wiki.tcl.tk/11583

Posted by Michael.Ding at 9:13 AM 0 comments