DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

3Dプリンターの自作スプールホルダーまとめ

3Dプリンターを購入して最初に必ず作るものと言っても過言ではないほどの3Dプリンター関連グッズは「スプールホルダー」でしょう。

https://cdn.thingiverse.com/renders/34/ef/1c/8f/fd/6e5905e7ea0df7f8f3e328e1ad11c310_preview_featured.JPG

専用フィラメントには殆どそれに対応したホルダーが用意されているのだが、社外フィラメントを使うためにはそのスプールの大きさに対応したホルダーが必用になります。

 

スムーズにフィラメントが供給できる機構が無いと、造形物の出力が困難になります。

 

いろいろなタイプが考案されています。

最も単純なものは突起に引っ掛けるだけのものです。

www.thingiverse.com

ですが、引っ掛けるだけのものは引き出す抵抗が強いので皆さん様々な方法を試しておられます。

 

スプールの径に合わせた中心軸でスムーズに回るようにしたもの。

www.thingiverse.com

 

主軸を金属にしたもの。

www.thingiverse.com

 

ベアリングを駆使して中心軸を通さずに置くだけにしたもの。

www.thingiverse.com

上記のものの進化系。これならレールから外れません。

www.thingiverse.com

 

横回転式のもの。

www.thingiverse.com

横回転式にベアリングを+したもの。

www.thingiverse.com

 

機能だけじゃなく、遊び心のあるもの。

www.thingiverse.com

 

多種多様なフィラメントを容易に交換可能にしたシステム。

www.thingiverse.com

ハンガー形式で引っ掛けるスプールシステム。

www.thingiverse.com

 

リールの大きさは決まっていないので1つのパーツで合わせられるよう工夫している人もあります。

www.thingiverse.com

 

スプールは社外フィラメントの場合寸法にバラツキがあったりして一様にして使いにくいんですよね。しかも1kgって意外と重い。

けど3Dプリンターなんだから好きに自作したらいい!いや、すべきだ!ということでしょうか?

  • エクストルーダーの力で軽く排出できること
  • 但し、スプールが軽く回りすぎてフィラメントが脱線しないこと
  • 長時間安定して稼動できること
  • フィラメントが絡まったときに引っ張られて倒れたり壊れないこと

スプールホルダーの選定、設計にはこのあたりが重要になります。

SSH攻撃への対策

この前sshログイン失敗の履歴をふと見てみたら色々なIDで試行されていることが判明しました。

SSHのログイン履歴は

last

SSHのログイン失敗履歴

sudo lastb

結果

