0aff20dffe51aef0d4cc158ffe8df9b33998faa1
Linux/Apache/Apache.md
... | ... | @@ -1,696 +0,0 @@ |
1 | -[[_TOC_]] |
|
2 | -- [[Perl/ApacheErrorLogFormatter]] |
|
3 | - |
|
4 | -# ドキュメント |
|
5 | -- [Apache HTTP Server Documentation](http://httpd.apache.org/docs/) |
|
6 | - - [現行バージョン](http://httpd.apache.org/docs/current/) |
|
7 | - - [Version 2.4](http://httpd.apache.org/docs/2.4/) |
|
8 | - - [Version 2.2](http://httpd.apache.org/docs/2.2/) |
|
9 | - |
|
10 | - - [mod_authz_host](http://httpd.apache.org/docs/current/mod/mod_authz_host.html) ([mod_access](http://httpd.apache.org/docs/2.0/mod/mod_access.html)) |
|
11 | - - Allow, Deny, Order ディレクティブ |
|
12 | - |
|
13 | - - [mod_setenvif](http://httpd.apache.org/docs/current/mod/mod_setenvif.html) |
|
14 | - |
|
15 | - - [Apache の SSL/TLS 暗号化](http://httpd.apache.org/docs/current/ssl/) |
|
16 | - |
|
17 | -# Apache用モジュールをコンパイルできるようにする |
|
18 | -- httpd-devel (apxs) をインストールしておく。 |
|
19 | -``` |
|
20 | -# yum install httpd-devel |
|
21 | -``` |
|
22 | - |
|
23 | -# バーチャルホスト設定 |
|
24 | -- [バーチャルホスト説明書](http://httpd.apache.org/docs/current/vhosts/) |
|
25 | - |
|
26 | -## 設定 |
|
27 | -- /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 | -``` |
|
45 | - |
|
46 | -## エラー対策 |
|
47 | -- バーチャルホストが表示されない。 |
|
48 | - - エラーメッセージ |
|
49 | -``` |
|
50 | -[warn] _default_ VirtualHost overlap on port 80, the first has precedence |
|
51 | -``` |
|
52 | - - 原因<br /> |
|
53 | -NameVirtualHost ディレクティブが設定されていない。 |
|
54 | - - 対処<br /> |
|
55 | -NameVirtualHost ディレクティブを設定する。<br /> |
|
56 | -httpd.conf を修正するより conf.d に VirtualHosts.conf として専用のファイルを作成しておく方が忘れなくていいかも。 |
|
57 | - |
|
58 | -# Digest 認証 |
|
59 | -- [認証、承認、アクセス制御](http://httpd.apache.org/docs/current/howto/auth.html) |
|
60 | -- [mod_auth_digest](http://httpd.apache.org/docs/current/mod/mod_auth_digest.html) |
|
61 | - - レルム/ユーザ/パスワード追加 |
|
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 | - ``` |
|
294 | - $ openssl s_client -connect <ホスト>:443 |
|
295 | - ``` |
|
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 | - |
|
645 | -# Apacheでhttp-equiv属性値を反映させる |
|
646 | -- [META要素「http-equiv属性値とHTTPヘッダー」について考える](http://www.infoaxia.com/tools/blog/archives/cat3/) |
|
647 | -- [Apache mod_xml_charset](http://www.yoshidam.net/XML_ja.html) |
|
648 | - |
|
649 | -- デフォルトでは、LastModifiedしか反映されない。 |
|
650 | -- apxsはhttpd-devel-xxx.rpmをインストールすることで使用できるようになる。 |
|
651 | -- うちの Fedora Core 3 環境だとmod_html_metaのコンパイルでエラーが出るんでまだ使えていない。引き続き検討。 |
|
652 | - |
|
653 | -# Apache に DoS 攻撃対策 mod_evasive |
|
654 | -- [mod_evasive](http://www.zdziarski.com/blog/?page_id=442) @ [Jonathan Zdziarski's Domain](http://www.zdziarski.com/) |
|
655 | -- [Apache DoS攻撃対策 mod_evasiveインストール&設定 – Linux](http://www.makizou.com/archives/1341) @ [MAKIZOU.COM](http://www.makizou.com/) |
|
656 | - |
|
657 | -# cgi-bin ディレクトリでファイル名を省略したときに index.cgi を実行する設定 |
|
658 | -- httpd.conf に ScriptAliasMatch を追加する。 |
|
659 | - |
|
660 | -- 修正前 |
|
661 | -```apache |
|
662 | -ScriptAlias /cgi-bin/ /var/www/cgi-bin/ |
|
663 | -``` |
|
664 | - |
|
665 | -- 修正後 |
|
666 | -```apache |
|
667 | -ScriptAliasMatch ^/cgi-bin/(.*)\.cgi /var/www/cgi-bin/$1.cgi |
|
668 | -ScriptAliasMatch ^/cgi-bin/(.*)/? /var/www/cgi-bin/$1/index.cgi |
|
669 | -ScriptAliasMatch ^/cgi-bin$ /var/www/cgi-bin/index.cgi |
|
670 | -ScriptAlias /cgi-bin/ /var/www/cgi-bin/ |
|
671 | -``` |
|
672 | - |
|
673 | -- index.cgi の例 |
|
674 | -```perl |
|
675 | -#!/usr/local/bin/perl |
|
676 | - |
|
677 | -use strict; |
|
678 | -use warnings; |
|
679 | -use utf8; |
|
680 | -use CGI::Pretty; |
|
681 | - |
|
682 | -my $q = new CGI; |
|
683 | -my $host = $q->url(-base => 1); |
|
684 | -print $q->redirect( $host . '/' ); |
|
685 | - |
|
686 | -# EOF |
|
687 | -``` |
|
688 | - |
|
689 | -- [Apacheで、http://hoge.hoge/cgi-bin/foo/にアクセスできるようにする方法](http://blogs.dion.ne.jp/fit_si/archives/5941241.html) |
|
690 | - |
|
691 | -# Apache で外部からの直リンクを禁止する |
|
692 | -- [404 Blog Not Found:Apache - ホットリンクを禁止する](http://blog.livedoor.jp/dankogai/archives/50804992.html) |
|
693 | - |
|
694 | -# Basic認証にタイムアウトを設定する |
|
695 | -- [mod_auth_timeout](http://secure.linuxbox.com/tiki/tiki-index.php?page=mod_auth_timeout) |
|
696 | -- [サードパーティー製認証モジュール](http://www.thinkit.co.jp/article/120/3/2.html) |
Linux/Apache/Home.md
... | ... | @@ -0,0 +1,696 @@ |
1 | +[[_TOC_]] |
|
2 | +- [[Perl/ApacheErrorLogFormatter]] |
|
3 | + |
|
4 | +# ドキュメント |
|
5 | +- [Apache HTTP Server Documentation](http://httpd.apache.org/docs/) |
|
6 | + - [現行バージョン](http://httpd.apache.org/docs/current/) |
|
7 | + - [Version 2.4](http://httpd.apache.org/docs/2.4/) |
|
8 | + - [Version 2.2](http://httpd.apache.org/docs/2.2/) |
|
9 | + |
|
10 | + - [mod_authz_host](http://httpd.apache.org/docs/current/mod/mod_authz_host.html) ([mod_access](http://httpd.apache.org/docs/2.0/mod/mod_access.html)) |
|
11 | + - Allow, Deny, Order ディレクティブ |
|
12 | + |
|
13 | + - [mod_setenvif](http://httpd.apache.org/docs/current/mod/mod_setenvif.html) |
|
14 | + |
|
15 | + - [Apache の SSL/TLS 暗号化](http://httpd.apache.org/docs/current/ssl/) |
|
16 | + |
|
17 | +# Apache用モジュールをコンパイルできるようにする |
|
18 | +- httpd-devel (apxs) をインストールしておく。 |
|
19 | +``` |
|
20 | +# yum install httpd-devel |
|
21 | +``` |
|
22 | + |
|
23 | +# バーチャルホスト設定 |
|
24 | +- [バーチャルホスト説明書](http://httpd.apache.org/docs/current/vhosts/) |
|
25 | + |
|
26 | +## 設定 |
|
27 | +- /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 | +``` |
|
45 | + |
|
46 | +## エラー対策 |
|
47 | +- バーチャルホストが表示されない。 |
|
48 | + - エラーメッセージ |
|
49 | +``` |
|
50 | +[warn] _default_ VirtualHost overlap on port 80, the first has precedence |
|
51 | +``` |
|
52 | + - 原因<br /> |
|
53 | +NameVirtualHost ディレクティブが設定されていない。 |
|
54 | + - 対処<br /> |
|
55 | +NameVirtualHost ディレクティブを設定する。<br /> |
|
56 | +httpd.conf を修正するより conf.d に VirtualHosts.conf として専用のファイルを作成しておく方が忘れなくていいかも。 |
|
57 | + |
|
58 | +# Digest 認証 |
|
59 | +- [認証、承認、アクセス制御](http://httpd.apache.org/docs/current/howto/auth.html) |
|
60 | +- [mod_auth_digest](http://httpd.apache.org/docs/current/mod/mod_auth_digest.html) |
|
61 | + - レルム/ユーザ/パスワード追加 |
|
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 | + ``` |
|
294 | + $ openssl s_client -connect <ホスト>:443 |
|
295 | + ``` |
|
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 | + |
|
645 | +# Apacheでhttp-equiv属性値を反映させる |
|
646 | +- [META要素「http-equiv属性値とHTTPヘッダー」について考える](http://www.infoaxia.com/tools/blog/archives/cat3/) |
|
647 | +- [Apache mod_xml_charset](http://www.yoshidam.net/XML_ja.html) |
|
648 | + |
|
649 | +- デフォルトでは、LastModifiedしか反映されない。 |
|
650 | +- apxsはhttpd-devel-xxx.rpmをインストールすることで使用できるようになる。 |
|
651 | +- うちの Fedora Core 3 環境だとmod_html_metaのコンパイルでエラーが出るんでまだ使えていない。引き続き検討。 |
|
652 | + |
|
653 | +# Apache に DoS 攻撃対策 mod_evasive |
|
654 | +- [mod_evasive](http://www.zdziarski.com/blog/?page_id=442) @ [Jonathan Zdziarski's Domain](http://www.zdziarski.com/) |
|
655 | +- [Apache DoS攻撃対策 mod_evasiveインストール&設定 – Linux](http://www.makizou.com/archives/1341) @ [MAKIZOU.COM](http://www.makizou.com/) |
|
656 | + |
|
657 | +# cgi-bin ディレクトリでファイル名を省略したときに index.cgi を実行する設定 |
|
658 | +- httpd.conf に ScriptAliasMatch を追加する。 |
|
659 | + |
|
660 | +- 修正前 |
|
661 | +```apache |
|
662 | +ScriptAlias /cgi-bin/ /var/www/cgi-bin/ |
|
663 | +``` |
|
664 | + |
|
665 | +- 修正後 |
|
666 | +```apache |
|
667 | +ScriptAliasMatch ^/cgi-bin/(.*)\.cgi /var/www/cgi-bin/$1.cgi |
|
668 | +ScriptAliasMatch ^/cgi-bin/(.*)/? /var/www/cgi-bin/$1/index.cgi |
|
669 | +ScriptAliasMatch ^/cgi-bin$ /var/www/cgi-bin/index.cgi |
|
670 | +ScriptAlias /cgi-bin/ /var/www/cgi-bin/ |
|
671 | +``` |
|
672 | + |
|
673 | +- index.cgi の例 |
|
674 | +```perl |
|
675 | +#!/usr/local/bin/perl |
|
676 | + |
|
677 | +use strict; |
|
678 | +use warnings; |
|
679 | +use utf8; |
|
680 | +use CGI::Pretty; |
|
681 | + |
|
682 | +my $q = new CGI; |
|
683 | +my $host = $q->url(-base => 1); |
|
684 | +print $q->redirect( $host . '/' ); |
|
685 | + |
|
686 | +# EOF |
|
687 | +``` |
|
688 | + |
|
689 | +- [Apacheで、http://hoge.hoge/cgi-bin/foo/にアクセスできるようにする方法](http://blogs.dion.ne.jp/fit_si/archives/5941241.html) |
|
690 | + |
|
691 | +# Apache で外部からの直リンクを禁止する |
|
692 | +- [404 Blog Not Found:Apache - ホットリンクを禁止する](http://blog.livedoor.jp/dankogai/archives/50804992.html) |
|
693 | + |
|
694 | +# Basic認証にタイムアウトを設定する |
|
695 | +- [mod_auth_timeout](http://secure.linuxbox.com/tiki/tiki-index.php?page=mod_auth_timeout) |
|
696 | +- [サードパーティー製認証モジュール](http://www.thinkit.co.jp/article/120/3/2.html) |