検索条件
全9件
(1/1ページ)
perl5-5.36.0_2 (Ports カテゴリ:lang) ※注:FreeBSD Ports におけるパッケージ表記です。Perl 5.26 以上が要求されます。
fmladmin::2007:3000::0:0:FML Administrator:/home/staff/fmladmin:/bin/cshまた、/etc/group の該当行を下記のように変更しておきます:
mailuser:*:3000:opendkim,milter-manager,postfix,fmladmin続いて、下記手順でインストールを、必ず root ユーザで実行します:
# passwd fmladmin # mkdir /home/staff/fmladmin # chown fmladmin:mailuser /home/staff/fmladmin # cp fml-7.99.1.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf fml-7.99.1.tar.gz # cd fml-7.99.1 # ./configure --with-fml-owner=fmladmin --with-fml-group=mailuser # make install
# vi /usr/local/etc/fml/site_default_config.cfとして、最低限下記2行を変更または追加します:
use_article_mime_component_filter = no use_article_filter = noこれを設定しないと、ISO-2022-JP 文字コード以外で記述された電子メールを拒絶してしまいます。
% su # makefml newdomain example.com /var/mail/example.com/~ml (バーチャルドメイン運用初回のみ) 〔参考 ※バーチャルドメイン削除の場合〕 # makefml rmdomain exmple.com (バーチャルドメイン上から MLドライバ削除)○ メーリングリストの新規作成
# su fmladmin % makefml newml test-ml@example.com (ML 新規作成) 〔参考 ※メーリングリスト削除の場合〕 % makefml rmml test-ml@example.com (ML の削除) % exit
《※ postfix の設定を変更》 # vi /usr/local/etc/postfix/main.cf 《下記の例のように、alias を追加》 alias_maps = hash:/etc/mail/aliases hash:/var/mail/example.com/~ml/etc/mail/aliases virtual_alias_maps = hash:/usr/local/etc/postfix/virtualtbl/forwardlist hash:/var/mail/example.com/~ml/etc/postfix/virtual
# vi /etc/mail/aliases 《下記を追加》 fmladmin: root 《追加後、下記を実行》 # newaliases上記、makefml newml の実行で、雛形ファイルが自動生成されますので、それを流用します。
# cd /var/mail/example.com/~ml/etc/postfix # vi virtual ----- 以下、変更 ----- # example.com is one of $mydestination # CAUTION: DO NOT REMOVE THE FOLLOWING LINE. # example.com example.com ← コメントアウトまたは削除 ### <VIRTUAL test-ml@example.com ML> ### # 以下の5行に、@realmx.example.jp (postfix main.cf で指定の myhostname で示す実ホスト名)を追加 test-ml@example.com test-ml=example.com@realmx.example.jp test-ml-ctl@example.com test-ml-ctl=example.com@realmx.example.jp test-ml-request@example.com test-ml-request=example.com@realmx.example.jp test-ml-admin@example.com test-ml-admin=example.com@realmx.example.jp test-ml-error@example.com test-ml-error=example.com@realmx.example.jp ### </VIRTUAL test-ml@example.com ML> ### ----- 変更はここまで ----- ※ MLごとの個別変更で、題名に通し番号を追加する(デフォルトでは通し番号はつかない) # cd /var/mail/example.com/~ml/text-ml # vi config.cf ----- 以下を、変更または追加(位置的には =cut 行の前) ----- article_header_rewrite_rules += rewrite_article_subject_tag article_subject_tag = [$ml_name:%05d] ----- 変更はここまで ----- ※ この設定で[test-ml:12345] みたいなのがメールタイトルの先頭に自動追加されるようになります。 # postmap hash:virtual # postfix reload○ 投稿メンバ兼配送メンバの追加
makefml add test-ml@example.com test@example.net○ 投稿メンバ兼配送メンバの削除
makefml bye test-ml@example.com test@example.net
#!/bin/sh # # PROVIDE: postfix-dovecot # REQUIRE: DAEMON NETWORKING openldap # KEYWORD: shutdown . /etc/rc.subr name="postfix_dovecot" rcvar="postfix_dovecot_enable" start_cmd="mailserver_start" stop_cmd="mailserver_stop" restart_cmd="mailserver_reload" # start postfix,dovecot, and E-Mail account control server smtpserv=/usr/local/sbin/postfix dovecot=/usr/local/sbin/dovecot mailserver_start() { echo ' ' if [ -x $dovecot ]; then /usr/local/sbin/dovecot -c /usr/local/etc/dovecot/dovecot.conf echo ' dovecot 2.3.19.1 ' fi if [ -x $smtpserv ]; then /usr/local/sbin/postfix start > /dev/null 2>&1 echo ' Postfix 3.7.3 ' fi } mailserver_reload() { /usr/local/sbin/postfix reload /usr/local/sbin/dovecot reload echo ' reloaded postfix and dovecot config ' } mailserver_stop() { /usr/local/sbin/postfix stop /usr/local/sbin/dovecot stop echo ' stoped Mail server ' } load_rc_config $name run_rc_command "$1"次に /etc/rc.conf に下記の2行を追加します
# vi /etc/rc.conf
sendmail_enable="NONE" postfix_dovecot_enable="YES"その後で、
# cd /usr/local/etc/rc.d # ./postfix_dovecot startとして、エラーが表示されないことを確認したら、
# ps -aux | grep postfix
root 32817 ... 13692 - Ss 03:13 0:00.00 /usr/local/libexec/postfix/master -w postfix 32818 ... 13704 - S 03:13 0:00.01 pickup -l -t fifo -u postfix 32819 ... 13796 - S 03:13 0:00.01 qmgr -l -t fifo -u postfix 32820 ... 13840 - S 03:13 0:00.01 tlsmgr -l -t unix -u postfix 32821 ... 13648 - S 03:13 0:00.01 postlogd -l -n postlog -t unix-dgram -u※ 記事表示スペースの関係上、実際の表示項目を一部省略しています。
# ps -aux | grep dovecot
root 64526 ... 5684 - Is 02:11 0:00.27 /usr/local/sbin/dovecot -c /usr/local/etc/dovecot/dovecot.conf dovecot 64528 ... 5368 - I 02:11 0:00.07 dovecot/anvil root 64529 ... 5444 - I 02:11 0:00.04 dovecot/log root 64530 ... 7808 - I 02:11 0:00.45 dovecot/config dovecot 64995 ... 5680 - I 02:11 0:00.08 dovecot/stats※ 記事表示スペースの関係上、実際の表示項目を一部省略しています。
# vi /etc/rc.conf
clamav_clamd_enable="YES" clamav_freshclam_enable="YES" clamav_milter_enable="YES" clamav_milter_socket_mode="660" clamav_milter_socket_group="mailuser"その後で、先ず、
# cd /usr/local/etc/rc.d # ./clamav_clamd startとして、エラーが表示されないことを確認したら、
# ps -aux | grep clamavとして、下記のように /usr/local/sbin/clamd が存在することを確認します。
clamav 56967 0.0 7.7 1371840 1291000 - Is 03:03 2:42.64 /usr/local/sbin/clamd続いて、同じように、
# ./clamav_freshclam start # ps -aux | grep clamavとして、下記のように /usr/local/bin/freshclam が存在することを確認、
clamav 57001 0.0 0.2 48820 30412 - Is 03:20 0:08.24 /usr/local/bin/freshclam --daemon -p /var/run/clamav/freshclam.pid最後に、
# ./clamav-milter start # ps -aux | grep clamavとして、下記のように /usr/local/sbin/clamav-milter が存在することを確認します:
clamav 57009 0.0 0.2 92520 29912 - Ss 03:22 0:03.82 /usr/local/sbin/clamav-milter -c /usr/local/etc/clamav-milter.conf何らかの問題が発生した場合、/var/log/clamd.log, /var/log/clamav-milter.log,/var/log/freshclam.log,/var/log/maillog などに解決のヒントが記述されているので、解決を試みることになります。
# vi /etc/rc.conf
milteropendkim_enable="YES" milteropendkim_cfgfile="/usr/local/etc/opendkim/opendkim.conf" milteropendkim_socket="local:/var/run/milteropendkim/dkim-milter"その後で、先ず、
# cd /usr/local/etc/rc.d # ./milter-opendkim startとして、エラーが表示されないことを確認したら、
# ps -aux | grep opendkimとして、下記のように /usr/local/sbin/opendkim が存在することを確認します:
opendkim 33260 ... 12776 - Ss 03:31 0:01.16 /usr/local/sbin/opendkim -l -p local:/var/run/milteropendkim/dkim-milter -u opendkim:mailuser -P /var/run/milteropendkim※ 記事表示スペースの関係上、実際の表示項目を一部省略しています。
# vi /etc/rc.conf
milter_manager_enable="YES"これで、起動準備完了なのですが、初めての場合・milter アプリケーションを追加した場合、「miiter-manager が milter アプリケーションを自動検出できるかどうか」を必ず事前確認することを強くお勧めします。
# /usr/local/sbin/milter-manager -u milter-manager --show-configで実行でき、この時に表示される内容で、
define_milter("clamav-milter") do |milter| # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:44 milter.connection_spec = "unix:/var/run/clamav/clmilter.sock" # default milter.description = nil # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:37 milter.enabled = true # default milter.fallback_status = "accept" ・ ・ 《中略》 ・ ・ define_milter("milter-opendkim") do |milter| # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:44 milter.connection_spec = "local:/var/run/milteropendkim/dkim-milter" # default milter.description = nil # /usr/local/lib/milter-manager/binding/lib/milter/manager/detector.rb:37 milter.enabled = true # default milter.fallback_status = "accept"といった内容が含まれていることと、
# cd /usr/local/etc/rc.d # ./milter-manager startとして、エラーが表示されないことを確認したら、
# ps -aux | grep milter-managerとして、下記のように /usr/local/sbin/clamd が存在することを確認します。
milter-manager 31520 ... 28472 - S 03:57 0:41.49 /usr/local/sbin/milter-manager --pid-file /var/run/milter-manager/milter-manager.pid --user-name milter-manager --group root 31518 ... 28072 0- S 03:57 0:05.64 /usr/local/sbin/milter-manager --pid-file /var/run/milter-manager/milter-manager.pid --user-name milter-manager --group※ 記事表示スペースの関係上、実際の表示項目を一部省略しています。
# vi /etc/rc.conf
spamd_enable="YES"その後で、先ず、
# cd /usr/local/etc/rc.d # ./sa-spamd startとして、エラーが表示されないことを確認したら、
# ps -aux | grep spamdとして、下記のように spamd が存在することを確認します。
root 49139 0.0 0.7 162040 124744 - Ss 04:53 1:13.97 spamd (perl) spamd 49141 0.0 0.8 162040 127988 - I 04:53 0:03.52 spamd child (perl) spamd 49142 0.0 0.7 162040 124816 - I 04:53 0:00.51 spamd child (perl)
require ["fileinto","vnd.dovecot.filter"] ; filter "spamass.sh" "user@example.com" ; # rule:[SpamAssassin] if header :is "X-Spam-Status" "Yes" { fileinto "spamdrop" ; stop ; } # rule:[Clamav] if header :is "X-Virus-Status" "Yes" { fileinto "spamdrop" ; stop ; }更に、/usr/local/etc/dovecot/sieve-filter ディレクトリ配下に spamass,sh というファイル名で、下記スクリプトを用意します:
#!/bin/sh randomid=`/usr/bin/od -An -tu4 -N4 /dev/random | /usr/bin/tr -d ' '` tmpfname1="/tmp/_${randomid}_1" tmpfname2="/tmp/_${randomid}_2" while read line do /bin/cat >> $tmpfname1 done usernam=`echo -n $1 | /usr/bin/cut -d @ -f 1` userdom=`echo -n $1 | /usr/bin/cut -d @ -f 2` if [ -d /var/mail/${userdom}/${usernam}/spamassassin/spamd ]; then /usr/local/bin/spamc -u $1 < $tmpfname1 > $tmpfname2 /bin/cat $tmpfname2 /bin/rm $tmpfname1 /bin/rm $tmpfname2 else /bin/cat $tmpfname1 /bin/rm $tmpfname1 fi exit 0このスクリプトは、実行権限を付与するのを忘れないでください。
X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on mx0.example.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=4.0 tests=BAYES_00,KHOP_HELO_FCRDNS, NICE_REPLY_A,SPF_HELO_NONE,SUBJ_ALL_CAPS autolearn=ham autolearn_force=no version=4.0.0また、テスト受信者から、返信か新規に電子メールを送信してみて、下記のようなDKIMヘッダが付いていれば、成功です:
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com; s=mx0; t=1672471637; bh=3mQXSVMo2kr2sHu262xQGwzCfRBaMvLhHS2T4KSLTSw=; h=Date:Subject:To:References:From:In-Reply-To; b=AjxunnUSbCBDAP3yGcB9lCa1Gjys9PYqZ0cup0a0D2QibriW1KpJPxeUKc84e+/aQ Q3FkBGJ42pe0tReKbA/G40SI3+TI07q5Ktdn2M+Zz3WK1vyeQfnyZ8gZEvj2tLiin2 9Jc6H5qKeEvIx5AQrvIEAyukmXCuXVjGIbujHF2WZbfOmsqeI5eBvDPYK5QAcdrkM+ Ewgc8asLgEIxhOzpMruDEyvJJ8UYJnEPf/hqT5ULWcivOkzvgKL95EEzI42xo3QBd6 DgpQ8kjx9KpsNRJv7IYDrmD9aFoP5mvjzTx51f9+K1uKENXimM7d7MB1kaktiNVKtO XB7v6ywP9dQCw==
・perl5-5.36.0 (Ports から カテゴリ:lang) ・ca_root_nss-3.86 (Ports から カテゴリ:security) ・autoconf-2.71 (Ports から カテゴリ:devel) ・libltdl-2.4.7 (Ports から カテゴリ:devel) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・pcre2-10.40 (Ports から カテゴリ:devel) ・OpenLDAP 2.6.3 以上 (これはソースコードからの構築を強く推奨) ・dovecot 2.3.19.1 以上 (本記事シリーズでソースコードから構築) ・gmake-4.3_2 (Ports から カテゴリ:devel) ・icu-72.1,1 (Ports から カテゴリ:devel)上記をインストール出来ていたら、先ず、運用時における Postfix 自体が意図しているセキュリティポリシーに合わせるため、ここで専用のユーザを予めvipw や useradd コマンドで作っておきます。
postfix::2000:2000::0:0:postfix:nonexistent:/usr/sbin/nologinvipw でユーザ追加した場合は、/etc/group ファイルに下記の行を追加しておきます:
postdrop:*:65001:更に、/etc/group ファイル内の該当行を下記のように変更しておきます:
mailuser:*:3000:opendkim,milter-manager,postfixユーザID、グループIDは、上記例にこだわる必要はありませんが、当然のことながら、ユーザID・グループIDが他と重複しないように注意です。
# passwd postfix今度は以下の手順に沿ってインストール作業を行います。Postfix のインストールは configure を使わない独特で且つ汎用的に対応できる形態になっています。
# cp postfix-3.7.3.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf postfix-3.7.3.tar.gz # cd postfix-3.7.3 # setenv CPPFLAGS '-I/usr/local/include -I/usr/include' (configure が上手くライブラリを探せないため) # setenv LDFLAGS '-L/usr/local/lib -L/usr/lib' (configure が上手くライブラリを探せないため) # unsetenv LD_LIBRARY_PATH' (3.7.x からは、LD_LIBRARY_PATH が設定されているとコンパイルを受け付けない) ※画面上では、説明のために改行していますが、 make の部分は、改行せずに、半角スペースで区切って、一気に入力。 # make -f Makefile.init makefiles (OS等を自動識別してコンパイル) 'CCARGS=-DHAS_LDAP -DUSE_TLS -DUSE_SASL_AUTH (LDAP,SSL,SASL認証をサポートする指示) -DDEF_SASL_SERVER=\"dovecot\" (dovecot SASL を使用する指示 ※2.3.x 以降で必須) -DDEF_COMMAND_DIR=\"/usr/local/sbin\" (postfix 各種実行プログラムの格納ディレクトリ) -DDEF_CONFIG_DIR=\"/usr/local/etc/postfix\" (postfix 各種設定ファイル格納ディレクトリ) -DDEF_DAEMON_DIR=\"/usr/local/libexec/postfix\" (postfix 各種デーモンプログラムの格納ディレクトリ) -I/usr/local/include -I/usr/include/openssl' (openssl のヘッダファイル) 'AUXLIBS=-L/usr/lib -lssl -lcrypto (SSL ライブラリのある場所) -L/usr/local/lib -lldap -llber -licudata -licui18n -licuio -licutest -licutu -licuuc' (LDAP・icu ライブラリのある場所)postfix の場合、いわゆる「メール送信」だけを行う Null Client な構成だと、上記 make コマンドに与えるパラメータが異なってくるのですが、今回は、普通のメールサーバの構築を行うため、提示のオプションになります。
# makeで、エラーが出ないで終了したことを確認したら、
# make installで、インストールを実施します。CUIインタフェースですが、対話形式のインストーラとなっています。
※下記のように設問に対応する。(設問順序は、必ずしもこの順番にはなりません) Please specify the prefix for installed file names. This is useful if you are building ready-to-install packages for distribution to other machines. install_root: [/] Please specify a directory for scratch files while installing Postfix. You must have write permission in this directory. tempdir: [/usr/local/src/postfix-3.7.3] /tmp Please specify the destination directory for installed Postfix configuration files. config_directory: [/usr/local/etc/postfix] Please specify the destination directory for installed Postfix administrative commands. This directory should be in the command search path of adminstrative users. command_directory: [/usr/local/sbin] Please specify the destination directory for installed Postfix daemon programs. This directory should not be in the command search path of any users. daemon_directory: [/usr/local/libexec/postfix] Please specify the final destination directory for Postfix-writable data files such as caches or random numbers. This directory should not be shared with non-Postfix software. data_directory: [/var/lib/postfix] /var/tmp/postfix Please specify the destination directory for the Postfix HTML files. Specify "no" if you do not want to install these files. html_directory: [no] Please specify the owner of the Postfix queue. Specify an account with numerical user ID and group ID values that are not used by any other accounts on the system. mail_owner: [postfix] Please specify the full destination pathname for the installed Postfix mailq command. This is the Sendmail-compatible mail queue listing command. mailq_path: [/usr/bin/mailq] /usr/local/libexec/postfix/mailq Please specify the destination directory for the Postfix on-line manual pages. You can no longer specify "no" here. manpage_directory: [/usr/local/man] Please specify the full destination pathname for the installed Postfix newaliases command. This is the Sendmail-compatible command to build alias databases for the Postfix local delivery agent. newaliases_path: [/usr/bin/newaliases] /usr/local/libexec/postfix/newaliases Please specify the destination directory for Postfix queues. queue_directory: [/var/spool/postfix] Please specify the destination directory for the Postfix README files. Specify "no" if you do not want to install these files. readme_directory: [no] /usr/local/etc/postfix/docs Please specify the full destination pathname for the installed Postfix sendmail command. This is the Sendmail-compatible mail posting interface. sendmail_path: [/usr/sbin/sendmail] /usr/local/libexec/postfix/sendmail Please specify the group for mail submission and for queue management commands. Specify a group name with a numerical group ID that is not shared with other accounts, not even with the Postfix mail_owner account. You can no longer specify "no" here. setgid_group: [postdrop] Please specify the final destination directory for Postfix shared-library files. shlib_directory: [no] Please specify the final destination directory for non-executable files that are shared among multiple Postfix instances, such as postfix-files, dynamicmaps.cf, as well as the multi-instance template files main.cf.proto and master.cf.proto. meta_directory: [/usr/local//etc/postfix]もし間違えたら、修正手段は容易されていないので、Ctrl+C で中断し再度
# make installを行います。
# $FreeBSD: src/etc/mail/mailer.conf,v 1.3 2002/04/05 04:25:12 gshapiro Exp $ # # Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail # sendmail /usr/local/libexec/postfix/sendmail send-mail /usr/local/libexec/postfix/sendmail mailq /usr/local/libexec/postfix/sendmail newaliases /usr/local/libexec/postfix/sendmail hoststat /usr/local/libexec/postfix/sendmail # purgestat /usr/local/libexec/senamail/sendmail
※ 操作するサーバ上で Webサーバが稼動している場合は、必ず一旦停止させること。 # certbot certonly --standalone --agree-tos -m user@example.com -d smtp.example.com # certbot certonly --standalone --agree-tos -m user@example.com -d smtp.example.net # cd /usr/local/etc/postfix # vi tls_sni.maptls_sni.map は、上記例をもとにすると、下記内容のように記述します:
smtp.example.com /usr/local/etc/letsencrypt/live/smtp.example.com/privkey.pem /usr/local/etc/letsencrypt/live/smtp.example.com/fullchain.pem smtp.example.net /usr/local/etc/letsencrypt/live/smtp.example.net/privkey.pem /usr/local/etc/letsencrypt/live/smtp.example.net/fullchain.pemtls_sni.map の編集を行ったら、
# postmap -F hash:/usr/local/etc/postfix/tls_sni.mapで、 Postfix で処理できるデータベース形式に変換しておきます(tls_sni.map.db が新たに生成されます)。
# cd /usr/local/etc/postfix # cp main.cf main.cf.org # vi main.cf※ 最低限の変更部分のみ抜粋:
compatibility_level = 3.6 #挙動の設定 inet_protocols = all #IPv4,IPv6 両方使用 inet_interfaces = all unknown_address_reject_code = 550 tls_server_sni_maps = hash:/usr/local/etc/postfix/tls_sni.map #TLS対象ホスト名 smtpd_tls_CApath = /etc/ssl/carts #接続相手先のCAルート証明書情報 smtpd_tls_chain_files = /usr/local/etc/letsencrypt/live/pmx1.admin-plus.net/privkey.pem, /usr/local/etc/letsencrypt/live/pmx1.admin-plus.net/fullchain.pem #デフォルト適用の証明書情報 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = hash:/var/tmp/postfix/smtpd_scache #キャッシュデータベース smtpd_tls_loglevel = 1 #ログレベルの設定(必要に応じ 1 ~ 3 ) smtpd_tls_security_level = may #TLSサポートレベルの設定 smtpd_sasl_auth_enable = yes #SASL による SMTP-AUTHサポート smtpd_sasl_type = dovecot #SASL認証機構の指定 smtpd_sasl_path = private/auth #SASL認証ソケットの指定 smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtp_tls_CApath = /etc/ssl/carts #接続クライアントのCAルート証明書情報 smtp_tls_session_cache_database = hash:/var/tmp/postfix/smtp_scache #キャッシュデータベース smtp_tls_security_level = may #TLSサポートレベルの設定 smtp_tls_loglevel = 1 #ログレベルの設定(必要に応じ 1 ~ 3 ) milter_protocol = 6 #milterプロトコルパージョンを6にする milter_default_action = accept #milter接続失敗時のアクション milter_mail_macros = {auth_author} {auth_type} {auth_authen} #milter呼び出し時のパラメータ設定 smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock #SMTPD 時の milter 呼び出しアクション non_smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock #SMTPD 以外の milter 呼び出しアクション virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap-mailbox.cf #バーチャルユーザ情報 virtual_transport = dovecot #バーチャルユーザ配送 LDA指定 dovecot_destination_recipient_limit = 1 #同時配送数(複数メールの同時処理無し設定)○ master.cf の設定変更
# cp master.cf master.cf.org # vi master.cf※ 最低限の変更部分のみ抜粋:
smtp inet n - n - - smtpd smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sender_restrictions=reject_unknown_sender_domain -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_tls_security_level=may submission inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_sender_restrictions=reject_unknown_sender_domain -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_tls_security_level=may tlsmgr unix - - n 1000? 1 tlsmgr dovecot unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/libexec/dovecot/deliver -f {$sender} -d ${recipient}master.cf のこの設定で、smtp(port 25)、smtps(port 465)、submission(port 587) の待ち受けを可能にします。
# cd /etc/mail # vi /etc/mail/aliasesaliases の該当行を下記のように変更しておきましょう:
root: me@example.com ↓ root: user@example.jp要するに、実在し、受信できる電子メーるアドレスにします。
# newaliasesとして、データベースを更新しておきます。aliases.db が直近の時刻に変更されていることを ls -al コマンドなどで確認しておいてください。
・perl5-5.36.0 (Ports から カテゴリ:lang) ・ruby-3.0.5,1 (Ports から カテゴリ:lang) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・gettext-runtime-0.21 (Ports から カテゴリ:devel) ・gettext-tools-0.21_1 (Ports から カテゴリ:devel) ・libev-4.33,1 (Ports から カテゴリ:devel) ・gmake-4.3_2 (Ports から カテゴリ:devel) ・libxml2-2.10.3_1 (Ports から カテゴリ:textproc) ・glib-2.74.4_2 (Ports から カテゴリ:devel) ・gobject-introspection-1.74.0,1(Ports から カテゴリ:devel) ・intltool-0.51.0_1 (Ports から カテゴリ:textproc) ・rubygem-glib2-4.0.3 (Ports から カテゴリ:devel) ・rubygem-rexml-3.2.5 (Ports から カテゴリ:textproc)milter-manager も結構依存するものが多いのですが、
milter-manager::2005:3000::0:0:milter manager execute user:/home/staff/milter-manager:/usr/sbin/nologin※ ユーザホームディレクトリを内部処理でワークエリア的に使うため、ホームディレクトリを必ず割り当てる
mailuser:*:3000:opendkim,milter-manager更に vipw でユーザ追加した場合は、つまらないセキュリティホールを作らないために、下記コマンドも一応実行しておきます:
# passwd milter-manager
# cp milter-manager-2.2.5.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf milter-manager-2.2.5.tar.gz # cd milter-manager-2.2.5実は、実際にソースコードのコンパイルを実施したところ、FreeBSDにおいては、素のソースコードではエラーが発生し、上手く出来ません。
binding/ruby/test/run-test.sh 1行目 #!/bin/bash ↓ #!/bin/sh Makefile.in 516行目 milter-manager.pc libmilter.pc $(am__append_1) ↓ milter-manager.pc $(am__append_1) configure 15177 行目 RUBY_GLIB2_CFLAGS="-I$ruby_glib2_gem_dir/ext/glib2" ↓ RUBY_GLIB2_CFLAGS="-I$ruby_glib2_gem_dir/lib"
# setenv CPPFLAGS '-I/usr/local/include -I/usr/include' (configure が上手くライブラリを探せないため) # setenv LDFLAGS '-L/usr/local/lib -L/usr/lib' (configure が上手くライブラリを探せないため) # unsetenv LD_LIBRARY_PATH # ./configure --localstatedir=/varconfigure スクリプトの実行が完了すると、以下のようなサマリーが出力されます:
Configure Result: Package Platform : freebsd Package Options : Default Effective User : Default Effective Group : Default Socket Group : Default Connection Spec : unix:/var/run/milter-manager/milter-manager.sock Default PID File : GLib : 2.74.4 libev : yes Ruby : /usr/local/bin/ruby CFLAGS : -I/usr/local/include/ruby-3.0/amd64-freebsd13 -I/usr/local/include/ruby-3.0/ LIBS : -L/usr/local/lib -fstack-protector-strong -Wl,--compress-debug-sections=zlib -Wl,-E -lruby30 -lm -lpthread -L/usr/local/lib Ruby version : ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [amd64-freebsd13] Ruby/GLib2 : -I/usr/local/lib/ruby/gems/3.0/gems/glib2-4.0.3/lib Ruby milter PATH : rd2 : rd2-not-found GTK-Doc : no Cutter : LCOV : coverage : coverage report by LCOV : Cutter Source Path : $(top_srcdir)/vendor/cutter-source Launchpad PGP key : GPG UID : 3F09D1EA68E5F18B4EC8FEEAFF2030C057B9884E続いて、下記のコマンドを順に実行し、エラーが無ければ、本体のインストールは完了です。
# gmake # gmake install最後に下記手順で動作環境を準備して、インストール完了です:
# mkdir /home/staff/milter-manager # chown milter-manager:mailuser /home/staff/milter-manager # mkdir /var/run/milter-manager # chown milter-manager:maliuser /var/run/milter-manager
#!/bin/sh # PROVIDE: milter-manager # REQUIRE: LOGIN # BEFORE: mail # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable milter-manager: # # milter_manager_enable=yes # . /etc/rc.subr name="milter_manager" rcvar="milter_manager_enable" extra_commands="reload" load_rc_config $name : ${milter_manager_enable="NO"} : ${milter_manager_pid_file="/var/run/milter-manager/milter-manager.pid"} if getent passwd milter-manager > /dev/null; then : ${milter_manager_user_name="milter-manager"} else : ${milter_manager_user_name="mailnull"} fi if getent group milter-manager > /dev/null; then : ${milter_manager_group_name="milter-manager"} else : ${milter_manager_group_name="mailuser"} fi : ${milter_manager_socket_group_name="mailuser"} : ${milter_manager_connection_spec=""} : ${milter_manager_debug="NO"} command=/usr/local/sbin/milter-manager pidfile="${milter_manager_pid_file}" command_args="--pid-file ${milter_manager_pid_file}" if test -n "${milter_manager_user_name}"; then command_args="${command_args} --user-name ${milter_manager_user_name}" fi if test -n "${milter_manager_group_name}"; then command_args="${command_args} --group-name ${milter_manager_group_name}" fi if test -n "${milter_manager_socket_group_name}"; then command_args="${command_args} --unix-socket-group ${milter_manager_socket_group_name}" fi if test -n "${milter_manager_connection_spec}"; then command_args="${command_args} --spec ${milter_manager_connection_spec}" fi if test "$milter_manager_debug" = "YES"; then command_args="${command_args} --verbose" else command_args="${command_args} --daemon" fi run_rc_command "$1"今回意図した環境では、FreeBSD においては、デフォルト設定(自動検出)で問題なく動作しますが、実際には試行錯誤があったため、別記事でそのあたりを示していきます。
・perl5-5.36.0 (Ports から カテゴリ:lang) ・python39-3.9.16 (Ports から カテゴリ:lang) ・lua54-5.4.4 (Ports から カテゴリ:lang) ・autoconf-2.71 (Ports から カテゴリ:devel) ・automake-1.16 (Ports から カテゴリ:devel) ・libltdl-2.4.7 (Ports から カテゴリ:devel) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・gnutls-3.7.8_1 (Ports から カテゴリ:security) ・db5-5.3.28_9 (Ports から カテゴリ:databases) ※ これは BerkeleyDB 5.3.28 ですOpenDKIM 2.10.3 は、OpenSSL 1.0 系までは対応しているものの、OpenSSL 1.1 系には対応していません。
opendkim::2006:3000::0:0:OpenDKIM execute user:/var/empty:/usr/sbin/nologinvipw でユーザ追加した場合、/etc/group に下記の1行を例示のように変更しておきます:
mailuser:*:3000:opendkim更に vipw でユーザ追加した場合は、つまらないセキュリティホールを作らないために、下記コマンドも一応実行しておきます:
# passwd opendkim
# cp opendkim-2.10.3.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf opendkim-2.10.3.tar.gz # cd opendkim-2.10.3実は、実際にソースコードのコンパイルを実施したところ、FreeBSDにおいては、素のソースコードでは、GnuTLS 使用環境での構築も上手く出来ません。
# cp opendkim-2.10.3.patch.gz /usr/local/src/opendkim-2.10.3 # cd /usr/local/src/opendkim-2.10.3 # tar xvzf opendkim-2.10.3.patch.gz # patch < patch-configure.ac # patch < patch-libopendkim__tests__Makefile.in ・ ・ # patch < patch-opendkim_opendkim-lua.c
# cd /usr/local/src/opendkim-2.10.3 # setenv CPPFLAGS '-I/usr/local/include -I/usr/include' (configure が上手くライブラリを探せないため) # setenv LDFLAGS '-L/usr/local/lib -L/usr/lib -L/usr/local/lib/db5'(configure が上手くライブラリを探せないため) # unsetenv LD_LIBRARY_PATH ※以下、説明のために改行していますが、 ./configure の部分は、改行せずに、半角スペース区切りで、一気に入力。 # ./configure --localstatedir=/var (unix ソケットなどを格納するディレクトリ) --with-gnutls (openssl 1.1.x は未サポートのため、gnutls を使用する) --with-milter (milter インタフェースを構築する) --with-db (BerkeleyDBをサポートする) --with-domain (domain 設定をサポートする) # make # make installここまで、エラー無く出来たら、インストール不具合が1つあるので、下記の要領でファイル修正を行います。
# vi /usr/local/sbin/opendkim-genkey
1行目を下記の要領で変更 #!/usr/bin/perl ↓ #!/usr/local/bin/perl次に設定作業を行います。
# mkdir /usr/local/etc/opendkim # cd /usr/local/etc/opendkim # mkdir example.com.keys (メールサーバ収容ドメイン毎にディレクトリを作成) # cd example.com.keys # /usr/local/sbin/opendkim-genkey --bits=2048 --domain=example.com --selector=sel (--domain:収容ドメイン --selector:任意) ※ --selector の文字列は公開鍵識別子になるので、適当にせずに何等かの規則を作るとよいでしょう。 pop1 とか mx1 とか、メールサーバの付番に対応すると良いと思います。 # cd ../ # chown -R opendkim:mailuser example.com.key # vi KeyTable ※ 以下のように編集をする(複数ドメインになる場合は、行追加) sel._example.com example.com:sel:/usr/local/etc/opendkim/example.com.keys/sel.private # vi SigningTable ※ 以下のように編集をする(複数ドメインになる場合は、行追加) *@example.com sel._domainkey.example.com # chown opendkim:mailuser KeyTable # chown opendkim:mailuser SigningTableここで、KeyTable ファイルへの記述方法ですが、
sel._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAulH2mMsm8eP7bpAmlXI9EE5TQ8tjWBaMDaSP34zB+0+LLjJhbi9dhGV9T5reppaxaU7lzokGaHJX+l9X4sA53G9PlpzQ0JwsGO5Z1E9LaN1CDijqtGNQWr7bdLpy4AwzfhDThY25rwzMg4Wt4LK74Ba7Q5a2M9m0d/gEqs6ZWrK/6DiQ1qnzU7JTm13SZRBvnNhmLBMnSu1sz3" "Hc8nE+02oAJC04xCjI8XUowu+sxyJQm7OY97MOvOt9HAXt/jbBVyG1scJTggjYsH1JcfC1xbE1VnNiWSkpid2P+4bXy/GIG90nZ7We4KNMshXEby/FbUZPPERHW1ntCyga58rPJQIDAQAB" ) ; ----- DKIM key sel0 for example.jpのような内容になっています。この例に沿うと、example.jp のDNSゾーンに、
unknown | 該当ドメインからの送信メールには、メール作成者署名(DKIM)がある場合と無い場合がある |
---|---|
all | 該当ドメインからの送信メールには、必ずメール作成者署名(DKIM)がある もしメール作成者署名(DKIM)が得られない場合の処置は受信側の任意。(通常は配送する) |
discardable | 該当ドメインからの送信メールには、必ずメール作成者署名(DKIM)がある。 もしメール作成者署名(DKIM)が得られない場合は、受信者はそのメールを破棄することが望まれる |
#!/bin/sh # PROVIDE: milter-opendkim # REQUIRE: DAEMON # BEFORE: mail # KEYWORD: shutdown # Define these milteropendkim_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/milteropendkim # # milteropendkim_enable (bool): Set to "NO" by default. # Set it to "YES" to enable dkim-milter # milteropendkim_uid (str): Set username to run milter. # milteropendkim_gid (str): Set group to run milter. # milteropendkim_profiles (list): Set to "" by default. # Define your profiles here. # milteropendkim_cfgfile (str): Configuration file. See opendkim.conf(5) # # milteropendkim_${profile}_* : Variables per profile. # Sockets must be different from each other. # # milteropendkim_socket_perms (str): # Permissions for local|unix socket. # # all parameters below now can be set in opendkim.conf(5). # milteropendkim_socket (str): Path to the milter socket. # milteropendkim_domain (str): Domainpart of From: in mails to sign. # milteropendkim_key (str): Path to the private key file to sign with. # milteropendkim_selector (str): Selector to use when signing # milteropendkim_alg (str): Algorithm to use when signing # milteropendkim_flags (str): Flags passed to start command. . /etc/rc.subr name="milteropendkim" rcvar=milteropendkim_enable extra_commands="reload" start_precmd="dkim_prepcmd" start_postcmd="dkim_start_postcmd" stop_postcmd="dkim_postcmd" command="/usr/local/sbin/opendkim" _piddir="/var/run/milteropendkim" pidfile="${_piddir}/pid" sig_reload="USR1" load_rc_config $name # # DO NOT CHANGE THESE DEFAULT VALUES HERE # : ${milteropendkim_enable:="NO"} : ${milteropendkim_uid:="opendkim"} : ${milteropendkim_gid:="mailuser"} : ${milteropendkim_cfgfile:="/usr/local/etc/opendkim/opendkim.conf"} : ${milteropendkim_socket_perms:="0775"} # Options other than above can be set with $milteropendkim_flags. # see dkim-milter documentation for detail. extra_commands="reload" start_precmd="dkim_prepcmd" start_postcmd="dkim_start_postcmd" stop_postcmd="dkim_cleansockets" command="/usr/local/sbin/opendkim" sig_reload="USR1" dkim_cleansockets() { case ${milteropendkim_socket%:*} in local|unix) rm -f "${milteropendkim_socket#*:}" ;; esac } dkim_get_pidfile() { if get_pidfile_from_conf PidFile ${milteropendkim_cfgfile#-x }; then pidfile="$_pidfile_from_conf" else pidfile="/var/run/milteropendkim/${profile:-pid}" fi } dkim_prepcmd() { dkim_cleansockets dkim_get_pidfile if [ ! -d "$(dirname "$pidfile")" ]; then mkdir "$(dirname "$pidfile")" fi case ${milteropendkim_socket%:*} in local|unix) socketfile=${milteropendkim_socket#*:} install -d -o ${milteropendkim_uid%:*} -g $milteropendkim_gid \ -m ${milteropendkim_socket_perms} \ ${pidfile%/*} ${socketfile%/*} ;; esac } dkim_start_postcmd() { case ${milteropendkim_socket%:*} in local|unix) # postcmd is executed too fast and socket is not created before checking... sleep 1 chmod -f ${milteropendkim_socket_perms} ${milteropendkim_socket#*:} ;; esac } if [ -n "$2" ]; then profile="$2" if [ -n "${milteropendkim_profiles}" ]; then pidfile="${_piddir}/${profile}.pid" eval milteropendkim_enable="\${milteropendkim_${profile}_enable:-${milteropendkim_enable}}" eval milteropendkim_socket="\${milteropendkim_${profile}_socket:-}" eval milteropendkim_socket_perms="\${milteropendkim_${profile}_socket_perms:-}" if [ -z "${milteropendkim_socket}" ];then echo "You must define a socket (milteropendkim_${profile}_socket)" exit 1 fi eval milteropendkim_cfgfile="\${milteropendkim_${profile}_cfgfile:-${milteropendkim_cfgfile}}" eval milteropendkim_domain="\${milteropendkim_${profile}_domain:-${milteropendkim_domain}}" eval milteropendkim_key="\${milteropendkim_${profile}_key:-${milteropendkim_key}}" eval milteropendkim_selector="\${milteropendkim_${profile}_selector:-${milteropendkim_selector}}" eval milteropendkim_alg="\${milteropendkim_${profile}_alg:-${milteropendkim_alg}}" eval milteropendkim_flags="\${milteropendkim_${profile}_flags:-${milteropendkim_flags}}" if [ -f "${milteropendkim_cfgfile}" ];then milteropendkim_cfgfile="-x ${milteropendkim_cfgfile}" else milteropendkim_cfgfile="" fi if [ -n "${milteropendkim_socket}" ];then _socket_prefix="-p" fi if [ -n "${milteropendkim_uid}" ];then _uid_prefix="-u" if [ -n "${milteropendkim_gid}" ];then milteropendkim_uid=${milteropendkim_uid}:${milteropendkim_gid} fi fi if [ -n "${milteropendkim_domain}" ];then milteropendkim_domain="-d ${milteropendkim_domain}" fi if [ -n "${milteropendkim_key}" ];then milteropendkim_key="-k ${milteropendkim_key}" fi if [ -n "${milteropendkim_selector}" ];then milteropendkim_selector="-s ${milteropendkim_selector}" fi if [ -n "${milteropendkim_alg}" ];then milteropendkim_alg="-S ${milteropendkim_alg}" fi dkim_get_pidfile command_args="-l ${_socket_prefix} ${milteropendkim_socket} ${_uid_prefix} ${milteropendkim_uid} -P ${pidfile} ${milteropendkim_cfgfile} ${milteropendkim_domain} ${milteropendkim_key} ${milteropendkim_selector} ${milteropendkim_alg}" else echo "$0: extra argument ignored" fi else if [ -n "${milteropendkim_profiles}" ] && [ -n "$1" ]; then if [ "$1" != "restart" ]; then for profile in ${milteropendkim_profiles}; do echo "===> milteropendkim profile: ${profile}" /usr/local/etc/rc.d/milter-opendkim $1 ${profile} retcode="$?" if [ "${retcode}" -ne 0 ]; then failed="${profile} (${retcode}) ${failed:-}" else success="${profile} ${success:-}" fi done exit 0 else restart_precmd="" fi else if [ -f "${milteropendkim_cfgfile}" ];then milteropendkim_cfgfile="-x ${milteropendkim_cfgfile}" else milteropendkim_cfgfile="" fi if [ -n "${milteropendkim_socket}" ];then _socket_prefix="-p" fi if [ -n "${milteropendkim_uid}" ];then _uid_prefix="-u" if [ -n "${milteropendkim_gid}" ];then milteropendkim_uid=${milteropendkim_uid}:${milteropendkim_gid} fi fi if [ -n "${milteropendkim_domain}" ];then milteropendkim_domain="-d ${milteropendkim_domain}" fi if [ -n "${milteropendkim_key}" ];then milteropendkim_key="-k ${milteropendkim_key}" fi if [ -n "${milteropendkim_selector}" ];then milteropendkim_selector="-s ${milteropendkim_selector}" fi if [ -n "${milteropendkim_alg}" ];then milteropendkim_alg="-S ${milteropendkim_alg}" fi dkim_get_pidfile command_args="-l ${_socket_prefix} ${milteropendkim_socket} ${_uid_prefix} ${milteropendkim_uid} -P ${pidfile} ${milteropendkim_cfgfile} ${milteropendkim_domain} ${milteropendkim_key} ${milteropendkim_selector} ${milteropendkim_alg}" fi fi run_rc_command "$1"OpenDKIM の設定は、これで終わりです。
・perl5-5.36.0 (Ports から カテゴリ:lang) ・autoconf-2.71 (Ports から カテゴリ:devel) ・libltdl-2.4.7 (Ports から カテゴリ:devel) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・pcre2-10.40 (Ports から カテゴリ:devel) ・cmake-core-3.24.3_2 (Ports から カテゴリ:devel) ・libxml2-2.10.3_1 (Ports から カテゴリ:textproc) ・curl-7.86.0 (Ports から カテゴリ:ftp) ・json-c-0.16 (Ports から カテゴリ:devel) ・jsoncpp-1.9.5 (Ports から カテゴリ:devel) ・check-0.15.2 (Ports から カテゴリ:devel) ・libmspack-0.10.1 (Ports から カテゴリ:archivers) ・tomsfastmath-0.13.1_4(Ports から カテゴリ:math) ・python39-3.9.16 (Ports から カテゴリ:lang) ・py39-pytest-7.2.0,1 (Ports から カテゴリ:devel) ・rust-1.66.0 (Ports から カテゴリ:lang)更に、インストールに先立ち、clamAV のセキュリティポリシーに従うため、ユーザ clamav を、vipw や useradd コマンドで追加します:
clamav::65002:65002::0:0:Clam antivirus:nonexistent:/usr/sbin/nologinvipw でユーザ追加した場合、/etc/group に下記の1行を追加しておきます:
clamav:*:65002:更に vipw でユーザ追加した場合は、つまらないセキュリティホールを作らないために、下記コマンドも一応実行しておきます:
# passwd clamavclamAV のコンパイルは、Ver 0.105.0 から、cmake を使うようになりました。下記のように順に実施していきます:
# cp clamav-1.0.0.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf clamav-1.0.0.tar.gz # cd clamav-1.0.0 # mkdir build # cd build # cmake .. -D ENABLE_JSON_SHARED=OFF (JSONライブラリはスタティックリンク)Configuration に成功すると、下記のようなサマリーが出力されます。
-- Configuration Options Summary -- Package Version: ClamAV 1.0.0 libclamav version: 11:0:0 libfreshclam version: 2:2:0 Install prefix: /usr/local Install database dir: /usr/local/share/clamav Install config dir: /usr/local/etc Host system: FreeBSD-13.1-RELEASE-p5 Target system: FreeBSD-13.1-RELEASE-p5 Compiler: Build type: RelWithDebInfo C compiler: /usr/bin/cc C++ compiler: /usr/bin/c++ Rust toolchain: /usr/local/bin/cargo (1.66.0) CFLAGS: -O2 -g CXXFLAGS: -O2 -g WARNCFLAGS: -Wall -Wextra -Wformat-security Build Options: Build apps: ON Shared library: ON Static library: OFF Enable UnRAR: ON Examples: OFF Tests: ON Build man pages: ON Build doxygen HTML: OFF Maintainer Mode: OFF Build Extras: Build milter: ON (toggle with -DENABLE_MILTER=ON/OFF) -- Engine Options -- Bytecode Runtime: interpreter -- Test Dependencies -- Unit Test Framework: libcheck /usr/local/include /usr/local/lib/libcheck.so Feature Test Framework: python3 /usr/local/bin/python3.9 test command pytest;-v -- libclamav Dependencies -- Compression support: bzip2 /usr/include /usr/lib/libbz2.so zlib /usr/include /usr/lib/libz.so XML support: libxml2 /usr/local/include/libxml2;/usr/local/include/libxml2 /usr/local/lib/libxml2.so RegEx support: libpcre2 /usr/local/include /usr/local/lib/libpcre2-8.so Crypto support: openssl /usr/include /usr/lib/libssl.so;/usr/lib/libcrypto.so JSON support: json-c /usr/local/include/json-c /usr/local/lib/libjson-c.a Threading support: pthread Locale support: iconv /usr/local/include /usr/local/lib/libiconv.so -- libfreshclam Extra Dependencies -- HTTP support: curl /usr/local/include /usr/local/lib/libcurl.so -- Application Extra Dependencies -- GUI support: ncurses /usr/include /usr/lib/libncurses.so Milter Support: libmilter /usr/include /usr/lib/libmilter.so -- Configuring done -- Generating done -- Build files have been written to: /usr/local/src/clamav-1.0.0/build引き続き、以下の手順でソースコードからの構築を実施します:
# cmake --build . (ウィルススキャナの構築) # cmake --build . --target install (ウィルススキャナのインストール)続いて、動作に必要な環境とログファイルの初期化です。
# mkdir /var/run/clamav (clamd のプロセス情報保存領域) # chown clamav:mailuser /var/run/clamav # touch /var/log/clamd.log # chown clamav /var/log/clamd.log # touch /var/log/clamav-milter.log # chown clamav /var/log/clamav-milter.log # touch /var/log/freshclam.log # chown clamav /var/log/freshclam.log # mkdir /usr/local/share/clamav (ウィルスデータベース格納先) # chown clamav:mailuser /usr/local/share/clamavclamd,freshclam,clamAV-milter それぞれ、別々に動作します。
# Example ← 削除 LogFile /var/log/clamd.log ← 追加又は変更 LogTime yes ← 追加又は変更 PidFile /var/run/clamav/clamd.pid ← 追加又は変更 DatabaseDirectory /usr/local/share/clamav ← 追加又は変更 LocalSocket /var/run/clamav/clamd ← 追加又は変更 FixStaleSocket yes ← 追加又は変更 User clamav ← 追加又は変更 AllowSupplementaryGroups yes ← 追加又は変更続いて、/usr/local/etc/freshclam.conf の設定ファイルを、下記を参考に該当行を変更します。
# Example ← 削除 DatabaseDirectory /usr/local/share/clamav ← 追加又は変更 UpdateLogFile /var/log/freshclam.log ← 追加又は変更 PidFile /var/run/clamav/freshclam.pid ← 追加又は変更 DatabaseOwner clamav ← 追加又は変更 DatabaseMirror db.jp.clamav.net ← 追加又は変更 DatabaseMirror clamav.nara.wide.ad.jp ← 追加又は変更 NotifyClamd /usr/local/etc/clamd.conf ← 追加又は変更最後に、/usr/local/etc/clamav-milter.confの設定ファイルを、下記を参考に該当行を変更します。
# Example ← 削除 MilterSocket unix:/var/run/clamav/clmilter.sock ← 追加又は変更 User clamav ← 追加又は変更 AllowSupplementaryGroups yes ← 追加又は変更 PidFile /var/run/clamav/clamav-milter.pid ← 追加又は変更 TemporaryDirectory /var/tmp ← 追加又は変更 ClamdSocket unix:/var/run/clamav/clamd ← 追加又は変更 LogFile /var/log/clamav-milter.log ← 追加又は変更3つの設定ファイル変更が終わったら、以下の手順でウィルスパターン定義を初期化・最新版に更新します:
# rehash # freshclam (ウィルススキャンデータベースを最新の状態にする)
#!/bin/sh # PROVIDE: clamav_clamd # REQUIRE: LOGIN # BEFORE: mail # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable clamd: # # clamav_clamd_enable="YES" # clamav_clamd_flags="" # # See clamd(8) for flags # . /etc/rc.subr name=clamav_clamd rcvar=clamav_clamd_enable # read settings, set default values load_rc_config "$name" : ${clamav_clamd_enable:=NO} : ${clamav_clamd_socket="/var/run/clamav/clamd"} : ${clamav_clamd_pidfile="/var/run/clamav/clamd.pid"} : ${clamav_clamd_user="clamav"} command=/usr/local/sbin/clamd required_dirs=/var/db/clamav required_files=/usr/local/etc/clamd.conf start_precmd=clamav_clamd_precmd extra_commands=reload reload_cmd="/usr/local/bin/clamdscan --reload" clamav_clamd_precmd() { local rundir=${clamav_clamd_pidfile%/*} if [ ! -d $rundir ] ; then install -d -m 0755 -o ${clamav_clamd_user} -g ${clamav_clamd_user} $rundir fi if [ ! -f /var/db/clamav/main.cvd -a ! -f /var/db/clamav/main.cld ];then echo "Missing /var/db/clamav/*.cvd or *.cld files. You must run freshclam first" exit 1 fi } run_rc_command "$1"○ freshclam の起動スクリプト
#!/bin/sh # PROVIDE: clamav_freshclam # REQUIRE: LOGIN clamav_clamd # BEFORE: mail # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable the freshclam daemon: # # clamav_freshclam_enable="YES" # clamav_freshclam_flags="" # # See freshclam(1) for flags # . /etc/rc.subr name=clamav_freshclam rcvar=clamav_freshclam_enable # read settings, set default values load_rc_config ${name} : ${clamav_freshclam_enable:=NO} : ${clamav_freshclam_pidfile=/var/run/clamav/freshclam.pid} : ${clamav_freshclam_user=clamav} command=/usr/local/bin/freshclam pidfile=${clamav_freshclam_pidfile} command_args="--daemon -p ${pidfile}" required_dirs=/var/db/clamav required_files=/usr/local/etc/freshclam.conf start_precmd=clamav_freshclam_precmd clamav_freshclam_precmd() { local rundir=${clamav_freshclam_pidfile%/*} if [ ! -d $rundir ] ; then install -d -m 0755 -o ${clamav_freshclam_user} -g ${clamav_freshclam_user} $rundir fi } run_rc_command "$1"○ clamav-milter の起動スクリプト
#!/bin/sh # PROVIDE: clamav_milter # REQUIRE: LOGIN clamav_clamd # BEFORE: mail # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable clamav-milter: # # clamav_milter_enable="YES" # # See clamav-milter(1) for flags # . /etc/rc.subr name=clamav_milter rcvar=clamav_milter_enable load_rc_config $name : ${clamav_milter_enable:=NO} : ${clamav_milter_socket="/var/run/clamav/clmilter.sock"} : ${clamav_milter_conf="/usr/local/etc/clamav-milter.conf"} : ${clamav_milter_flags="-c ${clamav_milter_conf}"} : ${clamav_milter_socktimeout=60} : ${clamav_milter_socket_mode=777} : ${clamav_milter_socket_user=clamav} : ${clamav_milter_socket_group=mailuser} : ${clamav_clamd_enable:=NO} : ${clamav_clamd_socket="/var/run/clamav/clamd"} command=/usr/local/sbin/clamav-milter required_dirs=/var/db/clamav required_files=${clamav_milter_conf} start_precmd=start_precmd start_postcmd=start_postcmd start_precmd() { if [ -S "$clamav_milter_socket" ]; then warn "Stale socket $clamav_milter_socket removed." rm "$clamav_milter_socket" fi rc_flags="${flags:-$clamav_milter_flags}" clamav_clamd_socket_prefix=${clamav_clamd_socket%:*} # We can have inet or inet6, try to remove 6 clamav_clamd_socket_prefix=${clamav_clamd_socket_prefix%6} if checkyesno clamav_clamd_enable && [ "x$clamav_clamd_socket" != "x" -a "${clamav_clamd_socket_prefix}" != "inet" ]; then echo -n "Waiting for clamd socket.. " i=${clamav_milter_socktimeout} while [ $i -ne 0 ] do [ -S "$clamav_clamd_socket" ] && break if [ `expr $i % 10` -eq 0 ]; then echo -n "${i}.. " fi sleep 1 i=$(($i-1)) done echo if [ $i -eq 0 ]; then echo "There is no clamd socket (${clamav_clamd_socket})!" exit 1 fi fi } start_postcmd() { clamav_milter_socket_prefix=${clamav_milter_socket%:*} # We can have inet or inet6, try to remove 6 clamav_milter_socket_prefix=${clamav_milter_socket_prefix%6} if [ "x$clamav_milter_socket" != "x" -a "${clamav_milter_socket_prefix}" != "inet" ]; then echo -n "Waiting for clamav-milter socket.. " i=${clamav_milter_socktimeout} while [ $i -ne 0 ] do [ -S "$clamav_milter_socket" ] && break if [ `expr $i % 10` -eq 0 ]; then echo -n "${i}.. " fi sleep 1 i=$(($i-1)) done echo if [ $i -eq 0 ]; then echo "There is no clamav-milter socket (${clamav_milter_socket})!" exit 1 fi /bin/chmod ${clamav_milter_socket_mode} ${clamav_milter_socket} /usr/sbin/chown ${clamav_milter_socket_user}:${clamav_milter_socket_group} ${clamav_milter_socket} fi } run_rc_command "$1"clamAV のインストールは、これでとりあえず完了です。
・perl5-5.36.0 (Ports から カテゴリ:lang) ・autoconf-2.71 (Ports から カテゴリ:devel) ・libltdl-2.4.7 (Ports から カテゴリ:devel) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・pcre2-10.40 (Ports から カテゴリ:devel) ・OpenLDAP 2.6.3 以上 (これはソースコードからの構築を強く推奨)このあたりは、バージョンアップで刻々変わっていくこともあるのですが、管理する以上は、そのような変化を知ることが重要です。
dovecot::2002:3000::0:0:dovecot MDA:nonexistent:/usr/sbin/nologin dovenull::2007:3000::0:0:dovecot MRA:nonexistent:/usr/sbin/nologinvipw でユーザ追加した場合、/etc/group に下記の1行を追加しておきます(あとでこれが重要になってくる):
mailuser:*:3000:更に vipw でユーザ追加した場合は、つまらないセキュリティホールを作らないために、下記コマンドも一応実行しておきます:
# passwd dovecot # passwd dovenullはい。いよいよコンパイル作業です。下記のように順に実施していきます:
# cp dovecot-2.3.19.1.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf dovecot-2.3.19.1.tar.gz # cd dovecot-2.3.19.1 # setenv CPPFLAGS '-I/usr/local/include -I/usr/include' (configure が上手くライブラリを探せないため) # setenv LDFLAGS '-L/usr/local/lib -L/usr/lib' (configure が上手くライブラリを探せないため) # setenv LD_LIBRARY_PATH '/usr/local/lib /usr/lib' (コンパイルが上手くいかないため) ※以下、説明のために改行していますが、 ./configure の部分は、改行せずに、半角スペース区切りで、一気に入力。 # ./configure --sysconfdir=/usr/local/etc (設定ファイル群を格納するディレクトリ) --localstatedir=/var (unix ソケットなどを格納するルートディレクトリ) --with-ldap=yes (LDAP 認証をサポートする) --with-ssldir=/usr (openssl のインストール位置を知らせる) --with-zlib (zlib[gz 形式圧縮] をサポートする) --with-libwrap (TCP Wrapper をサポートする) --without-bsdauth (BSD 認証はサポートしない) --without-pam (pam 認証はサポートしない) --without-nss (nss はサポートしない)上記は、dovecot 2.3.19.1 の場合で、バージョンが変わると、この部分も変わります。適宜解釈を。
Install prefix . : /usr/local File offsets ... : 64bit I/O polling .... : kqueue I/O notifys .... : kqueue SSL ............ : yes (OpenSSL) GSSAPI ......... : no passdbs ........ : static passwd passwd-file checkpassword ldap CFLAGS ......... : -std=gnu99 -g -O2 -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -Wno-duplicate-decl-specifier -Wstrict-aliasing=2 : -shadow -pam -bsdauth -sia -vpopmail -sql userdbs ........ : static prefetch passwd passwd-file checkpassword ldap : -vpopmail -sql SQL drivers .... : : -pgsql -mysql -sqlite -cassandra Full text search : squat : -lucene -solrここでは、OpenLDAP でユーザ管理をすることを前提にしているため、passdbs 行と userdbs 行に 'ldap' の文字列が存在することを確認します。
# make # make install # cd /usr/local/libexec/dovecot # chmod 4750 dovecot-lda (setuid でメール配信出来るようにする) # chgrp mailuser dovecot-lda (setuid でメール配信出来るようにする)結構、大きなプログラム群なので、make は、そこそこの時間がかかります。
# cd /usr/local/etc/dovecotとして、設定内容をこのディレクトリに記述していきます。dovecot 2.x では、設定ファイルが細かく分かれており、既存Webサイトにおける同種の説明も、教科書的にそれに沿ったものになっていますが、却って管理しにくくなるという我儘から、最低限の設定ファイルを上記ディレクトリに書き込んでいきます。
auth_cache_negative_ttl = 30 mins auth_cache_size = 10 M auth_cache_ttl = 30 mins auth_mechanisms = cram-md5 digest-md5 plain login scram-sha-1 apop auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_@ disable_plaintext_auth = no first_valid_uid = 3000 last_valid_gid = 4000 last_valid_uid = 4999 mail_location = maildir:/var/mail/%h !include ssl_sni.conf passdb { args = /usr/local/etc/dovecot/dovecot-ldap.conf driver = ldap } protocols = imap pop3 lmtp plugin { sieve = ~/.dovecot.sieve sieve_plugins = sieve_extprograms sieve_extensions = +vnd.dovecot.filter sieve_filter_bin_dir = /usr/local/etc/dovecot/sieve-filter } unix_listener /var/spool/postfix/private/auth { group = postdrop mode = 0660 user = postfix } user = root vsz_limit = 128 M } service imap-login { chroot = executable = /usr/local/libexec/dovecot/imap-login inet_listener imap { address = *,[::] port = 143 } inet_listener imaps { address = *,[::] port = 993 } user = dovecot vsz_limit = 32M } service imap { executable = /usr/local/libexec/dovecot/imap } service imaps { executable = /usr/local/libexec/dovecot/imap } service pop3-login { chroot = executable = /usr/local/libexec/dovecot/pop3-login inet_listener pop3 { address = *,[::] port = 110 } inet_listener pop3s { address = *,[::] port = 995 } user = dovecot } service pop3 { executable = /usr/local/libexec/dovecot/pop3 } service pop3s { executable = /usr/local/libexec/dovecot/pop3 } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0666 user = postfix group = mailuser } } service stats { unix_listener stats-reader { user = vmail group = mailuser mode = 0660 } unix_listener stats-writer { user = vmail group = mailuser mode = 0660 } } userdb { args = /usr/local/etc/dovecot/dovecot-ldap.conf driver = ldap } protocol imap { imap_logout_format = bytes=%i/%o mail_plugins = $mail_plugins imap_filter_sieve } protocol imaps { imap_logout_format = bytes=%i/%o mail_plugins = $mail_plugins imap_filter_sieve } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } protocol pop3s { pop3_uidl_format = %08Xu%08Xv } protocol lmtp { postmaster_address = postmaster@mx.example.com mail_plugins = $mail_plugins sieve } protocol lda { auth_socket_path = /var/run/dovecot/auth-master hostname = mx.example.com mail_plugins = sieve postmaster_address = postmaster@mx.example.com sendmail_path = /usr/sbin/sendmail }次に、 dovecot-ldap.conf〔注:構築する OpenLDAP におけるスキーマ設定に合わせた設定に適宜変えてください。〕
hosts = localhost sasl_bind = no tls = no ldap_version = 3 base = dc=%d,dc=control,dc=isp deref = never scope = subtree user_attrs = homeDirectory=home=/var/mail/%$,uidNumber=uid,gidNumber=gid,mail=mail user_filter = (&(cn=%u)(status=valid)) pass_attrs = uid=cn,userPassword=password,\ homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid pass_filter = (&(cn=%u)(status=valid)) default_pass_scheme = PLAIN最後に、ssl_sni.conf〔注:実ホスト名と、収容する仮想ドメインのホスト名を設定・記述します。〕
ssl_cert = </usr/local/etc/letsencrypt/live/mx.example.com/fullchain.pem ssl_key = </usr/local/etc/letsencrypt/live/mx.example.com/privkey.pem local_name mx.example.com { ssl_cert = </usr/local/etc/letsencrypt/live/mx.example.com/fullchain.pem ssl_key = </usr/local/etc/letsencrypt/live/mx.example.com/privkey.pem } local_name mx.example2.net { ssl_cert = </usr/local/etc/letsencrypt/live/mx.example2.net/fullchain.pem ssl_key = </usr/local/etc/letsencrypt/live/mx.example2.net/privkey.pem }以上で、dovecot の設定は終わりですが、環境が整っていないため、まだ稼動させることが出来ません。
・perl5-5.36.0 (Ports から カテゴリ:lang) ・autoconf-2.71 (Ports から カテゴリ:devel) ・libltdl-2.4.7 (Ports から カテゴリ:devel) ・libtool-2.4.7 (Ports から カテゴリ:devel) ・pcre-8.45 (Ports から カテゴリ:devel) ・pcre2-10.40 (Ports から カテゴリ:devel) ・OpenLDAP 2.6.3 以上 (これはソースコードからの構築を強く推奨) ・dovecot 2.3.19.1 以上(前項でソースコードからの構築)Pigeonhole は、dovecot 本体への付加機能的な形でインストールされていきます。
# cp dovecot-2.3-pigeonhole-0.5.19.tar.gz /usr/local/src # cd /usr/local/src # tar xvzf dovecot-2.3-pigeonhole-0.5.19.tar.gz # cd dovecot-2.3-pigeonhole-0.5.19 # setenv CPPFLAGS '-I/usr/local/include -I/usr/include' (configure が上手くライブラリを探せないため) # setenv LDFLAGS '-L/usr/local/lib -L/usr/lib' (configure が上手くライブラリを探せないため) # setenv LD_LIBRARY_PATH '/usr/local/lib /usr/lib' (コンパイルが上手くいかないため) # ./configure --with-dovecot=/usr/local/lib/dovecot (dovecot の構築環境を参照して構築) # make # make install上記は、pigeonhole 0.5.19 の場合で、バージョンが変わると、この部分も変わります。適宜解釈を。
・python39-3.9.16 (Ports から カテゴリ:lang)また、このモジュールは、FreeBSD においては、Ports からのインストールでも管理上の問題はありません。
# cd /usr/ports/security/py-certbot # make install # make clean # cd # rehashインストールしたら、早速、必要なサーバ証明書を取得します。
# /usr/local/etc/rc.d/apache2 stop # /sbin/pfctl -d # /usr/local/bin/certbot certonly --standalone --agree-tos -m user@example.com -d mx.example.jp # /usr/local/bin/certbot certonly --standalone --agree-tos -m user@example.com -d mx.example2.net−m の後ろに指定するメールアドレスは、有効期限が近づいてきたり、何かあった際の連絡先として登録するメールアドレスを指定します。了承なく他人のメールアドレスにしたり、存在しないメールアドレスを指定したりしないようにしましょう。
# /sbin/pfctl -e # /usr/local/etc/rc.d/apache2 start肝心の自動更新ですが、週に一度実行する形で cron 設定するとよいでしょう。
#!/bin/sh /usr/local/etc/rc.d/apache2 stop /sbin/pfctl -d /usr/local/bin/certbot renew -m user@example.com /sbin/pfctl -e /usr/local/sbin/postfix reload /usr/local/sbin/dovecot reload /usr/local/etc/rc.d/apache2 startこの sh スプリプトは、cron にて root で実行させ、実行権限を与えるのを忘れないようにしてください。
① ①上図のように、サーバサイドでは、spamd をデーモン形式で稼働させておき、spamc というクライアントプログラムにて、受信した電子メールメッセージ全体を、spamd に垂れ流し、メッセージの電子メールヘッダ先頭にその判定値が付加されたものが与えたメッセージ全体と共に出力される挙動になります。
spamc《チェック対象の電子メールメッセージ全体》===> socket通信 ===> spamd(SpamAssassin 本体)
《チェック結果を含む電子メールメッセージ》<=== socket通信 <===
② ②
# cd /usr/ports/lang/perl5.36 # make install # make clean
# perl -MCPAN -e shell cpan> install Mail::SpamAssassinこの方法だと、test 段階で、'spamd が見つからない' とメッセージが出て test自体がなかなか終わらない。
# perl -MCPAN -e shell cpan> install NetAddr::IP cpan> install HTML::Parser cpan> install Digest::SHA1 cpan> install IP::Country cpan> install IP::Country::DB_File cpan> install Net::Ident cpan> install IO::Socket::SSL cpan> install LWP::UserAgent cpan> install BSD::Resource cpan> install Mail::SPF cpan> install Mail::DKIM cpan> exit・次に、下記コマンドを順に実行する。
# cp Mail-SpamAssassin-4.0.0.bz2 /usr/locall/src # cd /usr/local/src # tar xvzf Mail-SpamAssassin-4.0.0.bz2 # cd Mail-SpamAssassin-4.0.0 # perl Makefile.PL # make # make installインストール完了後、方法その1・方法その2の何れであっても、必ず以下のコマンドを実行しておきます。
# rehash # sa-update --no-gpgまた、運用時は、SpamAssassin 自体が意図しているセキュリティポリシーに合わせるため、ここで専用のユーザを予めvipw や useradd コマンドで作っておきます。
spamd::783:783::0:0:SpamAssassin Daemon:/nonexistent:/usr/sbin/nologinvipw でユーザ追加した場合は、/etc/group ファイルに下記の行を追加しておきます:
spamd:*:783:ユーザID、グループIDは、783 にこだわる必要はありませんが、当然のことながら、ユーザID・グループIDが他と重複しないように注意です。
# passwd spamdvipw,passwd,useradd コマンドは、どれも必ずroot ユーザ上で行います。
#!/bin/sh # PROVIDE: spamd # REQUIRE: LOGIN # BEFORE: mail # KEYWORD: shutdown # # Add the following line to /etc/rc.conf to enable spamd: # # spamd_enable="YES" # # You can pass flags to spamd with spamd_flags="..." # To change the user that spamd runs as, use # # spamd_flags="-u USER [-H /path/to/home... we suggest /var/spool/spamd]" # # To keep your user-config in a SQL database, use # # spamd_flags="-Q" # # and remove -c (auto-create user preference files). # . /etc/rc.subr name=spamd rcvar=${name}_enable extra_commands="reload" load_rc_config $name start_precmd="precmd" restart_precmd="precmd" stop_cmd="spamd_stop" pidfile=${spamd_pidfile:-"/var/run/${name}/${name}.pid"} # Set defaults : ${spamd_enable:="NO"} : ${spamd_flags:="-c -u spamd -r ${pidfile} -x --virtual-config-dir=/var/mail/%d/%l/spamassassin/spamd"} command=/usr/local/bin/${name} command_args="-d -r ${pidfile}" command_interpreter="/usr/local/bin/perl" required_dirs="/usr/local/share/spamassassin" precmd() { if [ ! -d /var/run/${name} ]; then mkdir -p /var/run/${name} chown spamd:spamd /var/run/${name} fi } spamd_stop() { kill -INT `cat /var/run/spamd/spamd.pid` echo ' Stop sa-spamd 4.0.0 ' } run_rc_command "$1"あとは、簡単な設定作業が残っていますが、メールサーバ構築作業全体の最後のほうで行います。
・SASL パスワード ・UID ・GID ・homeDirectory ・status〔有効にしている(valid)か、無効にしている(invalid)か〕の情報が得られる仕組みが出来ていることを前提にしています。
ポート番号 | 非暗号 | STARTTLS | SSL/TLS | 説明 |
---|---|---|---|---|
25(SMTP) | ○ | ○ | × | 現在はメールサーバ間の通信に使用。 昨今はOP25 対策で、メール送信元で使えない場合が殆ど。 |
587(submission) | ○ | ○ | × | メール送信元にて、メール発信の際に使う。 OP25環境では、メールサーバ間の通信にも使用。 |
465(SMTPS) | × | × | ○ | メール送信元にて、暗号通信を行う際に使用する。 有名どころでは OCN なんかがこれを標準にしているが、 おかげで従来の制御機器が使えなくなるケースも実在する。 |
ポート番号 | 非暗号 | STARTTLS | SSL/TLS | 説明 |
---|---|---|---|---|
110(POP3) | ○ | ○ | × | メール受信者が、メールサーバから電子メールを取り寄せる時に使用。 |
143(IMAP4) | ○ | ○ | × | POP3 と役割は同じだが、メールサーバ上にメールを一定期間残す挙動が標準。 |
993(IMAP4S) | × | × | ○ | IMAP4 を暗号化通信専用にしたようなもの。その他は IMAP4 と同じ。 |
995(POP3S) | × | × | ○ | POP3 を暗号化通信専用したようなもの。その他は POP3 と同じ。 有名どころでは OCN なんかがこれを標準にしているが、 おかげで従来の制御機器が使えなくなるケースも実在する。 |