SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
少しでもセキュリティを向上させたい!
Mauticの運用方法
2016.07.22
株式会社イー・エージェンシー
コーポレートデザイン部 片山 淳
Mautic Meetup Tokyo #4
自己紹介
氏名:片山 淳
勤務先:株式会社イー・エージェンシー
趣味:4ソケットサーバの蒐集
注意事項
・個人研究です!
・より安全な方法を教えてください!
アジェンダ
・はじめに
・望ましいネットワーク構成
・管理に使うsshポートの変更
・ドキュメントルートの変更
・Mauticを使っていることがバレないように
・管理画面へのアクセス制限
・おわりに
はじめに
マーケティングオートメーションツールでは、
個人情報がどんどん蓄積されていく一方です。
Mauticも例外ではありません!
ですから・・・
はじめに
セキュリティを少しでも
向上させて運用しましょう!
※今回の想定環境:
オンプレ・CentOS7+PHP5.6/7.0+MySQL5.6+Apache 2.4・仮想化なし
※時間の関係もあるので『何をするか』をポイントとして手順の説明は軽め
ネットワーク構成(オンプレミス)
DMZを構築できる機器を使った方が安全
インターネット
社内ネットワーク
Mautic
ネットワーク
DMZ
LAN
WAN
× ×
トラッキングデータ
※必要なポートのみ開ける
※機器例は
Fortinet Forigate 60D
ネットワーク構成(クラウド)
AWSやベアメタルがこれに該当
Mautic
ネットワーク
WAN
インターネット
LAN
ファイア
ウォール
ファイア
ウォール
LAN
トラッキングデータ
※必要なポートのみ開ける
sshや
コントロールパネルで
制御
社内
ネットワーク
DMZポートがある機器の例
かなり古いですが・・・
※筆者の自宅の機器です。PPPoE が使えて DMZ ポートもあります。
Fortinet Forigate 200 INTERNAL(LAN)・EXTERNAL(WAN)・
DMZの3ポート構成
前準備
• /etc/hosts.denyで・・・
→全てのIPとサービスを拒否
• /etc/hosts.allowで・・・
→sshd を特定のIP(=メンテ用IP)のみ許可
→httpd は全てのIPを許可(=gifトラッキング用)
ALL: ALL
hosts.deny
sshd: aaa.bbb.ccc.ddd
httpd : ALL
hosts.allow
管理用sshポートの変更
• root で ssh できないようにする
• デフォルトの22番ポートは使わない方向で
• ポート変更とファイアウォールの設定
→SELinux の設定(ポート)
→firewalld の設定(サービスとポート)
管理用sshポートの変更
rootでsshにログインできないように設定を変更
← /etc/ssh/sshd_config 内に
PermitRootLogin no
を記入
管理用sshポートの変更
← /etc/ssh/sshd_config 内に
port 任意のポート番号
を記入
sshdの設定ファイルに新しい任意のポート番号を追加(※ここでは2244番を追加)
管理用sshポートの変更
# yum install –y policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 変更したポート番号
変更したssh用ポートを使えるように semanage のインストールと SELinux の設定変更
/usr/lib/firewalld/sevices/ssh.xml を同じディレクトリに ssh-x.xml などの別の名称でコ
ピーし、変更したポート番号に書き換える
管理用sshポートの変更
# systemctl enable firewalld
# systemctl start firewalld
# firewall-cmd --permanent --add-service=ssh
# firewall-cmd --permanent --add-service=ssh-x
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
※安全性向上のため「データベース分離」を行うなら以下を追加
# firewall-cmd --permanent --add-service=mysql
変更したsshポートおよびその他のサービスをfirewalldに登録
# ss -t -l -n
# semanage port -l|grep ssh
必要なポート(22/80/443/任意のssh用ポート)が開いているかと待ち受け状態を確認
# firewall-cmd --reload
# systemctl restart sshd
この状態でfirewalldとsshdを再起動し、変更したポートを経由してsshできるかを確認する
管理用sshポートの変更
# semanage port -d -t ssh_port_t -p tcp 22
# firewall-cmd --remove-service=ssh
新しいポートで問題なく接続できることを確認したら、デフォルトの22番ポートを閉める&
サービスを削除する
# firewall-cmd --reload
改めてfirewalldを再起動する
これ以降は変更したポートのみでsshが可能になるので、新しいポートで接続で
きることを確認するまでは、デフォルトの22番ポートの設定を削除するのは危険
ドキュメントルートの変更
• 専用ユーザを作ってそのディレクトリの下に
Mauticをインストールする
• ドキュメントルート階層のさらに1つ下のディレ
クトリを作って入れる
• httpd.conf をインストール階層の変更に合わ
せて書き換える
• SELinuxとセキュリティコンテキストの設定
ドキュメントルートの変更
→
変更前 変更後
ドキュメントルートの変更
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory "/home/eamautic/public_html">
AllowOverride All
Require all denied
</Directory>
<Directory "/home/eamautic/public_html/easfma">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
/etc/httpd/conf/httpd.confの設定を行う
※CentOS 7なので本来は上記の設定だが、なぜかドキュメントルートが見えてしまった
のでファイルサイズがゼロのindex.htmlを入れておく
ドキュメントルートの変更
<Directory />
AllowOverride none
Deny from all
</Directory>
<Directory "/home/eamautic/public_html">
order deny,allow
Deny from all
AllowOverride None
</Directory>
<Directory "/home/eamautic/public_html/easfma">
order allow,deny
allow from all
Options FollowSymLinks
AllowOverride All
</Directory>
/etc/httpd/conf/httpd.confの設定を行う(mod_access_compat が使える場合)
ドキュメントルートの変更
# chown apache:apache /home/eamautic/public_html -R
変更したドキュメントルートの所有権変更
# semanage fcontext -a -t httpd_sys_rw_content_t
"/home/eamautic/public_html(/.*)? "
#restorecon -R /home/eamautic/public_html
# chcon -R -t httpd_sys_rw_content_t /home/eamautic/public_html/
ドキュメントルートのセキュリティコンテキスト設定を行って、Mautic側からログファイルなど
を書き込めるように設定する
※semanageとrestoreconでコンテキストの再定義を行っているが、ls –lZa で確認する
と、属性がhttpd_user_content_t で変わっていなかったのでchconを実行している
Mauticを使っていることを隠匿
• エラーメッセージの書き換え
→ 403/404/500用のファイルを書き換え
※ .htaccess と同様に、VerUP時には上書きされていないかを念のため
チェックした方がよい
• Apache 2.2系の場合はサーバ情報も隠す
→ httpd.conf に ServerTokens Prod を設定する
通常のMauticのエラー表示画面の例
Mauticを使っていることを隠匿
Mauticを使っていることを隠匿
エラーメッセージ用ファイルの場所
Mauticを使っていることを隠匿
403.html.php
<?php
/**
* @copyright 2014 Mautic Contributors.
All rights reserved.
*/
$view['slots']->set('message',
'mautic.core.error.403');
$view-
>extend('MauticCoreBundle:Error:base.
html.php');
?>
変更前
<?php
/**
* @copyright 2014 Mautic Contributors.
All rights reserved.
*/
$redirectUrl = "http://192.168.1.222/";
header("HTTP/1.1 403 Forbidden");
print(file_get_contents($redirectUrl));
exit;
?>
変更後
Mauticを使っていることを隠匿
404.html.php
<?php
/**
* @copyright 2014 Mautic Contributors.
All rights reserved.
*/
$view['slots']->set('mautibot',
'openMouth');
$view['slots']->set('message',
'mautic.core.error.404');
$view-
>extend('MauticCoreBundle:Error:base.
html.php');
?>
変更前
<?php
/**
* @copyright 2014 Mautic Contributors.
All rights reserved.
*/
header('HTTP/1.1 404 Not Found');
?>
<!DOCTYPE HTML PUBLIC "-
//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found
on this server.</p>
</body></html>
変更後
Mauticを使っていることを隠匿
<?php
/**
* @copyright 2014 Mautic Contributors. All rights reserved.
*/
$view['slots']->set('mautibot', 'openMouth');
$view['slots']->set('message', 'mautic.core.error.500');
$view->extend('MauticCoreBundle:Error:base.html.php');
?>
変更前
500.html.php
Mauticを使っていることを隠匿
500.html.php
<?php
/**
* @copyright 2014 Mautic Contributors. All rights reserved.
*/
header('HTTP/1.1 500 Internal Server Error');
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or misconfiguration and was unable
to complete your request. Please contact the server administrator, and inform
them of the time the error occurred, and anything you might have done that may
have caused the error. More information about this error may be available in the
server error log.<br>
<br>
Additionally, a 500 Internal Server Error error was encountered while trying to use
an ErrorDocument to handle the request.</p></body></html>
変更後
書き換え後のエラー表示画面の例(存在しないディレクトリを指定した場合)
Mauticを使っていることを隠匿
管理画面へのアクセス制限
• 特定のIPのみ管理画面にアクセス可能に
→ドキュメントルートの .htaccess を書き換える
• .htaccess を書き換えた後の注意
→ VerUP時に上書きされてしまうので、控えを用意
しておく
• 上書きされた状態から、控えを使って復旧し
たらパーミッション設定を忘れずに
管理画面へのアクセス制限
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192¥.168¥.1¥.100$
RewriteCond %{REQUEST_URI} /easfma/s/login
RewriteRule (.*) - [F,L]
RewriteCond %{REMOTE_ADDR} !^192¥.168¥.1¥.100$
RewriteCond %{REQUEST_URI} /easfma/s/dashboard
RewriteRule (.*) - [F,L]
RewriteCond %{REMOTE_ADDR} !^192¥.168¥.1¥.100$
RewriteRule (index.htm|index.html) - [F,L]
ドキュメントルートの.htaccessに以下の囲み内の記述を追加し、不特定多数のIPから管理
画面へのアクセスを制限する(※下線部はアクセスを許可するIPを指定する)
※.htaccessのパーミッションは600に設定する
※バージョンアップ時に上書きされるので、控えを用意しておいた方がよい
書き換え後のエラー表示画面の例(許可されていないIPから管理画面にアクセス)
管理画面へのアクセス制限
おわりに
• これで多少はセキュリティ面が向上する…はず
• よりセキュリティを強化するならMautic本体と
データベースは別の機械にした方がよい
(+データベース機をグローバルに公開しないように)
• さらに安定した運用を実現するためにデータ
ベースのレプリケーションをした方がよい
• それでもまだ飽き足らない場合には、
keepalivedなどを使った冗長化の検討を
今回はセキュリティ部分のみでしたが・・・
CentOS 7をインストールした直後からの
Mauticの詳細なインストール手順は、
どこかで公開できるように努力いたします!
御清聴ありがとうございました
CentOS 7をインストールした直後からの
Mauticの詳細なインストール手順は、
以下のURLにて公開しております
http://www.fides.dti.ne.jp/~kataama/svs/
mautic210/mautic210_install.htm
2016.08.24
追記

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

CircleCI vs. CodePipeline
CircleCI vs. CodePipelineCircleCI vs. CodePipeline
CircleCI vs. CodePipeline
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料) ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
機械学習の定番プラットフォームSparkの紹介
機械学習の定番プラットフォームSparkの紹介機械学習の定番プラットフォームSparkの紹介
機械学習の定番プラットフォームSparkの紹介
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep Dive20190731 Black Belt Online Seminar Amazon ECS Deep Dive
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
 
Apache Spark 2.4 and 3.0 What's Next?
Apache Spark 2.4 and 3.0  What's Next? Apache Spark 2.4 and 3.0  What's Next?
Apache Spark 2.4 and 3.0 What's Next?
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
[AWS初心者向けWebinar] 利用者が実施するAWS上でのセキュリティ対策
[AWS初心者向けWebinar] 利用者が実施するAWS上でのセキュリティ対策[AWS初心者向けWebinar] 利用者が実施するAWS上でのセキュリティ対策
[AWS初心者向けWebinar] 利用者が実施するAWS上でのセキュリティ対策
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 

Similar a 少しでもセキュリティを向上させたい! Mauticの運用方法

かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
Shuhei Iitsuka
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
純生 野田
 

Similar a 少しでもセキュリティを向上させたい! Mauticの運用方法 (20)

手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016
手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016 手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016
手軽にできる外部公開サーバ観測の効用と活用法 @ Internet Week 2016
 
Redmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspointsRedmineosaka 20 talk_crosspoints
Redmineosaka 20 talk_crosspoints
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
MTDDC Meetup TOKYO 2015 bit-part
MTDDC Meetup TOKYO 2015 bit-partMTDDC Meetup TOKYO 2015 bit-part
MTDDC Meetup TOKYO 2015 bit-part
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
 
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
Kubernetes で実践するクラウドネイティブ DevOps "監視とオブザーバビリティ"編 / Cloud Native DevOps with K...
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと商用ミドルウェアのPuppet化で気を付けたい5つのこと
商用ミドルウェアのPuppet化で気を付けたい5つのこと
 
2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizing2005 05 21_xoops_xev4_customizing
2005 05 21_xoops_xev4_customizing
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
 
20141101 handson
20141101 handson20141101 handson
20141101 handson
 
ITPと、その他cookie関連のこと / ITP and cookie
ITPと、その他cookie関連のこと / ITP and cookieITPと、その他cookie関連のこと / ITP and cookie
ITPと、その他cookie関連のこと / ITP and cookie
 
WordPressとリスク管理 at 第42回 WordBench大阪
WordPressとリスク管理 at 第42回 WordBench大阪WordPressとリスク管理 at 第42回 WordBench大阪
WordPressとリスク管理 at 第42回 WordBench大阪
 
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
 
Inside Movable Type
Inside Movable TypeInside Movable Type
Inside Movable Type
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
Twitterのデータを取得する準備
Twitterのデータを取得する準備Twitterのデータを取得する準備
Twitterのデータを取得する準備
 
Monit & Supervisord Tips
Monit & Supervisord TipsMonit & Supervisord Tips
Monit & Supervisord Tips
 
Hack the juju_maas_interop用デモ資料
Hack the juju_maas_interop用デモ資料Hack the juju_maas_interop用デモ資料
Hack the juju_maas_interop用デモ資料
 

少しでもセキュリティを向上させたい! Mauticの運用方法