sendmail限制用户发送的邮件的大小

之前在一份国赛的试题上看到有一题要求限制sendmail发送邮件的附件大小,但是我翻遍了百度和谷歌,试遍了各种方法,也询问了来学校培训Linux的两位老师及外校一名久负盛名的指导教师,均未能得到有效答案。
记忆犹新的是,当我和其中一位培训老师说,我试遍了各种方法也行不通,想请老师指点的时候,对方直接抛给我一句话:我不知道,但这个题目已经考了好几次了,你在质疑赛题的准确性?自己百度去。。。汗。。。
最后我不得不妥协一步,既然无法限制附件的大小,那我直接限制整封邮件的大小好啦(邮件大小=正文+附件+邮件信息等附加内容的大小总和)。
编辑sendmail的/etc/mail/sendmail.cf配置文件

# vim /etc/mail/sendmail.cf

转到第186行(因软件版本号不同位置可能略有不同,可在vim中搜索关键字来查找),可以看到如下内容(翻译成中文是,每条消息的最大大小):

将# O MaxMessageSize=0选项前的注释去掉,其参数值就是每封邮件的最大值,单位是KB。例如,我想限制用户只能发送2MB大小的邮件则可以将其修改为如下形式:

O MaxMessageSize=2048

保存退出后直接重启sendmail服务就可以,不需要使用m4工具重新生成sendmail.cf文件,因为我们编辑的就是sendmail.cf文件。

# service sendmail restart

最后,尽情测试吧。

浅析邮件服务器原理

上面的架构图中包含两组邮件系统、两个客户端和一个DNS服务器,其中的邮件系统是企业中比较经典的架构形式,下面我将依据此图来简述邮件服务器的工作流程。

名词解释:

  • MUA 接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信,常见的有:outlook、foxmail;
  • MTA 通过SMTP协议发送、转发邮件,常见的有:sendmail、postfix、qmail;
  • MDA 将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描;
  • MRA 负责实现IMAP与POP3协议,与MUA进行交互;
  • SMTP 传输发送邮件所使用的标准协议;
  • IMAP 接收邮件使用的标准协议之一;
  • POP3 接收邮件使用的标准协议之一;
  • MailBox 用户邮箱;
  • cyrus-SASL及courier-authlib 提供用户认证相关的支持。
  • SQL 数据库,用于存储用户身份信息

前面的架构图中,MUA想发送邮件,就要将邮件通过SMTP协议送到MTA上,MTA通常会要求用户认证身份(也可不认证),认证通常使用SASL,认证源可以是像上面的架构图中那样使用SQL数据库也可以使用其他方式。MTA收到邮件后会检查邮件目的地址的邮件域,此时会产生两种情况。
情况一,目的邮件域是本服务器:
如果发现是本服务器的邮件域则将邮件送到MDA,由MDA将其投递到用户的邮箱(MailBox)中。最后用户在MUA上使用POP3/IMAP协议链接MRA,MRA通常也会要求用户认证身份,其认证源同MTA一样可以是SQL也可以是其他方式,若认证通过,则允许MUA读取邮件信息。
情况二,目的邮件域非本服务器:
若是邮件域是其他邮件服务器的,则MTA会发送UDP报文向DNS服务器查询邮件域对应的邮件主机,并最终解析出其IP地址,随后MTA会查询本服务器的转发控制策略,若允许转发,则将邮件转发到该域对应的服务器上,最终会重复情况一中MTA收到邮件后的处理方式。

sendmail邮件传输服务器

前言:

sendmail是UNIX和Linux下的老牌邮件传输代理程序(MTA),以稳定著称,一个调教的好的sendmail服务器能承受很大的任务量,其在企业中也比较常用。
本专题将向你介绍sendmail服务器的配置方法及配置过程中的注意事项。

实验环境:

服务器操作系统:CentOS 6.5
所用软件包:sendmail-8.14.4-8.el6.x86_64、sendmail-cf-8.14.4-8.el6.noarch、dovecot-2.0.9-7.el6.x86_64、bind-9.8.2-0.17.rc1.el6_4.6.x86_64、cyrus-sasl-plain.x86_64 0:2.1.23-13.el6_3.1、cyrus-sasl-devel.x86_64 0:2.1.23-13.el6_3.1
客户端操作系统:Windows 7
邮件客户端:FoxMail

文章列表:

一、邮件服务器工作原理浅析
二、使用sendmail搭建简单邮件传输服务
三、使用dovecot搭建简单邮件接收代理服务
四、sendmail开启基于sasl的smtp认证
五、sendmail下的邮件转发控制
六、sendmail下的邮件群发配置
七、用户邮箱大小限制
八、限制每封邮件的大小

常见问题及解决方案:

一、sendmail启动缓慢的解决方法
 
本专题内文章均为原创,谢绝转载。

vsftpd配置文件中各种选项的中文解释

参数 说明
listen_address=ip address 指定侦听IP
listen_port=port_value 指定侦听端口,默认21
anonymous_enable=YES 是否允许使用匿名帐户
local_enable=YES 是否允许本地用户登录
nopriv_user=ftp 指定vsftpd服务的运行帐户,不指定时使用ftp
write_enable=YES 是否允许写入
anon_upload_enable=YES 匿名用户是否可上传文件
anon_mkdir_write_enable=YES 匿名用户是否建立目录
dirmessage_enable=YES 进入每个目录是显示欢迎信息,在每个目录下建立.message文件在里面写欢迎信息
xferlog_enable=YES 上传/下载文件时记录日志
connect_from_port_20=YES 是否使用20端口传输数据(是否使用主动模式)
chown_uploads=YES、chown_username=whoever 修改匿名用户上传文件的拥有者
xferlog_file=/var/log/vsftpd.log 日志文件
xferlog_std_format=YES 使用标准文件日志
idle_session_timeout=600 会话超时,客户端连接到ftp但未操作
data_connection_timeout=120 数据传输超时
async_abor_enable=YES 是否允许客户端使用sync等命令
ascii_upload_enable=YES、ascii_download_enable=YES 是否允许上传/下载二进制文件
chroot_local_user=YES 限制所有的本地用户在自家目录
chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list 指定不能离开家目录的用户,将用户名一个一行写在/etc/vsftpd/chroot_list文件里,使用此方法时必须chroot_local_user=NO
ls_recurse_enable=YES 是否允许使用ls -R等命令
listen=YES 开启ipv4监听
listen_ipv6=YES 开启ipv6监听
pam_service_name=vsftpd 使用pam模块控制,vsftpd文件在/etc/pam.d目录下
userlist_enable=YES 此选项被激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,vsftpd查到该用户名在列表中,vsftpd就直接禁止掉该用户,不会再进行询问密码等后续步聚
userlist_deny=YES 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO,只允许在文件中的用户登录FTP服务器
tcp_wrappers=YES 是否允许tcp_wrappers管理
local_root=/home/ftp 所有用户的根目录,,对匿名用户无效
anon_max_rate 匿名用户的最大传输速度,单位是Byts/s
local_max_rate 本地用户的最大传输速度,单位是Byts/s
download_enable= YES 是否允许下载

使Linux程序在后台运行,即便SSH断开也不中断进程

有时候需要在Linux服务器上执行一些运算脚本,这些脚本通常要几个小时才能完成计算。而连接服务器的SSH一旦断开,脚本进程就会被系统立即杀死,但我们总不能把SSH一直挂着等待脚本执行结果吧?
这里可以使用nohup命令来防止在SSH中断时进程被杀死,命令格式如下。

# nohup 接命令

例如:

# nohup ping www.baidu.com

之后程序会提示说,命令的输出已经被重定向到nohup.out文件中了。

此时命令依然是运行在前台,可以使用Ctrl+Z组合键将进程挂起。

再使用bg+进程编号来将进程转入后台运行。

# bg 1


需要查看命令的输出怎么办?那自然是查看nohup.out文件的内容啦。

# cat nohup.out

神州数码路由器下IPSec VPN配置方法简介

IPSec介绍:
IPSec是由IETF制定的,用于保障在internet上传输数据的安全保密性的框架协议。
下面将使用一个实例来演示IPSec的配置过程。
设备清单:

DCR-2655路由器两台
PC机两台

拓扑:

IP地址表:

R1:
f0/0 192.168.0.1/24
s0/1 192.168.1.1/24
R2:
f0/0 192.168.2.1/24
s0/2 192.168.1.2/24
PC1:
192.168.0.2/24
PC2:
192.168.2.2/24

show running-config:
R1:

