Archive for category 网络和安全

windows下使用Linux的远程桌面

本文以Fedora Core5为例

现在很多linux操作系统都自带了远程桌面功能,linux的远程桌面一般都是采用了VNC协议。这种协议不仅可以使用在*nix上,几乎任何的桌面操作系统均可对该协议提供支持。

首先到http://www.realvnc.com/ 下载RealVnc的最新版本,当然是For Windows的,安装的时候只要安装一个客户端就可以了,当然,你也可以安装服务器端,远程控制你的windows——要知道,同种功能的软件pcanywhere要几百兆,而且还很贵。

进入到FC的桌面

菜单-〉桌面-〉管理-〉服务 开启VNCserver服务

菜单-〉桌面-〉首选项-〉远程桌面 修改参数设置,这里默认是不允许远程登陆的,将“允许别人远程登录”打勾。同时如果不希望每次都要到终端去确认的话,将“请您确认”的勾去掉。安全起见,这里设置了密码。

回到windows下,运行vnc viewer。输入远程主机的主机名或IP,如果正确的话会弹出密码确认框。输入密码后,成功登录到远程桌面!

在VNC viewer 默认F8键可以调出系统菜单,这里你可以选择全屏方式,发送Ctrl+alt+del等一系列命令。这一点类似于PCanywhere的用法。

realVNC还提供了更高级的版本——支持加密、文件传送等功能,可惜都不是免费的了。

No Comments

Linux下多网卡负载的实现

作为局域网的服务器特别是文件服务器,经常出现的系统瓶颈在于网络接口。有些情况下我们确实需要将n个网卡设置为一个虚拟的网卡,具有相同的IP地址且可以实现负载——类似于cisco的etherchannel技术。在linux下,这种技术被称之谓“bonding”,本身已经存在于linux的内核里。

看了几家人家的发行版本,很多都默认不开启bonding,所以还需要我们重新订制一个内核。
在核心配置的界面中的网络设备驱动开启Bonding driver support

Device Drivers->Network device support->(M)Bonding driver support

编译新的linux 核心。

编辑/etc/modprobe.conf添加一条:

alias bond0 bonding

编辑/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

修改原先的/etc/sysconfig/network-scripts/ifcfg-eth0 if-eth1
DEVICE=eth0 //eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

重新启动网络或服务器

,

4 Comments

细解mysqldump

mysqldump是mysql自带的一个强大的备份工具。如果您像装载整个数据库mydb的内容到一个文件中,可以使用下面的命令:

  #mysqldump –-database mydb –user=username –password=password > mydb.sql
  
  这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库db中的表table中的整个内容导出到一个文件,可以使用下面的命令:

  #mysqldump –database db table >db_table.sql
  
  这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。看过mysql官方手册中就介绍了这样一个实现mysql增量备份的例子:
      
        #mysqldump –where=“ last_modified < NOW() – INTERVAL 1 MONTH”  >backup.sql
    
  mysqldump工具有大量的选项,部分选项如下表:

  选项/Option 作用/Action Performed

  –add-drop-table

  这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

  –add-locks

  这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
  
  -c or – complete_insert

  这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。

  –delayed-insert 在INSERT命令中加入DELAY选项

  -F or -flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log.

  -f or -force 使用这个选项,即使有错误发生,仍然继续导出

  –full 这个选项把附加信息也加到CREATE TABLE的语句中

  -l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。

  -t or -no-create- info

  这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
  
  -d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。

        –opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。

  -q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

   -T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命 名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
  
  -w "WHERE Clause" or -where = "Where clause "

  如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。
  

PS: 如果你的mysql是运行在*nix平台上的,可以利用其强大的pipe连接一下,输出压缩后的数据:mysqldump -A | bzip2 -9 -f > db_backup.sql.bz2。直接从一个服务器备份到另一服务器:mysqldump –opt database | mysql –host=remote-host -C database  。

No Comments

apache+mod ssl 如何申请正式SSL证书