jenkins ssh:notty 81.139.61.222 Sat Nov 10 08:55 - 08:55 (00:00)
jenkins ssh:notty 81.139.61.222 Sat Nov 10 08:39 - 08:39 (00:00)
jenkins ssh:notty 81.139.61.222 Sat Nov 10 08:39 - 08:39 (00:00)
hadoop ssh:notty 81.139.61.222 Sat Nov 10 08:22 - 08:22 (00:00)
hadoop ssh:notty 81.139.61.222 Sat Nov 10 08:22 - 08:22 (00:00)
hadoop ssh:notty 81.139.61.222 Sat Nov 10 08:06 - 08:06 (00:00)
hadoop ssh:notty 81.139.61.222 Sat Nov 10 08:06 - 08:06 (00:00)
import ssh:notty 81.139.61.222 Sat Nov 10 07:49 - 07:49 (00:00)
import ssh:notty 81.139.61.222 Sat Nov 10 07:49 - 07:49 (00:00)
import ssh:notty 81.139.61.222 Sat Nov 10 07:33 - 07:33 (00:00)
import ssh:notty 81.139.61.222 Sat Nov 10 07:33 - 07:33 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 07:17 - 07:17 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 07:17 - 07:17 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 07:00 - 07:00 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 07:00 - 07:00 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 06:44 - 06:44 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 06:44 - 06:44 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 06:27 - 06:27 (00:00)
debian ssh:notty 81.139.61.222 Sat Nov 10 06:27 - 06:27 (00:00)
bitrix ssh:notty 81.139.61.222 Sat Nov 10 06:11 - 06:11 (00:00)
bitrix ssh:notty 81.139.61.222 Sat Nov 10 06:11 - 06:11 (00:00)
bitrix ssh:notty 81.139.61.222 Sat Nov 10 05:54 - 05:54 (00:00)
bitrix ssh:notty 81.139.61.222 Sat Nov 10 05:54 - 05:54 (00:00)
memcache ssh:notty 81.139.61.222 Sat Nov 10 05:38 - 05:38 (00:00)
memcache ssh:notty 81.139.61.222 Sat Nov 10 05:38 - 05:38 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 05:21 - 05:21 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 05:21 - 05:21 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 05:05 - 05:05 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 05:05 - 05:05 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:49 - 04:49 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:49 - 04:49 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:32 - 04:32 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:32 - 04:32 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:16 - 04:16 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 04:16 - 04:16 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:59 - 03:59 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:59 - 03:59 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:43 - 03:43 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:43 - 03:43 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:26 - 03:26 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:26 - 03:26 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:10 - 03:10 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 03:10 - 03:10 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 02:54 - 02:54 (00:00)
user ssh:notty 81.139.61.222 Sat Nov 10 02:54 - 02:54 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:37 - 02:37 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:37 - 02:37 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:20 - 02:20 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:20 - 02:20 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:04 - 02:04 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 02:04 - 02:04 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:47 - 01:47 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:47 - 01:47 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:30 - 01:30 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:30 - 01:30 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:13 - 01:13 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 01:13 - 01:13 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 00:57 - 00:57 (00:00)
mysql ssh:notty 81.139.61.222 Sat Nov 10 00:57 - 00:57 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:40 - 00:40 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:40 - 00:40 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:24 - 00:24 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:24 - 00:24 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:07 - 00:07 (00:00)
test ssh:notty 81.139.61.222 Sat Nov 10 00:07 - 00:07 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:51 - 23:51 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:51 - 23:51 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:34 - 23:34 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:34 - 23:34 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:18 - 23:18 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:18 - 23:18 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:01 - 23:01 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 23:01 - 23:01 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:45 - 22:45 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:45 - 22:45 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:28 - 22:28 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:28 - 22:28 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:12 - 22:12 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 22:12 - 22:12 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 21:55 - 21:55 (00:00)
test ssh:notty 81.139.61.222 Fri Nov 9 21:55 - 21:55 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:39 - 21:39 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:39 - 21:39 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:23 - 21:23 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:23 - 21:23 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:06 - 21:06 (00:00)
user ssh:notty 81.139.61.222 Fri Nov 9 21:06 - 21:06 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:50 - 20:50 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:50 - 20:50 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:33 - 20:33 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:33 - 20:33 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:17 - 20:17 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:17 - 20:17 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:01 - 20:01 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 20:01 - 20:01 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:44 - 19:44 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:44 - 19:44 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:28 - 19:28 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:28 - 19:28 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:13 - 19:13 (00:00)
postgres ssh:notty 81.139.61.222 Fri Nov 9 19:13 - 19:13 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 19:00 - 19:00 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 18:46 - 18:46 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 18:33 - 18:33 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 18:18 - 18:18 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 18:01 - 18:01 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 17:45 - 17:45 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 17:28 - 17:28 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 17:11 - 17:11 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 16:55 - 16:55 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 16:38 - 16:38 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 16:21 - 16:21 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 16:05 - 16:05 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 15:48 - 15:48 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 15:31 - 15:31 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 15:14 - 15:14 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 14:58 - 14:58 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 14:41 - 14:41 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 14:24 - 14:24 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 14:07 - 14:07 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 13:51 - 13:51 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 13:34 - 13:34 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 13:17 - 13:17 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 13:00 - 13:00 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 12:44 - 12:44 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 12:27 - 12:27 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 12:11 - 12:11 (00:00)
root ssh:notty 81.139.61.222 Fri Nov 9 11:54 - 11:54 (00:00)
git3 ssh:notty 81.139.61.222 Fri Nov 9 11:37 - 11:37 (00:00)
git3 ssh:notty 81.139.61.222 Fri Nov 9 11:37 - 11:37 (00:00)
git2 ssh:notty 81.139.61.222 Fri Nov 9 11:21 - 11:21 (00:00)
git2 ssh:notty 81.139.61.222 Fri Nov 9 11:21 - 11:21 (00:00)
git1 ssh:notty 81.139.61.222 Fri Nov 9 11:04 - 11:04 (00:00)
git1 ssh:notty 81.139.61.222 Fri Nov 9 11:04 - 11:04 (00:00)
jay ssh:notty 81.139.61.222 Fri Nov 9 10:48 - 10:48 (00:00)
jay ssh:notty 81.139.61.222 Fri Nov 9 10:48 - 10:48 (00:00)
ghost ssh:notty 81.139.61.222 Fri Nov 9 10:31 - 10:31 (00:00)
ghost ssh:notty 81.139.61.222 Fri Nov 9 10:31 - 10:31 (00:00)
manager ssh:notty 81.139.61.222 Fri Nov 9 10:15 - 10:15 (00:00)
manager ssh:notty 81.139.61.222 Fri Nov 9 10:15 - 10:15 (00:00)
jerry ssh:notty 81.139.61.222 Fri Nov 9 09:58 - 09:58 (00:00)
jerry ssh:notty 81.139.61.222 Fri Nov 9 09:58 - 09:58 (00:00)
test1 ssh:notty 81.139.61.222 Fri Nov 9 09:42 - 09:42 (00:00)
test1 ssh:notty 81.139.61.222 Fri Nov 9 09:42 - 09:42 (00:00)
github ssh:notty 81.139.61.222 Fri Nov 9 09:25 - 09:25 (00:00)
github ssh:notty 81.139.61.222 Fri Nov 9 09:25 - 09:25 (00:00)
wemaster ssh:notty 81.139.61.222 Fri Nov 9 09:09 - 09:09 (00:00)
wemaster ssh:notty 81.139.61.222 Fri Nov 9 09:09 - 09:09 (00:00)
a ssh:notty 81.139.61.222 Fri Nov 9 08:52 - 08:52 (00:00)
a ssh:notty 81.139.61.222 Fri Nov 9 08:52 - 08:52 (00:00)
www ssh:notty 81.139.61.222 Fri Nov 9 08:36 - 08:36 (00:00)
www ssh:notty 81.139.61.222 Fri Nov 9 08:36 - 08:36 (00:00)
neil ssh:notty 81.139.61.222 Fri Nov 9 08:19 - 08:19 (00:00)
neil ssh:notty 81.139.61.222 Fri Nov 9 08:19 - 08:19 (00:00)
odoo ssh:notty 81.139.61.222 Fri Nov 9 08:03 - 08:03 (00:00)
odoo ssh:notty 81.139.61.222 Fri Nov 9 08:03 - 08:03 (00:00)
pussy ssh:notty 81.139.61.222 Fri Nov 9 07:47 - 07:47 (00:00)
pussy ssh:notty 81.139.61.222 Fri Nov 9 07:47 - 07:47 (00:00)
hama ssh:notty 81.139.61.222 Fri Nov 9 07:30 - 07:30 (00:00)
hama ssh:notty 81.139.61.222 Fri Nov 9 07:30 - 07:30 (00:00)
poney ssh:notty 81.139.61.222 Fri Nov 9 07:14 - 07:14 (00:00)
poney ssh:notty 81.139.61.222 Fri Nov 9 07:14 - 07:14 (00:00)
postpone ssh:notty 81.139.61.222 Fri Nov 9 06:57 - 06:57 (00:00)
postpone ssh:notty 81.139.61.222 Fri Nov 9 06:57 - 06:57 (00:00)
sandbox ssh:notty 81.139.61.222 Fri Nov 9 06:41 - 06:41 (00:00)
sandbox ssh:notty 81.139.61.222 Fri Nov 9 06:41 - 06:41 (00:00)
nodeclie ssh:notty 81.139.61.222 Fri Nov 9 06:24 - 06:24 (00:00)
nodeclie ssh:notty 81.139.61.222 Fri Nov 9 06:24 - 06:24 (00:00)
us ssh:notty 81.139.61.222 Fri Nov 9 06:08 - 06:08 (00:00)
us ssh:notty 81.139.61.222 Fri Nov 9 06:08 - 06:08 (00:00)
nodeserv ssh:notty 81.139.61.222 Fri Nov 9 05:51 - 05:51 (00:00)
nodeserv ssh:notty 81.139.61.222 Fri Nov 9 05:51 - 05:51 (00:00)
jsserver ssh:notty 81.139.61.222 Fri Nov 9 05:35 - 05:35 (00:00)
jsserver ssh:notty 81.139.61.222 Fri Nov 9 05:35 - 05:35 (00:00)
jsclient ssh:notty 81.139.61.222 Fri Nov 9 05:19 - 05:19 (00:00)
jsclient ssh:notty 81.139.61.222 Fri Nov 9 05:19 - 05:19 (00:00)
js ssh:notty 81.139.61.222 Fri Nov 9 05:02 - 05:02 (00:00)
js ssh:notty 81.139.61.222 Fri Nov 9 05:02 - 05:02 (00:00)
nodejs ssh:notty 81.139.61.222 Fri Nov 9 04:46 - 04:46 (00:00)
nodejs ssh:notty 81.139.61.222 Fri Nov 9 04:46 - 04:46 (00:00)
node ssh:notty 81.139.61.222 Fri Nov 9 04:29 - 04:29 (00:00)
node ssh:notty 81.139.61.222 Fri Nov 9 04:29 - 04:29 (00:00)
terminfo ssh:notty 81.139.61.222 Fri Nov 9 04:13 - 04:13 (00:00)
terminfo ssh:notty 81.139.61.222 Fri Nov 9 04:13 - 04:13 (00:00)
ovhuser ssh:notty 81.139.61.222 Fri Nov 9 03:57 - 03:57 (00:00)
ovhuser ssh:notty 81.139.61.222 Fri Nov 9 03:57 - 03:57 (00:00)
yan ssh:notty 81.139.61.222 Fri Nov 9 03:40 - 03:40 (00:00)
yan ssh:notty 81.139.61.222 Fri Nov 9 03:40 - 03:40 (00:00)
yan ssh:notty 81.139.61.222 Fri Nov 9 03:24 - 03:24 (00:00)
yan ssh:notty 81.139.61.222 Fri Nov 9 03:24 - 03:24 (00:00)
frank ssh:notty 81.139.61.222 Fri Nov 9 03:07 - 03:07 (00:00)
frank ssh:notty 81.139.61.222 Fri Nov 9 03:07 - 03:07 (00:00)
frank ssh:notty 81.139.61.222 Fri Nov 9 02:51 - 02:51 (00:00)
frank ssh:notty 81.139.61.222 Fri Nov 9 02:51 - 02:51 (00:00)
impala ssh:notty 81.139.61.222 Fri Nov 9 02:35 - 02:35 (00:00)
impala ssh:notty 81.139.61.222 Fri Nov 9 02:35 - 02:35 (00:00)
kms ssh:notty 81.139.61.222 Fri Nov 9 02:18 - 02:18 (00:00)
kms ssh:notty 81.139.61.222 Fri Nov 9 02:18 - 02:18 (00:00)
kms ssh:notty 81.139.61.222 Fri Nov 9 02:02 - 02:02 (00:00)
kms ssh:notty 81.139.61.222 Fri Nov 9 02:02 - 02:02 (00:00)
yarn ssh:notty 81.139.61.222 Fri Nov 9 01:46 - 01:46 (00:00)
yarn ssh:notty 81.139.61.222 Fri Nov 9 01:46 - 01:46 (00:00)
yarn ssh:notty 81.139.61.222 Fri Nov 9 01:29 - 01:29 (00:00)
yarn ssh:notty 81.139.61.222 Fri Nov 9 01:29 - 01:29 (00:00)
mapred ssh:notty 81.139.61.222 Fri Nov 9 01:13 - 01:13 (00:00)
mapred ssh:notty 81.139.61.222 Fri Nov 9 01:13 - 01:13 (00:00)
mapred ssh:notty 81.139.61.222 Fri Nov 9 00:57 - 00:57 (00:00)
mapred ssh:notty 81.139.61.222 Fri Nov 9 00:57 - 00:57 (00:00)
httpfs ssh:notty 81.139.61.222 Fri Nov 9 00:40 - 00:40 (00:00)
httpfs ssh:notty 81.139.61.222 Fri Nov 9 00:40 - 00:40 (00:00)
httpfs ssh:notty 81.139.61.222 Fri Nov 9 00:24 - 00:24 (00:00)
httpfs ssh:notty 81.139.61.222 Fri Nov 9 00:24 - 00:24 (00:00)
llama ssh:notty 81.139.61.222 Fri Nov 9 00:07 - 00:07 (00:00)
llama ssh:notty 81.139.61.222 Fri Nov 9 00:07 - 00:07 (00:00)
llama ssh:notty 81.139.61.222 Thu Nov 8 23:51 - 23:51 (00:00)
llama ssh:notty 81.139.61.222 Thu Nov 8 23:51 - 23:51 (00:00)
hdfs ssh:notty 81.139.61.222 Thu Nov 8 23:35 - 23:35 (00:00)
hdfs ssh:notty 81.139.61.222 Thu Nov 8 23:35 - 23:35 (00:00)
hdfs ssh:notty 81.139.61.222 Thu Nov 8 23:18 - 23:18 (00:00)
hdfs ssh:notty 81.139.61.222 Thu Nov 8 23:18 - 23:18 (00:00)
root ssh:notty 81.139.61.222 Thu Nov 8 23:02 - 23:02 (00:00)
root ssh:notty 81.139.61.222 Thu Nov 8 22:45 - 22:45 (00:00)
root ssh:notty 81.139.61.222 Thu Nov 8 22:29 - 22:29 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 22:12 - 22:12 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 22:12 - 22:12 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:56 - 21:56 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:56 - 21:56 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:39 - 21:39 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:39 - 21:39 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:23 - 21:23 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:23 - 21:23 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:07 - 21:07 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 21:07 - 21:07 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:50 - 20:50 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:50 - 20:50 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:34 - 20:34 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:34 - 20:34 (00:00)  

