postfixのインストール
メールサーバとして、postfixをインストールします。
[root@ace zeke]# dnf install postfix
メタデータの期限切れの最終確認: 0:01:06 時間前の 2020年04月10日 00時38分36秒 に 実施しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
postfix x86_64 2:3.3.1-9.el8 BaseOS 1.5 M
依存関係のインストール:
libicu x86_64 60.3-2.el8_1 BaseOS 8.8 M
トランザクションの概要
================================================================================
インストール 2 パッケージ
ダウンロードサイズの合計: 10 M
インストール済みのサイズ: 38 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): postfix-3.3.1-9.el8.x86_64.rpm 5.5 MB/s | 1.5 MB 00:00
(2/2): libicu-60.3-2.el8_1.x86_64.rpm 16 MB/s | 8.8 MB 00:00
--------------------------------------------------------------------------------
合計 7.9 MB/s | 10 MB 00:01
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : libicu-60.3-2.el8_1.x86_64 1/2
scriptletの実行中: libicu-60.3-2.el8_1.x86_64 1/2
scriptletの実行中: postfix-2:3.3.1-9.el8.x86_64 2/2
インストール中 : postfix-2:3.3.1-9.el8.x86_64 2/2
scriptletの実行中: postfix-2:3.3.1-9.el8.x86_64 2/2
検証 : libicu-60.3-2.el8_1.x86_64 1/2
検証 : postfix-2:3.3.1-9.el8.x86_64 2/2
インストール済み:
postfix-2:3.3.1-9.el8.x86_64 libicu-60.3-2.el8_1.x86_64
完了しました!
[root@ace zeke]#
お手軽パッケージインストール完了です。
main.cfの編集
[root@ace zeke]# diff /etc/postfix/main.cf /etc/postfix/main.cf.orig
96d95
< myhostname = mail.zeke.ne.jp
104d102
< mydomain = zeke.ne.jp
134c132
< inet_interfaces = all
---
> #inet_interfaces = all
137c135
< #inet_interfaces = localhost
---
> inet_interfaces = localhost
185c183
< #mydestination = $myhostname, localhost.$mydomain, localhost
---
> mydestination = $myhostname, localhost.$mydomain, localhost
189,192d186
< mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
< ns.zeke.ne.jp, joeker.zeke.ne.jp, myhome.zeke.ne.jp, ace.zeke.ne.jp,
< zeke.jp, mail.zeke.jp, ns.zeke.jp, joeker.zeke.jp,
< *その他のドメイン*.com
434c428
< recipient_delimiter = +
---
> #recipient_delimiter = +
445d438
< home_mailbox = Maildir/
475d467
< mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
601d592
< smtpd_banner = $myhostname ESMTP $mail_name
718c709
< smtpd_tls_cert_file = /etc/letsencrypt/live/zeke.ne.jp/fullchain.pem
---
> smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
724c715
< smtpd_tls_key_file = /etc/letsencrypt/live/zeke.ne.jp/privkey.pem
---
> smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
748,779d738
<
< smtpd_tls_loglevel = 1
< smtpd_tls_received_header = yes
<
< # SASL parameters
< smtpd_sasl_auth_enable = no
< smtpd_sasl_type = dovecot
< smtpd_sasl_path = private/auth
< smtpd_sasl_security_options = noanonymous
< smtpd_sasl_local_domain = $myhostname
<
< smtpd_recipient_restrictions =
< permit_mynetworks,
< reject_unauth_destination,
< reject_rbl_client bl.spamcop.net,
< reject_rbl_client zen.spamhaus.org
<
< # Performance and Regulation
< disable_vrfy_command = yes
< smtpd_peername_lookup = no
< message_size_limit = 10485760
< mailbox_size_limit = 0
< default_process_limit = 50
< default_destination_concurrency_limit = 10
< initial_destination_concurrency = 3
<
< anvil_rate_time_unit = 60s
< smtpd_client_message_rate_limit = 120
< smtpd_client_recipient_rate_limit = 120
< smtpd_client_connection_rate_limit = 120
< smtpd_client_connection_count_limit = 25
<
[root@ace zeke]#
設定ファイルについては
この方針と
こちらのページを参考にさせていただきました!
475d467
< mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
ローカルの配送はdovecotのコマンドを使います。
718c709
< smtpd_tls_cert_file = /etc/letsencrypt/live/zeke.ne.jp/fullchain.pem
---
> smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
724c715
< smtpd_tls_key_file = /etc/letsencrypt/live/zeke.ne.jp/privkey.pem
---
> smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
今回の証明書は現行のサーバからコピーしたものを使います。移行したあとは、Let’s Encryptからとてきたものを使います。
< # SASL parameters
< smtpd_sasl_auth_enable = no
< smtpd_sasl_type = dovecot
< smtpd_sasl_path = private/auth
< smtpd_sasl_security_options = noanonymous
< smtpd_sasl_local_domain = $myhostname
認証の設定では、「smtpd_sasl_auth_enable = no
」とし、smtp(25番ポート)では認証なしにしておきます。
また、認証自体はdovecotのものをそのまま使います。
< smtpd_recipient_restrictions =
< permit_mynetworks,
< reject_unauth_destination,
< reject_rbl_client bl.spamcop.net,
< reject_rbl_client zen.spamhaus.org
smtpd_recipient_restrictions
の設定では、bl.spamcop.net及びzen.spamhaus.orgのブラックリストに載っているサーバからの接続を拒否します。
< # Performance and Regulation
< disable_vrfy_command = yes
< smtpd_peername_lookup = no
< message_size_limit = 10485760
< mailbox_size_limit = 0
< default_process_limit = 50
< default_destination_concurrency_limit = 10
< initial_destination_concurrency = 3
パフォーマンス関係の設定では、disable_vrfy_command = yes
として、ユーザを知られないようにしておきます。
また、かつては、ホスト名をもとに接続制限をかけていましたが、今は無駄なので、smtpd_peername_lookup = no
とし、ホスト名の逆引きはしません。
< anvil_rate_time_unit = 60s
< smtpd_client_message_rate_limit = 120
< smtpd_client_recipient_rate_limit = 120
< smtpd_client_connection_rate_limit = 120
< smtpd_client_connection_count_limit = 25
1分間に送信できるメールの数も制限しておきます。これは、不正利用されたときに備えるもので、通常運用時より十分余裕を持った値にしています。
master.cfの編集
[root@ace zeke]# vi /etc/postfix/master.cf
[root@ace zeke]# diff /etc/postfix/master.cf /etc/postfix/master.cf.orig
17,20c17,20
< submission inet n - n - - smtpd
< -o syslog_name=postfix/submission
< -o smtpd_tls_security_level=encrypt
< -o smtpd_sasl_auth_enable=yes
---
> #submission inet n - n - - smtpd
> # -o syslog_name=postfix/submission
> # -o smtpd_tls_security_level=encrypt
> # -o smtpd_sasl_auth_enable=yes
27c27
< -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
---
> # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
29,32c29,32
< smtps inet n - n - - smtpd
< -o syslog_name=postfix/smtps
< -o smtpd_tls_wrappermode=yes
< -o smtpd_sasl_auth_enable=yes
---
> #smtps inet n - n - - smtpd
> # -o syslog_name=postfix/smtps
> # -o smtpd_tls_wrappermode=yes
> # -o smtpd_sasl_auth_enable=yes
38c38
< -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
---
> # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
[root@ace zeke]#
submisshon(587番ポート)及びsmtps(465番ポート)を設定します。こちらはともに認証ありにしておきます。
デーモンの起動
[root@ace zeke]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; vendor pr>
Active: inactive (dead)
[root@ace zeke]# systemctl start postfix
[root@ace zeke]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor pre>
Active: active (running) since Sat 2020-05-09 21:01:32 JST; 7s ago
Process: 14689 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 14709 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCE>
Process: 14707 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, >
Process: 14703 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, stat>
Main PID: 14776 (master)
Tasks: 3 (limit: 12535)
Memory: 5.1M
CGroup: /system.slice/postfix.service
tq14776 /usr/libexec/postfix/master -w
tq14777 pickup -l -t unix -u
mq14778 qmgr -l -t unix -u
5月 09 21:01:32 ace.lo.zeke.ne.jp systemd[1]: Starting Postfix Mail Transport >
5月 09 21:01:32 ace.lo.zeke.ne.jp postfix/master[14776]: daemon started -- ver>
5月 09 21:01:32 ace.lo.zeke.ne.jp systemd[1]: Started Postfix Mail Transport A>
[root@ace zeke]#
[root@ace zeke]# systemctl enable postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
[root@ace zeke]#
とりあえず、デーモンを起動。システム起動時に自動起動もできるようにしておきます。
ステータスをチェックで、エラーも出ていないようですね。
[root@ace zeke]# ss -natup | grep master
tcp LISTEN 0 50 0.0.0.0:587 0.0.0.0:* users:(("master",pid=14426,fd=21))
tcp LISTEN 0 50 0.0.0.0:465 0.0.0.0:* users:(("master",pid=14426,fd=25))
tcp LISTEN 0 50 0.0.0.0:25 0.0.0.0:* users:(("master",pid=14426,fd=16))
tcp LISTEN 0 50 [::]:587 [::]:* users:(("master",pid=14426,fd=22))
tcp LISTEN 0 50 [::]:465 [::]:* users:(("master",pid=14426,fd=26))
tcp LISTEN 0 50 [::]:25 [::]:* users:(("master",pid=14426,fd=17))
[root@ace zeke]#
[root@ace zeke]#
まだ、dovecotが入っていないので、メールの確認ができません。ポートの待受ができていることを確認して、今のところは、良しとします。
DNSサーバの設定追加
こちらのページに解説していますが、DNSサーバのゾーンファイルにMXレコードを入れなくてはいけません。
IN A 192.168.1.1
IN AAAA 2001:2c0:cd03:ca00::ace
IN MX 10 mail.zeke.ne.jp.
;
ns IN A 192.168.1.1
IN AAAA 2001:2c0:cd03:ca00::ace
IN MX 10 mail.zeke.ne.jp.
;
joeker IN A 192.168.1.1
IN AAAA 2001:2c0:cd03:ca00::ace
IN MX 10 mail.zeke.ne.jp.
;
mail IN A 192.168.1.1
IN AAAA 2001:2c0:cd03:ca00::ace
IN MX 10 mail.zeke.ne.jp.
;
www IN CNAME ns
irc IN CNAME ns
ftp IN CNAME ns
redh IN CNAME ns
shoot IN CNAME ns
blog IN CNAME ns
matomo IN CNAME ns
info IN CNAME ns
*.info IN CNAME ns
;
myhome IN A 192.168.1.4
IN AAAA 2001:2c0:cd03:ca00::4
IN MX 10 mail.zeke.ne.jp.
;
ace IN A 192.168.1.1
IN AAAA 2001:2c0:cd03:ca00::ace
IN MX 10 mail.zeke.ne.jp.
Aレコードを持つドメインやホストにMXレコードを入れています。main.cf
のmydestination
には、こちらのホスト名を列挙しています。
また、メールサーバの動作確認を行うために、dnsサーバ及びメールサーバのIPアドレスを新しいサーバのものに変更しました。
Firewallの設定
以下のようにポートを開きます。
[root@ace zeke]# firewall-cmd --list-all-zones
:
省略
:
japan (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ::/0 ipset:JAPAN
services: dns ftp irc ssh
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/10
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
:
省略
:
[root@ace zeke]#
[root@ace zeke]# firewall-cmd --add-service=smtp --zone=public --permanent
success
[root@ace zeke]# firewall-cmd --add-service=smtp --zone=japan --permanent
success
[root@ace zeke]# firewall-cmd --add-service=smtp-submission --zone=japan --permanent
success
[root@ace zeke]# firewall-cmd --add-service=smtps --zone=japan --permanent
success
[root@ace zeke]#
[root@ace zeke]# firewall-cmd --reload
接続断…
あらあら、firewall設定中にsshの通信が切れてしまいました。CentOS7では問題なかったのだけど、まだ不安定みたいですね。
その後、firewall-cmd --reload
コマンドを実行すると、
ERROR:dbus.proxies:Introspect error on :1.8:/org/fedoraproject/FirewallD1: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
のようなエラーメッセージが出るようになりました。想像するにipsetのリストが大きいので、再起動に時間がかかりすぎタイムアウトを起こしているのではないかな?
今後、Firewallの設定を変更するときはsystemctl restart firewalld
を使うのがいいかもしれません。
しばらく待っていたら、つながるようになったので、確認します。
[root@ace zeke]# firewall-cmd --list-all-zones
:
省略
:
japan (active)
target: default
icmp-block-inversion: no
interfaces:
sources: ::/0 ipset:JAPAN
services: dns ftp irc smtp smtp-submission smtps ssh
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dns ftp irc smtp
ports: 5500-5501/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/10
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
:
省略
:
[root@ace zeke]#
ポイントは認証が必要なsmtp-submissionとsmtpsを、日本国内からしかつなげないようにしたことです。
220 mail.zeke.ne.jp ESMTP.Postfix EHLO ADMIN 250-mail.zeke.ne.jp 250-PIPELINING 250-SIZE 10485760 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 530 5.7.0 Must issue a STARTTLS command first QUIT
現行のメールサーバでsmtp-submissionポートを制限せずに開いていたときの通信内容です。
赤文字が不審者のコマンド、青文字がサーバからの応答です。
明らかに、パスワードをクラックしようとしてますね。STARTTLS必須にしているので、実害はありませんでしたが、このような接続が毎日数千ありました。
認証が必要な人はどこにいるのか特定できるので、範囲を絞って制限をかけることにしました。
ちなみに、smtpポートでも以下のようなログイン試行があります。
220 mail.zeke.ne.jp ESMTP Postfix EHLO TouL1R 250-mail.zeke.ne.jp 250-PIPELINING 250-SIZE.10485760 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 503 5.5.1 Error: authentication not enabled
smtpポートは認証を許してないので、問題ありません。
お勧めのKindle本です!
コメント