dovecot, sendmail, proftpd, pure-ftpd 를 위한 개인인증서 발급 혹은 갱신용 스크립트 이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/bin/bash check_cert="/etc/pki/tls/certs/sendmail.pem" make_cert() { cd /etc/pki/tls/certs ln -s /etc/pki/tls/certs /etc/ssl/private 2>/dev/null ssl_cnf_temp="/tmp/openssl_temp.cnf" echo "KR" > $ssl_cnf_temp echo "Seoul" >> $ssl_cnf_temp echo "Seoul" >> $ssl_cnf_temp echo "company_name" >> $ssl_cnf_temp echo "system_engineer_team" >> $ssl_cnf_temp echo "$HOSTNAME" >> $ssl_cnf_temp echo "engineer@xxxxxxx.com" >> $ssl_cnf_temp make sendmail.pem < /tmp/openssl_temp.cnf 2>/dev/null # sendmail.pem cat sendmail.pem > pure-ftpd.pem # pure-ftpd.pem openssl req `locale -c LC_CTYPE -k|grep -q charmap.*UTF-8 && echo -utf8` \ -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key \ -nodes -x509 -days 365 -out /etc/ssl/private/proftpd.crt \ -set_serial 0 < $ssl_cnf_temp 2>/dev/null # proftpd.key, proftpd.crt cd /etc/mail make /etc/init.d/sendmail restart /etc/init.d/dovecot restart rm -f $ssl_cnf_temp } if [[ -e $check_cert ]];then cert_expire=`openssl x509 -noout -text -in $check_cert|awk '/Not After :/{print $4,$5,$7}'` cert_expire_date=`date +"%Y%m%d" -d "$cert_expire"` two_weeks_after=`date +"%Y%m%d" -d "2 weeks"` if [[ $two_weeks_after -gt $cert_expire_date ]];then make_cert; fi else make_cert; fi |
스크립트 설명 : sendmail.pem 인증서의 만료일 2주 미만으로 남았거나 인증서가 없으면 생성해준다.
cron 에 등록하여 일주일에 한번 정도씩 돌려주면 개인인증서 갱신 걱정 없이 사용할 수 있겠다.
vi /etc/cron.weekly/public_cert_make.sh 이런 위치에 넣어두면 일주일에 한번씩 돈다 ‘ㅅ’a
chmod 700 /etc/cron.weekly/public_cert_make.sh 해둬야 돈다 . 잊지 말자.
아래 설정값은 플레인 로그인을 막는 설정이 아니다.
LOGIN PLAIN, TLS 둘다 활성화 하는 옵션들 이다.
1. dovecot – STARTTLS 설정( /etc/dovecot/conf.d/10-ssl.conf )
1 2 3 4 |
ssl = yes ssl_cert = </etc/pki/tls/certs/sendmail.pem ssl_key = </etc/pki/tls/certs/sendmail.pem ssl_ca = </etc/pki/tls/certs/ca-bundle.crt |
평문 패스워드 막는건 /etc/dovecot/conf.d/10-auth.conf 파일의 disable_plaintext_auth 옵션이다.
2. sendmail – STARTTLS 설정( /etc/mail/sendmail.mc )
1 2 |
~]# cd /etc/mail ~]# vi sendmail.mc |
1 2 3 4 5 6 7 |
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl dnl define(`confAUTH_OPTIONS', `A p')dnl |
confAUTH_OPTIONS 는 주석 처리 해버린다 ‘ㅅ’a
1 2 |
~]# make ~]# /etc/init.d/sendmail restart |
평문 패스워드 막는건 define(confAUTH_OPTIONS',
A p’)dnl 이렇게 주석 제거 하고 하면 된다.
( TLS연결 테스트 : https://starttls.info ) 혹은 아래 명령어.
1 2 |
~]# openssl s_client -starttls smtp -connect localhost:25 ~]# openssl s_client -starttls pop3 -connect localhost:110 |
3. proftpd – FTP over TLS 설정( /etc/proftpd.conf )
1 2 3 4 5 6 7 8 9 |
<IfModule mod_tls.c> TLSEngine on TLSProtocol SSLv23 TLSOptions NoCertRequest AllowClientRenegotiations TLSRSACertificateFile /etc/pki/tls/certs/proftpd.crt TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.key TLSVerifyClient on TLSRequired off </IfModule> |
평문 패스워드 막는건 TLSRequired 값을 on 으로 하면 된다.
4. pure-ftpd – FTP over TLS 설정( /etc/pure-ftpd/pure-ftpd.conf )
1 |
TLS 1 |
평문 패스워드 막는건 TLS 값을 2 으로 하면 된다.