How to use gmail as relay host for postfix in Ubuntu 12.04

Reference: https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/

first of all, please note that when the recipient receives your email, the sender will be changed to the gmail account you are going to use

Add the following code in /etc/postfix/main.cf

# Define relay host to gmail
relayhost = smtp.gmail.com:587

# Gmail requires tls connections
smtp_use_tls=yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt #Your trusted CA list

# Gmail requires authentication
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

# define authentication mechanism
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_sasl_tls_security_options = noanonymous

Then, edit your authentication file /etc/postfix/sasl_passwd as the following format:

smtp.gmail.com    USERNAME:PASSWORD

please note that username should be your full mail address, include “@gmail.com” or your own domain name.
then update the file to postfix format for using:

#postmap /etc/postfix/sasl_passwd

remember restart postfix at the last

#service postfix restart

Exchange 日常管理:设置邮件转发 [转]

来源: http://blog.sina.com.cn/s/blog_472295620101cxg7.html

场景一:公司有一个Helpdesk的帮助台邮箱,为了方便查看,现在需要设置转发,将发给helpdesk的邮件全部转发到IT系统管理员曾垂鑫的邮箱中。

设置方法如下:

  1. 启动 Exchange 管理控制台。
  2. 在控制台树中,展开“收件人配置”,然后单击“邮箱”。
  3. 搜索helpdesk邮箱,在结果窗格中,右键单击邮箱,然后单击“属性”,如图所示
  4. 1

  5. 在“<邮箱>属性”中的“邮件流设置”选项卡上,单击“传递选项”,然后单击“属性”,如图所示
  6. 2

  7. 单击“转发到”复选框。这将启用“浏览”按钮。如图所示
  8. 3
    注意:如果要将传入邮件传递到邮箱以及所配置的转发地址,请选中“将邮件同时传递到转发地址和原始收件人的邮箱”复选框。如果清除此复选框,则转发所有传入邮件,而不在邮箱中保留副本。

  9. 单击“浏览”打开“选择收件人”对话框。选择要向其转发邮件的收件人,然后单击“确定”。如图所示
  10. 4
    5
    如此设置之后,凡是发往helpdesk的邮件,都将被转发一份副本给曾垂鑫的邮箱。

场景二:曾垂鑫想对其收到的邮件做一个外部邮件系统的副本备份,凡是发给曾垂鑫的邮件都将转发到一个外网的邮箱zengchuixin@126.com中

设置方法如下:

首先我们需要在内部邮件系统为外网的邮箱zengchuixin@126.com增加一个联系人账户。如图所示
6
7
8
9
10
11

然后我们需要修改曾垂鑫邮箱的邮件流设置,首先找到曾垂鑫这个账户,然后选择属性,并切换到邮件流设置选项卡,选择【传递选项】,并点击【属性】,如图所示

12

转发地址设置为我们的外部联系人账户,如图所示

13

然后我们可以发邮件进行测试,让helpdesk给曾垂鑫发一封邮件,可以发现发给曾垂鑫的邮件又被成功地转发到了外网邮箱,外网邮箱成功收到了转发的邮件,如图所示
14

U盘安装windows7

其实,微软就出了一个方案,但我总是没有成功,如果你有兴趣,不妨试试微软官方的官方。链接在此:
http://store.microsoft.com/Help/ISO-Tool

