Debian Wheezy에서 나와 친구들을 위해 나만의 클라우드를 구축하는 방법
이 페이지에서
- 단 몇 시간 만에 개인 정보를 되찾고 데이터를 제어할 수 있습니다. 나와 친구를 위한 나만의 클라우드를 구축하세요.\n
- 신원 중 가장 개인적인 부분 중 일부는 통제할 수 없는 전 세계 서버에 저장됩니다.\n
- 가장 개인적인 정보를 나눠주는 일상적인 습관은 아무도 예측할 수 없는 방식으로 당신의 삶에 영향을 미칠 것입니다.\n
- 단 5시간 만에 귀하와 귀하가 아끼는 사람들의 프라이버시를 되찾으십시오.\n
- 이 기사는 이전 작업에서 영감을 받아 작성되었습니다.
- 발신자 정책 프레임워크\n
- 역방향 PTR\n
- OpenDKIM
단 몇 시간 만에 개인 정보를 되찾고 데이터를 제어할 수 있습니다. 나와 친구를 위한 나만의 클라우드 구축
Roudy Jhausse <[이메일 보호됨]>
8년 동안 40000회 이상 검색! 그게 내 Google 검색 기록입니다. 당신은 어때요? (여기에서 직접 확인할 수 있습니다.) 오랜 시간 동안 수많은 데이터 포인트를 통해 Google은 귀하가 무엇에 관심을 가졌고, 무엇을 생각하고, 무엇을 걱정하고 있으며, 모든 것이 어떻게 변했는지에 대한 매우 정확한 아이디어를 가지고 있습니다. Google 계정을 처음 얻은 이후 몇 년 동안.
귀하의 신원 중 가장 개인적인 부분 중 일부는 귀하가 통제할 수 없는 전 세계 서버에 저장됩니다.
2006년에서 2013년 사이에 저처럼 Gmail 사용자였다고 가정해 보겠습니다. 즉, 7년 동안 30,000개 이상의 이메일을 받고 약 5,000개의 이메일을 작성했습니다. 귀하가 보내거나 받은 이메일 중 일부는 매우 개인적인 것일 수도 있고 너무 개인적인 것일 수도 있으므로 일부 가족이나 가까운 친구도 체계적으로 살펴보는 것을 좋아하지 않을 것입니다. 마지막 순간에 마음이 바뀌어서 보내지 않은 이메일 몇 개를 작성했을 수도 있습니다. 그러나 보낸 적이 없더라도 이러한 이메일은 여전히 서버 어딘가에 저장됩니다. 결과적으로 Google 서버는 가장 가까운 친구나 가족보다 개인 생활에 대해 더 많이 알고 있다고 말할 수 있습니다.
통계적으로 스마트폰이 있다고 생각하는 것이 안전합니다. 기본적으로 Google 서버의 Google 주소록에 연락처를 저장하는 연락처 앱을 사용하지 않고는 전화를 거의 사용할 수 없습니다. 따라서 Google은 귀하의 이메일뿐만 아니라 귀하가 전화하고 싶은 사람, 전화를 걸고 싶은 사람, 문자를 보낸 사람 및 문자 내용과 같은 오프라인 연락처에 대해서도 알고 있습니다. 내 말을 믿을 필요는 없습니다. 전화를 건 사람 목록과 받은 SMS를 읽을 수 있도록 Google Play 서비스와 같은 앱에 부여한 권한을 살펴봄으로써 직접 확인할 수 있습니다. 휴대전화와 함께 제공되는 캘린더 앱도 사용하시나요? 캘린더를 설정하는 동안 명시적으로 옵트아웃하지 않는 한 Google은 매일, 매일, 매년 귀하가 무엇을 하는지 정확히 알고 있음을 의미합니다. Apple이 Google 대신 귀하의 서신, 연락처 및 일정에 대해 알게된다는 점을 제외하면 Android 전화보다 iPhone을 선택한 경우에도 동일하게 적용됩니다.
또한 친구, 동료 및 가족이 새 직장으로 이동하거나 통신사를 변경할 때 이메일 주소와 전화번호를 업데이트하여 디렉터리의 연락처를 최신 상태로 유지하는 데 많은 주의를 기울이고 있습니까? 이를 통해 Google은 귀하의 소셜 네트워크에 대한 매우 정확하고 최신 정보를 얻을 수 있습니다. 그리고 Google 지도와 함께 많이 사용하는 스마트폰의 GPS를 좋아합니다. 즉, Google은 캘린더에서 무엇을 하는지 뿐만 아니라 현재 위치, 거주지, 직장도 알고 있습니다. 또한 Google은 사용자 간의 GPS 위치 데이터를 연관시켜 지금 당장 누구와 사귈 수 있는지 알 수 있습니다.
가장 개인적인 정보를 나눠주는 일상적인 습관은 아무도 예측할 수 없는 방식으로 당신의 삶에 영향을 미칠 것입니다.
요약하자면, 귀하가 일반 인터넷 사용자인 경우 Google은 거의 10년 동안 귀하의 관심사, 걱정, 열정, 질문에 대한 최신 심층 정보를 보유하고 있습니다. 여기에는 가장 개인적인 메시지(이메일, SMS) 모음, 일상 활동 및 위치에 대한 시간별 세부 정보, 소셜 네트워크의 고화질 사진이 있습니다. 당신에 대한 그러한 친밀한 지식은 당신의 가장 가까운 친구, 가족 또는 연인이 당신에 대해 알고 있는 것 이상일 것입니다.
예를 들어 모든 것을 USB 키에 저장하고 올리비에 마틴의 개인 데이터입니다. 제발. 누가 그것을 찾을 수 있고 그들이 그것으로 무엇을 할 것인지 누가 압니까? 그러나 우리의 데이터에 큰 관심을 가진 IT 회사의 낯선 사람(그들은 빵을 만드는 방법)과 데이터 분석의 세계적 수준의 전문가에게 귀하의 신원의 핵심 부분을 전달하는 데 아무런 문제가 없습니다. 녹색 수락 버튼을 누르면 그것에 대해 생각하게 됩니다.
수년에 걸쳐 매우 많은 고품질 정보를 통해 Google은 귀하가 자신에 대해 알고 싶어하는 것보다 귀하를 더 잘 알게 될 것입니다. 도대체 지금 내 디지털 과거를 샅샅이 뒤져 보니 내가 보낸 이메일의 절반을 작성했는지 기억이 나지 않습니다. 5 년 전. 2005년에 마르크스주의에 대한 나의 관심을 재발견하게 되어 놀랍고 기쁩니다. 소니가 최근에 해킹을 당해 귀하의 모든 개인 데이터가 영원히 공공 영역에 있는 것처럼 말입니다.
우리 대부분이 이러한 회사에 개인 데이터를 위탁하는 이유 중 하나는 서비스를 무료로 제공하기 때문입니다. 그러나 실제로 얼마나 무료입니까? 평균 Google 계정의 가치는 추정하는 방법에 따라 달라집니다(500 USD/년). 따라서 이 서비스는 정확히 무료가 아닙니다. 광고를 통해 비용을 지불하고 우리 데이터가 미래에 찾을 수 있는 아직 알려지지 않은 용도입니다.
나는 지금까지 내 디지털 ID의 대부분을 맡긴 회사, 따라서 내가 가장 잘 아는 회사이기 때문에 주로 Google에 대해 글을 쓰고 있습니다. 그러나 나는 Apple이나 Facebook을 작성했을 것입니다. 이 회사들은 우리가 매일 사용하기를 좋아하는 디자인, 엔지니어링 및 서비스의 환상적인 발전으로 진정으로 세상을 변화시켰습니다. 그러나 그것은 우리가 그들의 서버에 우리의 가장 개인적인 데이터를 모두 쌓아두고 우리의 디지털 생활을 맡겨야 한다는 것을 의미하지는 않습니다. 피해의 가능성이 너무 큽니다.
단 5시간 만에 귀하와 귀하가 아끼는 사람들의 프라이버시를 되찾으십시오
이럴 필요는 없습니다. 당신은 21세기에 살 수 있고, 스마트폰을 가지고 있고, 매일 이메일과 GPS를 사용하면서도 여전히 프라이버시를 유지할 수 있습니다. 이메일, 일정, 연락처, 파일 등 개인 데이터를 다시 제어하기만 하면 됩니다. Prism-Break.org 웹사이트에는 개인 데이터의 운명을 제어하는 데 도움이 되는 소프트웨어가 나열되어 있습니다. 이러한 옵션 외에도 개인 데이터를 다시 제어할 수 있는 가장 안전하고 강력한 방법은 자체 서버를 구축하여 클라우드를 직접 호스팅하는 것입니다. 그러나 당신은 정확히 어떻게 그것을 하고 원활하게 작동하게 하는지 연구할 시간과 에너지가 없을 수도 있습니다.
현재 기사가 적합한 곳입니다. 단 5시간 만에 귀하, 귀하의 친구 및 가족을 위해 귀하의 이메일, 연락처, 캘린더 및 파일을 호스팅할 서버를 설정할 것입니다. 서버는 개인 데이터의 허브 또는 클라우드 역할을 하도록 설계되어 있으므로 항상 모든 권한을 유지할 수 있습니다. 데이터는 PC/노트북, 휴대폰 및 태블릿 간에 자동으로 동기화됩니다. 기본적으로 Gmail, Google 드라이브/Dropbox, Google 주소록, Google 캘린더 및 Picasa를 대체하는 시스템을 설정할 것입니다.
자신을 위해 이것을하는 것만으로도 이미 큰 단계가 될 것입니다. 그러나 매일 상호 작용하는 많은 사람들이 Gmail을 사용하고 스마트폰을 가지고 있기 때문에 개인 정보의 상당 부분이 여전히 유출되어 실리콘 밸리의 일부 서버에 저장됩니다. 따라서 가장 가까운 사람들을 모험에 참여시키는 것이 좋습니다.
시스템을 구축하겠습니다.
- 임의의 도메인 및 사용자 수를 지원합니다. 이렇게 하면 가족 및 친구와 서버를 쉽게 공유할 수 있으므로 가족 및 친구도 자신의 개인 데이터를 제어하고 서버 비용을 귀하와 공유할 수 있습니다. 귀하의 서버를 공유하는 사람들은 자신의 도메인 이름을 사용하거나 귀하의 도메인 이름을 공유할 수 있습니다.\n
- 서버에 성공적으로 로그인하면 모든 네트워크에서 이메일을 보내고 받을 수 있습니다. 이렇게 하면 모든 이메일 주소, 모든 장치(PC, 전화, 태블릿) 및 모든 네트워크(집, 직장, 공용 네트워크 등)에서 이메일을 보낼 수 있습니다.\n
- 네트워크 트래픽을 암호화하여 이메일을 보내고 받을 때 신뢰할 수 없는 사람들이 비밀번호를 알아내거나 개인 이메일을 읽을 수 없도록 합니다.\n
- 최첨단 안티스팸을 제공하여 알려진 스팸 발송자의 블랙리스트, 자동 그레이리스팅 및 적응형 스팸 필터링을 결합합니다. 이메일이 잘못 분류된 경우 적응형 스팸 필터를 재훈련하는 것은 정크/스팸 폴더 안팎으로 스팸을 이동하는 것입니다. 또한 서버는 커뮤니티 기반 스팸 퇴치 노력에 기여할 것입니다.\n
- 가끔 몇 분의 유지 관리가 필요합니다. 기본적으로 보안 업데이트를 설치하고 서버 로그를 간단히 확인합니다. 새 이메일 주소를 추가하면 데이터베이스에 하나의 레코드를 추가하는 것으로 요약됩니다. 그 외에는 그냥 잊고 인생을 살 수 있습니다. 14개월 전에 이 기사에 설명된 시스템을 설정했으며 그 이후로 원활하게 실행되고 있습니다. 그래서 나는 그것에 대해 완전히 잊고 있었는데, 최근에 우연히 내 전화기의 이메일 확인 버튼을 누르면 전자가 아이슬란드(내 서버가 있는 곳)까지 전자가 이동하게 했다는 생각에 미소를 지었습니다.\n
이 기사를 살펴보려면 최소한의 기술 능력이 필요합니다. SMTP와 IMAP의 차이점이 무엇인지, DNS가 무엇인지 알고 있고 TCP/IP에 대한 기본적인 이해가 있다면 충분히 알 수 있습니다. 또한 Unix에 대한 기본 작업 지식(명령줄에서 파일 작업, 기본 시스템 관리)이 필요합니다. 그리고 설정하는 데 총 5시간이 필요합니다.
우리가 할 일에 대한 개요는 다음과 같습니다.
- 도메인 이름인 가상 사설 서버를 가져와 설정합니다.\n
- 이메일을 보내고 받을 수 있도록 postfix 및 dovecot 설정
- 스팸이 받은편지함에 도달하지 못하도록 방지\n
- 보내는 이메일이 스팸 필터를 통과하는지 확인하십시오.\n
- Owncloud로 캘린더, 연락처, 파일 호스팅 및 웹메일 설정\n
- 장치를 클라우드에 동기화\n
이 기사는 이전 작업에서 영감을 받아 작성되었습니다.
이 기사는 이메일 셀프 호스팅에 대한 Drew Crawford의 소개라는 두 개의 다른 기사에서 많은 부분을 차용했습니다.
이 기사에는 Drew가 있었지만 필요하지 않은 세 가지 기능, 즉 이메일 지원을 제외하고 Xaviers 및 Draws 기사의 모든 기능이 포함되어 있습니다. , 이메일에서 전체 텍스트 검색(사용하지 않음), 이메일을 암호화된 형식으로 저장(내 이메일과 데이터는 서버에서 로컬로 암호화해야 할 정도로 중요하지 않음). 이러한 기능이 필요한 경우 현재 항목과 호환되는 Drews 기사의 해당 섹션을 따라 자유롭게 추가하십시오.
Xaviers 및 Drews 작업과 비교하여 현재 기사는 여러 측면에서 개선되었습니다.
- Drew의 기사에 대한 내 경험과 그의 원본 기사에 대한 수많은 의견을 바탕으로 버그와 오타를 수정합니다. 나는 또한 현재 기사를 살펴보고 서버를 처음부터 여러 번 설정하여 복제하고 상자에서 바로 작동하는지 확인했습니다.\n
- 낮은 유지 관리: Xavier 작업과 비교하여 현재 문서는 서버에서 여러 이메일 도메인에 대한 지원을 추가합니다. 가능한 최소한의 서버 유지 관리를 요구함으로써 그렇게 합니다. 기본적으로 도메인이나 사용자를 추가하려면 mysql 테이블에 하나의 행을 추가하기만 하면 됩니다(체 스크립트를 추가할 필요가 없습니다...).\n
- 웹메일을 추가했습니다.\n
- 클라우드 설정에 대한 섹션을 추가하여 이메일뿐 아니라 파일, 주소록/연락처(이메일, 전화번호, 생일 등), 일정 및 사진을 여러 기기에서 사용할 수 있도록 호스팅했습니다.\n
가상 사설 서버, 도메인 이름 가져오기 및 설정
가상 사설 서버 및 도메인 이름과 같은 기본 인프라를 설정하여 시작하겠습니다.
저는 자유 소프트웨어의 VPS(가상 사설 서버)에 대해 훌륭한 경험을 했습니다.
서버에서 설정해야 하는 다양한 비밀번호(사용자 계정, 메일 계정, 클라우드 계정, 데이터베이스 계정)를 저장하기 위해 파일을 시작하는 것이 좋습니다. 서버를 설정하는 데 사용하는 컴퓨터가 도난당하거나 손상되더라도 서버를 너무 쉽게 공격하지 않도록 이 파일을 암호화하는 것이 좋습니다(아마도 GnuPG 사용).
도메인 이름 등록을 위해 gandi의 서비스를 10년 넘게 만족스럽게 사용하고 있습니다. 이 기사에서는 jhausse.net이라는 이름으로 영역을 설정합니다. 그런 다음 cloud.jhausse.net이라는 호스트를 여기에 추가하고 MX 레코드를 해당 호스트로 설정합니다. 서버를 설정하는 동안 영역을 변경하고 결과를 신속하게 테스트할 수 있도록 짧은 TTL(Time To Lives)을 300초와 같은 레코드로 설정합니다.
마지막으로 이 기사를 설정하여 배경을 얻습니다. Linode를 사용하는 경우 제어판의 원격 액세스 섹션에서 PTR 레코드를 설정할 수 있습니다. 1984를 사용하면 도움을 줄 기술 지원팀에 문의하십시오.
서버에서 권한이 없는 사용자를 추가하여 시작하므로 항상 루트로 작업하지 않아도 됩니다. 또한 루트로 로그인하려면 추가 보안 계층이 필요합니다.
adduser roudy
그런 다음 /etc/ssh/sshd_config에서 다음을 설정합니다.
PermitRootLogin no
ssh 서버를 다시로드하십시오.
service ssh reload
그런 다음 서버의 호스트 이름을 변경해야 합니다. /etc/hostname을 편집하여 호스트 이름이 있는 한 줄만 포함하도록 합니다(이 경우).
cloud
그런 다음 ssh 서버 공개 키 파일 /etc/ssh/ssh_host_rsa_key.pub, /etc/ssh/ssh_host_dsa_key.pub, /etc/ssh/ssh_host_ecdsa_key.pub를 편집하여 파일 끝이 호스트 이름 또는 인스턴스 [email 보호]. 그런 다음 시스템을 다시 시작하여 호스트 이름이 고정되었는지 확인합니다.
reboot
원격 공격의 위험을 줄이기 위해 시스템을 업데이트하고 필요하지 않은 서비스를 제거할 것입니다.
apt-get update apt-get dist-upgrade service exim4 stop apt-get remove exim4 rpcbind apt-get autoremove apt-get install vim
구성 파일을 원격으로 편집하기 위해 vim을 사용하고 싶습니다. 이를 위해 구문 강조를 자동으로 켜는 것이 도움이 됩니다. 우리는 추가하여 그렇게
syn on
~/.vimrc로.
이메일을 보내고 받을 수 있도록 postfix 및 dovecot 설정
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql mysql-server dovecot-lmtpd postgrey
Postfix 구성 메뉴에서 인터넷 사이트를 선택하고 시스템 메일 이름을 jhausse.net으로 설정합니다.
이제 서버에서 호스팅되는 도메인 목록, 이러한 각 도메인의 사용자 목록(암호와 함께) 및 메일 별칭 목록(지정된 주소에서 다른 주소로 전자 메일을 전달하기 위한)을 저장할 데이터베이스를 설정합니다. 하나).
mysqladmin -p create mailserver mysql -p mailserver mysql> GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'mailuserpass'; mysql> FLUSH PRIVILEGES; mysql> CREATE TABLE `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE TABLE `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
우리는 jhausse.net 도메인을 호스팅할 것입니다. 호스트하고 싶은 다른 도메인이 있는 경우 해당 도메인을 추가할 수도 있습니다. 또한 각 도메인에 대해 [email protected]로 전달되는 포스트마스터 주소를 설정합니다.
mysql> INSERT INTO virtual_domains (`name`) VALUES ('jhausse.net'); mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net'); mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('1', 'postmaster', ''); mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('2', 'postmaster', '');
이제 로컬에서 호스팅되는 이메일 계정[email protected]을 추가합니다. 먼저 암호 해시를 생성합니다.
doveadm pw -s SHA512-CRYPT
그런 다음 해시를 데이터베이스에 추가하십시오.
mysql> INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password`, `email`) VALUES ('1', '$6$YOURPASSWORDHASH', '');
이제 도메인, 별칭 및 사용자 목록이 준비되었으므로 postfix(발신 메일용 SMTP 서버)를 설정합니다. /etc/postfix/main.cf의 내용을 다음으로 바꿉니다.
myhostname = cloud.jhausse.net myorigin = /etc/mailname mydestination = localhost.localdomain, localhost mynetworks_style = host # We disable relaying in the general case smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination # Requirements on servers that contact us: we verify the client is not a # known spammer (reject_rbl_client) and use a graylist mechanism # (postgrey) to help reducing spam (check_policy_service) smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023 disable_vrfy_command = yes inet_interfaces = all smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/cloud.crt smtpd_tls_key_file=/etc/ssl/private/cloud.key smtpd_use_tls=yes smtpd_tls_auth_only = yes smtp_tls_security_level=may smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # Delivery alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases message_size_limit = 50000000 recipient_delimiter = + # The next lines are useful to set up a backup MX for myfriendsdomain.org # relay_domains = myfriendsdomain.org # relay_recipient_maps = # Virtual domains virtual_transport = lmtp:unix:private/dovecot-lmtp virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf local_recipient_maps = $virtual_mailbox_maps
이제 우리는 방금 설정한 데이터베이스를 사용하기 위해 그가 이메일을 수락하기를 원하는 도메인을 파악하기 위해 postfix를 가르쳐야 합니다. 새 파일 /etc/postfix/mysql-virtual-mailbox-domains.cf를 만들고 다음을 추가합니다.
user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_domains WHERE name='%s'
우리는 다음 내용으로 /etc/postfix/mysql-virtual-mailbox-maps.cf를 생성하여 주어진 이메일 계정이 존재하는지 알아보도록 postfix를 가르칩니다.
user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM virtual_users WHERE email='%s'
마지막으로 postfix는 /etc/postfix/mysql-virtual-alias-maps.cf를 사용하여 메일 별칭을 찾습니다.
user = mailuser password = mailuserpass hosts = 127.0.0.1 dbname = mailserver query = SELECT virtual_aliases.destination as destination FROM virtual_aliases, virtual_domains WHERE virtual_aliases.source='%u' AND virtual_aliases.domain_id = virtual_domains.id AND virtual_domains.name='%d'
이 모든 것이 준비되었으므로 이제 postfix가 데이터베이스를 제대로 쿼리할 수 있는지 테스트할 시간입니다. 포스트맵을 사용하여 이 작업을 수행할 수 있습니다.
postmap -q jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf postmap -q mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf postmap -q mysql:/etc/postfix/mysql-virtual-alias-maps.cf postmap -q mysql:/etc/postfix/mysql-virtual-alias-maps.cf
모든 것을 올바르게 설정했다면 처음 두 쿼리는 1을 반환하고 세 번째 쿼리는 [email protected]를 반환해야 하며 마지막 쿼리는 아무것도 반환하지 않아야 합니다.
이제 dovecot(장치에서 서버로 들어오는 메일을 가져오는 IMAP 서버)을 설정하겠습니다. /etc/dovecot/dovecot.conf를 편집하여 다음 매개변수를 설정합니다.
# Enable installed protocol # !include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp
imap(이메일을 가져오도록 함) 및 lmtp(postfix가 수신 이메일을 dovecot에 전달하는 데 사용함)만 활성화합니다. /etc/dovecot/conf.d/10-mail.conf를 편집하여 다음 매개변수를 설정합니다.
mail_location = maildir:/var/mail/%d/%n [...] mail_privileged_group = mail [...] first_valid_uid = 0
이메일은 /var/mail/domainname/username에 저장됩니다. 이러한 설정은 파일의 여러 위치에 분산되어 있으며 때때로 우리가 설정할 수 있도록 이미 존재합니다. 주석 처리만 하면 됩니다. 이미 파일에 있는 다른 설정은 그대로 둘 수 있습니다. 이 문서의 나머지 부분에서 더 많은 파일의 설정을 업데이트하려면 동일한 작업을 수행해야 합니다. /etc/dovecot/conf.d/10-auth.conf에서 매개변수를 설정합니다.
disable_plaintext_auth = yes auth_mechanisms = plain #!include auth-system.conf.ext !include auth-sql.conf.ext
/etc/dovecot/conf.d/auth-sql.conf.ext에서 다음 매개변수를 설정합니다.
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=mail gid=mail home=/var/mail/%d/%n }
여기서 우리는 dovecot에게 사용자의 이메일이 /var/mail/domainname/username에 있고 방금 만든 데이터베이스에서 비밀번호를 조회하도록 가르쳤습니다. 이제 dovecot에게 데이터베이스를 정확히 사용하는 방법을 가르쳐야 합니다. 이렇게 하려면 /etc/dovecot/dovecot-sql.conf.ext에 다음을 입력합니다.
driver = mysql connect = host=localhost dbname=mailserver user=mailuser password=mailuserpass default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
이제 구성 파일에 대한 권한을 수정합니다.
chown -R mail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot
거의 다 왔어! 몇 개의 파일만 더 편집하면 됩니다. /etc/dovecot/conf.d/10-master.conf에서 다음 매개변수를 설정합니다.
service imap-login { inet_listener imap { #port = 143 port = 0 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { #port = 110 port = 0 } inet_listener pop3s { #port = 995 #ssl = yes port = 0 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0666 group = postfix user = postfix } user = mail } service auth { unix_listener auth-userdb { mode = 0600 user = mail #group = } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } # Auth process is run as this user. #user = $default_internal_user user = dovecot } service auth-worker { user = mail }
우리는 모든 서비스에 대한 포트를 설정하지만 imaps는 0으로 설정하여 효과적으로 비활성화합니다. 그런 다음 /etc/dovecot/conf.d/15-lda.conf에서 포스트마스터의 이메일 주소를 지정합니다.
postmaster_address =
마지막으로 서버용 공개 키와 개인 키 쌍을 생성해야 합니다. 이 키는 dovecot과 postfix에서 모두 사용할 것입니다.
openssl req -new -newkey rsa:4096 -x509 -days 365 -nodes -out "/etc/ssl/certs/cloud.crt" -keyout "/etc/ssl/private/cloud.key"
서버의 FQDN(정규화된 도메인 이름)을 지정해야 합니다. 이 경우에는 다음과 같습니다.
Common Name (e.g. server FQDN or YOUR name) []:cloud.jhausse.net
그렇지 않으면 클라이언트가 SSL 인증서의 서버 이름이 연결하려는 서버의 이름과 일치하지 않는다고 불평할 수 있습니다. /etc/dovecot/conf.d/10-ssl.conf에서 다음 매개 변수를 설정하여 dovecot에 이 키를 사용하도록 지시합니다.
ssl = required ssl_cert = </etc/ssl/certs/cloud.crt ssl_key = </etc/ssl/private/cloud.key
그게 다야! 이제 postfix 및 dovecot 서버를 테스트합니다!
service dovecot restart service postfix restart
서버 자체에서 로컬 사용자에게 이메일을 보내십시오.
telnet localhost 25 EHLO cloud.jhausse.net MAIL FROM: rcpt to: data Subject: Hallo! This is a test, to check if cloud.jhausse.net is ready to be an MX! Cheers, Roudy . QUIT
서버는 다음과 같은 메시지로 이메일을 수락해야 합니다.
250 2.0.0 Ok: queued as 58D54101DB
모든 것이 정상이면 /var/log/mail.log에서 로그를 확인하십시오. 다음과 같은 줄이 있어야 합니다.
Nov 14 07:57:06 cloud dovecot: lmtp(4375, ): ... saved mail to INBOX
여태까지는 그런대로 잘됐다? 좋은. 이제 서버를 설정하는 데 사용하는 컴퓨터와 같은 다른 컴퓨터에서 동일한 작업을 시도해 보겠습니다. 이번에는 암호화(TLS)를 사용하여 서버와 대화하십시오.
openssl s_client -connect cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net MAIL FROM: rcpt to:
서버가 응답해야 하는
554 5.7.1 <>: Relay access denied
좋습니다. 서버가 메일을 수락했다면 Postfix를 전 세계의 모든 스패머가 사용할 수 있는 공개 릴레이로 설정했음을 의미했을 것입니다. 릴레이 액세스 거부 메시지 대신 메시지를 받을 수 있습니다.
554 5.7.1 Service unavailable; Client host [87.68.61.119] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=87.68.61.119
이는 스패머 주소로 간주되는 IP 주소에서 서버에 접속을 시도하고 있음을 의미합니다. 일반 인터넷 서비스 공급자(ISP)를 통해 서버에 연결하려고 시도하는 동안 이 메시지를 받았습니다. 이 문제를 해결하려면 SSH를 통해 액세스할 수 있는 다른 서버와 같은 다른 호스트에서 연결을 시도할 수 있습니다. 또는 Spamhauss RBL을 사용하지 않도록 Postfix main.cf를 재구성하고 postfix를 다시 로드하여 위의 테스트가 작동하는지 확인할 수 있습니다. 두 경우 모두 1분 안에 다른 것들을 잘 테스트하기 때문에 자신에게 맞는 솔루션을 찾는 것이 중요합니다. RBL을 사용하지 않도록 Postfix를 재구성하기로 선택한 경우 필요한 것보다 더 많은 스팸을 받지 않도록 RBL을 다시 넣고 기사를 마친 후 postfix를 다시 로드하는 것을 잊지 마십시오.
이제 일반 메일 서버가 서로 통신하는 데 사용하는 포트 25에서 SMTP를 통해 유효한 이메일 전송을 시도할 수 있습니다.
openssl s_client -connect cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net MAIL FROM: rcpt to:
서버가 응답해야 하는
Client host rejected: Greylisted, see http://postgrey.schweikert.ch/help/jhausse.net.html
이는 postgrey가 제대로 작동하고 있음을 보여줍니다. 보낸 사람이 이전에 본 적이 없는 경우 일시적인 오류가 있는 이메일을 거부하기 위해 postgrey는 무엇을 합니까? 전자 메일의 기술 규칙에 따라 전자 메일 서버는 전자 메일을 다시 배달하려고 시도해야 합니다. 5분 후에 postgrey가 이메일을 수락합니다. 전 세계의 합법적인 이메일 서버는 이메일을 우리에게 재전송하기 위해 반복적으로 시도하지만 대부분의 스패머는 그렇지 않습니다. 따라서 5분 동안 기다린 후 위의 명령을 사용하여 이메일을 다시 보내고 이제 postfix가 이메일을 수락하는지 확인하십시오.
그런 다음 IMAP을 dovecot에 전달하여 방금 보낸 두 개의 이메일을 가져올 수 있는지 잘 확인하십시오.
openssl s_client -crlf -connect cloud.jhausse.net:993 1 login "mypassword" 2 LIST "" "*" 3 SELECT INBOX 4 UID fetch 1:1 (UID RFC822.SIZE FLAGS BODY.PEEK[]) 5 LOGOUT
여기서 mypassword를 이 이메일 계정에 대해 설정한 비밀번호로 바꿔야 합니다. 그것이 작동한다면 기본적으로 수신 이메일을 수신할 수 있고 장치(PC/노트북, 태블릿, 전화 등)에서 이러한 이메일을 검색할 수 있는 기능적인 이메일 서버가 있습니다. 그러나 우리는 서버 자체에서 이메일을 보내지 않는 한 보낼 이메일을 보낼 수 없습니다. 이제 postfix가 우리의 이메일을 전달할 수 있도록 허용하되, 성공적인 인증 시에만, 즉 이메일이 서버에 유효한 계정을 가진 사람에게서 온 것인지 확인할 수 있는 경우에만 가능합니다. 그렇게 하려면 특별한 SSL 전용 SASL 인증 이메일 제출 서비스를 여십시오. /etc/postfix/master.cf에서 다음 매개변수를 설정합니다.
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination
접미사 다시로드
service postfix reload
이제 서버가 아닌 다른 시스템에서 이 서비스를 사용해 봅시다. postfix가 이제 다른 사람이 아닌 우리의 이메일을 릴레이하는지 확인합니다.
openssl s_client -connect cloud.jhausse.net:587 -starttls smtp EHLO cloud.jhausse.net
포트 25에 연결할 때 나타나지 않는 서버에서 광고하는 250-AUTH PLAIN 기능에 주목하십시오.
MAIL FROM: rcpt to: 554 5.7.1 <>: Relay access denied QUIT
좋습니다. postfix는 그가 우리를 모르면 이메일을 전달하지 않습니다. 먼저 본인 인증을 합시다. 이렇게 하려면 먼저 인증 문자열을 생성해야 합니다.
echo -ne '\\000mypassword'|base64
서버를 통해 다시 이메일을 보내도록 합시다.
openssl s_client -connect cloud.jhausse.net:587 -starttls smtp EHLO cloud.jhausse.net AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA== MAIL FROM: rcpt to:
어떤 접미사가 이제 받아들여야 하는지. 테스트를 완료하려면 [email protected]에 이메일을 보내 가상 별칭이 작동하는지 확인하세요.
telnet cloud.jhausse.net 25 EHLO cloud.jhausse.net MAIL FROM: rcpt to: data Subject: Virtual alias test Dear postmaster, Long time no hear! I hope your MX is working smoothly and securely. Yours sincerely, Roudy . QUIT
메일이 올바른 받은 편지함으로 전달되었는지 확인하겠습니다.
openssl s_client -crlf -connect cloud.jhausse.net:993 1 login "mypassword" 2 LIST "" "*" 3 SELECT INBOX * 2 EXISTS * 2 RECENT 4 LOGOUT
이 시점에서 수신 메일과 발신 메일 모두에 대해 작동하는 이메일 서버가 있습니다. 우리는 그것을 사용하도록 장치를 설정할 수 있습니다.
추신: 더 이상 postgrey에 의해 차단되지 않았는지 확인하기 위해 포트 25를 통해 서버에서 호스팅하는 계정으로 이메일을 다시 보내려고 시도한 것을 기억하십니까?
<이름=dspam>
스팸이 받은 편지함에 도달하지 못하도록 방지
<이름=dspam>
스팸 필터링을 위해 이미 실시간 블랙리스트(RBL)와 그레이리스팅(postgrey)이 있습니다. 이제 적응형 스팸 필터링을 추가하여 스팸 방지 기능을 한 단계 끌어올립니다. 이는 이메일 서버에 인공 지능을 추가하여 스팸이 무엇인지 아닌지 경험을 통해 학습할 수 있음을 의미합니다. 이를 위해 dspam을 사용합니다.
apt-get install dspam dovecot-antispam postfix-pcre dovecot-sieve
dovecot-antispam은 dspam에 의해 잘못 분류된 이메일을 찾은 경우 dovecot이 스팸 필터를 재훈련할 수 있도록 하는 패키지입니다. 기본적으로 이메일을 정크/스팸 폴더 안팎으로 이동하기만 하면 됩니다. 그러면 dovecot-antispam이 dspam 호출을 처리하여 필터를 재훈련합니다. postfix-pcre 및 dovecot-sieve의 경우 각각 스팸 필터를 통해 수신 이메일을 전달하고 스팸을 사용자 정크/스팸 폴더로 자동 이동하는 데 사용할 것입니다.
/etc/dspam/dspam.conf에서 다음 매개변수를 다음 값으로 설정합니다.
TrustedDeliveryAgent "/usr/sbin/sendmail" UntrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u" Tokenizer osb IgnoreHeader X-Spam-Status IgnoreHeader X-Spam-Scanned IgnoreHeader X-Virus-Scanner-Result IgnoreHeader X-Virus-Scanned IgnoreHeader X-DKIM IgnoreHeader DKIM-Signature IgnoreHeader DomainKey-Signature IgnoreHeader X-Google-Dkim-Signature ParseToHeaders on ChangeModeOnParse off ChangeUserOnParse full ServerPID /var/run/dspam/dspam.pid ServerDomainSocketPath "/var/run/dspam/dspam.sock" ClientHost /var/run/dspam/dspam.sock
그런 다음 /etc/dspam/default.prefs에서 다음 매개변수를 다음으로 변경합니다.
spamAction=deliver # { quarantine | tag | deliver } -> default:quarantine signatureLocation=headers # { message | headers } -> default:message showFactors=on
이제 /etc/postfix/master.cf의 끝에 다음 두 줄을 추가하여 dspam을 postfix 및 dovecot에 연결해야 합니다.
dspam unix - n n - 10 pipe flags=Ru user=dspam argv=/usr/bin/dspam --deliver=innocent,spam --user $recipient -i -f $sender -- $recipient dovecot unix - n n - - pipe flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
이제 우리는 이메일이 서버 자체(permit_mynetworks)에서 제출된 경우를 제외하고 dspam을 통해 포트 25(일반 SMTP 트래픽)에서 서버에 제출된 모든 새 이메일을 필터링하도록 postfix에 지시할 것입니다. 이전 섹션에서 별도의 제출 서비스를 설정했기 때문에 SASL 인증을 사용하여 postfix에 제출하는 이메일은 dspam을 통해 필터링되지 않습니다. /etc/postfix/main.cf를 편집하여 smtpd_client_restrictions를 다음과 같이 변경합니다.
smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023, check_client_access pcre:/etc/postfix/dspam_filter_access
파일 끝에 다음도 추가합니다.
# For DSPAM, only scan one mail at a time dspam_destination_recipient_limit = 1
이제 정의한 필터를 지정해야 합니다. 기본적으로 우리는 모든 이메일(/./)을 유닉스 소켓을 통해 dspam으로 보내도록 postfix에 지시할 것입니다. 새 파일 /etc/postfix/dspam_filter_access를 만들고 다음 줄을 입력합니다.
/./ FILTER dspam:unix:/run/dspam/dspam.sock
접미사 부분은 여기까지입니다. 이제 스팸 필터링을 위해 dovecot을 설정해 보겠습니다. /etc/dovecot/conf.d/20-imap.conf에서 다음과 같이 imap mail_plugins 플러그인 매개변수를 편집합니다.
mail_plugins = $mail_plugins antispam
lmtp에 대한 섹션을 추가합니다.
protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins sieve }
이제 dovecot-antispam 플러그인을 구성합니다. 플러그인 섹션에 다음 내용을 추가하려면 /etc/dovecot/conf.d/90-plugin.conf를 편집하십시오.
plugin { ... # Antispam (DSPAM) antispam_backend = dspam antispam_allow_append_to_spam = YES antispam_spam = Junk;Spam antispam_trash = Trash;trash antispam_signature = X-DSPAM-Signature antispam_signature_missing = error antispam_dspam_binary = /usr/bin/dspam antispam_dspam_args = --user;%u;--deliver=;--source=error antispam_dspam_spam = --class=spam antispam_dspam_notspam = --class=innocent antispam_dspam_result_header = X-DSPAM-Result }
그리고 /etc/dovecot/conf.d/90-sieve.conf에서 서버의 모든 사용자에게 적용할 기본 체 스크립트를 지정합니다.
sieve_default = /etc/dovecot/default.sieve
sieve는 무엇이며 모든 사용자를 위한 기본 스크립트가 필요한 이유는 무엇입니까? Sieve를 사용하면 IMAP 서버에서 작업을 자동화할 수 있습니다. 우리의 경우 스팸으로 식별된 모든 이메일을 받은 편지함이 아닌 정크 폴더에 넣지 않습니다. 우리는 이것이 서버의 모든 사용자에 대한 기본 동작이 되기를 바랍니다. 그래서 이 스크립트를 기본 스크립트로 설정했습니다. 다음 내용으로 새 파일 /etc/dovecot/default.sieve를 만들어 이 스크립트를 지금 만들어 보겠습니다.
require ["regex", "fileinto", "imap4flags"]; # Catch mail tagged as Spam, except Spam retrained and delivered to the mailbox if allof (header :regex "X-DSPAM-Result" "^(Spam|Virus|Bl[ao]cklisted)$", not header :contains "X-DSPAM-Reclassified" "Innocent") { # Mark as read # setflag "\\Seen"; # Move into the Junk folder fileinto "Junk"; # Stop processing here stop; }
이제 dovecot이 실행할 수 있도록 이 스크립트를 컴파일해야 합니다. 또한 적절한 권한을 부여해야 합니다.
cd /etc/dovecot sievec . chown mail.dovecot default.siev* chmod 0640 default.sieve chmod 0750 default.svbin
마지막으로 dspam이 읽어야 하는 두 개의 postfix 구성 파일에 대한 권한을 수정해야 합니다.
chmod 0644 /etc/postfix/dynamicmaps.cf /etc/postfix/main.cf
그게 다야! dovecot 및 postfix를 다시 시작하겠습니다.
service dovecot restart service postfix restart
원격 호스트(예: 서버를 설정하는 데 사용하는 컴퓨터)에서 서버에 연결하여 안티스팸을 테스트합니다.
openssl s_client -connect cloud.jhausse.net:25 -starttls smtp EHLO cloud.jhausse.net MAIL FROM: rcpt to: DATA Subject: DSPAM test Hi Roudy, how'd you like to eat some ham tonight? Yours, J . QUIT
메일이 도착했는지 확인해보자:
openssl s_client -crlf -connect cloud.jhausse.net:993 1 login "mypassword" 2 LIST "" "*" 3 SELECT INBOX 4 UID fetch 3:3 (UID RFC822.SIZE FLAGS BODY.PEEK[])
다음과 같이 스팸에 의해 설정된 플래그 모음이 포함된 이메일을 반환해야 합니다.
X-DSPAM-Result: Innocent X-DSPAM-Processed: Sun Oct 5 16:25:48 2014 X-DSPAM-Confidence: 1.0000 X-DSPAM-Probability: 0.0023 X-DSPAM-Signature: 5431710c178911166011737 X-DSPAM-Factors: 27, Received*Postfix+with, 0.40000, Received*with+#+id, 0.40000, like+#+#+#+ham, 0.40000, some+#+tonight, 0.40000, Received*certificate+requested, 0.40000, Received*client+certificate, 0.40000, Received*for+roudy, 0.40000, Received*Sun+#+#+#+16, 0.40000, Received*Sun+#+Oct, 0.40000, Received*roudy+#+#+#+Oct, 0.40000, eat+some, 0.40000, Received*5+#+#+16, 0.40000, Received*cloud.jhausse.net+#+#+#+id, 0.40000, Roudy+#+#+#+to, 0.40000, Received*Oct+#+16, 0.40000, to+#+#+ham, 0.40000, Received*No+#+#+requested, 0.40000, Received*jhausse.net+#+#+Oct, 0.40000, Received*256+256, 0.40000, like+#+#+some, 0.40000, Received*ESMTPS+id, 0.40000, how'd+#+#+to, 0.40000, tonight+Yours, 0.40000, Received*with+cipher, 0.40000 5 LOGOUT
좋은! 이제 서버 사용자를 위해 적응형 스팸 필터링이 설정되었습니다. 물론 각 사용자는 처음 몇 주 동안 필터를 훈련해야 합니다. 메시지를 스팸으로 훈련시키려면 장치(PC, 태블릿, 전화)를 사용하여 메시지를 "스팸" 또는 "정크" 폴더로 옮기십시오. 그렇지 않으면 햄으로 훈련될 것입니다.
<이름=SPF>
보내는 이메일이 스팸 필터를 통과하는지 확인하십시오.
<이름=SPF>
이 섹션에서 우리의 목표는 우리의 메일 서버가 세상에 가능한 한 깨끗한 것처럼 보이게 하고 스패머가 우리 이름으로 이메일을 보내는 것을 더 어렵게 만드는 것입니다. 부작용으로 다른 메일 서버의 스팸 필터를 통해 이메일을 받는 데 도움이 됩니다.
발신자 정책 프레임워크
SPF(Sender Policy Framework)는 전체 인터넷의 어떤 메일 서버가 도메인 이름에 대해 이메일을 보낼 수 있는지 선언하는 영역에 추가하는 레코드입니다. 설정은 매우 쉽습니다. microsoft.com에서 SPF 마법사를 사용하여 SPF 레코드를 생성한 다음 영역에 TXT 레코드로 추가합니다. 다음과 같이 표시됩니다.
jhausse.net. 300 IN TXT v=spf1 mx mx:cloud.jhausse.net -all
리버스 PTR
이 기사의 앞부분에서 이 점에 대해 논의했습니다. 서버의 IP 주소에 대한 역방향 조회를 수행하면 서버의 실제 이름이 반환되도록 서버에 대한 역방향 DNS를 올바르게 설정하는 것이 좋습니다.
오픈디킴
OpenDKIM을 활성화하면 postfix는 암호화 키를 사용하여 모든 발신 이메일에 서명합니다. 그런 다음 해당 키를 DNS의 영역에 보관합니다. 그렇게 하면 전 세계의 모든 메일 서버에서 이메일이 실제로 우리에게서 온 것인지 또는 스패머가 위조한 것인지 확인할 수 있습니다. opendkim을 설치하자:
apt-get install opendkim opendkim-tools
그리고 다음과 같이 /etc/opendkim.conf를 편집하여 설정합니다.
## ## opendkim.conf -- configuration file for OpenDKIM filter ## Canonicalization relaxed/relaxed ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable LogWhy Yes MinimumKeyBits 1024 Mode sv PidFile /var/run/opendkim/opendkim.pid SigningTable refile:/etc/opendkim/SigningTable Socket inet: Syslog Yes SyslogSuccess Yes TemporaryDirectory /var/tmp UMask 022 UserID opendkim:opendkim
/etc/opendkim에 저장할 두 개의 추가 파일이 필요합니다.
mkdir -pv /etc/opendkim/ cd /etc/opendkim/
다음 내용으로 새 파일 /etc/opendkim/TrustedHosts를 생성합니다.
127.0.0.1
다음 내용이 포함된 /etc/opendkim/KeyTable이라는 새 파일
cloudkey jhausse.net:mail:/etc/opendkim/mail.private
이는 /etc/opendkim/mail.private에서 콘텐츠를 찾을 수 있는 cloudkey라는 암호화 키를 사용하려고 OpenDKIM에 알립니다. /etc/opendkim/SigningTable이라는 다른 파일을 만들고 다음 줄을 추가합니다.
*@jhausse.net cloudkey
이는 jhausse.net 도메인의 모든 이메일이 키 cloudkey를 사용하여 서명되어야 함을 OpenDKIM에 알려줍니다. 서명하려는 다른 도메인이 있는 경우 여기에도 추가할 수 있습니다.
다음 단계는 해당 키를 생성하고 OpenDKIM 구성 파일에 대한 권한을 수정하는 것입니다.
opendkim-genkey -r -s mail [-t] chown -Rv opendkim:opendkim /etc/opendkim chmod 0600 /etc/opendkim/* chmod 0700 /etc/opendkim
처음에는 테스트 모드에 있고 OpenDKIM 서명을 기반으로 이메일을 폐기해서는 안 된다는 다른 메일 서버에 신호를 보내는 -t를 사용하는 것이 좋습니다. mail.txt 파일에서 OpenDKIM 키를 얻을 수 있습니다.
cat mail.txt
그런 다음 영역 파일에 다음과 같은 TXT 레코드로 추가합니다.
mail._domainkey.cloud1984.net. 300 IN TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqG...
마지막으로, 보내는 이메일에 서명하도록 postfix에 알려야 합니다. /etc/postfix/main.cf 끝에 다음을 추가합니다.
# Now for OpenDKIM: we'll sign all outgoing emails smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
해당 서비스를 다시로드하십시오.
service postfix reload service opendkim restart
이제 OpenDKIM 공개 키를 찾을 수 있고 개인 키와 일치하는지 테스트해 보겠습니다.
opendkim-testkey -d jhausse.net -s mail -k mail.private -vvv
반환해야
opendkim-testkey: key OK
이를 위해 이름 서버가 영역을 다시 로드할 때까지 잠시 기다려야 할 수 있습니다(Linode에서는 15분마다 발생함). dig를 사용하여 영역이 아직 다시 로드되었는지 확인할 수 있습니다.
이것이 작동하면 다른 서버가 OpenDKIM 서명 및 SPF 레코드를 검증할 수 있는지 테스트해 보겠습니다. 이를 위해 Brandons 웹 페이지를 사용할 수 있으며 서버에서 다음 명령을 실행할 수 있습니다.
mail -s CloudCheck www.brandonchecketts.com
Brandons 웹 페이지에서 DKIM 서명 섹션에 result = pass가 표시되고 SPF 정보 섹션에 Result: pass가 표시됩니다. 이메일이 이 테스트를 통과하면 -t 스위치 없이 OpenDKIM 키를 재생성하고 새 키를 영역 파일에 업로드하고 여전히 테스트를 통과하면 여전히 다시 테스트하십시오. 그렇다면 축하합니다! 서버에서 OpenDKIM 및 SPF를 성공적으로 설정했습니다!
<이름=owncloud>
Owncloud로 캘린더, 연락처, 파일을 호스팅하고 Roundcube로 웹메일을 설정하세요.
<이름=owncloud>
이제 최고 수준의 이메일 서버가 있으므로 연락처, 일정 및 파일을 클라우드에 저장할 수 있는 기능을 추가할 수 있습니다. 이들은 Owncloud가 즉시 제공하는 서비스입니다. 거기에 있는 동안 웹 메일도 설정하여 전자 제품 없이 여행하거나 휴대폰과 노트북의 배터리가 부족한 경우에도 이메일을 확인할 수 있습니다.
Owncloud 설치는 간단하며 여기에 잘 설명되어 있습니다. Debian에서는 apt 소스에 owncloud 리포지토리를 추가하고 ownclouds 릴리스 키를 다운로드하여 apt 키링에 추가한 다음 apt-get을 사용하여 owncloud 자체를 설치하는 것으로 요약됩니다.
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/Release.key apt-key add - < Release.key apt-get update apt-get install apache2 owncloud roundcube
메시지가 표시되면 dbconfig를 선택한 다음 roundcube가 mysql을 사용하도록 하겠다고 말합니다. 그런 다음 mysql 루트 암호를 제공하고 roundcube mysql 사용자에 대한 좋은 암호를 설정합니다. 그런 다음 roundcube 구성 파일 /etc/roundcube/main.inc.php를 편집하여 roundcube에 로그인할 때 기본적으로 IMAP 서버를 사용하도록 합니다.
$rcmail_config['default_host'] = 'ssl://localhost'; $rcmail_config['default_port'] = 993;
이제 비밀번호와 데이터에 대한 암호화를 사용하여 Owncloud 및 Roundcube와 통신할 수 있도록 SSL로 apache2 웹 서버를 설정합니다. Apaches SSL 모듈을 켭니다.
a2enmod ssl
/etc/apache2/ports.conf를 편집하여 다음 매개변수를 설정합니다.
NameVirtualHost *:80 Listen 80 ServerName www.jhausse.net <IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. NameVirtualHost *:443 Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
웹 서버에 대한 암호화된 연결을 위한 기본 웹 사이트를 /var/www 아래에 https://www.jhausse.net으로 설정합니다. /etc/apache2/sites-available/default-ssl을 편집합니다.
<VirtualHost _default_:443> ServerAdmin DocumentRoot /var/www ServerName www.jhausse.net [...] <Directory /var/www/owncloud> Deny from all </Directory> [...] SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key [...] </VirtualHost>
또한 /var/www에서 http://www.jhausse.net에 대한 암호화되지 않은 연결을 위한 웹사이트를 설정할 수 있습니다. /etc/apache2/sites-available/default를 편집합니다.
<VirtualHost _default_:443> DocumentRoot /var/www ServerName www.jhausse.net [...] <Directory /var/www/owncloud> Deny from all </Directory> </VirtualHost>
그렇게 하면 /var/www에 넣어 www.jhausse.net에 대한 페이지를 제공할 수 있습니다. Deny from all 지시문은 www.jhausse.net을 통한 Owncloud 액세스를 방지합니다. 대신 https://cloud.jhausse.net을 통해 액세스하도록 설정합니다.
이제 https://webmail.jhausse.net을 통해 액세스할 수 있도록 웹메일(roundcube)을 설정합니다. 다음 내용이 포함되도록 /etc/apache2/sites-available/roundcube를 편집합니다.
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin DocumentRoot /var/lib/roundcube # The host name under which you'd like to access the webmail ServerName webmail.jhausse.net <Directory /> Options FollowSymLinks AllowOverride None </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # do not allow unsecured connections # SSLRequireSSL SSLCipherSuite HIGH:MEDIUM # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed. SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key # Those aliases do not work properly with several hosts on your apache server # Uncomment them to use it or adapt them to your configuration Alias /program/js/tiny_mce/ /usr/share/tinymce/www/ # Access to tinymce files <Directory "/usr/share/tinymce/www/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny allow from all </Directory> <Directory /var/lib/roundcube/> Options +FollowSymLinks # This is needed to parse /var/lib/roundcube/.htaccess. See its # content before setting AllowOverride to None. AllowOverride All order allow,deny allow from all </Directory> # Protecting basic directories: <Directory /var/lib/roundcube/config> Options -FollowSymLinks AllowOverride None </Directory> <Directory /var/lib/roundcube/temp> Options -FollowSymLinks AllowOverride None Order allow,deny Deny from all </Directory> <Directory /var/lib/roundcube/logs> Options -FollowSymLinks AllowOverride None Order allow,deny Deny from all </Directory> <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # SSL Protocol Adjustments: # The safe and default but still SSL/TLS standard compliant shutdown # approach is that mod_ssl sends the close notify alert but doesn't wait for # the close notify alert from client. When you need a different shutdown # approach you can use one of the following variables: # o ssl-unclean-shutdown: # This forces an unclean shutdown when the connection is closed, i.e. no # SSL close notify alert is send or allowed to received. This violates # the SSL/TLS standard but is needed for some brain-dead browsers. Use # this when you receive I/O errors because of the standard approach where # mod_ssl sends the close notify alert. # o ssl-accurate-shutdown: # This forces an accurate shutdown when the connection is closed, i.e. a # SSL close notify alert is send and mod_ssl waits for the close notify # alert of the client. This is 100% SSL/TLS standard compliant, but in # practice often causes hanging connections with brain-dead browsers. Use # this only for browsers where you know that their SSL implementation # works correctly. # Notice: Most problems of broken clients are also related to the HTTP # keep-alive facility, so you usually additionally want to disable # keep-alive for those clients, too. Use variable "nokeepalive" for this. # Similarly, one has to force some clients to use HTTP/1.0 to workaround # their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and # "force-response-1.0" for this. BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
예를 들어 DNS에서 서버를 선언합니다.
webmail.jhausse.net. 300 IN CNAME cloud.jhausse.net.
이제 이 세 웹사이트를 활성화하겠습니다.
a2ensite default default-ssl roundcube service apache2 restart
https://webmail.jhausse.net에서 접근할 수 있는 웹메일은 기본적으로 작동해야 합니다. 전체 이메일(예: [email protected])과 이 도움말 시작 부분에서 메일 서버 DB에 설정한 비밀번호를 사용하여 로그인합니다. 처음 연결할 때 브라우저는 인증서가 인증 기관에서 서명하지 않았다는 경고를 표시합니다. 괜찮습니다. 예외를 추가하십시오.
마지막으로 /etc/apache2/sites-available/owncloud에 다음 콘텐츠를 넣어 owncloud용 가상 호스트를 생성합니다.
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin DocumentRoot /var/www/owncloud ServerName cloud.jhausse.net <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/owncloud> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # do not allow unsecured connections # SSLRequireSSL SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /etc/ssl/certs/cloud.crt SSLCertificateKeyFile /etc/ssl/private/cloud.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
다음을 실행하여 owncloud를 활성화하십시오.
a2ensite owncloud service apache2 reload
그런 다음 웹 브라우저에서 https://cloud.jhausse.net/에 연결하여 owncloud 구성을 진행하십시오.
그게 다야! 이제 나만의 Google 드라이브, 캘린더, 연락처, Dropbox 및 Gmail이 생겼습니다! 새로 복구된 프라이버시를 즐기세요! :-)
<이름=동기화>
장치를 클라우드에 동기화
<이름=동기화>
이메일을 동기화하려면 Android 또는 iOS의 표준 이메일 프로그램, k9mail 또는 PC의 Thunderbird와 같이 선호하는 이메일 클라이언트를 사용하면 됩니다. 또는 저희가 설정한 웹메일을 이용하실 수도 있습니다.
캘린더와 연락처를 클라우드와 동기화하는 방법은 owncloud 문서에 설명되어 있습니다. Android에서는 CalDAV-Sync 및 CardDAV-Sync 앱을 사용하고 있습니다. 이 앱은 Android 캘린더와 휴대전화의 연락처 앱과 자체 클라우드 서버 사이의 다리 역할을 합니다.
파일의 경우 휴대폰에서 파일에 액세스하고 클라우드에 찍은 사진과 비디오를 자동으로 업로드하는 Owncloud라는 Android 앱이 있습니다. Mac/PC에서 파일에 액세스하는 것은 쉽고 Owncloud 설명서에 잘 설명되어 있습니다.
<이름=팁>
마지막 팁
<이름=팁>
처음 몇 주 동안은 매일 /var/log/syslog 및 /var/log/mail.log를 모니터링하고 모든 것이 원활하게 실행되는지 확인하는 것이 좋습니다. 다른 사람(친구, 가족 등)을 서버에서 호스팅하도록 초대하기 전에 그렇게 하는 것이 중요합니다. 그들이 데이터로 귀하를 신뢰하고 갑자기 서버를 사용할 수 없게 되면 셀프 호스팅에 대한 신뢰를 잃을 수 있습니다.
다른 이메일 사용자를 추가하려면 메일 서버 DB의 virtual_users 테이블에 행을 추가하면 됩니다.
도메인을 추가하려면 virtual_domains 테이블에 행을 추가하기만 하면 됩니다. 그런 다음 /etc/opendkim/SigningTable을 업데이트하여 발신 이메일에 서명하고 OpenDKIM 키를 영역에 업로드하고 OpenDKIM을 다시 로드합니다.
Owncloud는 자체 사용자 DB를 가지고 있으며 Owncloud에 관리자로 로그인하여 관리할 수 있습니다.
마지막으로 서버를 일시적으로 사용할 수 없게 될 경우를 대비하여 솔루션을 미리 생각하는 것이 중요합니다. 예를 들어, 서버가 돌아올 때까지 메일은 어디로 갈까요? 한 가지 해결책은 당신이 그의 백업 MX 역할을 하는 동안 당신이 백업 MX 역할을 할 수 있는 친구를 찾는 것입니다(Postfixs main.cf 파일의 relay_domains 및 relay_recipient_maps 설정 참조). 마찬가지로 서버가 손상되고 악의적인 개인이 거기에 있는 모든 파일을 지운다면 어떻게 될까요? 이를 위해서는 정기적인 백업 시스템을 생각하는 것이 중요합니다. Linode는 옵션으로 백업을 제공합니다. 1984.is에서 crontabs 및 scp를 사용하여 기본적이지만 충분한 자동 백업 시스템을 설정했습니다.