Author Archive sagazhang

Bysagazhang

sendmail 配置笔记

sendmail作为一个优秀的MTA,一直是UNXI系统中缺省的邮件服务器。因为sendmail只是一个邮件代理传输软件,并不附带常见的WEB接收发送的功能,所以我们可以利用openwebmail实现WEB接收发送的功能

安装sendmail
# rpm –ivv sendmail* (在第一张光盘,和第三张光盘上。)
#/etc/init.d/sendmail start 启动服务
1. 添加邮件虚拟主机
#cd /etc/mail
# vi local-host-names ,在里面添加邮件虚拟主机
linuxhero.com
2.打开SMTP的外部连接
#vi /etc/mail/sendmail.cf
将O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA,改为如下:
O DaemonPortOptions=Port=smtp,Addr=192.168.0.230, Name=MTA
这样是为了在192.168.0.230端口上监听请求
3.打开SMTP发信认证
#vi /etc/mail/sendmail.mc
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
将其改为如下:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
重启sendmail
service sendmail restart
4.打开系统POP3功能
#vi /etc/xinetd.d/ipop3
将disable = yes, 将yes改为no
#service xinetd restart 重新启动xinetd进程
添加虚拟用户
#useradd –s /sbin/nologin nestseek
#passwd netseek
#vi /etc/mail/virtusertable
webmaster@linuxhero.com linuxhero_com
cnseek@linuxhero.com netseek
5.运行makemap命令为virtusertable重新建立数据库映谢。
#cd /etc/mail
#makemap hash virtusertable.db < virtusertable

三.OpenWebmail的安装:
安装支持软件
# rpm -Uvh perl-CGI-2.81-88.i386.rpm
# rpm -ivh perl-Text-Iconv-1.2-RH80.i386.rpm
# rpm -ivh perl-suidperl-5.8.0-88.i386.rpm

安装OpenWebmail:
#rpm -ivh openwebmail-2.51-1.i386.rpm
warning: openwebmail-2.51-1.i386.rpm: V3 DSA signature: NOKEY, key ID cfb164d8
Preparing… ########################################### [100%]
1:openwebmail ########################################### [100%]
安装完后,会在/var/www/cgi-bin目录下创建一个openwebmail(该目录保存系统运行是需要的数程序),在/var/www/data目录下也创建了一个openWebmail的目录,该目录保存了一些页面。

OpenWemail的设置
# cd /var/www/cgi-bin/openwebmail/etc
#vi defaults/dbm.conf
将如下:

dbm_ext .db
dbmopen_ext none
dbmopen_haslock no
改成

dbm_ext .db
dbmopen_ext .db
dbmopen_haslock yes
保存退出。
#cd .. 退到上一级目录
#./openwebmail-tool.pl -–init
出现如下信息:
Base64.pm /usr/lib/perl5/5.8.0/i386-linux-thread-multi/MIME/Base64.pm

Your MIME::Base64 module is too old (2.12),
please update to 3.00 or later.
./openwebmail-tool.pl –init
说我的Base64 module 版本太低,要下载更新3。0或以上的版本:
我下载了一个新包:CGI.pm-3.05.tar.gz,进行安装.
# tar -zxvf MIME-Base64-3.05.tar.gz
# cd MIME-Base64-3.05
#cat REDME 查看安装说明,按照里面的说明做
[root@linuxhero CGI.pm-3.05]# perl Makefile.PL
Checking if your kit is complete…
Looks good
Writing Makefile for CGI
# make
# make test 测试
# make install
安装完后,现在执行上面的操作:
#cd /var/www/cgi-bin/openwebmail
#./openwebmail-tool.pl –-init
安装完成
四,企业实战方案:
要求:1,启用虚拟域名mail.linuxhero.com(DNS设置见“linux全能web服务器”)
2.将linuxhero_com用户映射成为webmaster.
3.通过web收发邮件测试
配置Openwebmail的虚拟主机(mail.linuxhero.com)
#vi /usr/local/httpd/conf/httpd.conf ,在里面添加如下:
#mail.linuxhero.com
<VirtualHost 192.168.0.230:80>
ServerAdmin webmaster@linuxhero.com
DocumentRoot /var/www/cgi-bin/openwebmail
ServerName mail.linuxhero.com
DirectoryIndex openwebmail.pl
ErrorLog /home/linuxhero_com/logs/error_log
CustomLog /home/linuxhero_com/logs/access_log common
alias /data /var/www/data
alias /cgi-bin /var/www/cgi-bin
<Location />
Options ExecCGI
</Location>
<Location /cgi-bin>
Options ExecCGI
</Location>
</VirtualHost>
保存退出。

Bysagazhang

配置DHCP笔记

rpm -qa|grep dhcp
检查是否安装了DHCP