oracle ssh:notty 81.139.61.222 Thu Nov 8 20:18 - 20:18 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:18 - 20:18 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:01 - 20:01 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 20:01 - 20:01 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:45 - 19:45 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:45 - 19:45 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:29 - 19:29 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:29 - 19:29 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:12 - 19:12 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 19:12 - 19:12 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:56 - 18:56 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:56 - 18:56 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:39 - 18:39 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:39 - 18:39 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:25 - 18:25 (00:00)
oracle ssh:notty 81.139.61.222 Thu Nov 8 18:25 - 18:25 (00:00)

わわわわ、、同じIPアドレスで10分置きぐらいで何度も試行されています。

これはbotによるブルートフォース(総当たり)攻撃と思われます。

 

 

調べてみましたら、イギリスからのアクセスで同時期に報告が多数挙っていました。

AbuseIPDB - IP address abuse reports - Making the Internet safer, one IP at a time

 

f:id:DreamerDream:20181112085031p:plain

 

通常は22番ポートに対して行なわれる攻撃なので、ポート番号を変更しておくのが得策です。僕ももちろん変更していました。

しかしこのようにワザワザポートスキャンして総当たりを試みる輩も存在するのです。

dreamerdream.hateblo.jp

まあ通常はrootログインを禁止にしてIDやパスワードの桁数も多ければ滅多なことでは破られないのですが(IDにadminやtestを使うのは危険)気持ち悪いので何かしら対策をしましょう。(しかしIDにpussyとか普通は使わんやろ?って思うんだけど)

