| 1004 | |
| 1005 | ===== WSGI 設定 ===== |
| 1006 | |
| 1007 | WSGI スクリプト周りはすでに記述済みなので、 apache 側の設定だけ。 |
| 1008 | |
| 1009 | {{{ |
| 1010 | #!console |
| 1011 | $ sudo vim /etc/apache2/sites-enabled/developer/trac.conf |
| 1012 | }}} |
| 1013 | |
| 1014 | {{{ |
| 1015 | <IfModule mod_wsgi.c> |
| 1016 | WSGIScriptAlias /trac/original /var/Developer/trac/original/trac-original.wsgi |
| 1017 | WSGIScriptAlias /trac/projects/test /var/Developer/trac/projects/test/trac-test.wsgi |
| 1018 | |
| 1019 | <Directory /var/Developer/trac/original> |
| 1020 | WSGIApplicationGroup %{GLOBAL} |
| 1021 | Order deny,allow |
| 1022 | Allow from all |
| 1023 | </Directory> |
| 1024 | |
| 1025 | <Directory /var/Developer/trac/projects/test> |
| 1026 | WSGIApplicationGroup %{GLOBAL} |
| 1027 | Order deny,allow |
| 1028 | Allow from all |
| 1029 | </Directory> |
| 1030 | |
| 1031 | <Location /trac/original/otoco/login> |
| 1032 | AuthType Digest |
| 1033 | AuthName realm |
| 1034 | AuthUserFile "/var/Developer/trac/original/otoco/.htdigest" |
| 1035 | Require valid-user |
| 1036 | </Location> |
| 1037 | |
| 1038 | <Location /trac/original/ideanote/login> |
| 1039 | AuthType Digest |
| 1040 | AuthName realm |
| 1041 | AuthUserFile "/var/Developer/trac/original/ideanote/.htdigest" |
| 1042 | Require valid-user |
| 1043 | </Location> |
| 1044 | |
| 1045 | # ... (以下、似たような設定が続く) |
| 1046 | |
| 1047 | </IfModule> |
| 1048 | }}} |
| 1049 | |
| 1050 | そして apache を再起動。 |
| 1051 | |
| 1052 | {{{ |
| 1053 | #!console |
| 1054 | $ sudo /etc/init.d/apache2 restart |
| 1055 | }}} |
| 1056 | |
| 1057 | …あれ、404 ですね orz |
| 1058 | |
| 1059 | ===== trac 環境のアップグレード ===== |
| 1060 | |
| 1061 | そうか、 `trac-admin` から upgrade してあげないといけないんだった。 |
| 1062 | |
| 1063 | で、やってあげようとすると mysql がどうのこうのと怒られる。[https://trac.edgewall.org/wiki/MySqlDb この辺]によると、 MySQL-python を入れてあげないといけないっぽい。 |
| 1064 | |
| 1065 | {{{ |
| 1066 | #!console |
| 1067 | $ sudo pip install MySQL-python |
| 1068 | [sudo] password for murachi: |
| 1069 | The directory '/home/murachi/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. |
| 1070 | The directory '/home/murachi/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. |
| 1071 | Collecting MySQL-python |
| 1072 | Downloading https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip (108kB) |
| 1073 | 100% |################################| 112kB 1.8MB/s |
| 1074 | Complete output from command python setup.py egg_info: |
| 1075 | sh: 1: mysql_config: not found |
| 1076 | Traceback (most recent call last): |
| 1077 | File "<string>", line 1, in <module> |
| 1078 | File "/tmp/pip-install-99Zjnt/MySQL-python/setup.py", line 17, in <module> |
| 1079 | metadata, options = get_config() |
| 1080 | File "/tmp/pip-install-99Zjnt/MySQL-python/setup_posix.py", line 43, in get_config |
| 1081 | libs = mysql_config("libs_r") |
| 1082 | File "/tmp/pip-install-99Zjnt/MySQL-python/setup_posix.py", line 25, in mysql_config |
| 1083 | raise EnvironmentError("%s not found" % (mysql_config.path,)) |
| 1084 | EnvironmentError: mysql_config not found |
| 1085 | |
| 1086 | ---------------------------------------- |
| 1087 | Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-99Zjnt/MySQL-python/ |
| 1088 | $ |
| 1089 | }}} |
| 1090 | |
| 1091 | `mysql_config` って何だ? |
| 1092 | |
| 1093 | …結局[https://stackoverflow.com/questions/5178292/pip-install-mysql-python-fails-with-environmenterror-mysql-config-not-found 開発用パッケージも必要]ってことらしい。 |
| 1094 | |
| 1095 | {{{ |
| 1096 | #!console |
| 1097 | $ sudo apt -y install libmysqlclient-dev |
| 1098 | |
| 1099 | ... |
| 1100 | |
| 1101 | $ sudo pip install MySQL-python |
| 1102 | }}} |
| 1103 | |
| 1104 | うん、今度はちゃんと入った。 |
| 1105 | |
| 1106 | 気を取り直して、とりあえず ideanote の環境を upgrade |
| 1107 | |
| 1108 | {{{ |
| 1109 | #!console |
| 1110 | $ cd /var/Developer/trac/original/ideanote |
| 1111 | $ trac-admin . |
| 1112 | trac-admin 1.2.3 ????? |
| 1113 | Trac ???????(?????)??? |
| 1114 | Copyright (C) 2003-2018 Edgewall Software |
| 1115 | |
| 1116 | '?' ????? 'help' ??????????????? |
| 1117 | |
| 1118 | Trac [/var/Developer/trac/original/ideanote]> upgrade |
| 1119 | ??????????????????????????????????? |
| 1120 | |
| 1121 | TracError: ???????????????????????? InnoDB ??? NDB ???????????????????????????????????????????????????????????????: attachment, auth_cookie, cache, component, enum, milestone, node_change, permission, report, repository, revision, session, session_attribute, system, ticket, ticket_change, ticket_custom, version, wiki |
| 1122 | Trac [/var/Developer/trac/original/ideanote]> |
| 1123 | }}} |
| 1124 | |
| 1125 | 今度は InnoDB じゃないぞって怒られてしまった… 旧 DB は MyISAM だったってこと? まじかー |
| 1126 | |
| 1127 | * [https://trac.edgewall.org/wiki/MySqlDb MySQL and its MySQLdb Python bindings] |
| 1128 | |
| 1129 | ↑を参考に、MyISAM になっているテーブルを InnoDB に変換する。 |
| 1130 | |
| 1131 | {{{ |
| 1132 | MariaDB [trac_ideanote]> select table_name, engine from information_schema.tables where table_schema = database(); |
| 1133 | +-------------------+--------+ |
| 1134 | | table_name | engine | |
| 1135 | +-------------------+--------+ |
| 1136 | | attachment | MyISAM | |
| 1137 | | auth_cookie | MyISAM | |
| 1138 | | cache | MyISAM | |
| 1139 | | component | MyISAM | |
| 1140 | | enum | MyISAM | |
| 1141 | | milestone | MyISAM | |
| 1142 | | node_change | MyISAM | |
| 1143 | | permission | MyISAM | |
| 1144 | | report | MyISAM | |
| 1145 | | repository | MyISAM | |
| 1146 | | revision | MyISAM | |
| 1147 | | session | MyISAM | |
| 1148 | | session_attribute | MyISAM | |
| 1149 | | system | MyISAM | |
| 1150 | | ticket | MyISAM | |
| 1151 | | ticket_change | MyISAM | |
| 1152 | | ticket_custom | MyISAM | |
| 1153 | | version | MyISAM | |
| 1154 | | wiki | MyISAM | |
| 1155 | +-------------------+--------+ |
| 1156 | 19 rows in set (0.02 sec) |
| 1157 | |
| 1158 | MariaDB [trac_ideanote]> alter table attachment engine = InnoDB; |
| 1159 | Query OK, 38 rows affected (0.13 sec) |
| 1160 | Records: 38 Duplicates: 0 Warnings: 0 |
| 1161 | |
| 1162 | MariaDB [trac_ideanote]> alter table auth_cookie engine = InnoDB; |
| 1163 | Query OK, 1 row affected (0.02 sec) |
| 1164 | Records: 1 Duplicates: 0 Warnings: 0 |
| 1165 | |
| 1166 | MariaDB [trac_ideanote]> alter table cache engine = InnoDB; |
| 1167 | Query OK, 1 row affected (0.01 sec) |
| 1168 | Records: 1 Duplicates: 0 Warnings: 0 |
| 1169 | |
| 1170 | ... |
| 1171 | |
| 1172 | MariaDB [trac_ideanote]> alter table wiki engine = InnoDB; |
| 1173 | Query OK, 516 rows affected (0.15 sec) |
| 1174 | Records: 516 Duplicates: 0 Warnings: 0 |
| 1175 | |
| 1176 | MariaDB [trac_ideanote]> quit |
| 1177 | Bye |
| 1178 | }}} |
| 1179 | |
| 1180 | で、もう一度 upgrade を試すが… |
| 1181 | |
| 1182 | {{{ |
| 1183 | Trac [/var/Developer/trac/original/ideanote]> upgrade |
| 1184 | アップグレードが失敗しました。問題を解消させてもう一度試してください。 |
| 1185 | |
| 1186 | TracError: すべてのテーブルは照合順序として utf8_bin または utf8mb4_bin で作成されている必要があります。次のテーブルがその照合順序で作成されていません: attachment, auth_cookie, cache, component, enum, milestone, node_change, permission, report, repository, revision, session, session_attribute, system, ticket, ticket_change, ticket_custom, version, wiki |
| 1187 | Trac [/var/Developer/trac/original/ideanote]> |
| 1188 | }}} |
| 1189 | |
| 1190 | 今度は照合順序ですか… |
| 1191 | |
| 1192 | |
| 1193 | == メールサーバー移行 == |
| 1194 | |
| 1195 | ひとまず先にメールサーバーの移行を済ませることにする。 |
| 1196 | |
| 1197 | === 旧サーバーのメールサーバーを停止 === |
| 1198 | |
| 1199 | 新しいメールサーバーのホスト名は `mail.harapeko.jp` にしてしまうことにする。そこで、旧サーバーの BIND のゾーン設定を以下の通りに変更した。 |
| 1200 | |
| 1201 | {{{ |
| 1202 | $TTL 1D |
| 1203 | @ IN SOA onaka.harapeko.jp. root.onaka.harapeko.jp. ( |
| 1204 | 2019050201 ; serial |
| 1205 | 3600 ; refresh 1h |
| 1206 | 900 ; retry 15m |
| 1207 | 3600000 ; expiry 1000h |
| 1208 | 3600 ; minimum 24h |
| 1209 | ) |
| 1210 | ; |
| 1211 | IN NS ns.harapeko.jp. |
| 1212 | IN MX 0 mail.harapeko.jp. |
| 1213 | mail IN MX 0 mail.harapeko.jp. |
| 1214 | onaka IN A 49.212.128.142 |
| 1215 | ns IN A 49.212.128.142 |
| 1216 | mail IN A 153.126.157.107 |
| 1217 | www IN CNAME onaka |
| 1218 | daiyokujo IN CNAME onaka ; for harapeko.asablo.jp/blog |
| 1219 | blog IN CNAME onaka |
| 1220 | developer IN CNAME onaka |
| 1221 | svn IN CNAME onaka |
| 1222 | test IN CNAME onaka |
| 1223 | }}} |
| 1224 | |
| 1225 | 以前は MX レコードに `developer` を置いていたが、これを `mail` に変更。 `*` は削除し、 `(user id)@harapeko.jp` または `(user id)@mail.harapeko.jp` 以外は届かないことにする。そして `mail` を CNAME レコードから A レコードへ移し、新サーバーのアドレスを割り当てた。 |
| 1226 | |
| 1227 | ~~どうせこの設定が世に広まるまでに時間はかかるだろうから~~(←浸透いうなw)、まずはこいつを BIND に reload し、ついでに Postfix を落としてしまった。 |
| 1228 | |
| 1229 | {{{ |
| 1230 | #!console |
| 1231 | # service named reload |
| 1232 | # service postfix stop |
| 1233 | # service dovecot stop |
| 1234 | }}} |
| 1235 | |
| 1236 | ※ 実際のところ、手元のルーターには割とすぐに設定が反映されました。いい時代になった…。 |
| 1237 | |
| 1238 | === SSL 証明書発行 === |
| 1239 | |
| 1240 | Let's Encrypt を使用します。こいつの導入は git を使います。 |
| 1241 | |
| 1242 | {{{ |
| 1243 | #!console |
| 1244 | $ sudo apt install git |
| 1245 | |
| 1246 | ... |
| 1247 | |
| 1248 | $ git clone https://github.com/certbot/certbot |
| 1249 | |
| 1250 | ... |
| 1251 | |
| 1252 | $ cd certbot |
| 1253 | }}} |
| 1254 | |
| 1255 | とりあえず証明したいのは `mail.harapeko.jp` ドメインのみ。 Web ページを作成する予定はないので、 Apache の設定はスキップしてスタンドアローンで証明書のみ発行してしまいます。 80番ポートを listen できる必要があるので Apache は一旦止めます。 |
| 1256 | |
| 1257 | {{{ |
| 1258 | #!console |
| 1259 | $ sudo service apache2 stop |
| 1260 | $ ./certbot-auto certonly --standalone -d mail.harapeko.jp |
| 1261 | }}} |
| 1262 | |
| 1263 | 途中色々と聞かれるので適当に応答します (!Yes/No とかメールアドレスとか)。最終的にこんなメッセージが出てきます。 |
| 1264 | |
| 1265 | {{{ |
| 1266 | IMPORTANT NOTES: |
| 1267 | - Congratulations! Your certificate and chain have been saved at: |
| 1268 | /etc/letsencrypt/live/mail.harapeko.jp/fullchain.pem |
| 1269 | Your key file has been saved at: |
| 1270 | /etc/letsencrypt/live/mail.harapeko.jp/privkey.pem |
| 1271 | Your cert will expire on 2019-07-31. To obtain a new or tweaked |
| 1272 | version of this certificate in the future, simply run certbot-auto |
| 1273 | again. To non-interactively renew *all* of your certificates, run |
| 1274 | "certbot-auto renew" |
| 1275 | }}} |
| 1276 | |
| 1277 | === ユーザーアカウントの引き継ぎ === |
| 1278 | |
| 1279 | [http://developer.harapeko.jp/trac/original/ideanote/wiki/HowTo/SakuraVpsSetup2#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E5%BC%95%E3%81%8D%E7%B6%99%E3%81%8E 前回とほぼ同じことをやりました]。ついでにもはや使われていないいくつかのユーザーアカウントを抹消。 |
| 1280 | |
| 1281 | ちなみに、ログインできないアカウントの登録は Ubuntu では以下のように、 `/sbin/nologin` ではなく `/usr/sbin/nologin` を指定する。 |
| 1282 | |
| 1283 | {{{ |
| 1284 | #!console |
| 1285 | $ sudo useradd -ms /usr/sbin/nologin toshiyuki.murayama |
| 1286 | }}} |
| 1287 | |
| 1288 | そして、これらのアカウントに変更するには、一旦 root を経由する必要がある。 |
| 1289 | |
| 1290 | {{{ |
| 1291 | #!console |
| 1292 | $ sudo su - |
| 1293 | # su -s /bin/bash toshiyuki.murayama |
| 1294 | |
| 1295 | (アカウントを借りてコマンドを発行したいだけであれば sudo -u を使えばいい) |
| 1296 | $ sudo -u toshiyuki.murayama any-command -options... |
| 1297 | }}} |
| 1298 | |
| 1299 | また、メールの受信方式を IMAP に変更していたので、今回はメールボックスの移行も行いました。 |
| 1300 | |
| 1301 | {{{ |
| 1302 | #!console |
| 1303 | $ su -s /bin/bash toshiyuki.murayama |
| 1304 | $ cd |
| 1305 | $ tar -cJvf toshiyuki.murayama.Maildir.tar.xz Maildir |
| 1306 | |
| 1307 | ... |
| 1308 | |
| 1309 | $ exit |
| 1310 | $ sudo mv /home/toshiyuki.murayama.Maildir.tar.xz . |
| 1311 | $ rsync -az toshiyuki.murayama.Maildir.tar.xz mitsuko.seki.Maildir.tar.xz -e ssh mail.harapeko.jp:~/ |
| 1312 | $ ssh mail.harapeko.jp |
| 1313 | $ sudo chown toshiyuki.murayama:toshiyuki.murayama toshiyuki.murayama.Maildir.tar.xz |
| 1314 | $ sudo mv toshiyuki.murayama.Maildir.tar.xz /home/toshiyuki.murayama/ |
| 1315 | $ sudo su - |
| 1316 | # su -s /bin/bash toshiyuki.murayama |
| 1317 | $ cd |
| 1318 | $ tar -xJvf toshiyuki.murayama.Maildir.tar.xz |
| 1319 | }}} |
| 1320 | |
| 1321 | (当然他のアカウントの分も…) (と言っても実質使用実績のあるアカウントのみにしましたが) |
| 1322 | |
| 1323 | === いろいろとインストール === |
| 1324 | |
| 1325 | Postfix, Cyrus SASL, dovecot 辺りを一気にインストールします。多分こんなんでいいはず… |
| 1326 | |
| 1327 | {{{ |
| 1328 | #!console |
| 1329 | $ sudo apt install postfix dovecot-imapd dovecot-lmtpd dovecot-mysql libsasl2-modules-sql |
| 1330 | }}} |
| 1331 | |
| 1332 | なんかこんな画面が出てきました…。 |
| 1333 | |
| 1334 | [[Image(fig-postfix-configuration-type.png, 800px)]] |
| 1335 | |
| 1336 | とりあえずこのまま `Internet Site` を選んでみることにします。 |
| 1337 | |
| 1338 | 次に「System mail name」を聞かれますが、これは素直に `harapeko.jp` とします。 |
| 1339 | |
| 1340 | ※ Cyrus SASL は `sasl2-bin` でした… (汗 後から以下を実行しました (汗 |
| 1341 | |
| 1342 | {{{ |
| 1343 | #!console |
| 1344 | $ sudo apt install sasl2-bin |
| 1345 | }}} |
| 1346 | |
| 1347 | === IMAP4 設定 === |
| 1348 | |
| 1349 | dovecot の設定は概ね今までどおりですが、前回が POP3 でその後 IMAP4 に切り替えて、結果設定内容がごっちゃになっているので改めて整理します。 |
| 1350 | |
| 1351 | `/etc/dovecot/dovecot.conf` は多分そのままで大丈夫です。 `listen` もコメントアウトのままで良いんじゃないかな。 `protocols` は `dovecot-imapd` と `dovecot-lmtpd` をインストールしたことによって、 `/usr/share/dovecot/protocols.d/` の下に `imapd.protocol` と `lmtpd.protocol` ができていて、これらで設定してくれています。 |
| 1352 | |
| 1353 | `/etc/dovecot/conf.d` の下は以下の通り。 |
| 1354 | |
| 1355 | * `10-auth.conf` |
| 1356 | |
| 1357 | {{{ |
| 1358 | # 以下はそのまま |
| 1359 | auth_mechanisms = plain |
| 1360 | |
| 1361 | # 以下はコメントアウト |
| 1362 | #!include auth-system.conf.ext |
| 1363 | |
| 1364 | # 以下はコメントハッシュを外す |
| 1365 | !include auth-sql.conf.ext |
| 1366 | }}} |
| 1367 | |
| 1368 | * `10-mail.conf` |
| 1369 | |
| 1370 | {{{ |
| 1371 | # mbox ではなく maildir 形式に |
| 1372 | #mail_location = mbox:~/mail:INBOX=/var/mail/%u |
| 1373 | mail_location = maildir:~/Maildir |
| 1374 | }}} |
| 1375 | |
| 1376 | * `10-master.conf` |
| 1377 | |
| 1378 | {{{ |
| 1379 | # IMAP はポートを潰して、 IMAPS (SSL/TLS) だけを許容する |
| 1380 | service imap-login { |
| 1381 | inet_listener imap { |
| 1382 | #port = 143 |
| 1383 | port = 0 |
| 1384 | } |
| 1385 | inet_listener imaps { |
| 1386 | port = 993 |
| 1387 | ssl = yes |
| 1388 | } |
| 1389 | |
| 1390 | # ... |
| 1391 | |
| 1392 | } |
| 1393 | }}} |
| 1394 | |
| 1395 | * `10-ssl.conf` |
| 1396 | |
| 1397 | {{{ |
| 1398 | #ssl = no |
| 1399 | ssl = yes |
| 1400 | |
| 1401 | #ssl_cert = </etc/dovecot/dovecot.pem |
| 1402 | ssl_cert = </etc/letsencrypt/live/mail.harapeko.jp/cert.pem |
| 1403 | #ssl_key = </etc/dovecot/private/dovecot.pem |
| 1404 | ssl_key = </etc/letsencrypt/live/mail.harapeko.jp/privkey.pem |
| 1405 | |
| 1406 | #ssl_ca = |
| 1407 | ssl_ca = </etc/letsencrypt/live/mail.harapeko.jp/chain.pem |
| 1408 | }}} |
| 1409 | |
| 1410 | それから、 `/etc/dovecot/dovecot-sql.conf.ext` を以下の通りに修正する。 |
| 1411 | |
| 1412 | {{{ |
| 1413 | driver = mysql |
| 1414 | |
| 1415 | connect = host=localhost dbname=mailusers user=mailusers password=パスワード |
| 1416 | |
| 1417 | #default_pass_scheme = MD5 |
| 1418 | default_pass_scheme = plain |
| 1419 | |
| 1420 | password_query = select userid as username, domain, plain_passwd as password from users where userid = '%n' and domain in ('%d', 'mail.harapeko.jp') |
| 1421 | user_query = select home, uid, gid from users where userid = '%n' and domain in ('%d', 'mail.harapeko.jp') |
| 1422 | }}} |
| 1423 | |
| 1424 | `default_pass_scheme` のデフォルト値は `MD5` になっている。これを明示的に変更しないと `password_query` で取得した `password` を MD5 ハッシュされたものとして評価する。本当はそのほうが嬉しいんだが、 SASL の auxprop がパスワードをハッシュ化することに対応していないので、残念だが `plain` としている。 |
| 1425 | |
| 1426 | `password_query`, `user_query` で検索条件に指定しているドメイン名の `%d` は、ログイン時のユーザー名を `user@mail.harapeko.jp` のような形式で指定する場合の `@` より後ろの部分が渡される。従来このユーザー名の `@` 以降を省略してログインした場合でもメールサーバーのドメイン名が渡されていたはずなのだが、現行では空文字が渡されてしまう模様。メーラー側の設定は極力変更しないで済むようにしたかったので、 `user` のままでも `user@mail.harapeko.jp` とした場合でも許容されるよう、 SQL を若干工夫している。 |
| 1427 | |
| 1428 | とりあえずここまでで dovecot を再起動。 |
| 1429 | |
| 1430 | {{{ |
| 1431 | #!console |
| 1432 | $ sudo service dovecot restart |
| 1433 | }}} |
| 1434 | |
| 1435 | ~~これでとりあえず受信はできるようになったかなと Thunderbird から繋いでみたが、受信できず…。続きは明日以降に。~~ 以上の設定でとりあえず IMAP4 による閲覧はできるようになった。 |
| 1436 | |
| 1437 | === SASL 設定 === |
| 1438 | |
| 1439 | [https://chee-s.net/ubuntu14-04postfixdovecotsasl%E3%81%A7smtp%E8%AA%8D%E8%A8%BC こちらのサイト]を参考にさせていただきました。 |
| 1440 | |
| 1441 | 設定ファイルは `/etc/default/saslauthd` 。 |
| 1442 | |
| 1443 | {{{ |
| 1444 | # 自動起動を有効にしておく |
| 1445 | #START=no |
| 1446 | START=yes |
| 1447 | |
| 1448 | # 以下の変数の内容を確認しておく (そのままでいい) |
| 1449 | OPTIONS="-c -m /var/run/saslauthd" |
| 1450 | }}} |
| 1451 | |
| 1452 | `OPTIONS` 変数に指定されている `-m` オプションのパスは存在するディレクトリでなければならない。古いバージョンの Ubuntu ではこれが存在しないということがあったらしいが、今回の場合はちゃんと存在していた。 |
| 1453 | |
| 1454 | `smtpd.conf` は `/etc/postfix/sasl/` の下に作ればいいらしい。内容は前回と同じでいいんじゃないかな。 |
| 1455 | |
| 1456 | 次に `/etc/postfix/main.cf` を編集。 |
| 1457 | |
| 1458 | {{{ |
| 1459 | # |
| 1460 | # SASL の設定 (追加) |
| 1461 | smtpd_sasl_auth_enable = yes |
| 1462 | smtpd_sasl_security_options = noanonymous |
| 1463 | smtpd_sasl_local_domain = $myhostname |
| 1464 | |
| 1465 | # SSL/TLS 鍵の設定 |
| 1466 | #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem |
| 1467 | #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key |
| 1468 | smtpd_tls_cert_file=/etc/letsencrypt/live/mail.harapeko.jp/cert.pem |
| 1469 | smtpd_tls_key_file=/etc/letsencrypt/live/mail.harapeko.jp/privkey.pem |
| 1470 | smtpd_tls_CAfile=/etc/letsencrypt/live/mail.harapeko.jp/chain.pem |
| 1471 | |
| 1472 | # TLS を使用する (変更なし) |
| 1473 | smtpd_use_tls=yes |
| 1474 | smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache |
| 1475 | smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache |
| 1476 | |
| 1477 | # TLS 認証のみを使用 (追加) |
| 1478 | smtpd_tls_auth_only=yes |
| 1479 | |
| 1480 | # リレーの許可設定 (変更なし) |
| 1481 | smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination |
| 1482 | |
| 1483 | # ホスト名 (変更) |
| 1484 | #myhostname = ik1-314-17353.vs.sakura.ne.jp |
| 1485 | myhostname = mail.harapeko.jp |
| 1486 | |
| 1487 | # オリジン (変更なし) |
| 1488 | myorigin = /etc/mailname |
| 1489 | |
| 1490 | # 自ホスト宛のメールとして処理するドメイン名 (変更) |
| 1491 | #mydestination = $myhostname, harapeko.jp, ik1-314-17353.vs.sakura.ne.jp, localhost.vs.sakura.ne.jp, localhost |
| 1492 | mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain |
| 1493 | |
| 1494 | # 自ホストネットワークの設定 (変更) |
| 1495 | mynetworks_style = host |
| 1496 | #mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 |
| 1497 | |
| 1498 | # メールボックスの設定 (追加) |
| 1499 | home_mailbox = Maildir/ |
| 1500 | |
| 1501 | # メール 1通あたりのサイズ制限 (追加) |
| 1502 | message_size_limit = 10485760 |
| 1503 | }}} |
| 1504 | |
| 1505 | Postfix は 2.10 以降リレーの許可設定ルールが変更になった (今回入っているのは 3.1.0)。以前は以下のように設定していたが、 |
| 1506 | |
| 1507 | {{{ |
| 1508 | smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination |
| 1509 | }}} |
| 1510 | |
| 1511 | 2.10 以降では `smptd_relay_restrictions` を設定し、 Reject するための特別なルールを追加したいときに `smptd_recipient_restrictions` を追加する、というルールに変更された。 `smtpd_relay_restrictions` を設定しないとメールの送信自体が常に失敗するようになる模様。 |
| 1512 | |
| 1513 | `myorigin` に指定されているパスのファイルには `harapeko.jp` とだけ書かれていた。恐らく Postfix インストール時に聞かれた「System mail name」がここに書き込まれたものと思われる。 |
| 1514 | |
| 1515 | なお、**インストール時の自動生成では `home_mailbox` の設定が含まれておらず、そのままだと他所からのメールがどこにも保存されない。必ず設定を追加する必要がある。** |
| 1516 | |
| 1517 | ~~TODO:~~ なんかよさげなのであとで[https://blog.dshimizu.jp/article/215 これ]を試してみる。 ←試してみました。すべて解決した。 |
| 1518 | |
| 1519 | ここまでの設定に加えて以下の変更を追加。 |
| 1520 | |
| 1521 | * `/etc/postfix/main.cf` |
| 1522 | {{{ |
| 1523 | # SASL settings |
| 1524 | smtpd_sasl_auth_enable = yes |
| 1525 | smtpd_sasl_type = dovecot # <- 追加 |
| 1526 | smtpd_sasl_path = private/auth # <- 追加 |
| 1527 | smtpd_sasl_security_options = noanonymous |
| 1528 | smtpd_sasl_local_domain = $myhostname |
| 1529 | }}} |
| 1530 | |
| 1531 | SASL も dovecot にやらせる時代が来てたらしい。ひぇ〜 (おっさんっぽい反応) |
| 1532 | |
| 1533 | * `/etc/dovecot/conf.d/10-master.conf` |
| 1534 | {{{ |
| 1535 | # 以下は蛇足 (pop3 は動いてほしくないので徹底的に停止) |
| 1536 | service pop3-login { |
| 1537 | inet_listener pop3 { |
| 1538 | port = 0 |
| 1539 | #port = 110 |
| 1540 | } |
| 1541 | inet_listener pop3s { |
| 1542 | port = 0 |
| 1543 | #port = 995 |
| 1544 | #ssl = yes |
| 1545 | } |
| 1546 | } |
| 1547 | |
| 1548 | # ... |
| 1549 | |
| 1550 | service auth { |
| 1551 | # ... |
| 1552 | |
| 1553 | # 以下はそのまま |
| 1554 | unix_listener auth-userdb { |
| 1555 | #mode = 0666 |
| 1556 | #user = |
| 1557 | #group = |
| 1558 | } |
| 1559 | |
| 1560 | # 以下はコメントアウトされていたのを外し、 user, group の定義を追加 |
| 1561 | # Postfix smtp-auth |
| 1562 | unix_listener /var/spool/postfix/private/auth { |
| 1563 | mode = 0666 |
| 1564 | user = postfix |
| 1565 | group = postfix |
| 1566 | } |
| 1567 | }}} |
| 1568 | |
| 1569 | これで postfix と dovecot を restart したらメール送信も無事動くようになりました。よかった…。 |
| 1570 | |
| 1571 | TODO: (あとで調査) SASL も dovecot に任せられるということは、パスワード比較時にハッシュ関数をかます用にすればパスワードをハッシュ値で持てるようになるということなのでは… |
| 1572 | |
| 1573 | …サイズオーバーになってしまったので、[wiki:HowTo/SakuraVpsSetup3b パート2] に続く。 |