mount /mnt/cdrom
如果未安装DHCP可以用此命令挂接光驱,以便于从光盘安装。

cd /mnt/cdrom/RedHat/RPMS
DHCP的rpm包存放于RdeHat Linux第二张安装光盘中。

rpm -ivh dhcp-3.0pl1-23.i386.rpm
安装DHCP所需的文件。

/usr/share/doc/dhcp-3.0pl1/dhcpd.conf.sample

默认情况下Red Hat Linux下DHCP配置文件不存在,但是有模板文件可以参考,以上为此模板文件的位置。

以下我们查看此文件并注解:

ddns-update-style interim;
[ 配置使用过度性 DHCPDNS 互动更新模式。]

ignore client-updates;

[忽略客户端更新。]

subnet 192.168.0.0 netmask 255.255.255.0 { [设置子网声明。]

# — default gateway

option routers 192.168.0.1; [为客户机设置默认网关。]
option subnet-mask 255.255.255.0; [为客户机设置子网掩码。]

option nis-domain "domain.org"; [为客户端设置NIS域。]
option domain-name "domain.org"; [为客户端设置DNS域。]
option domain-name-servers 192.168.1.1; [为客户端设置DNS服务器地址。]

option time-offset -18000; [设置与格林威治时间偏移。] # Eastern Standard Time

# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;

# — Selects point-to-point node (default is hybrid). Don't change this unless

# — you understand Netbios very well

# option netbios-node-type 2;

range dynamic-bootp 192.168.0.128 192.168.0.255; [设置地址池。]
default-lease-time 21600; [设置客户端默认地址租约期。]

max-lease-time 43200; [设置客户端最长地址租约期。]

# we want the nameserver to appear at a fixed address

host ns {

next-server marvin.redhat.com;
[设置用于定义服务器从引导文件装入的主机名,用于无盘站。]
hardware ethernet 12:34:56:78:AB:CD;
[指定客户端的MAC地址。]
fixed-address 207.175.42.254; [对于指定的MAC地址分配固定的IP地址。]
}

}

以上是这篇模版文件的示例,其中我们知道#号所在行是一些注解和建议,例如(# option ntp-servers 192.168.1.1;)也可以去除#号直接为客户端设置NTP协议。

通过此模板我们可以编辑自己的DHCP配置文件,之后此文件应当以:

/etc/dhcpd.conf

的位置存放,以下我们以一篇实际的dhcp.conf文件为例查看下配置:

ddns-update-style interim;
ignore client-updates;

default-lease-time 21600;
max-lease-time 43200;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name "bite.edu";
option domain-name-servers 192.168.1.1,192.168.1.254;
option time-offset -18000;

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.10 192.168.1.100;
range 192.168.1.150 192.168.1.200;
}

group {
host 001 {

option host-name"001.bite.edu";
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 192.168.1.10;
}

host 002 {

option host-name"002.bite.edu";
hardware ethernet 12:34:56:78:AB:DE;
fixed-address 192.168.1.11;
}

}

其中,group代表为一组参数实现声明,从 group -> } 一段也可以等价于:

group {
use-host-decl-names on;
host 001 {

hardware ethernet 12:34:56:78:AB:CD;
fixed-address 192.168.1.10;
}

host 002 {

hardware ethernet 12:34:56:78:AB:DE;
fixed-address 192.168.1.11;
}

}

注意,如果为 Windows 客户端提供DHCP服务,建议不要使用 use-host-decl-names on 和 option host-name 配置!

启动DHCP服务:

service dhcpd start
G:立即启动。

pstree|grep dhcpd
G:检验dhcpd是否被启动(返回结果应该为:|-dhcpd)。

利用ntsysv工具选择dhcpd可实现计算机启动时自动运行此服务。

技巧:

(1)为指定的网络接口启动DHCP服务器

如果系统中连接了不止一个网络接口,可是想让DHCP在其中一个之上启动,可以配置 /etc/sysconfig/dhcpd ,将网络接口的名称添加到DHCPDARGS选项中,最简捷的命令是:

echo "DHCPDARGS=eth0" >> /etc/sysconfig/dhcpd

如果用户有一个带有头两个网卡的防火墙主机,这种方法就会大派用场。一个网卡(eth1)可以配置成DHCP客户来从互联网检索获取IP地址;另一个网卡(eth0)可以被用作防火墙之后的内部网络的DHCP服务器。仅指定连接到内部网络的网卡是系统更加安全,因为用户无法通过互联网来连接它的DHCP守护进程。

(2)Linux的客户端配置使用DHCP获取地址

修改 /etc/sysconfig/network 文件,应该包含以下行:NETWORKING=yes
这个文件中可能有更多信息,但是如果想在引导时启动互联网,NETWORKING变量必须被设置为yes。
最简捷的操作是:
ehco "NETWORKING=yes" > /etc/sysconfig/network