これくらいの頻度であればかなりの長時間放置していても問題なさそうですが、ログが肥大化すると見辛くなるのと「放置されているシステム」というレッテルを貼られて更なる攻撃が行なわれる可能性も示唆されます。 

とりあえず今来ているのはずーっと同じIPアドレスで頻度も多く無いのでIP指定で接続拒否することで回避出来ます。

sudo nano /etc/hosts.deny

sshd : 81.139.61.222

とすればこのIPのSSH通信は拒否されます。

ssh以外の通信も拒否するには

ALL : 81.139.61.222

とします。

 

このように決まったIPアドレスに対してのみの対策であれば個別に設定するだけでOKなのですが、IPアドレスは簡単に変えられます。

新たなIPで試行されない(試行されてもブロックする)ためにツールがあります。

 

今回導入しようと思うのはdenyhostsというツールです。

www.server-memo.net

導入前にはとりあえずアップデート

sudo yum update

epelをインストール

sudo yum -y install epel-release

設定のバックアプをとって

cp -p /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo_backup201811

編集

sudo nano /etc/yum.repos.d/epel.repo

中身を

enabled=0

に変えてdenyhostsをインストール

sudo yum --enablerepo=epel install denyhosts

としたけど、あれえれ?エラー

No package denyhosts available.
Error: Nothing to do

 

ここの情報によりますと

Can't find denyhosts in epel 5,6,7 on CentOS 7 x64 - Super User

CentOS 7では、デフォルトのファイアウォールiptablesではなくfirewalldです。denyhostsツールは現在、iptablesで動作します

 

とのこと、なるほど!バージョン的に使えないんだぁ

どうしても使いたい場合はfirewallを停止させないと!?それは嫌だなぁ、、

 

