Postfix로 두개의 도메인( 예, a.com & b.com)을 이용하여 메일 서비스를 사용할 경우

각각의 도메인으로 도착하는 메일을 한의 메일 계정으로 확인하고자 할경우 Virtual_alias_domains 와 Virtual_alias_maps 설정으로 이용할 수 있다.


설정하는 방법은 postfix의 설정파일(main.cf & virtual)을 수정하는 방법과 DB를 이용하여 서비스를 구성하는 방법이 있다.




[방법 1] - 설정파일 편집하여 사용하기


● /etc/postfix/main.cf 수정


virtual_mailbox_domains = a.com 
virtual_alias_maps = hash:/etc/postfix/virtual


● /etc/postfix/virtual 수정 


# I want @a.com to have two incoming aliases
@a.com   @b.com


이렇게 설정하면 a.com 으로 오는 모든 메일은  b.com 도메인의  동일한 계정 전달된다.
이 방법은 설정이 간단하여 바로 이용할 수 있으나, 매번 설정 후 엔진을 재실행해야 한다.

포워딩 도메인이 여러개일 경우 virtual_mailbox_domains = a.com 도메인1 도메인2 

이렇게 증가시키면 된다.  /etc/postfix/virtual 파일에 @로 라인을 증가시킨다.



[방법 2] - DB와 연계하여 사용하기


● /etc/postfix/main.cf 수정


virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf 
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf

● /etc/postfix/mysql/virtual_mailbox_domains.cf 


hosts       = 127.0.0.1:3306
user        = DB계정
password    = DB패스워드
dbname      = DB이름

query       = SELECT domain FROM domain WHERE domain='%s' AND backupmx=0 AND active=1 UNION SELECT alias_domain.alias_doma
in FROM alias_domain,domain WHERE alias_domain.alias_domain='%s' AND alias_domain.active=1 AND alias_domain.target_domain=
domain.domain AND domain.active=1 AND domain.backupmx=0


● /etc/postfix/mysql/virtual_alias_maps.cf 


hosts       = 127.0.0.1:3306
user        = DB계정
password    = DB패스워드
dbname      = DB이름

query       = SELECT forwardings.forwarding FROM forwardings,domain WHERE forwardings.address='%s' AND forwardings.domain=
domain.domain AND forwardings.active=1 AND domain.backupmx=0 AND domain.active=1


● DB(vmail) - TABLE 
[domain]
domain/description/disclaimer/aliases/mailboxes/maillists/maxquota/quota/transport/backupmx/settings/created/modified/expired/active

a.com/0/0/0/0/0/dovecot/0/default_user_quota:1024;/2018-04-30 11:19:10/1970-01-01 01:01:01/9999-12-31/00:00:00/1
b.com/0/0/0/0/0/dovecot/0/                        /1970-01-01 01:01:01/1970-01-01 01:01:01/9999-12-31/00:00:00/1


[alias_domain]
alias_domain/target_domain/created/modified/active

a.com/b.com/1970-01-01 01:01:01/1970-01-01 01:01:01/1


[forwardings]
address/forwarding/domain/dest_domain/is_maillist/is_list/is_forwarding/is_alias/active