修改/etc/sysconfig/network-scripts/ifcfg-eth0(具体为ifcfg-eth某某网卡接口)文件,应该包含以下几行:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
可以使用vi来编辑以上文件

(3)DHCP中继代理

由于DHCP是广播型服务,所以跨越子网时无法使用,要使不同子网的DHCP服务通过,方法有三种:
每个子网一个DHCP服务器
使用路由器的中继功能
为每个子网设置一台计算机作为中继代理

中继代理无需路由器支持,客户机发送请求到中继代理,中继代理代为联系另外子网中的DHCP服务器,之后将结果返回客户机。

除非使用INTERFACES指令在 /etc/sysconfig/dhcprelay 文件中指定了接口,中继代理能力在所有接口上监听DHCP请求。
启动DHCP中继代理的命令是:
service dhcrelay start

Bysagazhang

linux配置squid代理服务器

首先安装squid

1.基本配置

安装完成后,接下来要对Squid的运行进行配置。所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。

在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为192.168.0.1,外部网络接口eth1的IP地址为202.103.x.x。下面是一个基本的代理所需要配置选项:

http_port 192.168.0.1:3128

默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。

下面的配置选项是服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系:

cache_mgr user@xxx.com

以下这些参数告诉Squid缓存的文件系统、位置和缓存策略:

cache_dir ufs /var/squid
cache_mem 32MB
cache_swap_low 90
cache_swap_high 95

在这里,Squid会将/var/squid目录作为保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。如果不想Squid缓存任何文件,如某些存储空间有限的专有系统,可以使用null文件系统(这样不需要那些缓存策略):

cache_dir null /tmp

下面的几个关于缓存的策略配置中,较主要的是第一行,即用户的访问记录,可以通过分析它来了解所有用户访问的详尽地址:

cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log

下面这行配置是在较新版本中出现的参数,告诉Squid在错误页面中显示的服务器名称:

visible_hostname No1.proxy

以下配置告诉Squid如何处理用户,对每个请求的IP地址作为单独地址处理:

client_mask 255.255.255.255

如果是普通代理服务器,以上的配置已经足够。但是很多Squid都被用来做透明代理。所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。相关的选项有以下几个:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_user_host_header on

在Linux上,可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口3128,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:

iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp –dport 80 -j REDIRECT 3128

就是将192.168.0.200的所有针对80端口的访问重定向到3128端口。

所有设置完成后,关键且重要的任务是访问控制。Squid支持的管理方式很多,使用起来也非常简单(这也是有人宁愿使用不做任何缓存的Squid,也不愿意单独使用iptables的原因)。Squid可以通过IP地址、主机名、MAC地址、用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口、URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理,所以访问控制是Squid配置中的重点。Squid用ACL(Access Control List,访问控制列表)对访问类型进行划分,用http_access deny 或allow进行控制。根据需求首先定义两组用户advance和normal,还有代表所有未指明的用户组all及不允许上网的baduser,配置代码如下:

acl advance 192.168.0.2-192.168.0.10/32
acl normal src 192.168.0.11-192.168.0.200/32
acl baduser src 192.168.0.100/32
acl baddst dst www.abc.com
acl all src 0.0.0.0/0

http_access deny baduser
http_access allow advance
http_access allow normal

可以看出,ACL的基本格式如下:

acl 列表名称 控制方式 控制目标

比如acl all src 0.0.0.0/0,其名称是all,控制方式是src源IP地址,控制目标是0.0.0.0/0的IP地址,即所有未定义的用户。出于安全考虑,总是在最后禁止这个列表。

下面这个列表代表高级用户,包括IP地址从192.168.0.2到192.168.0.10的所有计算机:

acl advance 192.168.0.2-192.168.0.20/32

下面这个baduser列表只包含一台计算机,其IP地址是192.168.0.100:

acl baduser 192.168.0.100/32

ACL写完后,接下来要对它们分别进行管理,代码如下:

http_access deny baduser
http_access allow advance
http_access allow normal

上面几行代码告诉Squid不允许baduser组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由于Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺序颠倒,由于baduser在normal范围中,Squid先允许了所有的normal,那么再禁止baduser就不会起作用。

特别要注意的是,Squid将使用allow-deny-allow-deny……这样的顺序套用规则。例如,当一个用户访问代理服务器时,Squid会顺序测试Squid中定义的所有规则列表,当所有规则都不匹配时,Squid会使用与最后一条相反的规则。就像上面这个例子,假设有一个用户的IP地址是192.168.0.201,他试图通过这台代理服务器访问Internet,会发生什么情况呢?我们会发现,他能够正常访问,因为Squid找遍所有访问列表也没有和192.168.0.201有关的定义,便开始应用规则,而最后一条是deny,那么Squid默认的下一条处理规则是allow,所以192.168.0.201反而能够访问Internet了,这显然不是我们希望的。所以在所有squid.conf中,最后一条规则永远是http_access deny all,而all就是前面定义的“src 0.0.0.0”。

