LINUX

sendmail quota 설정

0hee 2007. 4. 27. 10:59
1.1 SMTP 서버에서 보내는 양 제한하는 법. #
/etc/mail/sendmail.cf (또는 /etc/sendmail.cf.이는 sendmail 의 패키징 방법에 따라 다르 다.)파일에서 다음과 같이 ?MaxMessageSize 부분의 주석을 제거하고 제한하고자 하는 적 절한 값을 입력한다.
#maximum message size
O MaxMessageSize=5024000
위와 같이 설정하였을 경우 현재의 서버를 보내는 메일 서버로 이용시 첨부파일을 포함한 전체 메일사이즈가 5M 이상 초과하거나 웹에서 /usr/sbin/sendmail 을 실행하여 외부로 메일을 발송하는 메일링 리스트등의 프로그램에서도 메일 발송시 5 메가 이상의 메일은 보낼 수 없게 된다. 5024000 은 byte 단위이며 설정 변경 후 변경된 내용을 적용하려면 killall –HUP sendmail 로 sendmail 데몬을 Refresh 하면 된다. (/etc/rc.d/init.d/sendmail restart 로 해도 적용됨. 이것을 추천) ( 일반적으로 3M 의 파일을 첨부할시에 base64 로 인코딩하므로 전체메일사이즈가 5M 에 가깝게 됨 )




1.2 받는 메일 서버에서 받는 양 제한하는 법. #
외부에서 서버로 들어오는 메일에 대해서 용량을 제한하고 싶다면 같은 파일(sendmail.cf) 에서 "Local and Program Mailer specification"부분을 설정해 주면 된다.
Mlocal,P=/usr/bin/procmail,F=lsDFMAw5:/|@qSPfhn9,S=10/30,
R=20/40,M=5024000,T=DNS/RFC822/X-Unix,A=procmail -Y -a $h -d $u
위와 같이 T=DNS?/RFC822/X-Unix 앞부분에 M=5024000 부분을 추가해 주면 된다. 마찬가지로 5024000는 byte 단위이며 각자의 시스템 환경에 따라 원하는 용량만큼 적절히 설정해 주면 된다 역시 설정 변경 후 sendmail 을 refresh 하면 적용이 된다. 위의 경우 서버에서는 5메가 이상의 메일은 수신하지 않으며 5메가 이상의 메일을 보낸 이는 552 5.2.3 <antihong@tt.co.kr>...Message is too large;5024000 bytes max  
554 5.0.0 <antihong@tt.co.kr>...Service unavailable  
}} 와 같은 에러 메시지를 회신받게 된다. 아울러
#maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage=20
와 같은 부분이 있는데,이 부분은 한번에 메일 발송 시 동시 발송(참조 발송)이 가능한 메 일 계정의 수를 뜻하는 것으로 SMTP 서비스를 제공한다면 이 설정을 적용하는 것이 좋다. 기본적으로 이 값에도 제한이 없으므로 먼저 주석을 삭제한 후 적절한 값을 설정해 주면 한 번에 동시 발송 가능한 메일의 수도 제한할 수 있다. (위의 경우에는 한번에 참조 발송이 가능한 메일 유저를 20명으로 제한) 설정이 끝난 후에는 killall &#8211;HUP sendmail 로 sendmail 을 재가동해주면 적용된다. (/etc/rc.d/init.d/sendmail restart 도 가능 )




1.3 메일 용량 쿼터 설정하기 #
각 유저의 홈페이지 공간에 대한 쿼터 설정방법은 잘 알고 있는데,Sendmail 을 제공시 메 일 용량 쿼터에 대한 설정은 잘 모르는 경우가 많이 있다.매일 쿼터에 대한 설정은 다소 복잡하기는 하지만 설정은 가능하다.기본적으로 각 유저의 메일은 /var/spool/mail/디렉 토리에 자신의 계정 소유로 저장이 되게 되는데 바로 이 특성을 이용하여 쿼터 설정이을 하 면 된다.쿼터는 각 파일 시스템별로 각각 설정이 가능하므로 각 유저의 홈디렉토리외에 /var 파티션에도 추가적으로 쿼터를 설정하면 되는 것이다. 쿼터를 설정하는 방법은 일반적인 방법과 동일하다. 먼저 /etc/fstab 파일을 열어 /var 파티션이 별도로 설정되어 있다면 /var 파티션에,별도 로 없으면 /파티션에 유저쿼터나 또는 그룹쿼터 설정을 하면 된다.
/dev/sda1 /home ext2 defaults,usrquota=/home/.quota
/dev/sda8 /var ext2 defaults,usrquota=/var/.mailquota