然后,分享一个更智能更方便的方法http://www.windows7en.com/Win7/5720.html

  1. 首先我们需要找到一个4GB大小的U盘然后将它插在上网本上。
  2. 打开屏幕左下角的“开始菜单”,然后运行“cmd”命令,紧接着你会看见一个控制窗口弹出。
  3. 然后在窗口中输入以下内容:
  * 首先键入‘diskpart’命令;
  * ‘list disk’:敲入该命令系统将自动列出所有电脑上发现的磁盘,包括我们刚刚插上去的U盘。
  * 此时可以看到U盘所对应的编号(如#),紧接着键入:‘select disk #’;
  * 然后键入‘clean’;
  * 键入‘create partition primary’;
  * 然后输入‘select partition 1’;
  * 输入‘active’;
  * 再输入‘format fs=fat32 quick’。

  到这里就可以把Windows 7安装文件复制到U盘中了,然后就需要你将Windows 7 的ISO文件当作一个虚拟DVD来进行安装,十分简单,你可以按照以下步骤实现:
  1. 首先安装一个免费软件MagicDisc,该软件是用来创建和管理虚拟光驱的,当然如果你还知道其他这类软件也可以选用别的,这里我们就使用这个免费软件了。
  2. MagicDisc安装完成后会出现在系统托盘处,此时,右键点击MagicDisc,然后选择‘Virtual CD/DVD-Rom’来设置DVD光驱。
  3. 然后点击‘Mount’会弹出一个对话窗口让你选择Windows 7 ISO镜像文件。
  4. 此次在Windows资源管理器中,打开刚刚设置的DVD光驱就能看见所有Windows 7安装文件了,这时你需要做的就是把所有这些文件复制粘贴到U盘中,这样你就拥有一个Windows 7的安装U盘了。
  只要你自己会安装Windows系统,到这里基本就大功告成了,无论你想在自己的任一电脑中安装Windows 7系统,把这个Windows 7的安装U盘插入就可以了,完全不需要使用DVD光驱。对了,小编还要提醒你一点,使用这个U盘安装Windows 7系统的时候,别忘了在重启电脑后进入BIOS把系统首选启动设备改换为USB外接设备哦!^-^

利用网络汇聚让思科交换机支持网络负载均衡

先介绍一下port group 的概念
(来源http://bbs.51cto.com/viewthread.php?tid=509441&page=1&authorid=395509)

port group 是配置层面上的一个物理端口组,配置到port group里面的物理端口才可以参加链路汇聚,并成为port channel里的某个成员端口。在逻辑上,port group 并不是一个端口,而是一个端口序列。加入port group 中的物理端口满足某种条件时进行端口汇聚,形成一个port channel,这个port channel 具备了逻辑端口的属性,才真正成为一个独立的逻辑端口。端口汇聚是一种逻辑上的抽象过程,将一组具备相同属性的端口序列,抽象成一个逻辑端口。port channel是一组物理端口的集合体,在逻辑上被当作一个物理端口。对用户来讲,完全可以将这个port channel 当作一个端口使用,因此不仅能增加网络的带宽,还能提供链路的备份功能。
  端口汇聚功能通常在交换机连接路由器、主机或者其他交换机时使用。
  port channel 的带宽为4 个端口带宽的总和。而s1如果有流量要经过port channel 传输到s2,s1 的portchannel 将根据流量的源mac 地址及目的mac地址的最低位进行流量分配运算,根据运算结果决定由port channel 中的某一成员端口承担该流量。当port channel 中的一个端口连接失败,原应该由该端口承担的流量将再次通过流量分配算法分配给其他连接正常的端口分担。流量分配算法由交换机的硬件决定的。
  为使port channel 正常工作,port channel 的成员端口必须具备以下相同的属性:
  1 端口均为全双工模式;
  2 端口速率相同;
  3 端口的类型必须一样,比如同为以太口或同为光纤口;
  4 端口同为access 端口并且属于同一个vlan 或同为trunk 端口;
  5 如果端口为trunk 端口,则其allowed vlan 和native vlan 属性也应该相同。

具体操作:

SW006#configure terminal
SW006(config)#interface Port-channel 1
SW006(config-if)#switchport access vlan 100
SW006(config-if)#switchport mode access
SW006(config-if)#exit
SW006(config)#interface range gigabitEthernet 0/1-4
SW006(config-if-range)#switchport access vlan 100
SW006(config-if-range)#switchport mode access
SW006(config-if-range)#channel-group 1 mode on

OPENVPN使用PAM及MYSQL进行用户认证【转】

1.使用PAM模块
PAM简介:
Pluggable Authentication Module (PAM) 是行业标准验证框架。
PAM 为系统管理员提供了选择系统上可用的任何验证服务来执行验证的灵活性。使用 PAM 框架还可以插入新的验证服务模块,并且无需修改应用程序即可使用,

包含帐户管理,用户验证,口令管理,会话管理四个模块.指定如何处理同一个 service-name 和 module-type 的多个定义的关键字。它为下列值之一
required模块测试必须成功。
optional模块测试可以失败。
sufficient如果测试成功,则不执行进一步的测试。

1>OPENVPN服务器端配置:

plugin /usr/sharelib/openvpn-auth-pam.so login //指定模块的位置,该动态链接库在OPENVPN发生包里需要编译
client-cert-not-required //客户端数字证书无需指定
username-as-common-name //用户名作为common name

2>OPENVPN客户端配置:

auth-user-pass

3>服务器设置:
需要增加相应的用户名及密码,使用useradd password命令
重新启动OPENVPN,则在客户端登录OPENVPN的时候会提示输入用户名及密码

2.使用PAM-MYSQL
1>安装MYSQL,添加用户名vpn 密码设置为vpn,用户表为库openvpn中的user

2>安装pam_mysql ,下载位置http://internap.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz

3>配置pam配置文件,在/etc/pam.d中新建openvpn内容如下

auth    required        pam_mysql.so          user=vpn passwd=vpn host=192.168.1.11 db=openvpn table=user usercolumn=username passwdcolumn=password
account required        pam_mysql.so                   user=vpn passwd=vpn host=192.168.1.11 db=openvpn   table=user usercolumn=username   passwdcolumn=password

注意:将pam_mysql.so文件拷入 /lib/security/位置;并且保证系统中有libmysqlclient.so文件,如果连接远程MYSQL数据库无需此文件

4>OPENVPN服务器配置
plugin /usr/sharelib/openvpn-auth-pam.so openvpn 其余配置与上同//加载/etc/pam.d/openvpn配置文件

5>客户端配置与上同

在CentOS上安装配置heartbeat

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等。但是Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon和Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和 Ldirectord。

在家闲着无事,就简单的测试了一下heartbeat,没怎么深入测试,所以本文只会告诉你怎么让heartbeat跑起来,不涉及服务。

安装heartbeat不是个简单的事情,很多文章说可以直接用yum来安装,但我从碟上的安装源以及rpmforge的源中都没有找到heartbeata的包(如果你知道可以告诉我哪个源里面可以直接安装heartbeat),所以我还是从官方网站下载了三个包来进行编译。

编译的顺序是:先Cluster Glue, 再Resource Agents,然后才是Heartbeat。

这个编译可不是个简单的事,它可耗费了我不少时间。首先要安装autoconf, automake,pkgconfig,libxslt-devel等包。configure都没有大问题,都不在话下,都有明确的提示。

第一个不好解决的错误就是

./.libs/libplumb.so: undefined reference to `uuid_parse'
./.libs/libplumb.so: undefined reference to `uuid_generate'
./.libs/libplumb.so: undefined reference to `uuid_copy'
./.libs/libplumb.so: undefined reference to `uuid_is_null'
./.libs/libplumb.so: undefined reference to `uuid_unparse'
./.libs/libplumb.so: undefined reference to `uuid_clear'
./.libs/libplumb.so: undefined reference to `uuid_compare'
collect2: ld returned 1 exit status
gmake[2]: *** [ipctest] Error 1
gmake[2]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib/clplumbing'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1

这个差不多能看出来是uuid方面的包的故障,所以我一开始就想去安装一个libuuid-devel的包,在这个上面消耗了不少时间。但最后通过google与linux-ha的maillist得到了提示,总算是把这个问题给解决了。解决方法其实很简单,只要在configure时在后面加上:

LIBS='/lib/libuuid.so.1'

这个问题在对三个包进行make的时候都会出现类似的错误,所以这个解决方法在make三个包时都要用到。还要提到的是,在对Heartbeat进行configure的时候,最好用他推荐的ConfigureMe而不要用configure。

第二个比较麻烦的问题也是在make时碰到的,不过只是在make Cluster Glue才有:

cc1: warnings being treated as errors 
main.c:64: warning: function declaration isn't a prototype
main.c:78: warning: function declaration isn't a prototype
gmake[2]: *** [main.o] Error 1
gmake[2]: Leaving directory
`/root/Reusable-Cluster-Components-glue-1.0.6/lib/stonith'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.55884 (%build)

这个问题我都估计是Cluster Glue的一个bug,产生的原因与解决的方法实在是太鬼异了。从错误信息上来看,这是main.c文件里面的函数定义错误,解决办法就是将其version函数从stonith子目录下面的main.c文件里面删除(我对编程不懂,不过改名是没用的)。

打开stonith子目录下面的main.c。
1、找到其64行,将其注释掉。
2、找到其76到81行全部注释掉。
3、找到其390行,将其注释,或者换成

case 'V':     printf("stonith: %s (%s)\n", GLUE_VERSION, GLUE_BUILD_VERSION);

这之后来说应该都会是一帆风顺的了,当然你也有可能在make install Heartbeat碰到这个问题:

gmake[1]: Entering directory `/root/Heartbeat-3-0-STABLE-3.0.3/doc'
\
--xinclude \
http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl heartbeat.xml
gmake[1]: --xinclude: Command not found
gmake[1]: *** [heartbeat.8] Error 127
gmake[1]: Leaving directory `/root/Heartbeat-3-0-STABLE-3.0.3/doc'
make: *** [all-recursive] Error 1

这个就是因为你没有安装前面我说的那个libxslt-devel包了。安装好之后就可以。

顺便说一句,在make install Heartbeat的时候,这个–xinclude这些xml文件时可能要耗大量的时间,有时候可能由于网络原因还会报错,这个时候只要再来几次基本上也就没有问题了。

接下来就是重头戏,配置heartbeat了。
heartbeat的配置文件有两个位置/etc/ha.d与/usr/etc/ha.d,由于没有仔细去读/etc/init.d/heartbeat,导致一会儿报这里找不到一个文件一会儿那里找不到一个文件,我干脆就所/usr/etc/ha.d下面的内容全部copy到/etc/ha.d里面,再删掉/usr/etc/ha.d,然后做一个软链接指向/etc/ha.d。整个世界终于清醒了。

然后就是/etc/ha.d/ha.cf文件了,这里我就提供我的ha.cf文件,然后简单的解释一下:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
bcast eth0
#mcast eth1 225.0.0.1 694 1 0
#ucast eth0 192.168.0.1
auto_failback on
watchdog /dev/watchdog
node node1
node node2
ping 172.16.217.1
respawn hacluster /usr/lib/heartbeat/ipfail
compression zlib

debugfile与logfile是定义日志文件的位置,如果两个都没有定义,默认会写入/var/log/message。
keepalive指定心跳间隔时间即每隔多少秒钟在eth0上发送一次广播。
deadtime指定若备用节点在多少秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。
warntime指定心跳延迟的时间为N秒。当N秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍
bcast、mcast与ucast都是定义心跳的,三个任选一个即可。bcast是直接定义使用设备,mcast使用多播,ucast是单播。
auto_failback指定主机恢复后是否自动切换回主机服务。
node后面一定要接uname -n的结果。
ping与respawn hacluster /usr/lib/heartbeat/ipfail用来测试网络连接,ping后面接外网网关或者其他可靠的设备的IP,如果这个IP一旦ping不通了(意味该机的外网down了),则利用respawn调用/usr/lib/heartbeat/ipfail来主动进行切换。

其他的各项定义,大家自己man ha.cf看吧,我也没时间去管那么多了。

接下来就是/etc/ha.d/authkeys。
authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、 md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。
我这里直接用crc,只反注释了下面这两行:

# auth 1 
# 1 crc

最后就是/etc/ha.d/haresources
这个文件里面最有文章,大家可以去参考相关文章,我这里只解释我的(最简单的)

node1 172.16.217.200 httpd

其中的node1定义是主机(active host),172.16.217.200是VIP(虚拟IP,也就是真正对外提供服务的IP),httpd也就是httpd服务。

之后,大家就尽情测试吧。呵呵

NIS详解[转]

来源:http://linux.chinaunix.net/bbs/viewthread.php?tid=78260&extra=page%3D3%26amp%3Bfilter%3Ddigest

网络信息服务(NIS)是集中控制几个系统管理数据库的网络用品。NIS简化了UNIX和LINUX桌面客户的管理工作,客户端利用它可以使用中心服务器的管理文件。桌面系统的用户无需建立他们自己的/etc/passwd,他们只简单的使用维护在NIS服务器的文件即可。

提到NIS不得不先说明一下WINDOWS2000的域控制器,在局域网内有一台WIN2000域控制器,下面有一些机器加入到这个域中,在下的机器登录时,有一个选项是选择登入到本机还时登入到域内(应该是这么说的,有点记不清楚了,大概就是这个了),登入本地的密码有本机控制,但是如果登入域内,密码支有域控制器负责管理。
LINUX也是操作系统,跟WIN2000没有本质的区别,所以仔细读上段话,就能理解NIS是原理是什么样了,这时出现了一个重要的文件/etc/nsswitch.conf

NIS是一个客户机/服务器系统,ypbind是定义NIS服务器的客户端进程。一旦确定了服务器位置,客户机绑定到了服务器上,所以客户端的住处查询都发往服务器。ypserv是回答客户端查询的服务器进程。
Read More »

yum服务器设置 — how to set up a yum repertory server

不得不说,RedHat的确很邪恶,如果我们直接用他自带的系统碟做YUM源的话,总是会得到类似下面的信息:

media://1192656534.547140%232/httpd-2.2.3-11.el5.i386.rpm: [Errno 4] IOError: <urlopen error unknown url type: media>
Trying other mirror.
Error: failed to retrieve httpd-2.2.3-11.el5.i386.rpm from rhel
error was [Errno 4] IOError: <urlopen error unknown url type: media>

不过,还好Linux是开源的,我们可以自己RH的rpm包自己来架设一个源。

首先,我们按照他的目前结构把光盘上所有的文件拷贝一份到服务器上(假设服务器目录为/yumrepo)

# mount /dev/cdrom /mnt
# cp -ar /mnt/* /yumrepo

然后,我们要先安装一个RPM包才能开始架设YUM仓库

# cd /yumrepo/Server
# rpm -ihv createrepo-0.4.4-2.fc6.noarch.rpm
warning: createrepo-0.4.4-2.fc6.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:createrepo             ########################################### [100%]

这个包安装之后,会生成一个新的命令:/usr/bin/createrepo,而这个命令是我下面必须要用到的。
首先生成最重要的东西,是最基本的RPM:

#cd /yumrepo/Server
# cp repodata/comps-rhel5-server-core.xml /root
# rm -rf repodata
# createrepo -g  /root/comps-rhel5-server-core.xml  .
2159/2159 - xorg-x11-drv-cyrix-1.1.0-4.i386.rpm       
Saving Primary metadata
Saving file lists metadata
Saving other metadata

comps-rhel5-server-core.xml这个文件保存的是分组的信息,这个是createrepo这个命令不能自动生成的,我们要先把这个信息保存下来。

然后其他的几个目录,Cluster,ClusterStorage,VT也按上面的方法做一次,要注意的是comps-rhel5-server-core.xml这个文件名会不相同,但都以comps开头。我们的YUM仓库到这里也就建好了。

接下来,我们要做的就是要设置/etc/yum.repo.d里面的内容了,大家按我这个里面的写就是:

[Server]
name=Red Hat Enterprise Linux Server Core
baseurl=file:///yumrepo/Server
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[VT]
name=Red Hat Enterprise Linux Virtual Technology
baseurl=file:///yumrepo/VT
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[Cluster]
name=Red Hat Enterprise Linux Cluster
baseurl=file:///yumrepo/Cluster
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[ClusterStorage]
name=Red Hat Enterprise Linux Cluster Storage
baseurl=file:///yumrepo/ClusterStorage
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

当然,你也可以通过http与ftp方式把这个目录发布出去,那只要把相关的file:///yumrepo/这部分修改一下就可以了。

PS:
也可以修改这个文件:/usr/lib/python2.4/site-packages/yum/yumRepo.py中的411行来直接使用光盘做YUM仓库
比如我们上面的例子中,可改为:

remote = url + '/' + relative

改为:

remote = “/mnt” + '/' + relative

其中mnt为你光盘的挂载点