2.高级控制

前面说过,Squid的控制功能非常强大,只要理解Squid的行为方式,基本上就能够满足所有的控制要求。下面就一步一步来了解Squid是如何进行控制管理的。

通过IP地址来识别用户很不可靠,比IP地址更好的是网卡的MAC物理地址。要在Squid中使用MAC地址识别,必须在编译时加上“–enable-arp-acl”选项,然后可以通过以下的语句来识别用户:

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b …

它直接使用用户的MAC地址,而MAC地址一般是不易修改的,即使有普通用户将自己的IP地址改为高级用户也无法通过,所以这种方式比IP地址可靠得多。

假如不想让用户访问某个网站应该怎么做呢?可以分为两种情况:一种是不允许访问某个站点的某个主机,比如ok的主机是ok.sina.com.cn,而其它的新浪资源却是允许访问的,那么ACL可以这样写:

acl sinapage dstdomain ok.sina.com.cn
… …
http_access deny ok
… …

由此可以看到,除了ok,其它如www.sina.com.cn、news.sina.com.cn都可以正常访问。

另一种情况是整个网站都不许访问,那么只需要写出这个网站共有的域名即可,配置如下:

acl qq dstdomain .tcccent.com.cn

注意tcccent前面的“.”,正是它指出以此域名结尾的所有主机都不可访问,否则就只有tcccent.com.cn这一台主机不能访问。

如果想禁止对某个IP地址的访问,如202.118.2.182,可以用dst来控制,代码如下:

acl badaddr dst 202.118.2.182

当然,这个dst也可以是域名,由Squid查询DNS服务器将其转换为IP。

还有一种比较广泛的控制是文件类型。如果不希望普通用户通过代理服务器下载MP3、AVI等文件,完全可以对他们进行限制,代码如下:

acl mmxfile urlpath_regex .mp3$ .avi$ .exe$
http_access deny mmxfile

看到regex,很多读者应该心领神会,因为这条语句使用了标准的规则表达式(又叫正则表达式)。它将匹配所有以.mp3、.avi等结尾的URL请求,还可以用-i参数忽略大小写,例如以下代码:

acl mmxfile urlpath_regex -i .mp3$

这样,无论是.mp3还是.MP3都会被拒绝。当然,-i参数适用于任何可能需要区分大小写的地方,如前面的域名控制。

如果想让普通用户只在上班时间可以上网,而且是每周的工作日,用Squid应当如何处理呢?看看下面的ACL定义:

acl worktime time MTWHF 8:30-12:00 14:00-18:00
http_access deny !worktime

首先定义允许上网的时间是每周工作日(星期一至星期五)的上午和下午的固定时段,然后用http_access 定义所有不在这个时间段内的请求都是不允许的。

或者为了保证高级用户的带宽,希望每个用户的并发连接不能太多,以免影响他人,也可以通过Squid控制,代码如下:

acl conncount maxconn 3
http_access deny conncount normal
http_access allow normal

这样,普通用户在某个固定时刻只能同时发起三个连接,从第四个开始,连接将被拒绝。

总之,Squid的ACL配置非常灵活、强大,更多的控制方式可以参考squid.conf.default。

3.总结

下面把整个squid.conf总结一下:

# 服务器配置
http_port 192.168.0.1:3128
cache_mgr user@xxx.com
cache_dir null /tmp
cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log
visible_hostname No1.proxy
client_mask 255.255.255.255
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_user_host_header on

# 用户分类
acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b …
acl normal proxy_auth REQUIED
acl all src 0.0.0.0

# 行为分类
acl mmxfile urlpath_regex .mp3$ .avi$ .exe$
acl conncount maxconn 3
acl worktime time MTWHF 8:30-12:00 14:00-18:00
acl sinapage dstdomain ok.sina.com.cn
acl qq dstdomain .tcccent.com.cn

# 处理
http_access allow advance
http_access deny conncount normal
http_access deny !worktime
http_access deny mmxfile
http_access deny sinapage
http_access deny qq
http_access allow normal

配置后的状况是,advance组可以不受任何限制地访问Internet,而normal组则只能在工作时间上网,而且不能下载多媒体文件,不能访问某些特定的站点,而且发送请求不能超过3个。

通过本文的介绍,它可以了解Squid的基本能力。当然,它的能力远不止此,可以建立强大的代理服务器阵列,可以帮助本地的Web服务器提高性能,可以提高本地网络的安全性等。要想发挥它的功效,还需要进一步控制。