!
hostname R1
!
!
gbsc group default
!
!
crypto isakmp key password 192.168.1.2 255.255.255.255      #配置IKE预共享密钥与对端IP
!
!
crypto isakmp policy 10                                     #配置IKE策略
 hash md5                                                   #设置数字签名算法
!
crypto ipsec transform-set one                              #设置变换集
 transform-type esp-des esp-md5-hmac                        #设置加密算法与变换类型
!
crypto map my 10 ipsec-isakmp                               #配置加密映射表
 set peer 192.168.1.2                                       #设置对等体的IP地址
 set transform-set one                                      #关联变换集
 match address 101                                          #指定要加密的流量
!
!
interface FastEthernet0/0
 ip address 192.168.0.1 255.255.255.0
 no ip directed-broadcast
!
interface GigaEthernet0/3
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/4
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/5
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/6
 no ip address
 no ip directed-broadcast
!
interface Serial0/1
 ip address 192.168.1.1 255.255.255.0
 no ip directed-broadcast
 crypto map my                                             #将加密映射表应用到端口
!
interface Serial0/2
 no ip address
 no ip directed-broadcast
!
interface Async0/0
 no ip address
 no ip directed-broadcast
!
!
ip route default 192.168.1.2
!
!
ip access-list extended 101
 permit ip 192.168.0.0 255.255.255.0 192.168.2.0 255.255.255.0
!

R2:

!
hostname R2
!
!
gbsc group default
!
!
crypto isakmp key password 192.168.1.1 255.255.255.255      #预共享密钥要与R1一致
!
!
crypto isakmp policy 10                                     #IKE策略配置要与R1一致
 hash md5
!
crypto ipsec transform-set one
 transform-type esp-des esp-md5-hmac                        #变换集加密算法及变换类型要与R1一致
!
crypto map my 10 ipsec-isakmp                               #密钥协商方式要与R1一致
 set peer 192.168.1.1
 set transform-set one
 match address 101
!
!
interface FastEthernet0/0
 ip address 192.168.2.1 255.255.255.0
 no ip directed-broadcast
!
interface GigaEthernet0/3
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/4
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/5
 no ip address
 no ip directed-broadcast
!
interface GigaEthernet0/6
 no ip address
 no ip directed-broadcast
!
interface Serial0/1
 no ip address
 no ip directed-broadcast
!
interface Serial0/2
 ip address 192.168.1.2 255.255.255.0
 no ip directed-broadcast
 crypto map my
 physical-layer speed 64000
!
interface Async0/0
 no ip address
 no ip directed-broadcast
!
!
ip route default 192.168.1.1
!
!
ip access-list extended 101
 permit ip 192.168.2.0 255.255.255.0 192.168.0.0 255.255.255.0
!

测试:
查看安全联盟信息。

R1#show crypto ipsec sa


打印出安全联盟的信息既是成功建立安全联盟,若没有成功建立则仅会返回如下的信息。

使用PC1 ping PC2,ping通既完成本实验(开始时会超时,耐心等待一会)。

名词解释:
IKE:
简而言之,IKE是用来协商并建立安全联盟的,两端都需要设置一个预共享密钥来认证对方身份。当然,也可以不使用IKE而使用手工方式建立安全联盟,本文中不讨论这种形式。
变换集:
变换集是用来加密传输的数据的(需指定加密算法与变换类型),加密时两端会使用非对称密钥,比较安全。
主要配置步骤及相关命令:
一、确定要经过VPN保护的数据流量

使用访问控制列表定义即可。

二、IKE策略设置

crypto isakmp policy 优先级<1-1000>

其下包含的命令:

authentication -- 设置验证方法
encryption -- 设置加密算法
group -- 设置Diffie-Hellman小组
hash -- 设置完整性算法
lifetime -- 设置ISAKMP SA的生命周期

三、设置IKE预共享秘钥

crypto isakmp key 密钥 对端IP 对端IP的掩码(默认是32位)

四、变换集设置

crypto ipsec transform-set 变换集名称

其下包含的命令:

mode -- 封装模式
transform-type -- 变换类型

五、配置IPSec加密映射(自动协商)

crypto map 映射表名称 序列号 ipsec-isakmp<自动协商密钥,手工配置为ipsec-manual>

其下包含的命令:

id -- 设置身份验证参数
match -- 匹配值
mode -- ISAKMP采用模式
set -- 设置加/减密参数