てことで別のfirewallと共に使えるという「fail2ban」を導入します。

qiita.com

sudo yum install fail2ban

今回は無事インストール完了!

Complete!

ログの設定など本体の設定ファイルは

/etc/fail2ban/fail2ban.conf

だけど

/etc/fail2ban/fail2ban.local

と新規ファイルを作って設定をオーバーライドするそうな。

sshの設定とかはこちら

/etc/fail2ban/jail.conf

 これも.localファイルを作ってオーバーライドするそうな。

 

不正監視でメールとか送れるそうだけど、とりあえずデフォルトの設定のまま起動させる。

sudo systemctl start fail2ban

ステータスでちゃんと動いてるか確認

sudo systemctl status fail2ban

常駐させる。

sudo systemctl enable fail2ban.service

完了。 

ssh22番ポートじゃないし頻繁にはアクセスされないだろうけど今後の一応の対策ということで備忘録としておきます。

 

<追記>インストールしただけじゃデフォルトのままじゃ守ってくれません。設定編↓

dreamerdream.hateblo.jp

 

 

ApacheのDDOS対策はこちら↓(fail2banでも対策できるらしいけど、こちらの方が導入が簡単だったので)

dreamerdream.hateblo.jp

 

Apacheで簡単なDDOS対策「mod_evasive」

Apacheではサーバーへの大量パケットが投げられるというDDOS攻撃の対策として

mod_evasive

というモジュールを利用することが出来ます。

 

これは大量アクセスへ対策するもので、デフォルトのままで

 

  • 同一ページへ1秒間に2回以上のアクセスでブロックリスト追加
  • 同一サイトへ1秒間に50回以上のアクセスでブロックリスト追加
  • 最後のアクセスから10秒後にブロックリスト解除

 

という挙動をしてくれるものです。

 

手順として

httpd -l

を実行。出て来る一覧に

mod_so.c

が存在することを確認します。

無ければhttpd24u-develというものをインストールする必用があるようです。

 

httpd -M | grep evasive

コマンドで

evasive~~

が存在しないことを確認します。存在していれば既に導入済みです。

 

インストールします

sudo yum install epel-release

sudo yum install --enablerepo=epel mod_evasive

 

 

設定します。

sudo nano /etc/httpd/conf.d/mod_evasive.conf

デフォルトではこのようになっていました。

DOSHashTableSize 3097 プロセスのハッシュテーブルサイズ

DOSPageCount 2  同一ページへのアクセス数

DOSSiteCount 50 同一サイトへのアクセス数

DOSPageInterval 1 何秒間に上記アクセス数をカウントするか

DOSBlockingPeriod 10 何秒後に解除するか

 

 

Apacheの再起動

sudo systemctl restart httpd.service

 

インストールの確認

httpd -M | grep evasive
evasive20_module (shared)

 

ひとまずこれでOKです。

f:id:DreamerDream:20181102091314p:plain

 

【手順】DOS対策(mod_evasive) - Qiita

Djangoの使い方⑨Apacheで複数のDjangoプロジェクトを綺麗に振り分ける方法

前回記事 

dreamerdream.hateblo.jp

 

 

Apacheで静的なページを振り分ける方法はコチラ↓今回はこの応用です。

dreamerdream.hateblo.jp

 

Apacheは2.4です)

静的ページと同じようにDjangoで作ったページも振り分けることが出来ますが、WSGIモジュールを挟むので少しだけ面倒です。

まずはDjangoで作ったページをApacheで表示できるようにしましょう。

※注意

以前に「Djangoの使い方④」の方法とほぼ同じですが、今回はVSPを契約したのでRaspbianではなくCentOS向けの記事になります。Raspbianの場合も同じように出来ると思いますが未確認です。

wsgiモジュールをインストールしていれば

/etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

という.confファイルが出来ていると思います(バージョンによって違うかもですがwsgiとあればおそらくそれでしょう)

中身は

<IfModule !wsgi_module>
  LoadModule wsgi_module modules/mod_wsgi_python3.6.so

</IfModule>

とだけなので.soファイル(モジュール)を読んでいるだけです。

 

ここに、

<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi_python3.6.so

  WSGIScriptAlias / /home/django/draemon/draemon/wsgi.py
  WSGIPythonPath /home/django/draemon/

  <VirtualHost *:80>
    ServerName draemon.domain.com

    <Directory /home/django/draemon/draemon>
      <Files wsgi.py>
        Require all granted
      </Files>
    </Directory>
  </VirtualHost>

</IfModule>

このように記述することでDjangoページを表示できます。

 

 

2つのページを振り分けるにはまず2つのDjangoプロジェクトを作り、それぞれ単体で表示できるようにしておきましょう。

例としてdraemonnobitaの2つのプロジェクトを取り扱います。

 

できたらそれぞれのプロジェクトのディレクトリを

WSGIPythonPath /home/django/draemon:/home/django/nobita

という風にWSGIPythonPathに2つのページを:を付けて(Windowsの場合は;だそうです)記述し、その後<VirtualHost>の設定をすることで複数のページが表示出来ます。

 」

 

という情報をWebページで見てそのように設定したのですが、この情報で設定した場合pythonのパスがダブってしまってうまくいきませんでした。

