rabbit-slide-znz-lilo-20170107 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ac27c25ddf566f959d5df70e000291c6794c0c7b
4
+ data.tar.gz: 3bdfb465bc18923f9813f0115ec7ef1a48e3d655
5
+ SHA512:
6
+ metadata.gz: 7b0e0f169e383446474f856b7525b3bb4aad1d3e82086358601a4a09d1715a40a9dee31ee6759f8a8bcfb52af7b096c97249ed416f10407868bb3aa19ef443ee
7
+ data.tar.gz: 5f2df233e41ca73d7e3ca60196f9bdfadb4680595418bac140f1746a316eb358d313b5b972663048f443ebb1fb0a98f31729c98ccd49ed9ab8695e1efe7d5193
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ lilo-20170107.md
@@ -0,0 +1,23 @@
1
+ # lilo.linux.or.jp の話 (2017年1月)
2
+
3
+ 前回の発表以降の lilo.linux.or.jp の管理の話をします。
4
+
5
+ ## 作者向け
6
+
7
+ ### 表示
8
+
9
+ rake
10
+
11
+ ### 公開
12
+
13
+ rake publish
14
+
15
+ ## 閲覧者向け
16
+
17
+ ### インストール
18
+
19
+ gem install rabbit-slide-znz-lilo-20170107
20
+
21
+ ### 表示
22
+
23
+ rabbit rabbit-slide-znz-lilo-20170107.gem
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: lilo-20170107
3
+ base_name: lilo-20170107
4
+ tags:
5
+ - debian
6
+ presentation_date: 2017.1.7
7
+ version: 1.0.0
8
+ licenses: []
9
+ slideshare_id: lilolinuxorjp-20171
10
+ speaker_deck_id: lilo-dot-linux-dot-or-dot-jp-falsehua-2017nian-1yue
11
+ ustream_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ author:
15
+ markup_language: :markdown
16
+ name: Kazuhiro NISHIYAMA
17
+ email: zn@mbf.nifty.com
18
+ rubygems_user: znz
19
+ slideshare_user: znzjp
20
+ speaker_deck_user: znz
@@ -0,0 +1,362 @@
1
+ # lilo.linux.or.jp の話 (2017年1月)
2
+
3
+ author
4
+ : Kazuhiro NISHIYAMA
5
+
6
+ content-source
7
+ : LILO&東海道らぐオフラインミーティング
8
+
9
+ date
10
+ : 2017-01-07
11
+
12
+ allotted-time
13
+ : 20m
14
+
15
+ # lilo.linux.or.jp とは?
16
+
17
+ 主な用途:
18
+
19
+ * LILO の Web サーバー (apache)
20
+ * ML サーバー (mailman)
21
+
22
+ # 環境
23
+
24
+ * さくらの VPS
25
+ * Debian GNU/Linux
26
+
27
+ # 今回の話
28
+
29
+ 前回以降の話
30
+
31
+ * unattended-upgrades
32
+ * HSTS
33
+ * mailman の fix_url
34
+ * certbot
35
+ * OCSP Stapling などの SSL/TLS 設定変更
36
+
37
+ # unattended-upgrades (1/5)
38
+
39
+ * セキュリティアップデートの自動化
40
+ * 似た機能の cron-apt はすでに入れていたが purge した
41
+ * sudo aptitude purge cron-apt
42
+
43
+ # unattended-upgrades (2/5)
44
+
45
+ * 設定ファイルは `/etc/apt/apt.conf.d/50unattended-upgrades`
46
+ * `/etc/cron.daily/apt` で自動更新
47
+ * apt 公式に近いように見えたので cron-apt から乗り換えた
48
+
49
+ # unattended-upgrades (3/5)
50
+
51
+ * メール送信設定
52
+ * `Unattended-Upgrade::Mail "root";`
53
+ * mailx が必要
54
+ * 自動再起動設定
55
+ * `Unattended-Upgrade::Automatic-Reboot "true";`
56
+ * sudo dpkg-reconfigure -plow unattended-upgrades で Yes
57
+
58
+ # unattended-upgrades (4/5)
59
+
60
+ * `/boot` が溢れないように autoremove 設定
61
+ * `Unattended-Upgrade::Remove-Unused-Dependencies "true";`
62
+
63
+ # unattended-upgrades (5/5)
64
+
65
+ * `Unattended-Upgrade::Origins-Pattern` で自動更新対象を制限
66
+ * デフォルトはセキュリティアップデートのみ自動更新
67
+ * ポイントリリースや backports (や milter-manager) は手動更新
68
+
69
+ # unattended-upgrades 例1
70
+
71
+ メールの例1 (単純な更新)
72
+
73
+ Subject: unattended-upgrades result for 'chiyoko': 'True'
74
+
75
+ 自動アップグレードは以下を返しました: True
76
+
77
+ Packages that were upgraded:
78
+ libidn11
79
+
80
+ Unattended-upgrades log:
81
+ 初期状態でブラックリストにあるパッケージ:
82
+ Initial whitelisted packages:
83
+ 自動アップグレードスクリプトを開始
84
+ 許可されているパッケージ導入元: ['origin=Debian,codename=jessie,label=Debian-Security']
85
+ Packages that will be upgraded: libidn11
86
+ dpkg のログを '/var/log/unattended-upgrades/unattended-upgrades-dpkg.log' に書き込み中
87
+ 全てのアップグレードがインストールされました
88
+
89
+ # unattended-upgrades 例2
90
+
91
+ メールの例2 (再起動が必要な時)
92
+
93
+ Subject: [reboot required] unattended-upgrades result for 'chiyoko': True
94
+
95
+ 自動アップグレードは以下を返しました: True
96
+
97
+ Warning: A reboot is required to complete this upgrade.
98
+
99
+ Packages that were upgraded:
100
+ linux-image-3.16.0-4-amd64 linux-libc-dev
101
+
102
+ Unattended-upgrades log:
103
+ 初期状態でブラックリストにあるパッケージ:
104
+ Initial whitelisted packages:
105
+ 自動アップグレードスクリプトを開始
106
+ 許可されているパッケージ導入元: ['origin=Debian,codename=jessie,label=Debian-Security']
107
+ Packages that will be upgraded: linux-image-3.16.0-4-amd64 linux-libc-dev
108
+ dpkg のログを '/var/log/unattended-upgrades/unattended-upgrades-dpkg.log' に書き込み中
109
+ 全てのアップグレードがインストールされました
110
+
111
+ # HSTS (1/5)
112
+
113
+ * HTTP Strict Transport Security
114
+ * 次回以降のアクセス時に http から https にブラウザー側で置き換える
115
+ * ブラウザーが HSTS preload list を持っていて、登録されているサイトは最初から https になる (mail.google.com など)
116
+
117
+ # HSTS (2/5)
118
+
119
+ * Strict-Transport-Security: max-age=31536000
120
+ * 365日 (31,536,000秒) に設定
121
+ * includeSubDomains はつけていない
122
+ * max-age の間、http に戻せないようなものなので慎重に
123
+ * DNS の TTL と同じようなもの
124
+
125
+ # HSTS (3/5)
126
+
127
+ apache2 での設定:
128
+
129
+ * sudo a2enmod headers
130
+ * VirtualHost の設定に追加
131
+
132
+ Header set Strict-Transport-Security "max-age=31536000"
133
+
134
+ * sudo service apache2 restart
135
+
136
+ # HSTS (4/5)
137
+
138
+ http から https へリダイレクト
139
+
140
+ * http の VirtualHost に RedirectPermanent を設定
141
+
142
+ ```
143
+ RedirectPermanent / https://lilo.linux.or.jp/
144
+ ```
145
+
146
+ # HSTS (5/5)
147
+
148
+ * Google Chrome だと HSTS のキャッシュは
149
+ `chrome://net-internals/#hsts`
150
+ で消せる
151
+
152
+ (動作確認に必要だった)
153
+
154
+ # mailman の fix_url (1/3)
155
+
156
+ * /etc/mailman/mm_cfg.py で設定
157
+ * `DEFAULT_URL_PATTERN = 'https://%s/cgi-bin/mailman/'`
158
+ * この設定をしても admindb の URL が http のままだった
159
+
160
+ # mailman の fix_url (2/3)
161
+
162
+ * Mailman admindb using http instead of https in formaction
163
+ * <https://mail.python.org/pipermail/mailman-users/2011-October/072312.html>
164
+ * <http://wiki.list.org/x/7oA9> and <http://wiki.list.org/x/mIA9>.
165
+ * 「`withlist -l -a -r fix_url`」で解決
166
+
167
+ # mailman の fix_url (3/3)
168
+
169
+ 実行結果 (一部の ML の出力を抜粋)
170
+
171
+ # # withlist -l -a -r fix_url
172
+ # fix_url を import 中...
173
+ # fix_url.fix_url() を実行中...
174
+ # lilo のリストを読み込中 (ロック完了)
175
+ # リストを保存中
176
+ # mailman のリストを読み込中 (ロック完了)
177
+ # リストを保存中
178
+ # 最終処理中
179
+
180
+ # certbot (1/10)
181
+
182
+ `/etc/letsencrypt/cli.ini` を設定
183
+
184
+ rsa-key-size = 4096
185
+ post-hook = /etc/letsencrypt/post-hook
186
+
187
+ # certbot (2/10)
188
+
189
+ * 公開鍵のビット数
190
+ * `rsa-key-size = 4096` に設定
191
+ * デフォルトは 2048
192
+
193
+ # certbot (3/10)
194
+
195
+ post-hook = apachectl graceful; service postfix reload >/dev/null
196
+
197
+ と書いたら
198
+
199
+ certbot: error: Unexpected line 1
200
+ in /etc/letsencrypt/cli.ini:
201
+ post-hook = apachectl graceful;
202
+ service postfix reload >/dev/null
203
+ (実際は1行)
204
+
205
+ というエラー
206
+
207
+ # certbot (4/10)
208
+
209
+ `post-hook` ファイルに分離して解決
210
+
211
+ % cat /etc/letsencrypt/post-hook
212
+ apachectl graceful
213
+ service postfix reload >/dev/null
214
+
215
+ (`post-hook` より `renew-hook` の方が望ましいがまだ変更していない)
216
+ (<http://blog.n-z.jp/blog/2017-01-03-certbot-renew-hook.html> 参照)
217
+
218
+ # certbot (5/10)
219
+
220
+ * 2016-11-08 に `/etc/cron.daily/local-letsencrypt` は消した
221
+ * `/etc/cron.d/certbot` より `/lib/systemd/system/certbot.timer` が優先されるようになったため
222
+ * ローカル時刻の 00:00:00 と 12:00:00 に自動実行
223
+
224
+ # certbot (6/10)
225
+
226
+ * `RandomizedDelaySec` がきいていないが lilo.linux.or.jp では対処せず
227
+ (<https://bugs.debian.org/843607> 参照)
228
+
229
+ # certbot (7/10)
230
+
231
+ % cat /etc/systemd/system/certbot.service.d/diffmail.conf
232
+ [Service]
233
+ ExecStopPost=/bin/bash -c "diff -u
234
+ <(cut -d: -f4- /var/log/letsencrypt/letsencrypt.log.1
235
+ | egrep -v '^DEBUG') <(cut -d: -f4-
236
+ /var/log/letsencrypt/letsencrypt.log | egrep -v
237
+ '^DEBUG') | ifne mail -s 'Change certbot log' root"
238
+
239
+ (`ExecStopPost` は実際は1行)
240
+
241
+ # certbot (8/10)
242
+
243
+ * service に直接 ExecStopPost を設定するのが良さそうにみえた
244
+ * 毎回変わる日時などが混ざる部分を除外して diff
245
+ * moreutils の ifne で diff があるときだけメール送信
246
+
247
+ # certbot (9/10)
248
+
249
+ * 詳細は「Mini Debian Conference Japan 2016」での発表資料の
250
+ 「Certbotで無料TLSサーバー」
251
+ <http://slide.rabbit-shocker.org/authors/znz/debian-certbot/>
252
+ を参照
253
+
254
+ # certbot (10/10)
255
+
256
+ * 前回の発表以降3回の更新あり
257
+ * 2016-08-26 06:33
258
+ * 2016-10-25 06:49
259
+ * 2016-12-24 12:00
260
+ * ここから rsa-key-size = 4096
261
+ * 有効期限が30日未満になったら自動更新で90日になるので約2ヶ月ごと
262
+
263
+ # OCSP Stapling (1/4)
264
+
265
+ * OCSP (Online Certificate Status Protocol)
266
+ * 証明書の失効を確認するプロトコル
267
+ * その結果をステープル (ホッチキス) で止めるようにくっつけて、サーバー証明書と一緒に返す
268
+
269
+ # OCSP Stapling (2/4)
270
+
271
+ apache 2.4 だと数行
272
+
273
+ SSLUseStapling on
274
+ SSLStaplingResponderTimeout 5
275
+ SSLStaplingReturnResponderErrors off
276
+ SSLStaplingCache shmcb:/var/run/ocsp(128000)
277
+
278
+ * それぞれ、有効にする、タイムアウト、成功の時だけ、キャッシュ設定
279
+
280
+ # OCSP Stapling (3/4)
281
+
282
+ * キャッシュ設定は VirtualHost の外にする必要あり
283
+ * 他は VirtualHost の中でも可能
284
+ * 後述のサイトに合わせて全部外にした
285
+
286
+ # OCSP Stapling (4/4)
287
+
288
+ * `openssl s_client -connect lilo.linux.or.jp:443 -status </dev/null` で確認可能
289
+ * `OCSP response: no response sent` なら未設定
290
+ * `OCSP Response Data:` が返ってきたら成功
291
+ * <https://www.cybertrust.ne.jp/sureserver/support/files/apache_ocsp.pdf> 参照
292
+
293
+ # SSL 設定全般 (1/5)
294
+
295
+ * <https://mozilla.github.io/server-side-tls/ssl-config-generator/>
296
+ * <https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=apache-2.4.10&openssl=1.0.1t&hsts=yes&profile=intermediate> の設定を採用
297
+
298
+ # SSL 設定全般 (2/5)
299
+
300
+ % cat /etc/apache2/conf-available/local-ssl.conf
301
+ # intermediate configuration, tweak to your needs
302
+ SSLProtocol all -SSLv3
303
+
304
+ SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:
305
+ ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:
306
+ ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:
307
+ ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:
308
+ DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:
309
+ ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:
310
+ ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:
311
+ ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:
312
+ DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:
313
+ ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:
314
+ AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:
315
+ DES-CBC3-SHA:!DSS
316
+ # (SSLCipherSuite は実際は1行)
317
+
318
+ SSLHonorCipherOrder on
319
+ SSLCompression off
320
+
321
+ # OCSP Stapling, only in httpd 2.3.3 and later
322
+ SSLUseStapling on
323
+ SSLStaplingResponderTimeout 5
324
+ SSLStaplingReturnResponderErrors off
325
+ SSLStaplingCache shmcb:/var/run/ocsp(128000)
326
+
327
+ # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
328
+
329
+ # SSL 設定全般 (3/5)
330
+
331
+ * `a2enconf local-ssl` で有効化
332
+ * `VirtualHost` の中
333
+
334
+ SSLEngine on
335
+ SSLCertificateFile /etc/letsencrypt/live/lilo.linux.or.jp/fullchain.pem
336
+ SSLCertificateKeyFile /etc/letsencrypt/live/lilo.linux.or.jp/privkey.pem
337
+ BrowserMatch "MSIE [2-6]" \
338
+ nokeepalive ssl-unclean-shutdown \
339
+ downgrade-1.0 force-response-1.0
340
+ # MSIE 7 and newer should be able to use keepalive
341
+ BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
342
+ Header always set Strict-Transport-Security "max-age=15768000"
343
+
344
+ * (HSTS は Configuration Generator に合わせて1年から半年に変更)
345
+
346
+ # SSL 設定全般 (4/5)
347
+
348
+ * <https://www.ssllabs.com/ssltest/> での評価が「A-」(The server does not support Forward Secrecy with the reference browsers. Grade reduced to A-.)から「A+」に
349
+ * HSTS なしだと「A」
350
+
351
+ # SSL 設定全般 (5/5)
352
+
353
+ * Mozilla SSL Configuration Generator で Modern にしても評価は変わらず、接続できるクライアントが大幅に減るので Intermediate にした
354
+ * 自分の持っている Android 端末 (4.2.2) も Modern の対象外だったのも理由のひとつ
355
+
356
+ # まとめ
357
+
358
+ * unattended-upgrades で自動更新
359
+ * HSTS で常時 https 化
360
+ * mailman の fix_url で http が残っていたのを修正
361
+ * certbot で自動更新の現状
362
+ * その他 SSL/TLS 設定見直し
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-znz-lilo-20170107
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kazuhiro NISHIYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: 前回の発表以降の lilo.linux.or.jp の管理の話をします。
28
+ email:
29
+ - zn@mbf.nifty.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - config.yaml
38
+ - lilo-20170107.md
39
+ - pdf/lilo-20170107-lilo-20170107.pdf
40
+ homepage: http://slide.rabbit-shocker.org/authors/znz/lilo-20170107/
41
+ licenses: []
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.5.2
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: lilo.linux.or.jp の話 (2017年1月)
63
+ test_files: []