六、进入接口,应用IPSec加密映射

interface 接口名
crypto map 映射表的名称

做AC三层发现实验时用到的DHCP option 43选项详解

DHCP的option 43选项是告诉AP,AC的IP地址,让AP寻找AC进行注册。
option 43值形如:

option 43 hex 0104C0A801FD

其中,hex代表十六进制,其后的数值中,0104是固定形式(神州数码设备如此),随后的是AC的IP地址的十六进制形式。
上面的例子代表的IP是192.168.1.253。192的十六进制是C0,168的十六进制是A8,1的十六进制是01,253的十六进制是FD。

记录一个防火墙端口ping不通的问题

头一次接触防火墙,照着手册一顿配置后发现计算机ping不通网关(网关为防火墙三层端口)???
最后索性在防火墙上ping了下计算机,咦~是通的,这起码证明它们俩的通信应该是没问题,那问题的原因应该是防火墙上禁ping了。
查看了下防火墙的端口配置页面,发现了这个小细节。

本着试试看的心态,勾上了这个复选框之后再次尝试ping防火墙的端口,终于终于通了~~~

使用匿名用户登录vsftpd服务器时提示:500 OOPS: vsftpd: refusing to run with writable anonymous root

这个错误是由于你为FTP的根目录赋予了777权限,vsftpd的安全机制是不允许这种“不安全”的操作的,解决办法自然是对其稍稍进行一些限制啦。

[root@localhost ~]# chmod 755 /var/ftp

但此文件夹的所有者是root用户的,那如果又想让匿名用户具有上传权限要怎么做?
可以在/var/ftp目录下面再新建一个目录并赋予其777权限。总之,只要/var/ftp这个目录的权限不瞎改,其下面的其他文件或文件夹的权限可以随意~
还有,在/etc/vsftpd/vsftpd.conf配置文件中有一条:

anon_root=/var/ftp

这个选项是用于定义匿名用户的默认文件夹的,此选项的参数必须是和/etc/passwd文件中ftp用户的家目录一致,否则也会出现本文中所述的错误。

中国万网正品虚拟主机代购-本人自营

中国万网是国内最大的域名主机提供商(现被阿里巴巴旗下的阿里云计算子公司收购,其是国内最大的云计算提供商)。
中国万网的品牌历史悠久质量相当靠谱,其产品基本代表了国内虚拟机的最高品质,相应的售价也是高的离谱~
还好,这个世界上有一种价格叫做“代理价”,它总是会比“官网价”便宜那么一丢丢~我这里代购的中国万网虚拟主机平均优惠40%!!!
注:下文中展示的是原中国万网“云虚拟主机”系列产品,自中国万网被阿里云收购后此线产品已经被下架,但依然可以通过代理渠道购买,且可正常续费。所有产品均为官方正版,使用中国万网自主研发的虚拟主机控制面板,可打阿里云客服电话查询真伪。
如需备案,可访问http://beian.aliyun.com享受阿里云官方的免费备案服务(需购买中国万网或阿里云的产品才可享受)。
购买联系QQ:1642491905,可走淘宝~

CentOS 6下创建和管理软RAID

RAID介绍:
磁盘阵列既本文中所讲的RAID,其具有提高磁盘操作效率及容错的功能。RAID分为硬RAID和软RAID,硬RAID是基于磁盘阵列卡的,而软RAID则是使用软件管理,本文中所述的RAID属于软RAID。
各个RAID类型的简单介绍:

RAID0:至少需要两块磁盘,提高读写性能,没有容错能力。磁盘利用率为:100%
RAID1:至少需要两块硬盘,镜像数据,具有容错能力,读的性能提升,写的性能下降。磁盘利用率为: 50%
RAID4:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID5:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID6:至少需要四块硬盘,允许两块出错,读写性能提升。磁盘利用率为:(n-2)/n
RAID10:至少需要四块硬盘,允许不同组内各坏一块盘,读写性能提升。磁盘利用率为:50

环境准备:
本文中使用VirtualBox虚拟机,你也可以使用VMware的虚拟机。虚拟机中安装好CentOS 6.5版本后,添加四块大小为10GB的SCSI硬盘,此处硬盘接口类型可随意。

软件包安装:

# yum install -y mdadm           //mdadm是Linux下的软RAID管理程序。

软RAID创建方法:
查看刚刚添加的硬盘。