どううまくいかなかったかといいますと、draemonとnobitaに含まれる両方のwsgiファイルが読まれ、両プロジェクトのsettingファイルが読まれたことで

  • debug=Trueにしているはずのプロジェクトエラー内容が表示されない、またその逆が起こる。
  • プロジェクトに存在しているはずのページが開けない。
  • プロジェクト内に存在していないはずのアプリのURLで別のプロジェクトアプリが動く

という事象が起こり、最初どういうことだか理解が出来なかったのですが、

プロジェクトのデバッグエラー内容が表示された際に

PythonPath=[

/home/django/draemon

/home/django/nobita

/usr////////

 (内容はこんな感じだっと思う)

という風に2つのプロジェクトファイル名が出て来て、1つのブロジェクトのはずなのに複数のプロジェクトパスが読まれているという事に気が付きました。

 

こうなると、場合によってはdraemonのページが表示され、場合によってはnobitaのページが表示されるという何ともトンチンカンなページになってしまいます。

 

で、結論ですがDjangoの「デーモンモード」を使う事で解決します。

Djangoでは(に限らず?)WSGIを動かす時に「組み込みモード」と「デーモンモード」という2つのモードがあり、WSGIPythonPathを設定する上記の方法は組み込みモードという設定だそうです。

 

デーモンモードで動かすには<VirtualHost>内に

WSGIDaemonProcessとWSGIScriptAliasに適切なパスとプロセス名を記述する必用があるようです。

 

僕もあれこれ試した結果なのでうまく説明できませんが、結果的に下のように設定することでうまくプロセスを分担して動かす事ができました。

<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi_python3.6.so

 

  <VirtualHost *:80>

    ServerName draemon.domain.com
    WSGIDaemonProcess draemon user=apache group=apache maximum-requests=10000 python-path=/home/django/draemon

    WSGIScriptAlias / /home/django/draemon/draemon/wsgi.py process-group=draemon
    CustomLog   logs/draemon.access.log combined    ErrorLog   logs/draemon.error.log
    <Directory /home/django/draemon/draemon> 

       <Files wsgi.py>

         Require all granted

       </Files>
  </VirtualHost>

  <VirtualHost *:80>

    ServerName nobita.domain.com
    WSGIDaemonProcess nobita user=apache group=apache maximum-requests=10000 python-path=/home/django/nobita

    WSGIScriptAlias / /home/django/nobita/nobita/wsgi.py process-group=nobita
    CustomLog   logs/nobita.access.log combined    ErrorLog   logs/nobita.error.log
    <Directory /home/django/nobita/nobita> 

       <Files wsgi.py>

         Require all granted

       </Files>

    </Directory>

 

 

</IfModule>

 

しかし、この方法ではコードが非常に見辛くなり、このままではメンテナンスもし辛いですね。 

 

そこで、上リンク先「静的ページの振り分け」と同様にInclude文を使って見やすくしましょう。

/etc/httpd/conf.modules.d/extra

ディレクトリを作り

/etc/httpd/conf.modules.d/10-wsgi-python3.6.conf

の内容を下記のようにします。

<IfModule !wsgi_module>
  LoadModule wsgi_module modules/mod_wsgi_python3.6.so
  Include conf.modules.d/extra/main.conf

</IfModule>

 

こうすると/etc/httpd/conf.modules.d/extra/main.confファイルがインポートされます。

そして、

/etc/httpd/conf.modules.d/extra/main.conf

を作ります。

main.confでさらにImport文を使って振り分けることでページの管理をします。


Include conf.modules.d/extra/vhost-draemon.conf
Include conf.modules.d/extra/vhost-nobita.conf

と、いう風にIncludeで別々の設定ファイルを読ませます。

/etc/httpd/conf.modules.d/extra/vhost-draemon.conf

 に

  <VirtualHost *:80>

    ServerName draemon.domain.com
    WSGIDaemonProcess draemon user=apache group=apache maximum-requests=10000 python-path=/home/django/draemon

    WSGIScriptAlias / /home/django/draemon/draemon/wsgi.py process-group=draemon
    CustomLog   logs/draemon.access.log combined    ErrorLog   logs/draemon.error.log
    <Directory /home/django/draemon/draemon> 

       <Files wsgi.py>

         Require all granted

       </Files>
  </VirtualHost>

 

 

/etc/httpd/conf.modules.d/extra/vhost-nobita.conf

 に

<VirtualHost *:80>

    ServerName nobita.domain.com
    WSGIDaemonProcess nobita user=apache group=apache maximum-requests=10000 python-path=/home/django/nobita

    WSGIScriptAlias / /home/django/nobita/nobita/wsgi.py process-group=nobita
    CustomLog   logs/nobita.access.log combined    ErrorLog   logs/nobita.error.log
    <Directory /home/django/nobita/nobita> 

       <Files wsgi.py>

         Require all granted

       </Files>

    </Directory>

とを記述します。

 

結果的に.confの内容自体は一番上と全く同じですが、設定ファイルを分けることでページ追加や除外等の管理操作が簡単になり、イージーミスで他のページの設定を弄ってしまうなんてことも防げます。

はい。これで複数のDjangoページが好きなだけ作れますね。

f:id:DreamerDream:20181015110858p:plain

 

 

 <参考ページ>

複数のDjangoのアプリケーションをApacheに連携させたい。 - Tihiroの頭を休めるIT教室

Como usar Django con Apache y mod_wsgi | Django documentation | Django

 

 

 次回、サイトのhttps化です。

dreamerdream.hateblo.jp

 

Apacheで同じIPアドレスでドメインごとにWebページを綺麗に振り分ける方法

Webサーバーの作り方を知ってホームページを自作するとき、「複数のページをドメインごとに振り分けたい」と思うことがあるでしょう。 

 

ドメインIPアドレスと接続ポートの関係性を知った段階の人なら

「複数のドメインで複数のホームページを開くにはポートを複数増やさないといけないんじゃないのか?」

という疑問を持つと思います。持ちませんか?僕はすこし前まではそう思ってました。

 

つまり、

hello.com

world.com

という2つのドメインを取得してホームページを運用する場合、

hello.comはそのままアクセス出来るけど

world.comに繋ぐとwwwアクセスでは同じ80番ポートなので同じページが表示されてしまう!

だからworld.com:81という風に接続ポートを分ける必用があるんじゃないの?

f:id:DreamerDream:20181013093903p:plain

という疑問です。

 

答えは、違います!同じIPアドレス、同じ80番ポートでもアクセスしてきたアドレスによってApache等のサーバーソフトでドメインごとにページをいくつでも振り分けることが出来るのです!

f:id:DreamerDream:20181013094032p:plain

Apacheの場合VirtualHostという機能を利用します。

 

例えば、静的なページで設定する場合

CentOS、Apache2.4使用の場合)