@a.com/@b.com/a.com/b.com/0/0/0/0/1

  •  최근 30분 내에 수정된 파일

     find . -type f -mmin -30


  •  최근 5분 내에 수정된 파일 목록 상세

     find . -type f -mmin -5 | xargs ls -l


  •  24시간 이내에 변경된 php 파일을 찾는 명령.

     find . -name '*.php' -mtime -1 -print


  •  최근 7일 이전에 수정된 파일 찾기 (-exec rm -f {} \; 조합으로 과거 로그 지울때 유용)

     find . -name '*.php' -mtime +7 -print

     find . -name '*.php' -mtime +7 -exec rm -f {} \;

 

  •  홈 디렉토리 아래에서 크기가 5096kb 이상인 파일을 찾아 자세한 정보(ls -l)을 출력한다.

     [zany@zany-macbookpro ~]$ find ~ -size +5096k -exec ls -l {} \;

     -rw-r--r-- 1 root root 669319168 Mar 11 17:10 /root/valhalla-i386-disc2.iso

     -rw-r--r-- 1 root root 5563716 Feb 28 11:21 /root/.mozilla/firefox/kazb7qu2.default/Cache/D0709ED3d01

     -rw-r--r-- 1 root root 714907648 Mar 5 17:25 /root/images/nuxone/NuxOne_v2.1_RPMS_CD2.iso

     -rw-r--r-- 1 root root 596164608 Mar 5 17:01 /root/images/nuxone/NuxOne_v2.1_RPMS_CD1.iso

     -rw-r--r-- 1 root root 318918656 Mar 5 17:18 /root/images/nuxone/NuxOne_v2.1_RPMS_CD3.iso


  •  /usr 디렉토리 내에서 지난 24시간 동안 사용되었던 확장명이 jpg인 모든 파일을 찾아 그 내용을 자세히 출력 시켜준다.

     [zany@zany-macbookpro ~]$ find /usr -name "*.jpg" -atime -1 -exec ls -l {} \;


  •  dev 디렉토리 내에 빈 파일들을 찾는다.

     [zany@zany-macbookpro ~]$ find /dev -type f -empty


  •  현재 디렉토리(서브디렉토리 포함)에서 '2011-03-03' 이라는 문자열을 포함하고 있는 파일을 찾는다.

    [zany@zany-macbookpro ~]$ find ~/. -type f -exec grep '2011-03-03' {} /dev/null \;







MariaDB [web3]> show full columns from 테이블명;

+--------------+----------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

| Field        | Type     | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment |

+--------------+----------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

| no           | int(11)  | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |

| date         | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| temp         | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| average_temp | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| tmn          | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| tmx          | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| weather      | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| rainfall     | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

| month_day    | char(20) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references |         |

+--------------+----------+-----------------+------+-----+---------+----------------+---------------------------------+---------+

9 rows in set (0.00 sec)





MariaDB [web3]> describe weather_susin_myeon;

+--------------+----------+------+-----+---------+----------------+

| Field        | Type     | Null | Key | Default | Extra          |

+--------------+----------+------+-----+---------+----------------+

| no           | int(11)  | NO   | PRI | NULL    | auto_increment |

| date         | char(20) | YES  |     | NULL    |                |

| temp         | char(20) | YES  |     | NULL    |                |

| average_temp | char(20) | YES  |     | NULL    |                |

| tmn          | char(20) | YES  |     | NULL    |                |

| tmx          | char(20) | YES  |     | NULL    |                |

| weather      | char(20) | YES  |     | NULL    |                |

| rainfall     | char(20) | YES  |     | NULL    |                |

| month_day    | char(20) | YES  |     | NULL    |                |

+--------------+----------+------+-----+---------+----------------+

9 rows in set (0.00 sec)





MariaDB [web6]> show   create   table   weather_xml_test; 

| Table            | Create Table                                                                                

+------------------+--------------------------------------------------------------------------------------------

| weather_xml_test | CREATE TABLE `weather_xml_test` ( 

  `no` int(11) NOT NULL AUTO_INCREMENT, 

  `date` char(20) DEFAULT NULL, 

  `temp` char(20) DEFAULT NULL, 

  `average_temp` char(20) DEFAULT NULL, 

  `tmn` char(20) DEFAULT NULL, 

  `tmx` char(20) DEFAULT NULL, 

  `weather` char(20) DEFAULT NULL, 

  `rainfall` char(20) DEFAULT NULL, 

  `month_day` char(20) DEFAULT NULL, 

  PRIMARY KEY (`no`) 

) ENGINE=InnoDB AUTO_INCREMENT=474 DEFAULT CHARSET=utf8 | 


1 row in set (0.00 sec)