第一步:生成CSR文件和密钥

CSR包含公司的信息,包括域名,公司名,联系方式等,还有密钥对中的公钥,私钥应该保存在本地,注意,必须保存好本地的私钥,如果遗失或者泄漏,这个证书就没有用了。

“OpenSSL”工具被用来生成CSR和密钥,它来自于OpenSSL包,一般被安装在/usr/local/ssl/bin目录下,如果您安装在其他目录下,请做相应调整:

1. 切换目录到SSL KEY,输入

cd /usr/local/ssl/private

2. 输入下列命令生成密钥对:

openssl genrsa -des3 1024 > /ssl.key

3. 切换目录到SSL Certificate:

cd /usr/local/ssl/crt

4. 使用下列命令生成CSR文件:

openssl req -new -key /ssl.key > ssl.csr

第二步:提交CA,签名

一般有:

1.verisign 的 Secure Site,一年报价 RMB 6000 www.itrus.com.cn

2. thawte 的 SSL123,一年报价 129$ http://www.thawte.com

3. geotrust 的 RapidSSL,一年报价 RMB 488 www.myssl.cn

这里主要是对网站做认证,然后对CSR提交签名,(你可以在网站上,对CSR做检查,如果CSR有问题,不要急着付钱,有些地方先让你付钱,然后说你的CSR或者,提交的资料有问题,骗钱,这个大家当心)签名好以后,发把证书发回来,记得用文本方式保存下来。

第三步:装回证书

1.将证书内容存成一个文件

您会收到一封来自迅通诚信的邮件,证书内容附在服务器中。如果证书是以附件的形式(Cert.cer)夹带在邮件中,您就可以直接应用它。如果您的 证书中以文本的方式存在邮件中,您就需要将邮件中的证书部分的内容用Vi或Notepad存成一个纯文本文件。不要将其存成Microsoft Word 或其它字处理软件格式,并确定证书内容中不含有空行和空格。如下所示:

将证书文件存到某个目录下,比如: /etc/ssl/crt/。公钥文件和私钥文件都钥存到这个目录下。私钥可以标记成private.key,公钥标记成public.crt。

我们建议您将存私钥的目录改为只读属性。

2.下载中间级证书

如果您申请的是级联式服务器证书,您需要安装中间级证书,以构成一个证书链,使浏览器信任您的证书;否则无须安装,可直接进入下一步。 将中间级证书存成一个文本文件,命名为"intermediate.crt",将它存到第一步中的相同目录下:/etc/ssl/crt/ 。

配置httpd.conf文件

要将证书应用到您的服务器中,必须配置httpd.conf文件,您需要加入下列SSL 目录信息:

SSLCertificateFile /etc/ssl/crt/public.crt //本地证书文件
SSLCertificateKeyFile /etc/ssl/crt/private.key //私钥文件
SSLCertificateChainFile /etc/ssl/crt/intermediate.crt //中间级证书文件,应用于全球服务器证书

您需要根据具体情况修改SSL 目录信息

将httpd.conf文件存盘并重新启动Apache,您可以用以下命令启动Apache:

apachectl stop
apachectl&nbs p;startssl

您现在已经将服务器证书应用到您的Apache服务器了。

,

No Comments

netstat的一个bug

在使用Redhat AS或者Centos的AMD64版本时,如果在网络连接中如果同一ip连接同一端口数量过多的情况下使用netstat命令时,会出现大量的warning, got duplicate tcp line.的字样,并且会一定几率导致系统不响应,比较郁闷,经查证为netstat的存在的一个bug,升级net-tools的rpm到最新的net-tools-1.60-62.1以后,问题解决。

操作步骤:
#rpm -i http://sunsite.mff.cuni.cz/pub/fedora/5/source/SRPMS/net-tools-1.60-62.1.src.rpm //下载安装net-tools软件的SRC包

#cd /usr/src/redhat/SPECS/

#rpmbuild -bb net-tools.spec //制作rpm包

