Linux/Apache/Home.md
... ...
@@ -1,5 +1,8 @@
1 1
[[_TOC_]]
2
-- [[Perl/ApacheErrorLogFormatter]]
2
+- [[mod_geoip]]
3
+- [[mod_security]]
4
+- [[mod_ssl]]
5
+- [[ApacheErrorLogFormatter|/Perl/ApacheErrorLogFormatter]]
3 6
4 7
# ドキュメント
5 8
- [Apache HTTP Server Documentation](http://httpd.apache.org/docs/)
... ...
@@ -16,39 +19,39 @@
16 19
17 20
# Apache用モジュールをコンパイルできるようにする
18 21
- httpd-devel (apxs) をインストールしておく。
19
-```
20
-# yum install httpd-devel
21
-```
22
+ ```
23
+ # yum install httpd-devel
24
+ ```
22 25
23 26
# バーチャルホスト設定
24 27
- [バーチャルホスト説明書](http://httpd.apache.org/docs/current/vhosts/)
25 28
26 29
## 設定
27 30
- /etc/httpd/conf.d/VirtualHosts.conf
28
-```apache
29
-# Use name-based virtual hosting.
30
-NameVirtualHost *:80
31
-
32
-<VirtualHost *:80>
33
- ServerName www.takeash.net
34
- DocumentRoot /var/www/html/
35
-</VirtualHost>
36
-
37
-<VirtualHost *:80>
38
- ServerName vh1.takeash.net
39
- DocumentRoot /var/www/vh1-html/
40
- <Directory "/var/www/vh1-html">
41
-# AllowOverride All
42
- </Directory>
43
-</VirtualHost>
44
-```
31
+ ```apache
32
+ # Use name-based virtual hosting.
33
+ NameVirtualHost *:80
34
+
35
+ <VirtualHost *:80>
36
+ ServerName www.takeash.net
37
+ DocumentRoot /var/www/html/
38
+ </VirtualHost>
39
+
40
+ <VirtualHost *:80>
41
+ ServerName vh1.takeash.net
42
+ DocumentRoot /var/www/vh1-html/
43
+ <Directory "/var/www/vh1-html">
44
+ # AllowOverride All
45
+ </Directory>
46
+ </VirtualHost>
47
+ ```
45 48
46 49
## エラー対策
47 50
- バーチャルホストが表示されない。
48 51
- エラーメッセージ
49
-```
50
-[warn] _default_ VirtualHost overlap on port 80, the first has precedence
51
-```
52
+ ```
53
+ [warn] _default_ VirtualHost overlap on port 80, the first has precedence
54
+ ```
52 55
- 原因<br />
53 56
NameVirtualHost ディレクティブが設定されていない。
54 57
- 対処<br />
... ...
@@ -59,588 +62,24 @@ httpd.conf を修正するより conf.d に VirtualHosts.conf として専用の
59 62
- [認証、承認、アクセス制御](http://httpd.apache.org/docs/current/howto/auth.html)
60 63
- [mod_auth_digest](http://httpd.apache.org/docs/current/mod/mod_auth_digest.html)
61 64
- レルム/ユーザ/パスワード追加
62
-```
63
-htdigest [-c] passwdfile <realm> <username>
64
-```
65
- - /etc/httpd/conf.d/DigestAuth.conf
66
-```apache
67
-<Directory "/var/www/html/Download/<realm>">
68
- AllowOverride AuthConfig
69
- AuthType Digest
70
- AuthName "<realm>"
71
- AuthUserFile /var/www/passwd/passwords_digest
72
- Require user <username>
73
- Options None
74
- Options Indexes
75
- DirectoryIndex index.html index.htm index.php
76
- Order allow,deny
77
- Allow from all
78
-</Directory>
79
-```
80
-
81
-# mod_ssl
82
-- インストール
83
-```
84
-# yum install mod_ssl
85
-```
86
-
87
-## 自己署名証明書使用
88
-
89
-- SAN 項目を追加した設定ファイルを作成。
90
-```
91
-# cd /etc/pki/tls/
92
-# cp openssl.cnf openssl-san.cnf
93
-```
94
-
95
-- openssl.cnf と openssl-san.cnf の差分
96
-```
97
---- openssl.cnf
98
-+++ openssl-san.cnf
99
-@@ -104,7 +104,7 @@
100
- ####################################################################
101
- [ req ]
102
- default_bits = 2048
103
--default_md = sha1
104
-+default_md = sha256
105
- default_keyfile = privkey.pem
106
- distinguished_name = req_distinguished_name
107
- attributes = req_attributes
108
-@@ -222,6 +222,11 @@
109
-
110
- basicConstraints = CA:FALSE
111
- keyUsage = nonRepudiation, digitalSignature, keyEncipherment
112
-+subjectAltName=@alt_names
113
-+
114
-+[ alt_names ]
115
-+DNS.1=takeash.net
116
-+DNS.2=*.takeash.net
117
-
118
-[ v3_ca ]
119
-
120
-```
121
-- 証明書フォルダへ移動
122
-```
123
-# cd certs/
124
-```
125
-
126
-- サーバー用秘密鍵作成 (server.key)
127
-```
128
-# openssl genrsa -aes128 2048 > server.key
129
-```
130
-
131
-- パスフレーズ削除<br />
132
-httpd 再起動時にパスフレーズが要求されないようにするため。
133
-```
134
-# openssl rsa -in server.key -out server.key
135
-```
136
-
137
-- サーバー用自己署名証明書作成 (server.crt)
138
-```
139
-# openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0 \
140
- -subj '/C=JP/ST=Tokyo/L=Chuo-ku/O=TakeAsh.net/CN=takeash.net' -extensions v3_req -config ../openssl-san.cnf
141
-```
142
- - サブジェクト例 (TakeAsh.net)
143
-
144
- | 項目 | 用途 | サンプル |
145
- | --- | --- | --- |
146
- | C | 国名コード | JP |
147
- | ST | 都道府県 | Tokyo |
148
- | L | 区市町村 | Chuo-ku |
149
- | O | 組織名 | TakeAsh.net |
150
- | CN | コモンネーム(ドメイン名) | takeash.net |
151
- - 証明書確認<br />
152
-「X509v3 extensions - X509v3 Subject Alternative Name」項目が存在すれば SAN が含まれている。
153
-```
154
-# openssl x509 -in server.crt -text
155
-...
156
- X509v3 Subject Alternative Name:
157
- DNS:takeash.net, DNS:*.takeash.net
158
-...
159
-```
160
-
161
-- /etc/httpd/conf.d/ssl.conf (抜粋)
162
-```
163
-SSLCertificateFile /etc/pki/tls/certs/server.crt
164
-SSLCertificateKeyFile /etc/pki/tls/certs/server.key
165
-DocumentRoot "/var/www/html"
166
-SSLProtocol all -SSLv2 -SSLv3
167
-```
168
-
169
-- httpd 再起動
170
- - CentOS 6
171
-```
172
-# service httpd restart
173
-```
174
- - CentOS 7
175
-```
176
-# systemctl restart httpd
177
-```
178
-
179
-- 動作テスト
180
- - https://takeash.net/cgi-bin/etc/PrintEnv.cgi
181
- - https://www.takeash.net/cgi-bin/etc/PrintEnv.cgi
182
-
183
-- [OpenSSL CSR with Alternative Names one-line - End Point Blog](http://blog.endpoint.com/2014/10/openssl-csr-with-alternative-names-one.html)
184
-- [SAN対応 x.509 証明書を取得するためのCSRを作成する - Qiita](http://qiita.com/saitara/items/eda74ac6a950122b5f31)
185
-- [subjectAltNameでバーチャルホスト - Kung Noi Blog](http://www.goodnai.com/blog/2010/05/07/subjectaltname%E3%81%A7%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88/)
186
-- [Webサーバー間通信内容暗号化(Apache+mod_SSL) - CentOSで自宅サーバー構築](http://centossrv.com/apache-ssl.shtml)
187
-- [SSL Server Test (Powered by Qualys SSL Labs)](https://www.ssllabs.com/ssltest/)
188
-- [ssl certificate - how to add subject alernative name to ssl certs? - Stack Overflow](https://stackoverflow.com/questions/%38%37%34%34%36%30%37)
189
- - keytool -certreq -ext SAN=dns:example.com,ip:192.168.0.1
190
- - [keytool(ja)](https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/keytool.html) / [keytool(en)](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html)
191
-
192
-## Certbot 使用
193
-- Certbot 使用前準備
194
- - ホスト名が正引きできること。(ワイルドカード不可)
195
- - バーチャルホストのサーバ名と要求するドメイン名のどれかが一致すること。
196
- - https でアクセス可能になっていること。
197
- - https ポート解放
198
-```
199
-# firewall-cmd --add-service=https --permanent
200
-```
201
-
202
-- Certbot インストール (EPEL リポジトリ)
203
-```
204
-# yum install python-certbot-apache
205
-```
206
-
207
-- 証明書取得<br />
208
-取得に成功すると「/etc/letsencrypt/live/<ドメイン1>/」に証明書が作成される。
209
-```
210
-# certbot --apache certonly -m <メールアドレス> -d <ドメイン1> [-d <ドメイン2> ...] --agree-tos
211
-```
212
-
213
-- /etc/httpd/conf.d/ssl.conf (抜粋)
214
-```
215
-Listen 443 https
216
-SSLEngine on
217
-SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
218
-SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
219
-SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
220
-```
221
-
222
-- /etc/httpd/conf.d/VirtualHosts.conf (抜粋)
223
-バーチャルホスト毎に SSL 設定が必要。
224
-```
225
-<VirtualHost *:80 *:443>
226
- ServerName vh1.<ドメイン1>
227
- DocumentRoot /var/www/vh1-html/
228
- SSLEngine on
229
- SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
230
- SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
231
- SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
232
- <Directory "/var/www/vh1-html">
233
- AllowOverride All
234
- </Directory>
235
-</VirtualHost>
236
-```
237
-
238
-- 自動更新スクリプト /etc/cron.monthly/certbot.sh
239
-```bash
240
-#!/bin/bash
241
-/bin/certbot renew
242
-```
243
-
244
-- [Certbot](https://certbot.eff.org/)
245
-- [Webサーバー間通信内容暗号化(Apache+mod_SSL+Certbot) - CentOSで自宅サーバー構築](http://centossrv.com/apache-certbot.shtml)
246
-
247
-## Certbot 使用(ワイルドカード, 手動)
248
-- Certbot インストール (EPEL リポジトリ)
249
-```
250
-# yum -y install yum-utils
251
-# yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
252
-# yum install certbot-apache
253
-```
254
-
255
-- 証明書取得(手動)<br />
256
-途中HTTPへのテキストファイルの配置とDNSへのTXTレコードの追加を指示されるので、追加してからEnterを押して先へ進む。<br />
257
-取得に成功すると「/etc/letsencrypt/live/<ドメイン>/」に証明書が作成される。
258
-```
259
-# certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory -d "*.example.com" -d example.com
260
-```
261
-
262
-- /etc/httpd/conf.d/ssl.conf (抜粋)
263
-```
264
-Listen 443 https
265
-SSLEngine on
266
-SSLCertificateFile /etc/letsencrypt/live/<ドメイン>/cert.pem
267
-SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン>/privkey.pem
268
-SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン>/chain.pem
269
-```
270
-
271
-- /etc/httpd/conf.d/VirtualHosts.conf (抜粋)
272
-バーチャルホスト毎に SSL 設定が必要。
273
-```
274
-<VirtualHost *:80 *:443>
275
- ServerName vh1.<ドメイン1>
276
- DocumentRoot /var/www/vh1-html/
277
- SSLEngine on
278
- SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
279
- SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
280
- SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
281
- <Directory "/var/www/vh1-html">
282
- AllowOverride All
283
- </Directory>
284
-</VirtualHost>
285
-```
286
-
287
-- apache 再起動
288
-```
289
-# systemctl restart httpd
290
-```
291
-
292
-- 動作確認
293 65
```
294
- $ openssl s_client -connect <ホスト>:443
66
+ htdigest [-c] passwdfile <realm> <username>
67
+ ```
68
+ - /etc/httpd/conf.d/DigestAuth.conf
69
+ ```apache
70
+ <Directory "/var/www/html/Download/<realm>">
71
+ AllowOverride AuthConfig
72
+ AuthType Digest
73
+ AuthName "<realm>"
74
+ AuthUserFile /var/www/passwd/passwords_digest
75
+ Require user <username>
76
+ Options None
77
+ Options Indexes
78
+ DirectoryIndex index.html index.htm index.php
79
+ Order allow,deny
80
+ Allow from all
81
+ </Directory>
295 82
```
296
- - 設定失敗
297
- ```
298
- CONNECTED(00000003)
299
- 140139752064912:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
300
- ---
301
- no peer certificate available
302
- ---
303
- No client certificate CA names sent
304
- ---
305
- SSL handshake has read 7 bytes and written 289 bytes
306
- ---
307
- New, (NONE), Cipher is (NONE)
308
- Secure Renegotiation IS NOT supported
309
- Compression: NONE
310
- Expansion: NONE
311
- No ALPN negotiated
312
- SSL-Session:
313
- Protocol : TLSv1.2
314
- Cipher : 0000
315
- Session-ID:
316
- Session-ID-ctx:
317
- Master-Key:
318
- Key-Arg : None
319
- Krb5 Principal: None
320
- PSK identity: None
321
- PSK identity hint: None
322
- Start Time: 1535884386
323
- Timeout : 300 (sec)
324
- Verify return code: 0 (ok)
325
- ---
326
- ```
327
- - 設定成功
328
- ```
329
- CONNECTED(00000003)
330
- depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
331
- verify return:1
332
- depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
333
- verify return:1
334
- depth=0 CN = *.<ドメイン1>
335
- verify return:1
336
- ---
337
- Certificate chain
338
- 0 s:/CN=*.<ドメイン1>
339
- i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
340
- 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
341
- i:/O=Digital Signature Trust Co./CN=DST Root CA X3
342
- ---
343
- Server certificate
344
- -----BEGIN CERTIFICATE-----
345
- MIIGETCCBPmgAwIBAgISA3VBvI0cSyzAQGtpIaQKQRZxMA0GCSqGSIb3DQEBCwUA
346
- ...
347
- ```
348
-
349
-- 証明書更新<br />
350
-「--manual」で取得した場合は「renew」による自動更新ができないので、既存の証明書を削除し同名で取得し直す。
351
-```
352
-# certbot delete
353
-```
354
-
355
-- 証明書の有効期限を表示<br />
356
-getExpireDate.sh
357
-```bash
358
-#!/bin/bash
359
-
360
-CommonName=example.net
361
-
362
-NotAfter=`openssl x509 -noout -dates -in /etc/letsencrypt/live/${CommonName}/fullchain.pem | \
363
- grep notAfter | \
364
- sed -e "s/notAfter=//" | \
365
- date -f - --iso-8601`
366
-echo ${NotAfter}
367
-```
368
-
369
-## Certbot 使用(ワイルドカード, 自動)
370
-- Certbot, DNS Plugin インストール (EPEL リポジトリ)
371
-```
372
-# yum -y install yum-utils
373
-# yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
374
-# yum install certbot-apache python2-certbot-dns-rfc2136
375
-```
376
-
377
-- BIND 用認証キーの作成
378
-Kcertbot-key.+165+43987.key, Kcertbot-key.+165+43987.private の2つのファイルが作成される。
379
-```
380
-# cd /etc/named/
381
-# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST certbot-key
382
-```
383
-
384
-- 認証ファイル /etc/named/certbot_rfc2136.ini , ファイルモード 600
385
-```
386
-# Target DNS server
387
-dns_rfc2136_server = 127.0.0.1
388
-# Target DNS port
389
-dns_rfc2136_port = 53
390
-# TSIG key name
391
-dns_rfc2136_name = certbot-key.
392
-# TSIG key secret
393
-dns_rfc2136_secret = <Kcertbot-key.+165+43987.key のハッシュ値>
394
-# TSIG key algorithm
395
-dns_rfc2136_algorithm = HMAC-SHA512
396
-```
397
-
398
-- /etc/named.conf に追加
399
-```
400
-key "certbot-key." {
401
- algorithm hmac-sha512;
402
- secret "<Kcertbot-key.+165+43987.key のハッシュ値>";
403
-};
404
-
405
-view "internal" {
406
- match-clients { localhost; localnets; };
407
- match-destinations { localhost; localnets; };
408
- recursion yes;
409
-
410
- zone "." IN {
411
- type hint;
412
- file "named.ca";
413
- };
414
-
415
- include "/etc/named.rfc1912.zones";
416
- include "/etc/named.root.key";
417
- include "/etc/named/<ドメイン>.lan.zone";
418
-};
419
-
420
-view "external" {
421
- match-clients { any; };
422
- match-destinations { any; };
423
- recursion no;
424
- include "/etc/named/<ドメイン>.wan.zone";
425
- include "/etc/named/_acme-challenge.<ドメイン>.wan.zone";
426
-};
427
-```
428
-
429
-- /etc/named/<ドメイン>.lan.zone
430
-```
431
-zone "<ドメイン>" {
432
- type master;
433
- file "<ドメイン>.lan.db";
434
- update-policy {
435
- grant certbot-key. name _acme-challenge.<ドメイン>. txt;
436
- };
437
-};
438
-```
439
-
440
-- /etc/named/<ドメイン>.wan.zone
441
-```
442
-zone "<ドメイン>" {
443
- type master;
444
- file "<ドメイン>.wan.db";
445
- allow-query { any; };
446
- update-policy {
447
- grant certbot-key. name _acme-challenge.<ドメイン>. txt;
448
- };
449
-};
450
-```
451
-
452
-- /etc/named/_acme-challenge.<ドメイン>.wan.zone
453
-```
454
-zone "_acme-challenge.<ドメイン>" {
455
- type master;
456
- file "_acme-challenge.<ドメイン>.wan.db";
457
- allow-query { any; };
458
- update-policy {
459
- grant certbot-key. name _acme-challenge.<ドメイン>. txt;
460
- };
461
-};
462
-```
463
-
464
-- /var/named/<ドメイン>.wan.db
465
-```
466
-$TTL 86400
467
-@ IN SOA ns1.<ドメイン>. root.<ドメイン>. (
468
- 2018090500 ; Serial
469
- 28800 ; Refresh
470
- 14400 ; Retry
471
- 2592000 ; Expire
472
- 86400 ; Minimum
473
- )
474
- IN NS ns1.<ドメイン>.
475
- IN MX 10 mail.<ドメイン>.
476
-@ IN A <グローバル IP アドレス>
477
-ns1 IN A <グローバル IP アドレス>
478
-www IN A <グローバル IP アドレス>
479
-mail IN A <グローバル IP アドレス>
480
-_acme-challenge IN NS ns1.<ドメイン>.
481
-* IN A <グローバル IP アドレス>
482
-<ドメイン>. IN TXT "v=spf1 a mx ~all"
483
-```
484
-
485
-- /var/named/_acme-challenge.<ドメイン>.wan.db
486
-```
487
-$TTL 86400
488
-@ IN SOA ns1.<ドメイン>. root.<ドメイン>. (
489
- 2018090500 ; Serial
490
- 1h ; Refresh
491
- 15m ; Retry
492
- 30d ; Expire
493
- 1h ; Minimum
494
- )
495
- IN NS ns1.<ドメイン>.
496
-```
497
-
498
-- `<ドメイン>.jnl: create: permission denied`(/var/named/data/named.run) 対策
499
-```
500
-# chmod 770 /var/named/
501
-# setsebool -P named_write_master_zones 1
502
-```
503
-
504
-- 証明書取得
505
-```
506
-# certbot certonly \
507
- --dns-rfc2136 \
508
- --dns-rfc2136-credentials /etc/named/certbot_rfc2136.ini \
509
- -d "*.<ドメイン>" -d <ドメイン>
510
-```
511
-
512
-# mod_security
513
-## インストール
514
-- EPELリポジトリ
515
-```
516
-# yum install mod_security mod_security_crs
517
-```
518
-
519
-## 設定
520
-- /etc/httpd/conf.d/mod_security.conf (抜粋)
521
-```apache
522
- # Maximum request body size we will
523
- # accept for buffering
524
- #SecRequestBodyLimit 131072
525
- SecRequestBodyLimit 5242880
526
- SecRequestBodyNoFilesLimit 51200
527
-```
528
-
529
-- /etc/httpd/modsecurity.d/modsecurity_localrules.conf
530
-```apache
531
-# Drop your local rules in here.
532
-
533
-# White List IP
534
-SecRule REMOTE_ADDR "@pmFromFile /etc/httpd/modsecurity.d/whitelist_ip.txt" \
535
- "phase:1,id:'1000001',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
536
-
537
-# White List URI
538
-SecRule REQUEST_URI "@pmFromFile /etc/httpd/modsecurity.d/whitelist_uri.txt" \
539
- "phase:1,id:'1000002',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
540
-
541
-# White List URI 2
542
-SecRule REQUEST_URI "@rx ^\/Etc\/" \
543
- "phase:1,id:'1000003',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
544
-
545
- # White List Sub-Domain
546
- SecRule REQUEST_HEADERS:Host "@pmFromFile /etc/httpd/modsecurity.d/whitelist_subdomain.txt" \
547
- "phase:1,id:'1000004',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
548
-
549
-# ZmEu Attack / phpMyAdmin
550
-SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager|myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/" \
551
- "severity:alert,id:'0000013',deny,log,status:400,msg:'Unacceptable folder.',severity:'2'"
552
-```
553
- - mod_security-2.7.1 でエラーが出るから適当にid追加したけど、idの振り方のルールってどこにあるのかな?
554
-```
555
-ModSecurity: No action id present within the rule
556
-```
557
-
558
-- /etc/httpd/modsecurity.d/whitelist_ip.txt<br />
559
-mod_security による制限を行わない IP アドレスを列挙する。<br />
560
-コメントは行頭から「#」で始める。
561
-```
562
-# localhost
563
-127.0.0.1
564
-
565
-# example.com
566
-xxx.xxx.xxx.xxx
567
-
568
-# example.net
569
-yyy.yyy.yyy.yyy
570
-```
571
-
572
-- /etc/httpd/modsecurity.d/whitelist_uri.txt<br />
573
-mod_security による制限を行わない URI を列挙する。
574
-```
575
-/cgi-bin/etc/PrintEnv.cgi
576
-/cgi-bin/etc/PrintEnv_txt.cgi
577
-/cgi-bin/etc/index.cgi
578
-/cgi-bin/etc/testCGI.cgi
579
-```
580
-
581
-- /etc/httpd/modsecurity.d/whitelist_subdomain.txt<br />
582
-mod_security による制限を行わないホスト名を列挙する。
583
-```
584
-# WebApp1
585
-vh1.takeash.net
586
-```
587
-
588
-- /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_20_protocol_violations.conf
589
- - id:958291 "Range: 0-", mp4 等のストリーミングや分割ダウンロードが行われるファイルのダウンロードで引っかかる。
590
-
591
-## リンク
592
-- http://modsecurity.org/
593
- - [Reference Manual](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual)
594
- - [The Open Web Application Security Project](https://www.owasp.org/)
595
-- [hashdos攻撃をmod_securityで防御する(CentOS+yum編) - 徳丸浩の日記](http://blog.tokumaru.org/2012/01/hashdosmodsecuritycentosyum.html)
596
-- [Attack by ZmEu - The Linux Page](http://linux.m2osw.com/zmeu-attack) phpMyAdmin 脆弱性スキャンスクリプト対策
597
-- [黒ぶちメガネのblog » mod_securityのホワイトリスト、ブラックリストの書き方メモ](http://www.kurobuti.com/blog/?p=3775)
598
-- [禁煙できないSEの独り言: ModSecurity 2.5.12の導入](http://hiro-system.blog.ocn.ne.jp/blog/2010/04/modsecurity_251.html)
599
-- [(続)spammer対策 - ねこ様にもてあそばれる日々(2006-05-03)](http://m9841.info/?date=20060503#p02)
600
-- [mod_securityでWebサーバを守る(第1回) - ソフテック](http://www.softek.co.jp/Sec/mod_security1.html)
601
-- Webアプリケーションに潜むセキュリティホール
602
- - [Webアプリケーションファイアウォールによる防御](http://www.atmarkit.co.jp/fsecurity/rensai/webhole11/webhole01.html)
603
- - [mod_securityのXSS対策ルールを作成する](http://www.atmarkit.co.jp/fsecurity/rensai/webhole12/webhole01.html)
604
-- [UNIX的なアレ:gihyo.jp出張所](http://gihyo.jp/admin/serial/01/unix)
605
- - [第19回 知っておきたいApacheの基礎知識 その15](http://gihyo.jp/admin/serial/01/unix/0019)
606
-
607
-# mod_geoip
608
-## インストール
609
-- EPELリポジトリ
610
-```
611
-yum install mod_geoip
612
-```
613
-
614
-## 設定
615
-- /etc/cron.monthly/updateGeoIP<br />
616
-データベースの自動更新スクリプト
617
-```bash
618
-wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
619
-gunzip GeoIP.dat.gz
620
-mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat
621
-/sbin/restorecon -v /usr/share/GeoIP/GeoIP.dat
622
-```
623
-- GeoIP が表示されない場合は、SELinux のラベルを確認。
624
-```
625
-# ls -Z /usr/share/GeoIP/
626
-Good) unconfined_u:object_r:usr_t:s0
627
-NG) unconfined_u:object_r:admin_home_t:s0
628
-```
629
-ラベルが正しくない場合は下記コマンドで修正する。
630
-```
631
-# sealert -a /var/log/audit/audit.log
632
-# /sbin/restorecon -v /usr/share/GeoIP/GeoIP.dat
633
-```
634
-ラベル修正後、httpd を再起動すること。
635
-```
636
-# service httpd restart
637
-```
638
-
639
-## リンク
640
-- [MaxMind](http://www.maxmind.com/)
641
- - [mod_geoip2 Apache module](http://dev.maxmind.com/geoip/mod_geoip2)
642
- - [GeoLite Free Downloadable Databases](http://dev.maxmind.com/geoip/geolite)
643
-- [Apache2 mod_geoip CentOS うざい国を弾くモジュール « ORBIT SPACE](http://www.orsx.net/blog/archives/2510)
644 83
645 84
# Apacheでhttp-equiv属性値を反映させる
646 85
- [META要素「http-equiv属性値とHTTPヘッダー」について考える](http://www.infoaxia.com/tools/blog/archives/cat3/)
Linux/Apache/mod_geoip.md
... ...
@@ -0,0 +1,38 @@
1
+[[_TOC_]]
2
+
3
+# インストール
4
+- EPELリポジトリ
5
+ ```
6
+ yum install mod_geoip
7
+ ```
8
+
9
+# 設定
10
+- /etc/cron.monthly/updateGeoIP<br />
11
+データベースの自動更新スクリプト
12
+ ```bash
13
+ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
14
+ gunzip GeoIP.dat.gz
15
+ mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat
16
+ /sbin/restorecon -v /usr/share/GeoIP/GeoIP.dat
17
+ ```
18
+- GeoIP が表示されない場合は、SELinux のラベルを確認。
19
+ ```
20
+ # ls -Z /usr/share/GeoIP/
21
+ Good) unconfined_u:object_r:usr_t:s0
22
+ NG) unconfined_u:object_r:admin_home_t:s0
23
+ ```
24
+ - ラベルが正しくない場合は下記コマンドで修正する。
25
+ ```
26
+ # sealert -a /var/log/audit/audit.log
27
+ # /sbin/restorecon -v /usr/share/GeoIP/GeoIP.dat
28
+ ```
29
+ - ラベル修正後、httpd を再起動すること。
30
+ ```
31
+ # service httpd restart
32
+ ```
33
+
34
+# リンク
35
+- [MaxMind](http://www.maxmind.com/)
36
+ - [mod_geoip2 Apache module](http://dev.maxmind.com/geoip/mod_geoip2)
37
+ - [GeoLite Free Downloadable Databases](http://dev.maxmind.com/geoip/geolite)
38
+- [Apache2 mod_geoip CentOS うざい国を弾くモジュール « ORBIT SPACE](http://www.orsx.net/blog/archives/2510)
Linux/Apache/mod_security.md
... ...
@@ -0,0 +1,95 @@
1
+[[_TOC_]]
2
+
3
+# インストール
4
+- EPELリポジトリ
5
+ ```
6
+ # yum install mod_security mod_security_crs
7
+ ```
8
+
9
+# 設定
10
+- /etc/httpd/conf.d/mod_security.conf (抜粋)
11
+ ```apache
12
+ # Maximum request body size we will
13
+ # accept for buffering
14
+ #SecRequestBodyLimit 131072
15
+ SecRequestBodyLimit 5242880
16
+ SecRequestBodyNoFilesLimit 51200
17
+ ```
18
+
19
+- /etc/httpd/modsecurity.d/modsecurity_localrules.conf
20
+ ```apache
21
+ # Drop your local rules in here.
22
+
23
+ # White List IP
24
+ SecRule REMOTE_ADDR "@pmFromFile /etc/httpd/modsecurity.d/whitelist_ip.txt" \
25
+ "phase:1,id:'1000001',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
26
+
27
+ # White List URI
28
+ SecRule REQUEST_URI "@pmFromFile /etc/httpd/modsecurity.d/whitelist_uri.txt" \
29
+ "phase:1,id:'1000002',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
30
+
31
+ # White List URI 2
32
+ SecRule REQUEST_URI "@rx ^\/Etc\/" \
33
+ "phase:1,id:'1000003',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
34
+
35
+ # White List Sub-Domain
36
+ SecRule REQUEST_HEADERS:Host "@pmFromFile /etc/httpd/modsecurity.d/whitelist_subdomain.txt" \
37
+ "phase:1,id:'1000004',nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
38
+
39
+ # ZmEu Attack / phpMyAdmin
40
+ SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager|myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/" \
41
+ "severity:alert,id:'0000013',deny,log,status:400,msg:'Unacceptable folder.',severity:'2'"
42
+ ```
43
+ - mod_security-2.7.1 でエラーが出るから適当にid追加したけど、idの振り方のルールってどこにあるのかな?
44
+ ```
45
+ ModSecurity: No action id present within the rule
46
+ ```
47
+
48
+- /etc/httpd/modsecurity.d/whitelist_ip.txt<br />
49
+mod_security による制限を行わない IP アドレスを列挙する。<br />
50
+コメントは行頭から「#」で始める。
51
+ ```
52
+ # localhost
53
+ 127.0.0.1
54
+
55
+ # example.com
56
+ xxx.xxx.xxx.xxx
57
+
58
+ # example.net
59
+ yyy.yyy.yyy.yyy
60
+ ```
61
+
62
+- /etc/httpd/modsecurity.d/whitelist_uri.txt<br />
63
+mod_security による制限を行わない URI を列挙する。
64
+ ```
65
+ /cgi-bin/etc/PrintEnv.cgi
66
+ /cgi-bin/etc/PrintEnv_txt.cgi
67
+ /cgi-bin/etc/index.cgi
68
+ /cgi-bin/etc/testCGI.cgi
69
+ ```
70
+
71
+- /etc/httpd/modsecurity.d/whitelist_subdomain.txt<br />
72
+mod_security による制限を行わないホスト名を列挙する。
73
+ ```
74
+ # WebApp1
75
+ vh1.takeash.net
76
+ ```
77
+
78
+- /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_20_protocol_violations.conf
79
+ - id:958291 "Range: 0-", mp4 等のストリーミングや分割ダウンロードが行われるファイルのダウンロードで引っかかる。
80
+
81
+# リンク
82
+- http://modsecurity.org/
83
+ - [Reference Manual](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual)
84
+ - [The Open Web Application Security Project](https://www.owasp.org/)
85
+- [hashdos攻撃をmod_securityで防御する(CentOS+yum編) - 徳丸浩の日記](http://blog.tokumaru.org/2012/01/hashdosmodsecuritycentosyum.html)
86
+- [Attack by ZmEu - The Linux Page](http://linux.m2osw.com/zmeu-attack) phpMyAdmin 脆弱性スキャンスクリプト対策
87
+- [黒ぶちメガネのblog » mod_securityのホワイトリスト、ブラックリストの書き方メモ](http://www.kurobuti.com/blog/?p=3775)
88
+- [禁煙できないSEの独り言: ModSecurity 2.5.12の導入](http://hiro-system.blog.ocn.ne.jp/blog/2010/04/modsecurity_251.html)
89
+- [(続)spammer対策 - ねこ様にもてあそばれる日々(2006-05-03)](http://m9841.info/?date=20060503#p02)
90
+- [mod_securityでWebサーバを守る(第1回) - ソフテック](http://www.softek.co.jp/Sec/mod_security1.html)
91
+- Webアプリケーションに潜むセキュリティホール
92
+ - [Webアプリケーションファイアウォールによる防御](http://www.atmarkit.co.jp/fsecurity/rensai/webhole11/webhole01.html)
93
+ - [mod_securityのXSS対策ルールを作成する](http://www.atmarkit.co.jp/fsecurity/rensai/webhole12/webhole01.html)
94
+- [UNIX的なアレ:gihyo.jp出張所](http://gihyo.jp/admin/serial/01/unix)
95
+ - [第19回 知っておきたいApacheの基礎知識 その15](http://gihyo.jp/admin/serial/01/unix/0019)
Linux/Apache/mod_ssl.md
... ...
@@ -0,0 +1,445 @@
1
+[[_TOC_]]
2
+
3
+# インストール
4
+```
5
+# yum install mod_ssl
6
+```
7
+
8
+# 自己署名証明書
9
+
10
+- SAN 項目を追加した設定ファイルを作成。
11
+ ```
12
+ # cd /etc/pki/tls/
13
+ # cp openssl.cnf openssl-san.cnf
14
+ ```
15
+
16
+- openssl.cnf と openssl-san.cnf の差分
17
+ ```
18
+ --- openssl.cnf
19
+ +++ openssl-san.cnf
20
+ @@ -104,7 +104,7 @@
21
+ ####################################################################
22
+ [ req ]
23
+ default_bits = 2048
24
+ -default_md = sha1
25
+ +default_md = sha256
26
+ default_keyfile = privkey.pem
27
+ distinguished_name = req_distinguished_name
28
+ attributes = req_attributes
29
+ @@ -222,6 +222,11 @@
30
+
31
+ basicConstraints = CA:FALSE
32
+ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
33
+ +subjectAltName=@alt_names
34
+ +
35
+ +[ alt_names ]
36
+ +DNS.1=takeash.net
37
+ +DNS.2=*.takeash.net
38
+
39
+ [ v3_ca ]
40
+
41
+ ```
42
+- 証明書フォルダへ移動
43
+ ```
44
+ # cd certs/
45
+ ```
46
+- サーバー用秘密鍵作成 (server.key)
47
+ ```
48
+ # openssl genrsa -aes128 2048 > server.key
49
+ ```
50
+- パスフレーズ削除<br />
51
+httpd 再起動時にパスフレーズが要求されないようにするため。
52
+ ```
53
+ # openssl rsa -in server.key -out server.key
54
+ ```
55
+- サーバー用自己署名証明書作成 (server.crt)
56
+ ```
57
+ # openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0 \
58
+ -subj '/C=JP/ST=Tokyo/L=Chuo-ku/O=TakeAsh.net/CN=takeash.net' -extensions v3_req -config ../openssl-san.cnf
59
+ ```
60
+ - サブジェクト例 (TakeAsh.net)
61
+
62
+ | 項目 | 用途 | サンプル |
63
+ | --- | --- | --- |
64
+ | C | 国名コード | JP |
65
+ | ST | 都道府県 | Tokyo |
66
+ | L | 区市町村 | Chuo-ku |
67
+ | O | 組織名 | TakeAsh.net |
68
+ | CN | コモンネーム(ドメイン名) | takeash.net |
69
+
70
+ - 証明書確認<br />
71
+「X509v3 extensions - X509v3 Subject Alternative Name」項目が存在すれば SAN が含まれている。
72
+ ```
73
+ # openssl x509 -in server.crt -text
74
+ ...
75
+ X509v3 Subject Alternative Name:
76
+ DNS:takeash.net, DNS:*.takeash.net
77
+ ...
78
+ ```
79
+
80
+- /etc/httpd/conf.d/ssl.conf (抜粋)
81
+ ```
82
+ SSLCertificateFile /etc/pki/tls/certs/server.crt
83
+ SSLCertificateKeyFile /etc/pki/tls/certs/server.key
84
+ DocumentRoot "/var/www/html"
85
+ SSLProtocol all -SSLv2 -SSLv3
86
+ ```
87
+
88
+- httpd 再起動
89
+ - CentOS 6
90
+ ```
91
+ # service httpd restart
92
+ ```
93
+ - CentOS 7
94
+ ```
95
+ # systemctl restart httpd
96
+ ```
97
+
98
+- 動作テスト
99
+ - https://takeash.net/cgi-bin/etc/PrintEnv.cgi
100
+ - https://www.takeash.net/cgi-bin/etc/PrintEnv.cgi
101
+
102
+# Certbot
103
+- Certbot 使用前準備
104
+ - ホスト名が正引きできること。(ワイルドカード不可)
105
+ - バーチャルホストのサーバ名と要求するドメイン名のどれかが一致すること。
106
+ - インターネットから https でアクセス可能になっていること。
107
+ - https ポート解放
108
+ ```
109
+ # firewall-cmd --permanent --add-service=https
110
+ ```
111
+ - CertBot は Apache が稼働しているサーバ上で実行する。
112
+
113
+- Certbot インストール (EPEL リポジトリ)
114
+ ```
115
+ # yum install python-certbot-apache
116
+ ```
117
+
118
+- 証明書取得<br />
119
+取得に成功すると「/etc/letsencrypt/live/<ドメイン1>/」に証明書が作成される。
120
+ ```
121
+ # certbot certonly --apache \
122
+ -m <メールアドレス> --agree-tos \
123
+ -d <ドメイン1> [-d <ドメイン2> ...]
124
+ ```
125
+
126
+- /etc/httpd/conf.d/ssl.conf (抜粋)
127
+ ```
128
+ Listen 443 https
129
+ SSLEngine on
130
+ SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
131
+ SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
132
+ SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
133
+ ```
134
+
135
+- /etc/httpd/conf.d/VirtualHosts.conf (抜粋)
136
+バーチャルホスト毎に SSL 設定が必要。
137
+ ```
138
+ <VirtualHost *:80 *:443>
139
+ ServerName vh1.<ドメイン1>
140
+ DocumentRoot /var/www/vh1-html/
141
+ SSLEngine on
142
+ SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
143
+ SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
144
+ SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
145
+ <Directory "/var/www/vh1-html">
146
+ AllowOverride All
147
+ </Directory>
148
+ </VirtualHost>
149
+ ```
150
+
151
+- 自動更新スクリプト /etc/cron.monthly/certbot.sh
152
+ ```bash
153
+ #!/bin/bash
154
+ /bin/certbot renew
155
+ ```
156
+
157
+# Certbot (ワイルドカード, 手動)
158
+- Certbot インストール (EPEL リポジトリ)
159
+ ```
160
+ # yum -y install yum-utils
161
+ # yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
162
+ # yum install certbot-apache
163
+ ```
164
+
165
+- 証明書取得(手動)<br />
166
+途中HTTPへのテキストファイルの配置とDNSへのTXTレコードの追加を指示されるので、追加してからEnterを押して先へ進む。<br />
167
+取得に成功すると「/etc/letsencrypt/live/<ドメイン>/」に証明書が作成される。
168
+ ```
169
+ # certbot certonly --manual \
170
+ --server https://acme-v02.api.letsencrypt.org/directory \
171
+ -d "*.example.com" -d example.com
172
+ ```
173
+
174
+- /etc/httpd/conf.d/ssl.conf (抜粋)
175
+ ```
176
+ Listen 443 https
177
+ SSLEngine on
178
+ SSLCertificateFile /etc/letsencrypt/live/<ドメイン>/cert.pem
179
+ SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン>/privkey.pem
180
+ SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン>/chain.pem
181
+ ```
182
+
183
+- /etc/httpd/conf.d/VirtualHosts.conf (抜粋)
184
+バーチャルホスト毎に SSL 設定が必要。
185
+ ```
186
+ <VirtualHost *:80 *:443>
187
+ ServerName vh1.<ドメイン1>
188
+ DocumentRoot /var/www/vh1-html/
189
+ SSLEngine on
190
+ SSLCertificateFile /etc/letsencrypt/live/<ドメイン1>/cert.pem
191
+ SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン1>/privkey.pem
192
+ SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン1>/chain.pem
193
+ <Directory "/var/www/vh1-html">
194
+ AllowOverride All
195
+ </Directory>
196
+ </VirtualHost>
197
+ ```
198
+
199
+- apache 再起動
200
+CentOS 7
201
+ ```
202
+ # systemctl restart httpd
203
+ ```
204
+
205
+- 証明書更新<br />
206
+「--manual」で取得した場合は「renew」による自動更新ができないので、既存の証明書を削除し同名で取得し直す。
207
+ ```
208
+ # certbot delete
209
+ ```
210
+
211
+# Certbot (ワイルドカード, 自動)
212
+- Certbot, DNS Plugin インストール (EPEL リポジトリ)
213
+ ```
214
+ # yum -y install yum-utils
215
+ # yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
216
+ # yum install certbot-apache python2-certbot-dns-rfc2136
217
+ ```
218
+
219
+- BIND 用認証キーの作成
220
+Kcertbot-key.+165+43987.key, Kcertbot-key.+165+43987.private の2つのファイルが作成される。
221
+ ```
222
+ # cd /etc/named/
223
+ # dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST certbot-key
224
+ ```
225
+
226
+- 認証ファイル /etc/named/certbot_rfc2136.ini , ファイルモード 600
227
+ ```
228
+ # Target DNS server
229
+ dns_rfc2136_server = 127.0.0.1
230
+ # Target DNS port
231
+ dns_rfc2136_port = 53
232
+ # TSIG key name
233
+ dns_rfc2136_name = certbot-key.
234
+ # TSIG key secret
235
+ dns_rfc2136_secret = <Kcertbot-key.+165+43987.key のハッシュ値>
236
+ # TSIG key algorithm
237
+ dns_rfc2136_algorithm = HMAC-SHA512
238
+ ```
239
+
240
+- /etc/named.conf に追加
241
+ ```
242
+ key "certbot-key." {
243
+ algorithm hmac-sha512;
244
+ secret "<Kcertbot-key.+165+43987.key のハッシュ値>";
245
+ };
246
+
247
+ view "internal" {
248
+ match-clients { localhost; localnets; };
249
+ match-destinations { localhost; localnets; };
250
+ recursion yes;
251
+
252
+ zone "." IN {
253
+ type hint;
254
+ file "named.ca";
255
+ };
256
+
257
+ include "/etc/named.rfc1912.zones";
258
+ include "/etc/named.root.key";
259
+ include "/etc/named/<ドメイン>.lan.zone";
260
+ };
261
+
262
+ view "external" {
263
+ match-clients { any; };
264
+ match-destinations { any; };
265
+ recursion no;
266
+ include "/etc/named/<ドメイン>.wan.zone";
267
+ include "/etc/named/_acme-challenge.<ドメイン>.wan.zone";
268
+ };
269
+ ```
270
+
271
+- /etc/named/<ドメイン>.lan.zone
272
+ ```
273
+ zone "<ドメイン>" {
274
+ type master;
275
+ file "<ドメイン>.lan.db";
276
+ update-policy {
277
+ grant certbot-key. name _acme-challenge.<ドメイン>. txt;
278
+ };
279
+ };
280
+ ```
281
+
282
+- /etc/named/<ドメイン>.wan.zone
283
+ ```
284
+ zone "<ドメイン>" {
285
+ type master;
286
+ file "<ドメイン>.wan.db";
287
+ allow-query { any; };
288
+ update-policy {
289
+ grant certbot-key. name _acme-challenge.<ドメイン>. txt;
290
+ };
291
+ };
292
+ ```
293
+
294
+- /etc/named/_acme-challenge.<ドメイン>.wan.zone
295
+ ```
296
+ zone "_acme-challenge.<ドメイン>" {
297
+ type master;
298
+ file "_acme-challenge.<ドメイン>.wan.db";
299
+ allow-query { any; };
300
+ update-policy {
301
+ grant certbot-key. name _acme-challenge.<ドメイン>. txt;
302
+ };
303
+ };
304
+ ```
305
+
306
+- /var/named/<ドメイン>.wan.db
307
+ ```
308
+ $TTL 86400
309
+ @ IN SOA ns1.<ドメイン>. root.<ドメイン>. (
310
+ 2018090500 ; Serial
311
+ 28800 ; Refresh
312
+ 14400 ; Retry
313
+ 2592000 ; Expire
314
+ 86400 ; Minimum
315
+ )
316
+ IN NS ns1.<ドメイン>.
317
+ IN MX 10 mail.<ドメイン>.
318
+ @ IN A <グローバル IP アドレス>
319
+ ns1 IN A <グローバル IP アドレス>
320
+ www IN A <グローバル IP アドレス>
321
+ mail IN A <グローバル IP アドレス>
322
+ _acme-challenge IN NS ns1.<ドメイン>.
323
+ * IN A <グローバル IP アドレス>
324
+ <ドメイン>. IN TXT "v=spf1 a mx ~all"
325
+ ```
326
+
327
+- /var/named/_acme-challenge.<ドメイン>.wan.db
328
+ ```
329
+ $TTL 86400
330
+ @ IN SOA ns1.<ドメイン>. root.<ドメイン>. (
331
+ 2018090500 ; Serial
332
+ 1h ; Refresh
333
+ 15m ; Retry
334
+ 30d ; Expire
335
+ 1h ; Minimum
336
+ )
337
+ IN NS ns1.<ドメイン>.
338
+ ```
339
+
340
+- `<ドメイン>.jnl: create: permission denied`(/var/named/data/named.run) 対策
341
+ ```
342
+ # chmod 770 /var/named/
343
+ # setsebool -P named_write_master_zones 1
344
+ ```
345
+
346
+- 証明書取得
347
+ ```
348
+ # certbot certonly \
349
+ --dns-rfc2136 \
350
+ --dns-rfc2136-credentials /etc/named/certbot_rfc2136.ini \
351
+ -d "*.<ドメイン>" -d <ドメイン>
352
+ ```
353
+
354
+# 動作確認
355
+
356
+## 証明書の内容をテキスト出力
357
+```
358
+# openssl x509 -text -in /etc/letsencrypt/live/<ドメイン>/cert.pem
359
+```
360
+
361
+## 証明書の有効期限を表示
362
+getExpireDate.sh
363
+```bash
364
+#!/bin/bash
365
+
366
+CommonName=example.net
367
+
368
+NotAfter=`openssl x509 -noout -dates -in /etc/letsencrypt/live/${CommonName}/fullchain.pem | \
369
+ grep notAfter | \
370
+ sed -e "s/notAfter=//" | \
371
+ date -f - --iso-8601`
372
+echo ${NotAfter}
373
+```
374
+
375
+## SSL 接続確認
376
+```
377
+$ openssl s_client -connect <ホスト>:443
378
+```
379
+### 設定失敗
380
+```
381
+CONNECTED(00000003)
382
+140139752064912:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
383
+---
384
+no peer certificate available
385
+---
386
+No client certificate CA names sent
387
+---
388
+SSL handshake has read 7 bytes and written 289 bytes
389
+---
390
+New, (NONE), Cipher is (NONE)
391
+Secure Renegotiation IS NOT supported
392
+Compression: NONE
393
+Expansion: NONE
394
+No ALPN negotiated
395
+SSL-Session:
396
+ Protocol : TLSv1.2
397
+ Cipher : 0000
398
+ Session-ID:
399
+ Session-ID-ctx:
400
+ Master-Key:
401
+ Key-Arg : None
402
+ Krb5 Principal: None
403
+ PSK identity: None
404
+ PSK identity hint: None
405
+ Start Time: 1535884386
406
+ Timeout : 300 (sec)
407
+ Verify return code: 0 (ok)
408
+---
409
+```
410
+### 設定成功
411
+```
412
+CONNECTED(00000003)
413
+depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
414
+verify return:1
415
+depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
416
+verify return:1
417
+depth=0 CN = *.<ドメイン1>
418
+verify return:1
419
+---
420
+Certificate chain
421
+ 0 s:/CN=*.<ドメイン1>
422
+ i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
423
+ 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
424
+ i:/O=Digital Signature Trust Co./CN=DST Root CA X3
425
+---
426
+Server certificate
427
+-----BEGIN CERTIFICATE-----
428
+MIIGETCCBPmgAwIBAgISA3VBvI0cSyzAQGtpIaQKQRZxMA0GCSqGSIb3DQEBCwUA
429
+...
430
+```
431
+
432
+# リンク
433
+- [Let's Encrypt](https://letsencrypt.org/) Free SSL/TLS Certificates
434
+ - [Certbot](https://certbot.eff.org/) / [DNS Plugins](https://certbot.eff.org/docs/using.html#dns-plugins) / [certbot-dns-rfc2136](https://certbot-dns-rfc2136.readthedocs.io/en/latest/)
435
+
436
+- [Webサーバー間通信内容暗号化(Apache+mod_SSL+Certbot) - CentOSで自宅サーバー構築](http://centossrv.com/apache-certbot.shtml)
437
+- [CertbotとBINDの組み合わせでLet's Encryptのワイルドカード証明書を取得・更新する](https://qiita.com/yasuhirokimura/items/3a95e169f806b3772e06)
438
+- [OpenSSL CSR with Alternative Names one-line - End Point Blog](http://blog.endpoint.com/2014/10/openssl-csr-with-alternative-names-one.html)
439
+- [SAN対応 x.509 証明書を取得するためのCSRを作成する - Qiita](http://qiita.com/saitara/items/eda74ac6a950122b5f31)
440
+- [subjectAltNameでバーチャルホスト - Kung Noi Blog](http://www.goodnai.com/blog/2010/05/07/subjectaltname%E3%81%A7%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88/)
441
+- [Webサーバー間通信内容暗号化(Apache+mod_SSL) - CentOSで自宅サーバー構築](http://centossrv.com/apache-ssl.shtml)
442
+- [SSL Server Test (Powered by Qualys SSL Labs)](https://www.ssllabs.com/ssltest/)
443
+- [ssl certificate - how to add subject alernative name to ssl certs? - Stack Overflow](https://stackoverflow.com/questions/%38%37%34%34%36%30%37)
444
+ - keytool -certreq -ext SAN=dns:example.com,ip:192.168.0.1
445
+ - [keytool(ja)](https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/keytool.html) / [keytool(en)](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html)
Linux/_Sidebar.md
... ...
@@ -1,6 +1,6 @@
1 1
# [[Linux|/Linux/Home]]
2
+- [[Apache|/Linux/Apache/Home]]
2 3
- [[Install|/Linux/Install/Home]]
3
-- [[Apache]]
4 4
- [[Customize]]
5 5
- [[Gollum]]
6 6
- [[HardwareInfo]]