history 설정

history 의 기본 설정값에  날짜정보 함께 출력하기.


/etc/profile 하단에 내용 추가



 vim  /etc/profile


 #Add timestamp  to  .bash_history

 HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S -- "

 export  HISTTIMEFORMAT

 declare -r HISTFILE 



설정 적용하기


 source /etc/profile



특정서버의   데이타를  로컬 또는 타서버로 이동 시킨다.

 

 

 

[형식]  rsync  옵션   원본(로컬,원격지)   대상(로컬,원격지) 

                  --->  원격지에서의 접속을 위해서는 /etc/rsyncd.conf에  설정이 되어 있어야 하

                           지만  로켈에서의 접근은 별도의 설정이 필요없다.

 

 

[ 원본서버 작업 ]

 

    1. rsyncd를 실행한다..........ntsysv 설정 xinetd 재실행.

    2. /etc/rsyncd.conf 파일을 설정한다.

        ex) rsyncd.conf  

              【opt】 
               path = /opt
               comment = opt backup 
               uid = root 
               gid = root
               use chroot = yes 
               read only = yes /no

               write only = yes / no
               hosts allow = 210.95.24.75,218.150.162.5
               max connections = 3 
               timeout 600

   

[ 백업서버 작업 ]

 

     1. cron에 정기적으로 실행될 수 있도록 스크립트를 등록한다.

           ex) /etc/cron.daily/rsync_opt.sh

                 #!/bin/sh
                 echo "rsync start" > /etc/cron.daily/log/rsync_opt.log
                 rsync -avz --delete 10.10.10.1::opt/  /BACKUP
                 if 【 $? -eq 0 】; then
                        echo "opt backup OK" >> /etc/cron.daily/log/rsync_opt.log
                 else
                        echo "opt1 backup FAILED" >> /etc/cron.daily/log/rsync_opt.log
                 fi
                 echo "rsync end" >> /etc/cron.daily/log/rsync_opt.log

 

[ rsyncd.conf 확인하기 ]

       1. 원격 서버에서 자료를  수신하기 위해  본서버의 리스트를 확인하는 방법

                rsync -avz --delete 10.10.10.1::

           이렇게 입력하면 본서버의 rsyncd.conf에 등록된 리스트를 확인할 수 있다.

 

 

 

 

 

[ 옵션 ]  =================================================================

 