# rpm -Uvh /usr/src/redhat/RPMS/x86_64/net-tools-1.60-62.1.x86_64.rpm //升级安装rpm

PS: 看了楼下的留言,发现自己原先写的东西有错误,现在已改正。其实经过测试后发现,原本RedhatAS或者Centos的很多SRC包跟Fedora Core的是通用的,如果下载不到上文介绍的net-tools-1.60-37.EL4.6.src.rpm,可以直接到FedoraCore的站点下载 net-tools-1.60-62.1.src.rpm ,经测试保证有效。

2 Comments

密码破解速度全面披露

LockDown.com近日公布了一份采用“暴力字母破解”方式获取密码的“时间列表”。列表中按照密码长度、密码组合数量以及破解攻击模式来进行破解。

从列表中我们可以看出,如果你用一台双核心PC破解密码

最简单的数字密码--六位(例如银行密码)瞬间搞定,八位348分钟,十位163天

普通大小写字母--六位33分钟,八位62天

数字+大小写字母--六位一个半小时,八位253天

数字+大小写字母+标点--六位22小时,八位23年

由此可知,对于我们普通人来说,考虑到容易记忆以及长度,八位数字+大小写字母密码是最安全方便的选择。另外,千万别用6位密码。

攻击模式解释:

A级:10,000 Passwords/sec--在Pentium 100上破解Office密码的速度

B级:100,000 Passwords/sec--在Pentium 100上破解Windows Password Cache (.PWL Files)的速度

C级:1,000,000 Passwords/sec--在Pentium 100上破解ZIP或ARJ压缩文档的速度

D级:10,000,000 Passwords/sec--双核心处理器PC

E级:100,000,000 Passwords/sec--工作站级破解,或多个PC协同破解

F级:1,000,000,000 Passwords/sec--大型计算机网络/超级计算机

密码组成模式:

10数字,26字母,52字母(大小写),62字符(数字+大小写),96字符(包括标点符号和数字符号)

密码

密码

密码

密码

密码

No Comments

优化你的数据库

最近一段时间似乎是受到了刺激,弄来弄去都是优化各种数据库的活所以继续还是写这一类的东西。凡是运行中的数据库,总会数据越来越多(废话!),性能同时也会越来越差。这里就按照一般的顺序,从应用逐步提高到硬件升级。

应用优化

任何一个数据库他的作用都不是全力运行算术运算的,所以除了必须的工作之外,其他的还是交给外部软件来完成吧。让数据库来执行类似于计算器功能的算术运算或者执行一系列无谓的数据校验可谓是愚蠢至极,过于复杂的函数最好也不要使用,记住数据库的优势在于:

  • SELECTINSERT 指定的行

  • JOIN

  • GROUP BY

  • ORDER BY

  • DISTINCT

 对于一般的简单运算,类似于sum avg之类的操作,出于节省连接时间的考虑还是交给外部软件吧。当然不要查询应用中不需要的列同时可以试试看UPDATE table set count=count+1 where key,性能可能会有不少提升。如果在一个批处理中进行大量修改,可以使用LOCK TABLES例如将多个UPDATESDELETES集中在一起;Insert使用默认值也是一个不错的选择。当然可以多试试EXPLAIN 工具,总会找到一种适合的最优化操作的。

优化数据结构

注意的是,这里说的并不是让你去更改系统的数据结构,特别是在运行中的系统中,这样做是“相当”危险的。

  • 明智地使用键码。
  • 键码适合搜索,但不适合索引列的插入/更新。

  • 不要索引你不想用的东西。

  • 虽说有种说法叫做“同样的数据只保存一次”但前提是“在所有的运算只做一次且有用”的前提下,创建足够总结表、简化表是非常有益的

  • 在大表上不做GROUP BY,相反创建大表的总结表/简化表并查询它。

  • ANALYSE过程可以帮助你找到表的最优类型:SELECT * FROM table_name PROCEDURE ANALYSE()

数据库优化