위에서는 /home 파티션에도 쿼터 설정을 하고 /var 파티션에도 쿼터 설정을 한 것을 볼 수 있다.이후 touch /home/.quota 및 touch /var/.mailquota 로 사이즈가 0인 파일을 생성한 후 quotacheck &#8211;a 를 실행하면 파일 시스템을 스캔하여 디스크 사용량을 체크하여 해당 파일에 정보를 저장한다. edquota user 를 실행하면
/dev/sda1:blocks in use:0,limits (soft =99980,hard =99980)
inodes in use:0,limits (soft =0,hard =0)
/dev/sda8:blocks in use:0,limits (soft =29980,hard =29980)
inodes in use:0,limits (soft =0,hard =0)
위와 같이 쿼터 설정이 나오는데,여기에서 /dev/sda1 은 /home/디렉토리에 대한 쿼터 설정이고,/dev/sda8 은 /var/디렉토리에 대한 쿼터 설정이다.위 설정으로 각각 /home 디 렉토리에는 100메가로,메일 용량은 30메가로 총 130메가를 할당하여 쿼터를 설정한 것을 알 수 있다.만약 별도의 /var 파티션이 없이 /파티션만 있는 상황에서 100 메가로 쿼터 설정을 했다면 이 용량은 홈페이지의 용량과 메일 용량을 합쳐서 100메가로 적용이 되므로 주의하기 바란다.



1.3.1 참고.Quota 의 설정에 대해 #
위와 같이 edquota 사용시 관련된 라인이 아래와 같이 보이는 부분이 있다.이 중 "blocks in use:"는 유저가 현재 파티션에서 사용중인 총 블럭의 수를 킬로바이트로, "inodes in use:"는 유저가 현재 파티션에서 사용중인 총 파일의 개수를 보여준다. 이 두개의 "blocks in use:"와 "inodes in use:"는 시스템에 의해 자동으로 설정되고 제어되므로 이 값을 임의로 변경할 필요는 없다. 그리고 quota 설정시 soft 제한(soft =5000)은 유저가 사용할 수 있는 최대 용량을 뜻하 며 (이 예제에서는 약 5M 이다.)hard 제한(hard =6000)은 유저가 초과할 수 없는 절대 적인 디스크 사용량을 뜻한다."hard limit"는 "grace period"옵션이 설정되었을 때에만 적용된다. grace period 는 쿼터가 설정된 유저나 그룹이 soft limit 을 초과한 이후에도 사용 가능한 시간의 한계이다.예를 들어서 여러분이 관리하는 시스템에 "해당 유저의 홈디렉토리를 50MB 로 쿼터 제한하고 초과시 7일간의 유예기간을 준다"는 정책을 세울 수도 있다.각 자 유예 기간의 설정에 대해서는 나름대로 적당하다고 생각하는 기간을 정의할 수 있다. grace period 는 edquota &#8211;t 로 확인 및 설정할 수 있으며 아래의 경우에는 grace period 가 7일로 설정되어 있는 것을 알 수 있다.
/dev/sd1:block grace period:7 days,file grace period:7 days
/dev/sda8:block grace period:7 days,file grace period:7 days
그리고 한 유저에게 적용된 쿼터 설정을 다른 유저에게도 그대로 적용하려면 &#8211;p 옵 션을 사용하면 되는데,아래와 같이 실행하면 edquota 프로그램은 /etc/passwd 에 정 의된 유저중 UID 가 499 이후의 모든 유저에 대해 "user"의 쿼터 설정을 그대로 복사하 게 된다.
edquota -p user `awk -F:'$3 >499 {print $1}'/etc/passwd`
만일 사용자가 제한량을 넘게되면, 에러메세지를 출력하면서 메일수신을 하지 않는다.