1.   【 --exclude=???  】

   

     ex1) rsync    -av    --exclude=*03*.jpg   127.0.0.1::colt357/tmp/*    ./ 

     ex2) rsync    -av    --exclude "*03*.jpg"   127.0.0.1::colt357/tmp/*    ./

          --> colt357/tmp 속의 대상 중   이름에 *03*.jpg 파일과 같은 이름의 파일을 제외한다.

 

 

[옵션 설명]


  -v, --verbose                    상세하게 출력하기               
  -q, --quiet                        에러및 기타 어떠한 메시지도 출력 하지 말것
  -a, --archive                      아카이브 보드로 가져오기(퍼미션 소유주 및 위치까지 그대로 가져온다.) 
  -r, --recursive                    하위 구조의 디렉토리 모두 재귀적으로 가져온다.
  -z, --compress                   압축하여 전송하기       
  --delete    동기화시 소스 파일의 위치에 존재하지않는 팡리을 삭제한다.
  --exclude=patten  해당 패턴을 가진 파일이나 디렉토리를 동기화시 제외한다.  
  --include=patten  해당 패턴을 가진 파일이나 디렉토리를 동기화시포함시킨다.

"스팸메일 차단 방지를 위한 SPF 레코드, PTR 레코드 그리고 화이트 도메인 등록"


특정 도메인을 이용해 메일 서비스를 받기 위해서는 DNS에 처리해야 할 몇 가지 작업들이 있습니다.

MX(Mail Exchanger)레코드처럼 메일을 수신하기 위해 반드시 등록해야 하는 작업도 있고, 등록하지 않아도 송수신은 가능하지만

안정적인 메일 송수신을 위해 추가적으로 등록해야 하는 작업들도 있습니다.


반송 메일 없이 안정적인 메일 발송을 위해 꼭 등록해야하는  SPF 레코드와  PTR 레코드, 그리고 KISA(한국인터넷진흥원)에 등록해야

하는 화이트 도메인(White Domain)에 등록해야 합니다.


용어 설명과 상관 관계 정리


1.  SPF(Sender Policy Framework) 레코드



 SPF 레코드는 발송한 메일 서버의 IP와 DNS에 설정되어 있는 TXT의 IP값이 다를 경우에 수신 측에서 메일을 차단하는 방법으로

 메일을 발송하는 서버의 IP와 도메인이 서로 일치하는지 인증을 하며, 인증 방법으로 SPF 레코드(TXT값)을 확인합니다.



2. PTR 레코드 (또는 Reverse DNS)



 PTR 레코드(Reverse Domain) 정책은 도메인이 아닌 IP를 질의하여 도메인을 확인하는 정책으로, 수신측에서 메일 발송 서버의 IP를 조회하여

 도메인이 등록된 PTR 레코드(Pointer) 값과 일치하면 정상 메일로 보고 메일을 수신하겠다는 역방향 질의 방식입니다. Reverse Domain의 일치

 여부를 확인할 때 PTR 레코드를 조회하기 때문에 PTR 레코드와 Reverse Domain은 같은 의미로 통용됩니다.


 SPF 레코드 등록과 또 다른 점은 DNS가 아닌 ISP 업체(KT, LG, SK 등)에 등록을 해야 한다는 것입니다. 따라서 자체적으로 메일 시스템을 구축한

 경우가 아니라면 메일 서비스를 제공하는 있는 업체에 연락하셔서 등록 요청을 하면 됩니다.


 ISP 업체마다 등록 방법이 다르지만, KT같은 경우에는 "KTDMS 고객문의 게시판"을 통해 등록 요청을 하고 있고, 사이트에 접속하여 신청자 정보,

 리버스(Reverse) IP 등록 시 입력사항, 작업 요청사항 등을 내용으로 남기게 되어 있습니다.




3. 화이트 도메인(White Domain)


 화이트 도메인은 회원에 공지 등 정상적으로 발송하는 대량 e-메일이 스팸 메일로 간주되어 RBL에 등록되는 것을 방지하기 위해, 사전에 등록된

 개인이나 사업자에 한하여 국내 주요 포탈사이트로의 e-메일 전송을 보장해 주는 제도입니다.  단, 화이트 도메인으로 등록되었다 하더라도 이후  

 모니터링을 통해 스팸 메일 발송 사실이 확인되면, 즉각 차단 조치되며 화이트 리스트에서도 삭제될 수 있습니다. 


그리고 화이트 도메인을 등록하기 위해서는 반드시 DNS에 SPF 레코드가 등록되어 있어야 합니다.

RBL에 등록되는 것을 방지하기 위하여 DNS에 SPF 레코드 등록 > White Domain 등록 > PTR 레코드 등록의 순서로 진행합니다.






[확인하기]























[문서별 설정]


문서의 상단에   meta 테그를 이용하여 문서별로 설정할 수 있다.


     <meta name="robots" content="index,follow" />

  

이렇게 하면 해당 문서를  로봇들이 수집해 간다.



반대로, 


<meta name="robots" content="noindex,nofollow" />


이렇게 설정하며  수집해가지 못한다.






[사이트 설정]


웹서비스 폴더에 설정하여 사이트 전체에 적용하기는 robots.txt 를 html root에 선언하여 

정책을 적용할 수 있다.


1. 모든 검색봇 차단 

User-agent: * 

Disallow: /



2. 모든 검색봇 허용

User-agent: *

Allow: /



3. 구글봇 차단 (구글봇, 구글봇이미지, 구글봇모바일)

User-agent: Googlebot

Disallow: /


User-agent: Googlebot-Image

Disallow: /


User-agent: Googlebot-Mobile

Disallow: /



4. 네이버봇 차단

User-agent: Yeti

Disallow: /


       


적용된 테마의 게시판에 적용한다.




/html/theme/temp1/skin/board/gallery/view.skin.php

--> 기존 설정 영역을 주석처리하고...아래 코드로 변경한다.




        //  이미지 가로배치 시작  ( 첨부로 올린 이미지에 적용됨, 에디터 삽입 이미지는 적용 안됨 )---------------------------

        $n = 3;  //  <-------------------- 한줄당 표시하고픈 이미지 갯수 

        //$wid = (int)(1/$n*100); 

        $wid = (int)($board[bo_image_width]/$n);

        echo "<table width='100%' cellpadding=3 cellspacing=0 border=0 align='center'>";

        echo "<tr align='center'>";

        for ($i=0; $i<=count($view[file]); $i++) {

                if (($view[file][$i][view]) && $i>0 && ($i%$n == 0)) {

                        echo "</tr><tr>";

                }

        if ($view[file][$i][view]) {

                echo "<td width='370px' align='center'>";

                echo get_view_thumbnail($view[file][$i][view]);

                echo "<br><br>". get_view_thumbnail($view[file][$i][content]); // 이미지 설명글 

           }

        }


        // 부족한 <td> 갯수 맞추는 작업 

        if ((count($view[file])-1) % $n != 0) {

        $td_cnt = $n - ((count($view[file])-1)%$n);

        for ($t=0; $t<$td_cnt; $t++) {

        echo "<td width='370px'>&nbsp;</td>";

        }

        }


        echo "</tr></table>";

        echo "<p>";

        // 여기까지  이미지 가로 배치 수정 끝. ---------------------------------------------------------------------------------  



'배워서 남주자 > PHP' 카테고리의 다른 글

[php.ini] 용량 설정  (0) 2018.09.07

php.ini




/etc/php.ini      --->  메일서비스를 위해 세팅된 내용으로 disable_funcions 기능을 제한하지 않았음.





[PHP]


engine = On

short_open_tag = Off
precision = 14
output_buffering = 4096

zlib.output_compression = Off

implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =

zend.enable_gc = On

expose_php = On
max_execution_time = 30
max_input_time = 3600
memory_limit = 5120M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 4096M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off

file_uploads = On

upload_tmp_dir = /tmp

upload_max_filesize = 3072M

max_file_uploads = 20

allow_url_fopen = On

allow_url_include = Off

default_socket_timeout = 60

[CLI Server]

cli_server.color = On
[Date]
date.timezone = Asia/Seoul;
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]

pcre.jit=0

[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000

pdo_mysql.default_socket=

[Phar]
[mail function]
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]

ibase.allow_persistent = 1

ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off

[PostgreSQL]

pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0

session.use_cookies = 1

session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = -1

[mbstring]

[gd]
[exif]

[Tidy]

tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[dba]
[curl]
[openssl]










1. 시간대 설정 -  시간대를 KST 으로 맞춘다.


 # ln -sf  /usr/share/zoneinfo/Asia/Seoul     /etc/localtime




2. [date] 명령으로 시스템 시간을 맞춘다.



# date -s "2018-05-28 11:14:22"  


    * rdate -s time.bora.net  이라는 편리한 명령이  있으나....  부득이하게  수동 세팅이 필요할 경우  date -s 으로 설정할 수 있다.




3. hwclock 까지 맞춘다.


 # hwclock  --systohc   ( 또는 -w )     # O/S 의 시간을   H/W에 덮어쓴다. ( 반대는  hwclock --hctosys  또는 -s )

 # date

 Sat Oct 19 18:02:11 KST 2019

 # hwclock

 Sat 19 Oct 2019 06:04:49 PM KST  -0.724847 seconds


+ Recent posts