这里一句话也讲不清这么多种数据库的优化,本站有不少相关的东西可供大家参考,并且本站会不断更新和完善,同时也希望大家协助。

磁盘优化

磁盘系统通常是影响数据库第二个重要的因素(第一重要的是内存,但内存的优化相比较复杂)

  • 为系统、程序和临时文件配备一个专用磁盘,如果确是进行很多修改工作,将更新日志和事务日志放在专用磁盘上。

  • 低寻道时间对数据库磁盘非常重要。对与大表,你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表,索引Mediun int类型的列,需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2M的空间。实际上,大多数块将被缓存,所以大概只需要1-2次寻道。

  • 然而对于写入(如上),你将需要4次寻道请求来找到在哪里存放新键码,而且一般要2次寻道来更新索引并写入一行。

  • 对于非常大的数据库,你的应用将受到磁盘寻道速度的限制,随着数据量的增加呈N log N数据级递增。

  • 将数据库和表分在不同的磁盘上。在MySQL中,你可以为此而使用符号链接。

  • RAID 0将提高读和写的吞吐量。

  • RAID 0+1将更安全并提高读取的吞吐量,写入的吞吐量将有所降低。

  • 不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或RAID(除了RAID 0)

  • Linux上,在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和DMA功能。这可以将响应时间提高5~50%

  • Linux上,用async (默认)noatime挂载磁盘(mount)

  • 对于某些特定应用,可以对某些特定表使用内存磁盘,但通常不需要。

升级硬件

按照数据库对于硬件的依赖程度,内存、硬盘、CPU的顺序来升级硬件,包括操作系统。

  • 如果你需要庞大的数据库表(>2G) ,最好采用64位的CPU64位的操作系统。

  • 如果有足够大的内存,关掉Swap分区吧。

  • 更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新 ,但前提是要正确的设置而且配置好这些内存——这正是我前些天碰到的比较讽刺的例子,空有24G的内存只执行了2秒钟的“F5攻击”就死的一塌胡图。

  • 如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查,一台UPS就能够在电源故障时让系统安全关闭

  • 如果数据库单独列出来需要网络连接,请选择至少千兆网卡和交换机的连接,如果采用了类似于8139的烂网卡你会抓狂的。

其他的类似于定期优化表、修复磁盘、消除碎片等等工作属于一般性的维护操作,这里不加深解。

, ,

1 Comment

数据库系统升级

根据PostgresSQL8.1的手册所描述,8.1新增了诸如数据库自动清理和自动备份等新功能。在本地测试了大约3周,确实如实。故今天上午9:00~11:00升级了网站的数据库至8.1的版本,同时连带升级还有PHP5的pgsql模块和perl。

整体性能有了一定提高,首页的平均载入时间减少了百分之三秒且还有潜力可挖。升级过程中可能部分用户会注册失败,还请重新注册。

No Comments

优化你的PgSQl(FreeBSD)

本文根据Pgsql手册的内容整理而来。
一直在用Pgsql,这些天有种想要将其优化到底的想法,对其做了如下改动:

FreeBSD内核的修改

首先,察看几个内核数值 :
#sysctl -a | grep shmall
#sysctl -a | grep shmmax
#sysctl -a | grep semmni
# sysctl -a | grep semmns

shmall 为可用共享内存大小,以 4KB 页为单位计算,即最终的结果*4才是你共享内存的大小数。系统默认为8192,32M。怎么也要128以上吧?如果你收到来自shmget的类似Invalid argument这样的错误信息,那么很有可能是你已经超过这个限制了。
shmmax为最大共享内存大小,这个值至少应该大于 250kB + 8.2 kB * shared buffers + 14.2 kB *max connections

semmni知该怎么翻译好,应该是“信号灯标示符的最小值”之类的意思。由于pgsql每16个连接占据一个“信号灯”且每16个连接之后还会有一个备用的连接,故理论上这个值应该且必须大于max_connections / 16 ,系统默认非常保守,只有10。