# lsblk


若刚才添加的硬盘不显示,则重启系统后再次查看,重启命令如下。

# reboot

下面我将带你创建一个RAID10来了解CentOS 6下软RAID创建和管理的流程。
RAID10是RAID1和RAID0组合在一起的一种形式,兼具两者的优点,在企业中比较常用。制作时先做RAID1再做RAID0,如下图中就是本例中的RAID10的创建方案。结合图片可以很容易理解,RAID10就是两组高可靠的RAID1被使用RAID0组合在一起增加了性能。

具体步骤如下。
一、先为每块硬盘新建一个分区,并将分区类型修改为RAID。此处需注意的是:加入到同一个RAID的不同硬盘上的分区的大小最好相同,否则以容量最小的分区的容量作为同一RAID在所有硬盘上的可用容量,其余空间则浪费掉。
这里只以/dev/sdb为例说明,其余硬盘按照需求参考此步骤操作即可。
使用fdisk工具编辑/dev/sbd硬盘的分区表,本例中为每块硬盘创建1个主分区,每个主分区使用全部硬盘空间。

# fdisk /dev/sdb

fdisk工具的使用方法这里不做详细说明,如需了解可参考此篇文章。

Linux下使用fdisk工具为硬盘分区


查看划分完的分区。

二、将分区类型修改为RAID,默认为Linux。
在fdisk程序中输入t,随后会要求你输入要将分区更改为的类型的代码,并提示可以输入L或list列出所有可选的类型的代码。

注意,如果硬盘中存在多个分区(本例中一块硬盘只有一个分区),那输入t后还会要求你输入要更改分区类型的分区的编号,如下图中,我选择为1号分区更改分区类型。

输入L,查看所有可选类型。

如上图红色箭头标记的,我们要将分区类型修改为Linux raid auto,输入他的代码:fd,而后会弹出一个修改成功的提示。

将所有硬盘的所有分区都按照如上步骤修改其分区类型。
全部修改完后,查看所有磁盘。

# lsblk


上图中,可以看到每块硬盘下都有我们刚刚新建的分区,若你看不到分区也不用着急,可以执行下面的命令后再次查看。

# partprobe     //使系统内核立即读取新的分区表信息

若Shell提示找不到partprobe命令则可以参考此篇文章解决。

CentOS 6找不到partprobe命令的解决方法


三、使用mdadm工具创建并管理软RAID
使用mdadm工具将/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde这四块硬盘组建成RAID10。

# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //不要看命令好长就觉得头晕,可以结合下面的命令参数解释来试着理解这条命令中每一部分的含义。

执行后,返回信息提示已经成功创建。

在组建RAID时若弹出以下提示是警告你:软RAID不能用作启动盘,是否还继续创建软RAID,输入“y”确认即可。

若出现下图这种提示是因为磁盘之前做过一次RAID,也输入y确认。

以下是mdadm工具各个参数的详细说明:

-A 装配模式    //暂时没搞懂是怎么用的,如果你知道的话欢迎留言。
-C 创建模式
创建模式专用选项:
-n 用于创建RAID设备的个数
-x 热备磁盘的个数
-l 指定RAID级别
-a 参数值:yes(自动为创建的RAID设备创建设备文件)
-c 指定块的大小,默认为512KB
-F FOLLOW 监控
-S 停止RAID
-D 显示阵列详细信息
例如:
# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //此条命令就是本文中创建RAID10的命令,现在可以结合参数的帮助文档来理解啦!
管理模式命令:
-f 将一块硬盘标记为损坏
-r 移除设备
-a 添加新设备
例如:
# mdadm /dev/md0 -a /dev/sdb1     //这里将/dev/sdb1这块硬盘从RAID10中移除。

需要注意的是,使用mdadm工具组建完软RAID后要将其写入到RAID配置文件中,否则系统重启后RAID设备的名称会变为默认的md127,而非之前指定的md10。

# mdadm -Ds > /etc/mdadm.conf

查看刚刚创建的RAID10的信息。

# mdadm -D /dev/md10


四、为RAID设备指定文件系统。
这里我将其格式化为ext4文件系统。

# mkfs.ext4 /dev/md10

五、挂载磁盘

# mount /dev/md10 /mnt

也可以将其写入到/etc/fstab文件中,使其开自动挂载。

# vim /etc/fstab