-- /etc/httpd/conf/httpd.conf --

Listen 80

<VirtualHost *:80>

    Alias / /var/www/hello/
    ServerName hello.domain.jp

    CustomLog   logs/hello.access.log combined

    ErrorLog   logs/hello.error.log

    <Directory /var/www/hello>

        Require all granted

    </Directory>

</VirtualHost>

<VirtualHost *:80>

    Alias / /var/www/world/
    ServerName world.domain.jp

    CustomLog   logs/world.access.log combined

    ErrorLog   logs/world.error.log

    <Directory /var/www/world>

        Require all granted

    </Directory>

</VirtualHost>

 

こう記述することで

hello.domain.jpにアクセスされたページは/var/www/helloディレクトリへ、

world.domain.jpにアクセスされたページは/var/www/worldディレクトリへ

と振り分けることができます。

CustomLog   logs/hello.access.log combined

ErrorLog   logs/hello.error.log

この記述は、アクセスログとエラーログを見やすく振り分けています。

こすると/var/log/httpd/内にhello.access.logworld.access.logといったログがページによって振り分けられるので便利です。

 

また、デフォルトでモジュールをインポートしている項目に

Include conf.modules.d/*.conf

という記述が見られると思いますが、同じように.confファイルとすることで設定ファイルをファイルとして振り分けることも出来ます。

例えば、

/etc/httpd/conf/extra/hello.conf

 

<VirtualHost *:80>

    Alias / /var/www/hello/
    ServerName hello.domain.jp

    CustomLog   logs/hello.access.log combined

    ErrorLog   logs/hello.error.log

    <Directory /var/www/hello>

        Require all granted

    </Directory>

</VirtualHost>

 

 

/etc/httpd/conf/extra/world.conf

 

<VirtualHost *:80>

    Alias / /var/www/world/
    ServerName world.domain.jp

    CustomLog   logs/world.access.log combined

    ErrorLog   logs/world.error.log

    <Directory /var/www/world>

        Require all granted

    </Directory>

</VirtualHost>

 

と記述したページを別々に作った場合、

/etc/httpd/conf/httpd.conf

Listen 80

Include conf/extra/hello.conf 

Include conf/extra/world.conf

 

と記述することで上と同じように連続した設定として読み込むことが出来ます。

またワイルドカード

Include conf/extra/*.conf

とすることでextraディレクトリ内の設定を全部読むということも出来ます。 

ムームードメインで取得したドメインをConohaに設定!ドメインって盗まれないの?

今回はDNSの設定ですが、疑問点が出て来ましたのでもし誰か解る方あったら教えていただきたいです。

 

まずはムームードメインドメインを取得します。

これは簡単!

好きなドメイン名で検索して、空きがあればそのまま取得できます。

f:id:DreamerDream:20181012130535p:plain

僕はテスト用アドレスが欲しかっただけなので、とりあえず1年だけの契約で99円で.tokyoドメインを取得しました!気に入ったら自動更新にします。

 

Conohaのネームサーバーで設定する

この方法は「Conoha ムームドメイン」で調べるとすぐ出て来ます。 

取得したら、Conohaの管理画面のネットワーク情報にある「IPアドレス」をコピーしておきましょう。

f:id:DreamerDream:20181012122005p:plain

 

次に「DNS」を選択して、「+ドメイン」ボタンで取得したドメインを登録します。

f:id:DreamerDream:20181012121910p:plain

 

ドメイン名にドメインを登録したら「保存」しましょう。

GeoDNSは有料サービスなので無効にしておきます。

f:id:DreamerDream:20181012121922p:plain

 

保存しましたら、一覧から先ほど登録したドメインを選択します。

f:id:DreamerDream:20181012121934p:plain

 

鉛筆マークを押して編集モードに入り、「+」ボタンでドメイン情報を追記します。

タイプはA(通常) 名称はwww 値の所に先ほどこぴーしたIPアドレスを入力します。TTLは空欄でOK

 

f:id:DreamerDream:20181012122013p:plain

保存してConoha側の設定は完了です。

上の「値」にある「ns-a1.conoha.io」「ns-a2.conoha.io」「ns-a3.conoha.io」をコピーしておきます。

 

/////////////// 

次にムームドメインの管理サイトを開きます。 

ネームサーバー設定変更を選択します。

f:id:DreamerDream:20181012121947p:plain

GMOパパボ以外のネームサーバーにチェックを入れます。

f:id:DreamerDream:20181012122020p:plain

ネームサーバー1〜3まで、先ほどの値の項目を入力します。

f:id:DreamerDream:20181012122028p:plain

これで完了です。

f:id:DreamerDream:20181012122037p:plain

直後にアクセスしようとしても反映されていません。

反映まで数日待ちましょう。

 

 

 

ん?ここでふとおかしなことに気が付きました。

ドメイン名って「挙手性」なの??

 

 

疑問点

 

つまりこういうことです。

今しがた設定したのはConohaの方でIPアドレスドメインを関連付けて広めるよう設定しました。

ドメインを管理しているムームーにはConohaが設定しているネームサーバーなら許可するよう設定しました。 

f:id:DreamerDream:20181013082743p:plain

そしたら、こういう動きになるんですよね?

これなら正常動作!!

f:id:DreamerDream:20181013083017p:plain

 

しかし、ですよ?

仮にConohaのネームサーバーを使っている人が設定ミスや故意に自分のネームサーバーで他人の取得したドメインネームを名乗らせたらどうなるのという疑問が生まれます。

特にパスワードやPINコードといった設定項目はありませんでした。

確認しているのはネームサーバー名だけです。

f:id:DreamerDream:20181013083642p:plain

このようにダブってネームサーバーは伝えるのでしょうか?

f:id:DreamerDream:20181013083805p:plain

どうなるのでしょうか?

先に名乗った方が勝ち?だったらサーバー移動とかの場合はどうなるの?

メンテナンス中に乗っ取られたりしないの??

僕の認識が間違っているのでしょうか?

サッパリわからないので、エライ人!誰か教えてください!!

 

 

ムームードメインからのIP設定方法

 

ということで、よく解らないシステムを使う事は避けて、ムームードメインのネームサーバーでIPアドレス指定する方法がありましたので、そちらで設定することにします。(固定IPでないと設定は無理です。)

ネームサーバー設定変更の項目でムームDNSのネームサーバーを使用するようチェックを入れます。

f:id:DreamerDream:20181012164458p:plain

そして、ムームDNSの項目から

ムームDNSのセットアップ情報変更から該当するドメインの「変更」ボタンを押します

f:id:DreamerDream:20181012164508p:plain

そうすると「設定2」でサブドメイン、種別、内容、優先度が問われます。

サブドメインはsample.comであれば[hello]と設定するとhello.sample.comというふうにサブドメインが設定できます。使わないのであれば空欄でOK!

種別は通常「A」だそうです(その辺は解っていません)

内容はサーバーのIPアドレスを入れます「123.45.67.89」のように

優先度はデフォルト50で数値が低くなるほど優先度が高くなるそうです。空欄でOKです。

f:id:DreamerDream:20181013090355p:plain

 

 以上が、ムームーでのIPアドレスを指定した設定方法です。

Djangoの使い方⑧テキストファイルの改行\r\nコードをHTMLの<br>に変換する

前回記事

dreamerdream.hateblo.jp

 

 

Djangoでテンプレートにテキストを表示する場合、通常の方法でテキストを貼付けるとソースコードでは改行されているけどHTMLの<br>タグが無いので改行ができていない文がずらーっと表示されます。

f:id:DreamerDream:20181004102234p:plain

例えば、文字列

'abcdefg.......xys\r\nTEST!'

という改行コードが含まれた文字をそのままテンプレートの

{{ set_text  }}

に貼付け、ブラウザで見ると

f:id:DreamerDream:20181004095659p:plain

 

こうなります。

こうしない為には'\r\n'コードをpythonで置き換えてやれば良いや!と単純に考え

texts = 'abcdefg.......xys\r\nTEST!'
texts = texts.replace('\n','<br />')

と単純に置き換え、ブラウザで見ると

f:id:DreamerDream:20181004095958p:plain

 

はい、こうなります。

どうなってんの?とソースを見ると、ご丁寧にエスケープ処理されてしまいます。

f:id:DreamerDream:20181004100031p:plain

困った!

 

 

じゃあどうすんの?って話ですけど、PythonでどうにかしようとせずDjangoの機能を使えばめちゃくちゃ簡単に解決します!

なんと、テンプレートの項目に”| linebreaksbr”と書いてあげるだけ!

{{ set_text | linebreaksbr }}

これで勝手に改行コードが置き換えられます。ブラウザで見ると

f:id:DreamerDream:20181004100503p:plain

ソースを見ると、今度はソースでは改行されていませんが代わりに<br>タグが含まれています。

f:id:DreamerDream:20181004100540p:plain

 

 

<p>タグで囲いたい場合は

{{ set_text | linebreaksbr | linebreaks }}

とすると、ブラウザのソースを見るとちゃんと<p>タグが入っています。

f:id:DreamerDream:20181004101050p:plain

 

メチャメチャ簡単やんっ!という機能ですがなかなか調べるのに難儀しました。

こういう機能は「フィルタ」と呼ばれるそうで、こちら↓のブログが非常に詳しいです。

Django、よく使うフィルタ - naritoブログ

フィルタは自作も出来るそうですし、逆にHTMLを直接書きたいという場合にはOFFに出来るそうです。

Djangoの便利機能、使いこなせたら本当に自由自在んだろうな。と感じました。

 

 

dreamerdream.hateblo.jp

 

 

kampa.me