semmns,原理同上,这个值应该设置为大于(max_connections / 16) *17+10,经过测试,这个值减去15,基本上就是max_connctions能设置的最大数值。

我的设置为(注:服务器内存256M)


kern.ipc.shmall=32768kern.ipc.shmmax=134217728kern.ipc.semmap=256kern.ipc.semmni=256kern.ipc.semmns=512kern.ipc.semmnu=256 

需要注意的是,semmni和semmns两个参数不可通过sysctl设置,只能选择编进内核或者修改/boot/loader.conf。对于其他参数可以直接修改/etc/sysctl.conf文件或者内核配置文件中添加options的方法,考虑到日后调整方便,建议采用前一方法。修改成功后重启机器(不嫌麻烦可以手动添加)。
#reboot

以上几个数值解决了很多BSD用户碰到的修改了Pg配置而无法启动pg的尴尬

修改postgresql.conf

这里修改起来就比较直观了。
一般情况下设置maintenance_work_mem和checkpoint_segments会有不错的性能提升,但对于高负荷情况下主要就是shared buffers和max connections。这里默认的配置文件中也有比较详细的介绍。

重启pgsql:
#/usr/local/etc/rc.d/010.pgsql.sh restart

如果你还有足够的勇气时间以及金钱

  1. 使用64位的操作系统、更大的内存、更快的硬盘——废话!
  2. 将数据文件和系统文件放置在两个卷上(可以使用ln作连接)。
  3. 开启内核的MD,将一部分内存模拟成磁盘存放数据文件。这在少量数据的情况下可以尝试,但可靠性下降,适合只读不写的数据库。
  4. 适当调高WAL预写缓冲,但这意味着系统可靠性下降。
  5. 修改make.conf ,添加-O3编译参数,重新编译PGSQL和kernel,当然这是在连使用-O2和所有优化参数之后仍无济于事之后。效率提升<1%

2 Comments

利用Samba构建WinNT域

一、修改配置文件:

workgroup = YOURDOMAIN.com //#构建的域名

netbios name = NAME

security = user //#共享的安全级别

encrypt passwords = yes //#使用加密过后密码

smb passwd file = /etc/samba/smbpasswd //#加密密码存放的位置;

domain logons = yes //#启用域登录;

domain master =yes //#将SAMBA设置成域主浏览器 (即:主域控制器)

perferred master = yes

local master =yes //#提供本地浏览

os level = 64 //#设置操作系统级别,能够使SAMBA域成为域控制器

logo script =scripts%U.bat //#启用用户登录脚本

wins support = yes //#将SAMBA设置成WINS服务器

二、设置netlogon共享

netlogon共享是登录到域服务器时必须有的共享目录,其netlogon共享目录设置如下:

[netlogon]
path = /usr/local/samba/netlogon

read only = yes
browseable = no
share modes =no

三、建立机器间的信任关系及用户的建立(NT/2000/XP)

因为NT的域认证基于机器信任账号来进行。所以必须在Samba服务器上先创建机器账号

adduser -d /dev/null -r qcy$ -s /bin/flase 创建本地机器账号之后,在创建SAMBA机器账号

smbpasswd -a -m qcy 其中:-a 是添加 -m是创建机器信任账号,

因为加入到NT域中需要管理员的干预所以我们还得将ROOT账号添加到SAMBA用户当中

当计算机之间建立的信任关系之后我们就可以把我们WINDOWS2000/NT机器加入到linux的虚拟域中.

现在我们添加SAMBA用户 :

useradd test1 (添加系统用户并建立其主目录)

passwd test1

smbpasswd -a test1 OR smbadduser test1:test1 (建立SAMBA用户)

四、当系统和SAMBA用户添加完成之后,就在新建用户的主目录下建立一个.profile.pds文件夹,其作用

是用来存放用户的配置文件。建立这个文件的时候最好是用SU切换到该用户(su test1),这样建立

的好处是直接拥有该文件夹的所有权,以便在用户登录的时候可以很好建立和存储配置文件

No Comments