<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>開発・WordPress - BLACKND</title>
	<atom:link href="https://blacknd.com/category/develop-wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>https://blacknd.com</link>
	<description>エンジニアがオススメするPCライフハック術</description>
	<lastBuildDate>Wed, 18 May 2022 07:46:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://blacknd.com/wp-content/uploads/2021/04/logo-mark-6-100x100.png</url>
	<title>開発・WordPress - BLACKND</title>
	<link>https://blacknd.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>IP Geo BlockプラグインでWordPressの防御をさらに強固に</title>
		<link>https://blacknd.com/develop-wordpress/wordpress-security-plugin-ip-geo-block/</link>
					<comments>https://blacknd.com/develop-wordpress/wordpress-security-plugin-ip-geo-block/#comments</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Tue, 10 Apr 2018 09:23:39 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[不正]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[国外]]></category>
		<category><![CDATA[IP Geo Block]]></category>
		<category><![CDATA[遮断]]></category>
		<category><![CDATA[ブロック]]></category>
		<category><![CDATA[速い]]></category>
		<category><![CDATA[ファイアウォール]]></category>
		<category><![CDATA[国産]]></category>
		<category><![CDATA[ゼロデイ攻撃]]></category>
		<category><![CDATA[高機能]]></category>
		<category><![CDATA[ログイン]]></category>
		<category><![CDATA[国別]]></category>
		<category><![CDATA[多機能]]></category>
		<category><![CDATA[管理画面]]></category>
		<category><![CDATA[国コード]]></category>
		<category><![CDATA[ディレクトリ]]></category>
		<category><![CDATA[対策]]></category>
		<category><![CDATA[強固]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[防御]]></category>
		<category><![CDATA[簡単]]></category>
		<category><![CDATA[日本語]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[ログ]]></category>
		<category><![CDATA[IPアドレス]]></category>
		<category><![CDATA[海外]]></category>
		<category><![CDATA[統計]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=2023</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2018/04/wordpress-security-plugin-ip-geo-block-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>前回の記事でWordPressに対する改ざん攻撃への対処を行いましたが、その後さらにプラグイン「IP Geo Block」を導入しました。 不正アクセスとファイル改ざん被害との戦い 筆者のサイトが海外からの不正なアクセス [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2018/04/wordpress-security-plugin-ip-geo-block-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>前回の記事でWordPressに対する改ざん攻撃への対処を行いましたが、その後さらにプラグイン「IP Geo Block」を導入しました。</p>



<h2 class="wp-block-heading">不正アクセスとファイル改ざん被害との戦い</h2>



<p>筆者のサイトが海外からの不正なアクセスにより、ファイルの改ざんや不正ファイルの設置を行われ、SPAM送信の踏み台にされる被害に遭いました。</p>



<p>前回の記事でこれに対する対策を行い、以後被害はなくなりました。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-blacknd wp-block-embed-blacknd"><div class="wp-block-embed__wrapper">
https://blacknd.com/linux-server/wordpress-malware-tampering-guard-block/
</div></figure>



<h3 class="wp-block-heading">前回行った対策</h3>



<p>手動では状況把握が不完全で、いたちごっこになるため処理も追いつかず、セキュリティ系プラグインに頼りました。</p>



<ol class="wp-block-list"><li>被害内容の把握</li><li>ユーザー名を非表示にする</li><li><strong>不正ログイン対策</strong></li><li>改ざんされたファイルのスキャンと修正</li><li>不正に設置されたファイルの削除</li><li><strong>.htaccessによる海外IPアドレスのアクセス拒否</strong>（ここで完全解決）</li><li>SPAM送信をしてしまったPostfixの対策処理</li></ol>



<p>今回の記事ではさらに一歩進め、上記対策で<strong>太字</strong>になっている部分をさらに強化することにします。</p>



<p>また、もやもやしていた.htaccessでのアクセス拒否について問題が見つかりましたので、これも同時に解決します。</p>



<h2 class="wp-block-heading">IP Geo Blockの導入</h2>



<p>非常に高機能かつ日本語化されていて設定も簡単なプラグイン、IP Geo Blockを導入します。</p>



<p>こちらのメイン機能は「国コードによるホワイトリストまたはブラックリスト型のアクセス制限を行う」というものです。</p>



<p>まさに前回.htaccessによって力技でやっていた内容ですが、異なる点がいくつかあります。</p>



<ul class="wp-block-list"><li>海外からのアクセスを遮断できる</li><li>国コードで判別の設定を行うため手動でIPアドレスを制限するよりも間違いがなく高効率</li><li><strong>アクセス制限を行う対象を選択可能</strong></li><li><strong>ゼロデイ攻撃も防御できる</strong></li><li>高速で動作し、かつ機能の重複する他の重いプラグインを無効化できる（例：Akismet）</li></ul>



<p>こちらも、<strong>太字</strong>の部分が重要となっています。各項目の詳細については後述します。</p>



<h3 class="wp-block-heading">インストール</h3>



<p>まずはWordPress管理画面の「プラグイン」→「新規追加」からインストールして有効化します。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://ja.wordpress.org/plugins/ip-geo-block/
</div></figure>



<p>インストール直後は外部からデータベースをバックグラウンドで読み込むため、しばらく待つよう指示されます。<br><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading">設定する</h2>



<p>管理画面の「設定」→「IP Geo Block」で、挙動の設定を行います。</p>



<p>なお以下の設定内容は、すでに改ざん被害に遭った筆者の環境ですので、予防として導入する場合はもう少しライトな設定でも構わないと思います。</p>



<h3 class="wp-block-heading">検証ルールの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="796" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01-1024x796.png" alt="" class="wp-image-2025" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01-1024x796.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01-300x233.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01-768x597.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01-1536x1194.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-01.png 1645w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ここで、基本となるルールを決めておきます。ここで決めたルールを、この後でどこにどう使うか指定するイメージです。</p>



<h4 class="wp-block-heading">マッチング規則</h4>



<p>「ホワイトリスト」とします。ブラックリストとの違いは以下の通りです。</p>



<ul class="wp-block-list"><li>ホワイトリスト：基本すべて<strong>拒否</strong>、指定された国コードのみ<strong>許可</strong></li><li>ブラックリスト：基本すべて<strong>許可</strong>、指定された国コードのみ<strong>拒否</strong></li></ul>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p><a rel="noreferrer noopener" href="https://blacknd.com/linux-server/wordpress-malware-tampering-guard-block/" target="_blank" data-wpel-link="internal">前回の記事</a>で紹介した.htaccessファイルはホワイトリスト型です。すべて拒否した後で、botと国内IPアドレスを許可しています。それでも4千行を越えてしまいましたが。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h4 class="wp-block-heading">国コードのホワイトリスト</h4>



<p>JP（日本）とします。必要であればカンマ区切りで他の国コードを加えることもできます。</p>



<h4 class="wp-block-heading">悪意のあるシグネチャ</h4>



<p>管理領域、テーマ領域、プラグイン領域に対して悪意があるとみなすシグネチャを指定します。</p>



<p>改行またはカンマ区切りで複数指定することができます1。</p>



<h5 class="wp-block-heading">デフォルトのシグネチャ</h5>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>../,/wp-config.php,/passwd</code></pre></div>



<h5 class="wp-block-heading">追記後のシグネチャ</h5>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>../,/wp-config.php,/passwd
curl,wget,eval,base64</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>筆者の受けた改ざん被害でも、PHPの<code>eval</code>や<code>base64</code>が用いられていました。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h4 class="wp-block-heading">IPアドレス当たりのログイン試行可能回数</h4>



<p>同一のIPアドレスからのログインを許可する回数で、ここでは5としました。</p>



<h4 class="wp-block-heading">検証のタイミング</h4>



<p>ここは、IP Geo Blockプラグインがどのタイミングで上記のような検証を行うのかを設定します。</p>



<h5 class="wp-block-heading">デフォルトのタイミング</h5>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&quot;init&quot; アクション・フック</code></pre></div>



<h5 class="wp-block-heading">変更後のタイミング</h5>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&quot;mu-plugins&quot; (ip-geo-block-mu.php)</code></pre></div>



<p>デフォルトでは標準的なプラグインの実行タイミングとなります。その前にWordPressによる様々な前処理が行われることになります。</p>



<p>mu-pluginsに変更すると、他のプラグインより早いタイミングで実行されるため、後にアクセスを拒否することになる接続先に対して、無駄なサーバ資源の消費を避けることができます。高速化も期待できます。</p>



<p>注意点として、以下に記述されているような制限事項が生じます。</p>



<p>http://www.ipgeoblock.com/codex/validation-timing.html</p>



<p>英語ですし、なんだか難しく書いてあります。</p>



<ul class="wp-block-list"><li>テーマ内functions.phpのカスタムフィルターフックが動作しない</li><li>人間に優しいエラーページが無効になる</li></ul>



<p>カスタムフィルターフックについては、テーマ表示より前のタイミングで実行される以上は仕方のないところです。解決策も書かれていますので、問題の発生する環境では試してみると良いでしょう。</p>



<p>次にエラーページの件ですが、上記と同様にテーマ表示の処理を行う前にIP Geo Blockが動作しますので、テーマを処理する前だという理由で<code>404.php</code>のようなユーザーフレンドリーなエラーページを表示できません。こちらも解決策が書かれています。エラーページを静的HTMLファイルとして保存すれば良いようです。</p>



<p>筆者の環境ではどちらも対策していませんが、どのみち拒否するユーザーに見せるものなので気にしないことにしました。</p>



<h3 class="wp-block-heading">バックエンドの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="517" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02-1024x517.png" alt="" class="wp-image-2035" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02-1024x517.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02-300x152.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02-768x388.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02-1536x776.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-02.png 1647w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>IP Geo Blockプラグインで「どこを」「どう」防御するのかを決める部分であり、とても重要な設定です。<br><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h4 class="wp-block-heading">コメント投稿</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>国コードで遮断</code></pre></div>



<p>コメントを海外から投稿できないようにしています。思い切った設定ではありますが、実はこれで<strong>SPAMコメントがほとんどなくなります</strong>。</p>



<p>ということは、重いことで有名なSPAM対策プラグイン、Akismetを停止することできますね（後述）。</p>



<h4 class="wp-block-heading">XML-RPC</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>国コードで遮断</code></pre></div>



<p>筆者はXML-RPCを悪用した攻撃をひっきりなしに受けていました。攻撃手段となり得る機能を野放しにしておくのはよろしくないので対策したいのですが、無効にするのも抵抗があります。IP Geo Blockでは海外勢のみ遮断することができます。便利！</p>



<h4 class="wp-block-heading">ログイン・フォーム</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>国コードで遮断</code></pre></div>



<p>ログイン試行の回数を設定する部分がありましたが、ここではそもそもログイン試行を行う対象を国内IPアドレスに絞ることができます。海外からのログイン試行はひっきりなしに行われていますので、こちらも国コードで遮断しておきます。</p>



<h4 class="wp-block-heading">管理領域</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>国コードで遮断
ゼロデイ攻撃を遮断</code></pre></div>



<p>管理領域（<code>/wp-admin</code>ディレクトリ）内に対するアクセスを国コードで遮断します。通常であれば、管理者である自分以外はアクセスしない部分です。</p>



<p>また「ゼロデイ攻撃を遮断」が登場しました。ゼロデイ攻撃とは、脆弱性が発見されてから対策された日（ワンデイ）までの間にあたる脆い期間（ゼロデイ）に行われる攻撃のことです。これは非常に心強い機能で、未対策の攻撃を検知して遮断することができます。</p>



<h4 class="wp-block-heading">管理領域ajax/post</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>国コードで遮断
ゼロデイ攻撃を遮断</code></pre></div>



<p>管理領域内にある<code>admin-ajax.php</code>と<code>admin-post.php</code>に対するアクセスを上記と同様に遮断します。</p>



<h4 class="wp-block-heading">プラグイン領域</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ゼロデイ攻撃を遮断
WPコアの読み込みを強制</code></pre></div>



<p>改ざんや不正ファイル配置は、プラグイン領域に対してよく行われます。ここでは管理領域と同じように、ゼロデイ攻撃を遮断します。国コードで遮断するよりも強固になります。</p>



<h4 class="wp-block-heading">テーマ領域</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ゼロデイ攻撃を遮断
WPコアの読み込みを強制</code></pre></div>



<p>テーマ領域に対しても、改ざんや不正ファイル配置はよく行われます。ここも管理領域と同じように、ゼロデイ攻撃を遮断します。国コードで遮断するよりも強固になります。</p>



<p>なお上記2つで「WPコアの読み込みを強制」をチェックしてありますが、これはWordPressのコア（本体）を読み込まずに実行されるPHPファイルがあった場合への対策となります。</p>



<h3 class="wp-block-heading">フロントエンドの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="392" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03-1024x392.png" alt="" class="wp-image-2038" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03-1024x392.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03-300x115.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03-768x294.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03-1536x587.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-03.png 1650w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>通常の投稿やページを表示、つまり制作者が意図しているURLでのアクセスに対する設定です。</p>



<p>ここへの直接攻撃はちょっと考えにくいですし、テーマファイルへの攻撃なら前項の設定で防御できます。そこでここは遮断しないよう設定します。</p>



<p>フロントエンドの遮断を設定すると、外部からの正常なアクセスを検証、遮断しますので、ただ普通にサイトを見に来たユーザーやクローラーが対象になります。筆者は前回の対策ではクローラー関係で苦労することになりました。この項目を設定しなくても攻撃されることはなくなり、かつクローラーのエラーもなくなっています。</p>



<h3 class="wp-block-heading">位置情報APIの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="271" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04-1024x271.png" alt="" class="wp-image-2039" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04-1024x271.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04-300x79.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04-768x203.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04-1536x407.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-04.png 1647w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>IP Geo Blockプラグインでは、外部の位置情報データベースをAPI経由で取得して利用しています。そのための設定ですが、このままで問題ありません。</p>



<h3 class="wp-block-heading">ローカル・データベースの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="530" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05-1024x530.png" alt="" class="wp-image-2040" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05-1024x530.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05-300x155.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05-768x398.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05-1536x795.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-05.png 1646w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上記APIでローカルに取得されたデータベースの状態です。</p>



<p>「自動更新（月1回）」をチェックするのみで、他には特にすべきことはありません。プラグイン導入直後にバックグラウンドでデータベースの取得が開始されますが、うまく働いていない、または取得に失敗しているようであれば「今すぐダウンロード」ボタンをクリックしてください。</p>



<h3 class="wp-block-heading">統計とログの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="227" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06-1024x227.png" alt="" class="wp-image-2041" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06-1024x227.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06-300x66.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06-768x170.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06-1536x340.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-06.png 1645w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>このようなプラグインでは、「動作しているか」「期待通りに動作しているか」「どのような状況か」「何をいつどうしたか」といったログを見たいものです。</p>



<p>ここで検証とログを有効にしておきましょう。</p>



<h4 class="wp-block-heading">検証のログを記録</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>遮断時または遮断対象国の通過時に記録</code></pre></div>



<p>筆者が既に攻撃を受けて被害も被っているため、見られる情報はなるべく見たいということでこの設定にしてあります。</p>



<p>通常は「遮断時に記録」だけでも良いかも知れません。</p>



<h3 class="wp-block-heading">IPアドレスのキャッシュ設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="118" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07-1024x118.png" alt="" class="wp-image-2042" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07-1024x118.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07-300x34.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07-768x88.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07-1536x176.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-07.png 1647w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>キャッシングに関する設定です。特に変更すべき部分はありません。</p>



<h3 class="wp-block-heading">投稿時の設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="98" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08-1024x98.png" alt="" class="wp-image-2043" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08-1024x98.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08-300x29.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08-768x74.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08-1536x148.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-08.png 1645w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>コメント欄の上下に一言何かを表示する機能のようです。本プラグインで設定を行う必要はないでしょう。</p>



<h3 class="wp-block-heading">プラグインの設定</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="263" src="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09-1024x263.png" alt="" class="wp-image-2044" srcset="https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09-1024x263.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09-300x77.png 300w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09-768x197.png 768w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09-1536x394.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/ip-geo-block-09.png 1646w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>便利な設定のエクスポート、インポートがあります。プラグインのアンインストール時に全設定を削除する設定もありますが、このあたりはお好みで。</p>



<p>その下部に「変更を保存」ボタンがありますので、ここまでの設定が済んだらクリックしておきます。<br><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading">不要となるプラグインや設定</h2>



<p>以下のプラグインが有効である場合、これらは停止もしくは削除することができます。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://wordpress.org/plugins/akismet/
</div></figure>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://ja.wordpress.org/plugins/siteguard/
</div></figure>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://ja.wordpress.org/plugins/wordfence/
</div></figure>



<p>機能が完全に被っているか、または部分的にせよ重要な部分をIP Geo Blockで代替できるためです。</p>



<p>特にありがたいのがSPAM対策プラグインのAkismetで、これは大変重いことで有名です。IP Geo Blockに任せましょう。</p>



<p>Wordfenceについては、筆者は残してあります。理由は、ノートン先生やウィルスバスターなどに似たスキャン機能があり、改ざん被害を発見・通知することができるためです。</p>



<p>改ざん被害に遭っていない方は、今からIP Geo Blockで防御すれば、それも未然に防げる可能性があります。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>前回行った<code>.htaccess</code>による海外からのアクセス制限では、何もかも問答無用で弾いてしまうため、強力ですが困ることもありました。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="red"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon-komari.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>具体的には、Googleなどのようなメジャーどころではないbotの扱いで困りました。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p><br>目的が「日本人以外を弾きたい」のではなく「攻撃は全て海外からなのでそれを弾きたい」なので、IP Geo Blockによるゼロデイ防御の方が適しています。</p>



<p>国コードという概念とゼロデイ防御という手法でセキュリティを向上できるIP Geo Block、個人的に2018年のベストプラグイン賞決定です。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/wordpress-security-plugin-ip-geo-block/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>WordPressをマルウェア感染や改ざんの被害から守る方法と対策まとめ</title>
		<link>https://blacknd.com/develop-wordpress/wordpress-malware-tampering-guard-block/</link>
					<comments>https://blacknd.com/develop-wordpress/wordpress-malware-tampering-guard-block/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Thu, 01 Mar 2018 13:04:08 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[マルウェア]]></category>
		<category><![CDATA[キュー]]></category>
		<category><![CDATA[author]]></category>
		<category><![CDATA[改ざん]]></category>
		<category><![CDATA[削除]]></category>
		<category><![CDATA[隠す]]></category>
		<category><![CDATA[改竄]]></category>
		<category><![CDATA[除去]]></category>
		<category><![CDATA[非表示]]></category>
		<category><![CDATA[不正]]></category>
		<category><![CDATA[防御]]></category>
		<category><![CDATA[パスワード]]></category>
		<category><![CDATA[ログイン]]></category>
		<category><![CDATA[拒否]]></category>
		<category><![CDATA[スキャン]]></category>
		<category><![CDATA[管理画面]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[テーマ]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[リスト]]></category>
		<category><![CDATA[自動]]></category>
		<category><![CDATA[スパム]]></category>
		<category><![CDATA[SiteGuard]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[踏み台]]></category>
		<category><![CDATA[Wordfence]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[対策]]></category>
		<category><![CDATA[Edit Author Slug]]></category>
		<category><![CDATA[IPアドレス]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[海外]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=1967</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2018/03/wordpress-malware-tampering-guard-block-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>WordPressがマルウェアに感染したり、ファイル等の改ざん被害を受けた際の対策をまとめました。 WordPressは狙われやすい WordPressは、世界で最も多く利用されているオープンソースのCMSです。 しかし [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2018/03/wordpress-malware-tampering-guard-block-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>WordPressがマルウェアに感染したり、ファイル等の改ざん被害を受けた際の対策をまとめました。</p>



<h2 class="wp-block-heading">WordPressは狙われやすい</h2>



<p>WordPressは、世界で最も多く利用されているオープンソースのCMSです。</p>



<p>しかし利用者が多いということは、ITリテラシーやセキュリティ意識の低いユーザーが多い可能性も高くなります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="red"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon-komari.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>つまり悪意あるユーザーにとっては格好の標的となります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>ということで今に始まったわけではありませんが、WordPressは悪意あるユーザーに「<strong>常に狙われている</strong>」状態にあるとまず考えましょう。</p>



<p>名の売れたサイトが狙われやすいのは当然ですが、「自分のところはアクセス数が少ないから対策しなくても大丈夫だろう」と高をくくるのは危険です。</p>



<p><strong>悪意あるユーザーが求めているのは、まさにそのようなセキュリティ意識の低いサイトです。</strong></p>



<p>被害に遭ってから対策するのはかなり骨の折れる作業になりますので、事前にできる限りの予防をしておきましょう。</p>



<h2 class="wp-block-heading">乗っ取り被害のチェック</h2>



<p>WordPressの管理画面にログインし、左メニューの「ユーザー」を確認します。</p>



<p>もし自分以外のユーザーが不正に登録されていたら、即座に削除しましょう。</p>



<p>さらに自分自身のパスワードも、長く難解なものに変更します。WordPress側で自動生成することもできます。</p>



<h3 class="wp-block-heading">adminユーザーに注意</h3>



<p>WordPressでは、デフォルトの管理ユーザーが<code>admin</code>になっています。</p>



<p>これをこのまま放置するのはセキュリティ上好ましくありませんので、管理権限を持つ別ユーザーを作成して、<code>admin</code>は削除することをおすすめします。</p>



<h2 class="wp-block-heading">ログインユーザー名が表示されるのを防ぐ</h2>



<p><code>http://******.***/?author=1</code>のように、自サイトのURLに<code>/?author=1</code>を追記してブラウザで表示してみてください。</p>



<p>管理者権限を持つユーザー名が表示される場合、これは危険な状態です。</p>



<p>WordPressの認証は基本的にユーザー名とパスワードの2要素で行いますので、そのうち1つがバレるというのはリスクが高いと考えてください。</p>



<h3 class="wp-block-heading">手動でなんとかする方法</h3>



<p>テーマディレクトリ内の<code>author.php</code>（無ければ作成）の内容を、以下の通りにします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php
    wp_redirect(home_url());
    exit();</code></pre></div>



<p>これで、authorのユーザー名を表示することなくトップページに強制転送します。若干無理やり感がありますが。</p>



<h3 class="wp-block-heading">プラグインを使用する方法</h3>



<p>Edit Author Slugというプラグインで対策できます。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://wordpress.org/plugins/edit-author-slug/
</div></figure>



<p>ユーザーアーカイブのスラッグを変更することができますので、<code>/?author=1</code>のようにアクセスしても設定したスラッグのURLに転送され、ユーザー名が露呈することはありません。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>テーマによっては、ユーザー名の表示を無効化する機能を持っている場合もあります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">ログイン保護と不正アクセス対策</h2>



<p>不正アクセスを防ぐためには様々な方法がありますが、まとめて行ってくれるプラグインがあります。</p>



<h3 class="wp-block-heading">SiteGuard WP Plugin</h3>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://ja.wordpress.org/plugins/siteguard/
</div></figure>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>既に改ざんや乗っ取り被害の跡が見られる場合は、WordPressの管理画面ではなくFTPなどでアップロードする方法をおすすめします。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>SiteGuardは国産のセキュリティプラグインで、ログインページの保護と不正アクセス対策に特化しています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="464" src="https://blacknd.com/wp-content/uploads/2018/03/20180228-234458-1024x464.png" alt="" class="wp-image-1976" srcset="https://blacknd.com/wp-content/uploads/2018/03/20180228-234458-1024x464.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234458-300x136.png 300w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234458-768x348.png 768w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234458-1536x696.png 1536w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234458.png 1665w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上の画像のように、ログイン履歴を見ることもできます。</p>



<p>注目すべきは右端の「タイプ」で、ログインページではなくXMLRPCからのログイン試行（失敗）が並んでいる点です。私がそのような操作を行ったことはありませんので、これは<strong>不正アクセスの試行</strong>を受けていることを意味しています。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>XMLRPCとは外部からWordPressを操作する仕組みと考えてください。外部連携には便利な機能ですが、悪用されやすいというデメリットがあります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>SiteGuardでは、このXMLRPCを無効にする設定も可能です。</p>



<p>いくつかの機能がありますが、私は以下のように設定しました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="980" height="563" src="https://blacknd.com/wp-content/uploads/2018/03/20180228-234419.png" alt="" class="wp-image-1978" srcset="https://blacknd.com/wp-content/uploads/2018/03/20180228-234419.png 980w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234419-300x172.png 300w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234419-768x441.png 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /></figure>



<p>日本語で項目ごとに説明が記述されているので迷うことは少ないでしょう。</p>



<p>「ログインページ変更」では、<code>/wp-admin/</code>と決まっている管理画面のURLを変更することができます。想像できる通り、ログインページからの不正ログイン試行の多くを防ぐことができます。</p>



<p>「画像認証」は、ひらがなによる画像認証を追加することができます。コメントにも仕掛けられますが、筆者はログインページだけにしておきました。</p>



<p>「XMLRPC防御」では、XMLRPCそのものを無効にしました。具体的には<code>.htaccess</code>に<code>xmlrpc.php</code>へのアクセスを禁止する記述が追加されます。</p>



<p>これでひとまず、不正ログインに関してはかなりセキュリティを強化することができます。</p>



<h2 class="wp-block-heading">改ざんと不正ファイルのチェック</h2>



<p>これらの被害に遭っているかどうかを手動で調査するのは、大変骨の折れる作業となります。</p>



<p>ここでは、セキュリティリスクをスキャンできるプラグインを使用して、被害に遭っているかどうかを確認します。</p>



<h3 class="wp-block-heading">Wordfence Security – Firewall &amp; Malware Scan</h3>



<figure class="wp-block-embed is-type-wp-embed is-provider-plugin-directory wp-block-embed-plugin-directory"><div class="wp-block-embed__wrapper">
https://ja.wordpress.org/plugins/wordfence/
</div></figure>



<p>Wordfenceは、WordPress本体のファイル改ざんや、不正なファイルが作成されていないかをスキャンすることができます。</p>



<p>また、古すぎたり更新が停止しているプラグインはスキャン結果で警告されますので、代替となるプラグインを探すことをおすすめします。</p>



<p>Wordfenceは英語のプラグインですが、使用するのは一部機能のみで設定も特に要らないため問題になることはないでしょう。</p>



<p>何はともあれ、まずは上記プラグインをインストール、有効化します。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>既に改ざんや乗っ取り被害の形跡が見られる場合は、WordPressの管理画面ではなくFTPなどでアップロードする方法をおすすめします。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>管理画面の左メニューに"Wordfence"が追加されますので、そこから"Scan"を選択します。</p>



<p>"START NEW SCAN"ボタンをクリックすれば、WordPressインストールディレクトリ以下の全ファイルを調査してくれます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="781" src="https://blacknd.com/wp-content/uploads/2018/03/20180228-234409-1024x781.png" alt="" class="wp-image-1972" srcset="https://blacknd.com/wp-content/uploads/2018/03/20180228-234409-1024x781.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234409-300x229.png 300w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234409-768x586.png 768w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234409.png 1208w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>この画像では左下部の"Results Found"が空になっていますが、これは改ざんや不正なファイルが見つからなかったことを示しています。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>日本語版WordPressでは<code>wp-config-sample.php</code>と<code>readme.html</code>が「内容がオリジナルと異なる」と表示されますが、多くの場合正常です。<br>前者はPHPスクリプトなので、一応おかしなコードが埋め込まれていないか確認（後述）し、問題がなければどちらもIgnore（無効）にしてしまってOKです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>もし"Results Found"に改ざんされたファイルや不正に作成されたファイルが表示された場合、対策が必要です。</p>



<p>具体的には、以下のように対応します。</p>



<ul class="wp-block-list"><li><strong>改ざんされたファイル</strong>：対象ファイルをエディタで開き、後述のようなコードが埋め込まれていれば該当部分を削除する。</li><li><strong>不正に作成されたファイル</strong>：対象ファイルを削除する。</li></ul>



<p>このスキャン作業は、たまに行って確認するようにしましょう。日々の作業が増えますが、被害に遭ってから対応するよりよほど楽です。</p>



<h3 class="wp-block-heading">Live Trafficが便利</h3>



<p>Wordfenceには、他にも様々な機能がありますが、主に使用するのは上記のスキャンと、"Live Traffic"です。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="831" src="https://blacknd.com/wp-content/uploads/2018/03/20180228-234716-1024x831.png" alt="" class="wp-image-1974" srcset="https://blacknd.com/wp-content/uploads/2018/03/20180228-234716-1024x831.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234716-300x243.png 300w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234716-768x623.png 768w, https://blacknd.com/wp-content/uploads/2018/03/20180228-234716.png 1209w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>アクセスログをほぼリアルタイムに閲覧できる機能ですが、国名を見られたり、怪しいか問題のあったアクセスを色分けして表示してくれたりするので大変便利です。</p>



<p>この機能だけを持つプラグインもありますが、このように1本にまとめられているのは嬉しい限りです。</p>



<p>また、上の画像がまさにそうなのですが、不正なアクセスを行ったIPアドレスをブロックリストに入れることもできます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>ただし攻撃者は自らのPCではなく様々な国にある複数の踏み台を操って不正アクセスを試みますので、多くの場合IPアドレスは一定ではありません。<br>したがって単一のIPアドレスをブロックすることには（無意味とは言いませんが）あまりメリットはありません。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">改ざんされたファイルの修正</h2>



<p>Wordfenceのスキャンで改ざんされたファイルが見つかったら、エディタで開いてみます。</p>



<p>おそらくファイルの先頭に以下のようなコードが不正に埋め込まれています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php $xxxx = Array(/* 無意味に見える大量の英数字 */);
eval(xxxx_function($base64_data, $xxxx)); ?&gt;</code></pre></div>



<p>「無意味に見える大量の英数字」の部分をbase64でデコードすると、PHPのコードであることがわかります。</p>



<p>私は何度もいたちごっこを繰り返しましたが、改ざんされるファイルは毎回<code>index.php</code>, <code>wp-config.php</code>, <code>wp-settings.php</code>あたりでした。</p>



<p>これらのファイルはWordPressが毎回必ず読み込むファイルであるため、悪意あるコードを埋め込むにはうってつけというわけです。</p>



<p>上記のようなコードを発見したら、エディタで不正コード部分の<code>&lt;?php</code>から<code>?&gt;</code>までを削除してください。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="red"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon-komari.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>完全な原因究明と抜本的な対策が行われない限り、繰り返し改ざんが行われる場合があります。私もそうでした。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">不正に作成されたファイルの削除</h2>



<p>Wordfenceの"Live Traffic"の部分で紹介した画像のように、いかにもランダムで付けたファイル名である場合が多いですが、たまに意味ありげなファイル名になっていることもあります。拡張子は<code>.php</code>です。</p>



<p>作成されるディレクトリはまちまちで、<code>wp-admin/</code>や<code>wp-includes/</code>の中であったり、<code>wp-content/uploads/</code>の中であったり、プラグインやテーマのディレクトリ内であったりします。深い階層内に作成されることもあります。</p>



<p>該当ファイルをエディタで開くと、コードは概ね以下のように難読化されています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://blacknd.com/wp-content/uploads/2018/03/20180301-185604-1024x768.png" alt="" class="wp-image-1984" srcset="https://blacknd.com/wp-content/uploads/2018/03/20180301-185604-1024x768.png 1024w, https://blacknd.com/wp-content/uploads/2018/03/20180301-185604-300x225.png 300w, https://blacknd.com/wp-content/uploads/2018/03/20180301-185604-768x576.png 768w, https://blacknd.com/wp-content/uploads/2018/03/20180301-185604.png 1379w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>最後の方で<code>eval</code>関数によって文字列がPHPコードとして評価されます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="red"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon-komari.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>実行されるコードは様々でしょうが、筆者の場合はSPAMを送信するコードになっていました。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>攻撃者はこの不正に作成したPHPファイルにPOSTメソッドでアクセスし、実行してきます。これはアクセスログやWordfenceの"Live Traffic"で確認することができます。</p>



<p>この不正ファイルを放置するのは大変危険ですので、見つけ次第 <strong>問答無用で削除してください</strong>。</p>



<h2 class="wp-block-heading">海外のIPアドレスを拒否する</h2>



<p>いささか乱暴ではありますが、攻撃はほぼすべて海外のIPアドレスから行われますので、サイトの公開対象が国内のみであれば、海外からのアクセスをすべて遮断してしまう方法があります。</p>



<p>これは大変効果的で、攻撃者とのいたちごっこを繰り返していた私が最終的に問題を解決するに至った手法です。</p>



<p>遮断する方法はいくつかありますが、ここでは最も修正が手軽な<code>.htaccess</code>によるアクセス制限を紹介します。</p>



<p>以下は、私が採用している<code>.htaccess</code>です。内容は、以下のような流れになっています。</p>



<ol class="wp-block-list"><li>すべてのアクセスを拒否</li><li>Googleやfacebook, Twitterなどbotからのアクセスを例外として許可</li><li>日本国内で使用されるIPアドレスを例外として許可（4千行以上）</li></ol>



<p>Apacheのバージョンによってアクセス制限の書式が異なる点に注意してください。</p>



<p>▼<strong>Apache 2.2系を使用している場合</strong></p>



<p>https://gist.github.com/ryu-blacknd/3625090cd46b2b60d7ce3700ae7d6b78</p>



<p>▼<strong>Apache 2.4系を使用している場合</strong></p>



<p>https://gist.github.com/ryu-blacknd/59dc7f1dbf5c82a3be507a9acb0146d9</p>



<p>多くの場合、既に何かが書かれた<code>.htaccess</code>ファイルが存在すると思いますので、その部分は残して上記コードを追記してください。</p>



<p>貼り付ける場所に悩んだら、<code># BEGIN WordPress</code>の直前にしておけばOKです。<br><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading">SPAM送信の踏み台にされた場合の対処</h2>



<p>私が実際に被害に遭ったサーバの環境は、OSがCentOS 7で、MTA（メールサーバ）はPostfixです。</p>



<p>ここではPostfixであった場合、かつ<code>root</code>による作業が可能な場合の対処方法を紹介します。</p>



<p>まずは現在溜まっているキューを確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ postqueue -p</code></pre></div>



<p>送信した覚えのないメールがズラッと表示された場合、既にSPAM送信が実行されています。</p>



<p>この場合は以下のコマンドでまずキューを削除します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ postsuper -d ALL</code></pre></div>



<p>上記対応によって問題が解決している場合は、このままPostfixの運用を続けて構いません。</p>



<p>まだ対策が完了していない場合はさらにキューが増加しますので、不本意ながらPostfixを停止しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ systemctl stop postfix</code></pre></div>



<p>当然ですが、Postfixを停止している間はメールの送受信が機能しません。なるべく早期に対策を終え、再度Postfixを起動します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ systemctl start postfix</code></pre></div>



<p>一度SPAMの踏み台になってしまった以上、以後しばらくはキューの確認を行うことをおすすめします。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>既に書きましたが、最も効果的な対策は<strong>海外のIPアドレスを排除すること</strong>です。</p>



<p>すべての対策を行っても解決しない場合、最終手段は再セットアップということになります。WordPressのファイル群をすべて削除し、素のWordPressから再度環境を構築をすることで、クリーンな状態に戻せます。</p>



<p>ただし事前にバックアップを取ることはもちろんですが、バックアップしたファイルをそのまま書き戻さないこともまた重要です。<br>プラグインやテーマは改めて新規インストールし、手動で以前の設定を復元するべきです。</p>



<p>この作業は困難かつ時間がかかりますので、できることならここで紹介した方法で解決したいものです。</p>



<p>最後になりましたが、WordPress本体やプラグイン、テーマのアップデートは無視せず実行してください。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>公開されたばかりのバージョンであっても脆弱性が発見されることがしばしばありますので、常に目を光らせておいてください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/wordpress-malware-tampering-guard-block/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CentOS 7でGitBucketを動かしてJenkinsで自動デプロイ</title>
		<link>https://blacknd.com/develop-wordpress/centos7-gitbucket-jenkins-auto-deploy/</link>
					<comments>https://blacknd.com/develop-wordpress/centos7-gitbucket-jenkins-auto-deploy/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Tue, 23 Dec 2014 14:14:43 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[デプロイ]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[リポジトリ]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[自動]]></category>
		<category><![CDATA[設定]]></category>
		<category><![CDATA[インストール]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[GitBucket]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[プロキシ]]></category>
		<category><![CDATA[自動デプロイ]]></category>
		<category><![CDATA[CentOS]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=597</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2014/12/centos7-gitbucket-jenkins-auto-deploy-1-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>CentOS 7にLAMP環境を構築。GitBucketとJenkinsを動かし、自動ビルドや自動デプロイまでやってみます。 なぜGitBucketか GitBucketはGitHubクローンで、似たものに有名なGitL [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2014/12/centos7-gitbucket-jenkins-auto-deploy-1-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>CentOS 7にLAMP環境を構築。GitBucketとJenkinsを動かし、自動ビルドや自動デプロイまでやってみます。</p>



<h2 class="wp-block-heading">なぜGitBucketか</h2>



<p>GitBucketは<a href="https://github.com/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">GitHub</a>クローンで、似たものに有名な<a href="https://about.gitlab.com/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">GitLab</a>があります。 GitLabも最近はrpmコマンド一発でインストールできるほど簡単になっていますが、今回はより簡単 (.warファイルを置くだけ) で、見た目や使い勝手もGtiHubに近いGitBucketを選びました。</p>



<h2 class="wp-block-heading">概要</h2>



<ul class="wp-block-list"><li>ソースからのビルドは行わず、yumパッケージや.warファイルを使用</li><li>Apacheのmod_proxy_ajpを使い、Tomcatへはポート8080ではなく80でアクセス</li><li>GitBucketでリポジトリにpushがあったらJenkinsで自動ビルド</li><li>Jenkinsのビルドでは、rsyscでApacheの公開ディレクトリに自動デプロイ</li><li>自動デプロイ時のユーザーはtomcatではなくapacheで行う</li></ul>



<h2 class="wp-block-heading">動作環境</h2>



<p>CentOS 7のミラーサイト一覧で、日本のミラーから最新版をダウンロードしてください。 <a href="https://www.vagrantup.com/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Vagrant</a>で起ち上げた仮想マシンや<a href="https://www.docker.com/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Docker</a>のコンテナでも構いませんが、一部読み替えたり、ポートマッピング等の追加設定が必要になります。</p>



<h2 class="wp-block-heading">リポジトリの準備</h2>



<p>デフォルトではパッケージが少なかったり古かったりするので、EPELとremiのリポジトリを追加します。</p>



<p><strong>EPELリポジトリの追加</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum install -y epel-release</code></pre></div>



<p><strong>remiリポジトリの追加</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm</code></pre></div>



<h2 class="wp-block-heading">パッケージのインストールと起動設定</h2>



<p>とりあえずは最新の状態にしておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum -y update</code></pre></div>



<p>必須パッケージに加え、普段よく使うパッケージも入れておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum --enablerepo=epel,remi install -y sudo vim-enhanced syslog httpd httpd-devel php php-devel php-pear php-mysql php-gd php-mbstring php-pecl-imagick mariadb-server phpmyadmin wget git java-1.7.0-openjdk-devel tomcat</code></pre></div>



<p>各種サービスを起動し、さらに再起動時にもサービスが有効になるように設定します。</p>



<p>CentOS 6までは<code>service</code>(または<code>/etc/rc.d/init.d/</code>のスクリプト)と<code>chkconfig</code>コマンドを使用しましたが、CentOS 7では<code>systemctl</code>に変更されています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>systemctl enable --now httpd
systemctl enable --now tomcat
systemctl enable --now mariadb</code></pre></div>



<p>サービスの状況は以下のコマンドで確認できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>systemctl list-unit-files</code></pre></div>



<h2 class="wp-block-heading">GitBucketをインストール</h2>



<p>先述の通り、.warファイルを置くだけの簡単インストールです。</p>



<p>https://github.com/gitbucket/gitbucket</p>



<p>releaseから最新版のgitbucket.warをダウンロードして、実行用のディレクトリにコピーします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>cp gitbucket.war /var/lib/tomcat/webapps/</code></pre></div>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">Jenkinsをインストール</h2>



<p>こちらも.warファイルを置くだけです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>簡単でいいですね！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>https://jenkins.io/</p>



<p>最新版のJava Web Archive (.war)をダウンロードして、以下のディレクトリにコピーします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>cp jenkins.war /var/lib/tomcat/webapps/</code></pre></div>



<p>ここでTomcatを再起動しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>systemctl restart tomcat</code></pre></div>



<h2 class="wp-block-heading">ファイアウォールの設定</h2>



<p>CentOS 6まではiptablesを使用しましたが、CentOS 7ではfirewalldに変更されています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>firewall-cmd --add-port=80/tcp --permanent</code></pre></div>



<h2 class="wp-block-heading">Apacheのプロキシ設定</h2>



<p>AJPというプロトコルによって、ApacheとTomcatの相互通信を行い、外部への配信はApacheが担当するようにします。</p>



<p>TomcatのAJP通信は、ポート8080ではなく8009を用います。</p>



<p>以下のファイルを作成します。</p>



<p><strong>/etc/httpd/conf.d/gitbucket.conf</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;Location /gitbucket&gt;
    ProxyPass ajp://localhost:8009/gitbucket
&lt;/Location&gt;</code></pre></div>



<p><strong>/etc/httpd/conf.d/jenkins.conf</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;Location /jenkins&gt;
    ProxyPass ajp://localhost:8009/jenkins
&lt;/Location&gt;</code></pre></div>



<p>ファイルを作成したら、Apacheを再起動しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>systemctl restart httpd</code></pre></div>



<h2 class="wp-block-heading">アクセスしてみる</h2>



<p>まずはGitBucketにアクセスしてみます。</p>



<p><code>http://<span style="color: #800000;">[hostname]</span>/gitbucket</code></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="674" height="286" src="https://blacknd.com/wp-content/uploads/2014/12/gitbucket_start.jpg" alt="" class="wp-image-760" srcset="https://blacknd.com/wp-content/uploads/2014/12/gitbucket_start.jpg 674w, https://blacknd.com/wp-content/uploads/2014/12/gitbucket_start-300x127.jpg 300w" sizes="auto, (max-width: 674px) 100vw, 674px" /></figure>



<ul class="wp-block-list"><li>ユーザー名：<strong>root</strong></li><li>パスワード：<strong>root</strong></li></ul>



<p>ログイン後はrootのパスワードを変更し、新規ユーザーを作成しておきます。</p>



<p>次にJenkinsにアクセスしてみます。</p>



<p><code>http://<span style="color: #800000;">[hostname]</span>/jenkins</code></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="674" height="286" src="https://blacknd.com/wp-content/uploads/2014/12/jenkins_start.jpg" alt="" class="wp-image-762" srcset="https://blacknd.com/wp-content/uploads/2014/12/jenkins_start.jpg 674w, https://blacknd.com/wp-content/uploads/2014/12/jenkins_start-300x127.jpg 300w" sizes="auto, (max-width: 674px) 100vw, 674px" /></figure>



<p>正常に起動し、アクセスできました。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">Jenkinsにプラグインをインストールする</h2>



<p>「Jenkinsの管理」→「プラグインの管理」→「利用可能」へと進みます。</p>



<p>フィルタに「git」と入力して、以下のプラグインを選択して「再起動後にインストール」します。</p>



<ul class="wp-block-list"><li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Git Plugin</a></li><li><a href="https://wiki.jenkins-ci.org/display/JENKINS/GitBucket+Plugin" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">GitBucket Plugin</a></li></ul>



<p>必要なプラグインがインストールされますので、「インストール完了後、ジョブがなければJenkinsを再起動する」にチェックを入れて待ちましょう。</p>



<p>長時間インストールが終わらない場合、実は既に終っているのに表示に変化がないだけということもあります。</p>



<h2 class="wp-block-heading">GitBucketとJenkinsの連携設定</h2>



<p>GitBucketのリポジトリを作成し、pushがあった際にJenkinsで自動デプロイを行うよう設定します。</p>



<h3 class="wp-block-heading">GitBucket の設定</h3>



<p>画面右上のレンチ型アイコンから設定画面へ進み、「System Settings」を選択します。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>設定値</th></tr></thead><tbody><tr><td>Base URL</td><td><code>http://<span style="color: #800000;">[hostname]</span>/gitbucket/</code></td></tr><tr><td>SSH access</td><td>■ Enable SSH access to git repository</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">GitBucketでリポジトリを作成する</h3>



<p>「new repository」からリポジトリ名を入力、「Initialize this repository with a README」にチェックを入れて新規リポジトリを作成します。</p>



<p>これで、リポジトリのトップページに表示されるREADME.mdのみがInitial commitされた状態になります。</p>



<p>次にリポジトリの「Settings」→「Service Hooks」と進み、「WebHook URLs」を入力します。</p>



<p><code>http://<span style="color: #800000;">[hostname]</span>/jenkins/gitbucket-webhook/</code></p>



<p>GitBucket側での設定は、このWebHookのみです。</p>



<h3 class="wp-block-heading">apacheユーザーでデプロイするための設定</h3>



<p>普通にデプロイの設定をすると、ファイル群はtomcatユーザーのままデプロイされます。<br>これだとApache的に都合が悪い場合もあるため、デプロイをapacheユーザーで行うようにします。</p>



<p>そのためには、Jenkinsを動かしているtomcatユーザーが、<code>sudo -u apache</code>できるようにしなければなりません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>visudo</code></pre></div>



<p>▼<strong> 変更前</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>Defaults    requiretty</code></pre></div>



<p>▼<strong> 変更後</strong>（コメントアウトする）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ Defaults    requiretty</code></pre></div>



<p>さらにtomcatユーザーがパスワード無しでsudoできるよう設定します。</p>



<p><strong>以下の行を追加</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>tomcat  ALL=(ALL)       NOPASSWD: ALL</code></pre></div>



<p>そして、デフォルトでは/var/www/htmlの所有者がrootになっており、このために自動デプロイが失敗するので、権限を変更しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>chown -R apache. /var/www/html</code></pre></div>



<h3 class="wp-block-heading">Jenkinsの自動デプロイ用ジョブを作成</h3>



<p>新規ジョブ作成から、ジョブ名を入力 (例：project01)、「フリースタイル・プロジェクトのビルド」を選択してOKをクリックします。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>GitBucketのリポジトリページからコピペできる項目が多いです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>設定値</th></tr></thead><tbody><tr><td>GitBucket - URL</td><td><code>http://<span style="color: #800000;">[hostname]</span>/gitbucket/</code></td></tr><tr><td>ソースコード管理 -<br>Git - Repository URL</td><td><code>http://<span style="color: #800000;">[hostname]</span>/gitbucket/git/username/project01.git</code></td></tr><tr><td>リポジトリ・ブラウザ</td><td>GitBucket</td></tr><tr><td>リポジトリ・ブラウザ - URL</td><td><code>http://<span style="color: #800000;">[hostname]</span>/gitbucket/username/project01/</code></td></tr><tr><td>ビルド・トリガ</td><td>■ Build when a change is pushed to GitBucket</td></tr></tbody></table></figure>



<p>最後に「ビルド手順の追加」から「シェルの実行」を選択し、下記シェルスクリプトを記入します。割と<strong>ここが目玉</strong>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sudo -u apache rsync -vr --delete --exclude &quot;.git/&quot; /usr/share/tomcat/.jenkins/jobs/project01/workspace/ /var/www/html/project01/</code></pre></div>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">動作確認</h2>



<p>gitコマンド、またはお使いのGitクライアントから、ファイルに適当な修正を加えてコミット → プッシュしてみてください。</p>



<p>※尋ねられるアカウントは、<strong>GitBucketの</strong>ユーザーアカウントです。</p>



<p>GitBucketでは、GitHub同様にコミット履歴が加わっていれば成功です。こちらはまず大丈夫でしょう。</p>



<p>Jenkinsでは、リポジトリに対応するジョブが実行されて、<code>/var/www/html</code>以下に自動デプロイが行われたことを確認できればOKです。</p>



<h2 class="wp-block-heading">CentOS 6で構築する場合</h2>



<p>CentOS 6でも同様に、まずyumのリポジトリとしてEPELとremiをインストールします。</p>



<p>Tomcat 7もインストールできるため、一部CentOS 7独特の部分 (systemctlやファイアウォール等) 以外はそのまま進められます。</p>



<p>しかしJenkinsのGit Pluginが<strong>エラーを吐きます</strong>。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>これはCentOS 6にyumでインストールしたGitのバージョンが、1.7.1等の古いバージョンだからです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>解決するためには、最新のソースからGitをインストールすることです。</p>



<p><strong>古いGitを削除</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum remove -y git</code></pre></div>



<p><strong>必要になるパッケージをあらかじめインストール</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel</code></pre></div>



<p><strong>新しいGitのソースファイルをダウンロード</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz</code></pre></div>



<p><strong>解凍してインストール</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>tar zxf git-1.9.0.tar.gz
cd git-1.9.0
./configure --prefix=/usr/local/
make
make install</code></pre></div>



<p>もし<code>/usr/local/bin</code>にPATHが通っていなければ、下記のように<code>.bash_profile</code>に追加しておいてください。</p>



<p><strong>.bash_profile</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>PATH=$PATH:/usr/local/bin

export PATH</code></pre></div>



<p>そして上記変更を適用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>source ~/.bash_profile</code></pre></div>



<p>一応Gitのバージョンを確認しておきましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>git --version</code></pre></div>



<p>これでJenkinsもエラーを吐くこと無く動作するはずです。</p>



<p>CentOS 7で採用されたApache 2.4の設定は従来とかなり変わっており、そのせいで戸惑うこともあるかと思いますので、馴染めない方は、少々面倒ですが上記の方法でCentOS 6上で構築してみるのも良いかと思います。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/centos7-gitbucket-jenkins-auto-deploy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPressの人気テーマ「Origin」でフォントを変更する方法</title>
		<link>https://blacknd.com/develop-wordpress/wordpress-origin-css-font-family/</link>
					<comments>https://blacknd.com/develop-wordpress/wordpress-origin-css-font-family/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Sat, 26 Oct 2013 21:34:12 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[ハック]]></category>
		<category><![CDATA[Origin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[テーマ]]></category>
		<category><![CDATA[カスタマイズ]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=493</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/wordpress-origin-css-font-family-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>人気テーマOriginでフォント指定する方法を紹介します。フォントサイズについてもまとめてみました。 Origin最新版はこちら フォントを変更できない理由 フォントの変更は、通常であればテーマファイル群のstyle.c [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/wordpress-origin-css-font-family-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>人気テーマOriginでフォント指定する方法を紹介します。フォントサイズについてもまとめてみました。</p>



<h2 class="wp-block-heading">Origin最新版はこちら</h2>



<figure class="wp-block-embed is-type-wp-embed is-provider-alienwp wp-block-embed-alienwp"><div class="wp-block-embed__wrapper">
https://alienwp.com/themes/origin/
</div></figure>



<h2 class="wp-block-heading">フォントを変更できない理由</h2>



<p>フォントの変更は、通常であればテーマファイル群の<code>style.css</code>で指定すればOKです。</p>



<p>しかしこのOriginというテーマは、そこに至るまでに少々手間がかかるというだけです。</p>



<p>素直に<code>style.css</code>でフォントを変更できない理由は以下のとおりです。</p>



<ol class="wp-block-list"><li>テーマのカスタマイズで指定するのが基本になっている</li><li>優先して読み込まれる<code>style.min.css</code>が存在する</li></ol>



<p>まず1はさほど問題ではありません。<code>style.css</code>側でどうにでもやり方があります。</p>



<p>問題の2は、読み込みを少しでも早くするためですが、そもそも<code>style.css</code>がそれほど大きくないため、圧縮する必要性を感じられません。</p>



<h2 class="wp-block-heading">style.min.cssを削除する</h2>



<p>元の<code>style.css</code>が残っている以上、カスタマイズをするうえで邪魔な存在でしかありません。</p>



<p>削除しても問題ないファイルですので、削除してしまいましょう。</p>



<p>これで<code>style.css</code>の記述を生かせるようになりました。</p>



<h2 class="wp-block-heading">!importantに頼る</h2>



<p>スタイルシートをいじる人にはお馴染みの手法です。<br><code>!important</code>を最後に付けることにより、他の場所で異なる指定がされていても、こちらの記述が優先ですよ、という宣言になります。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">さっそく変更してみる</h2>



<p>フォント名に日本語表記を使うのであれば、まずはこれが必須です。一番上のコメントブロック直下にでも記述しましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>@charset &#39;UTF-8&#39;;</code></pre></div>



<p>記述後は、忘れずにテキストエディタの機能を使い、文字コードをUTF-8(BOM無)で保存しなおしておきましょう。</p>



<p>次は全体のフォントを変更してみます。</p>



<p>テーマのバージョンにもよりますが、だいたい33行目あたりに以下の部分があると重います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>font: 0.8125em/1.692307em &#39;Bitter&#39;, Georgia, &#39;Times New Roman&#39;, Times, serif;   /* 13 / 16 = 0.8125;  22 / 13 = 1.692307 */</code></pre></div>



<p>この<code>font</code>行がフォントの指定をしいている部分です。<code>font-size, line-height, font-family</code>を1行で指定しています。</p>



<p>これを以下のように変更してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>font: 1em/1.65 &#39;Helvetica Neue&#39;, Arial, &#39;Hiragino Kaku Gothic ProN&#39;, Meiryo, sans-serif !important; /* 13 / 16 = 0.8125;  22 / 13 = 1.692307 */</code></pre></div>



<h3 class="wp-block-heading">フォントサイズの指定</h3>



<p>まず初めの<code>1em</code>は、フォントサイズの指定です。</p>



<p>元は<code>0.8125em</code>となっていますが、これは行末のコメントにある通り、サイト全体のデフォルトを<code>16px</code>とした際に、フォントサイズを<code>13px</code>にするために割り算をした結果の数値です。</p>



<p>次の<code>1.65</code>は、所謂なんちゃって黄金比な数値です。この計算式も行末のコメントに記述してあります。</p>



<h3 class="wp-block-heading">フォントファミリーの指定</h3>



<p>次の記述が、<code>font-family</code>に該当する部分です。</p>



<p>フォント名は先に書いてある方が優先順位が高く、欧文は「Helvetica NeueがなければArial」、日本語は「ヒラギノ角ゴシックProNがなければメイリオ」、「どれもなければシステムのゴシック体フォント」という指定になっています。</p>



<h3 class="wp-block-heading">すでにあるフォント指定の上書き</h3>



<p>重要なのが、最後の<code>!important</code>です。</p>



<p>これを記述した行は、CSS内の他の部分で「被る」指定があったとしても優先（上書き）されます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>!importantをさらに上書きする方法もありますが、ここでは説明を省きます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>Originテーマでは<code>style.css</code>とは別の部分でフォントを指定しており、それは管理画面の「外観」→「カスタマイズ」→「CUSTOM CSS」で変更することを前提としています。</p>



<p>しかし<code>style.css</code>でスタイルのすべてを制御したいと思うのはデザイナーの性です。ていうかわかりにくいですし。</p>



<p>ここで紹介した方法なら、<code>style.css</code>でフォントを含めすべてを制御できます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/wordpress-origin-css-font-family/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress 3.7からはコアやプラグイン、テーマまで自動アップデートが可能に</title>
		<link>https://blacknd.com/develop-wordpress/wordpress-37-auto-update/</link>
					<comments>https://blacknd.com/develop-wordpress/wordpress-37-auto-update/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Sat, 26 Oct 2013 02:03:02 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[設定]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[自動アップデート]]></category>
		<category><![CDATA[最新版]]></category>
		<category><![CDATA[ハック]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=483</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/wordpress-37-auto-update-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>WordPress 3.7で待望の自動アップデート機能が搭載されました。設定についても紹介します。 自動アップデートされるのは一部だけ すべてが自動アップデートされるわけではありません。 デフォルトで自動アップデートされ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/wordpress-37-auto-update-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>WordPress 3.7で待望の自動アップデート機能が搭載されました。設定についても紹介します。</p>



<h2 class="wp-block-heading">自動アップデートされるのは一部だけ</h2>



<p>すべてが自動アップデートされるわけではありません。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>アップデートによる不具合が心配という向きにとっては当然の措置なのですが、ライト層のユーザーにとっては「全部やっといてくれよ！」というところでしょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">デフォルトで自動アップデートされるファイル</h3>



<ul class="wp-block-list"><li>コア(マイナーバージョンアップ)</li><li>ローカライズ</li></ul>



<h3 class="wp-block-heading">デフォルトで自動アップデートされないファイル</h3>



<ul class="wp-block-list"><li>コア(メジャーバージョンアップ)</li><li>プラグイン</li><li>テーマ</li></ul>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">自動アップデートの設定を変更して有効にする</h2>



<p>これらを自動アップデートするか否かは、WordPressのルートディレクトリにある設定ファイル<code>wp-config.php</code>で指定することができます。</p>



<p>以下を追記すると、自動アップデートされるファイルを指定することができます。記述しない場合、これらは自動アップデートの対象外です。</p>



<h3 class="wp-block-heading">コアファイル(メジャーアップデート)：有効</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>add_filter( &#39;allow_major_auto_core_updates&#39;, &#39;__return_true&#39; );</code></pre></div>



<h3 class="wp-block-heading">プラグインファイル：有効</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>add_filter( &#39;auto_update_plugin&#39;, &#39;__return_true&#39; );</code></pre></div>



<h3 class="wp-block-heading">テーマファイル：有効</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>add_filter( &#39;auto_update_theme&#39;, &#39;__return_true&#39; );</code></pre></div>



<h2 class="wp-block-heading">自動アップデートを無効にするには</h2>



<p>逆に、自動アップデートされては困るファイルを指定することで、手動アップデートにすることもできます。</p>



<h3 class="wp-block-heading">コアファイル(マイナーアップデート)：無効</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>add_filter( &#39;allow_minor_auto_core_updates&#39;, &#39;__return_false&#39; );</code></pre></div>



<h3 class="wp-block-heading">ローカライズファイル：無効</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>add_filter( &#39;auto_update_translation&#39;, &#39;__return_false&#39; );</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>企業で利用している場合はコアやプラグインを下手にいじってほしくないケースもありますし、個人でも子テーマやまるごとコピーを使わずにテーマファイルをいじっている方はいると思いますので、きちんと使い分けしてトラブルのない自動アップデート生活を楽しみましょう！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/wordpress-37-auto-update/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NetBeansでの開発とテストにXAMPPを使うための設定</title>
		<link>https://blacknd.com/develop-wordpress/xampp-for-netbeans/</link>
					<comments>https://blacknd.com/develop-wordpress/xampp-for-netbeans/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Fri, 18 Oct 2013 03:25:47 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Mercury]]></category>
		<category><![CDATA[自動実行]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[設定]]></category>
		<category><![CDATA[XAMPP]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[サーバ構築]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=390</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/xampp-for-netbeans-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>統合開発環境にNetBeansを、テスト環境にXAMPPを導入する方法を紹介します。 XAMPP for Windows XAMPPは、いわゆるLAMP環境（Linux, Apache, MySQL/MariaDB, P [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/xampp-for-netbeans-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>統合開発環境にNetBeansを、テスト環境にXAMPPを導入する方法を紹介します。</p>



<h2 class="wp-block-heading">XAMPP for Windows</h2>



<p>XAMPPは、いわゆるLAMP環境（Linux, Apache, MySQL/MariaDB, PHP/Perl）をWindows上に構築するソフトウェアです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>VirtualBox等の仮想マシンやDockerのコンテナでLinuxを起動して、LAMP環境を構築する方法もあります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>XAMPPには、大きく分けるとインストーラ版と手動インストール版の2種類があります。ここでは後者のZIP版をダウンロードすることにします。</p>



<p>https://www.apachefriends.org/jp/</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="684" height="684" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_112158.png" alt="ZIP版をダウンロード" class="wp-image-392" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_112158.png 684w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_112158-300x300.png 300w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_112158-150x150.png 150w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_112158-100x100.png 100w" sizes="auto, (max-width: 684px) 100vw, 684px" /></figure>



<p>大きいファイルですので、ダウンロードには少々時間がかかります。</p>



<h2 class="wp-block-heading">XAMPPの解凍とインストール</h2>



<p>ダウンロードが完了したら、<code>C:</code>ドライブ直下に解凍しましょう。<code>xampp</code>というフォルダの中にゴチャゴチャとファイルができていればOKです。</p>



<p>このフォルダ構成は「標準的な構成」であり、これでインストールは完了です。</p>



<p>もし上記以外のフォルダ構成にした場合は、解凍したファイルにある<code>setup_xampp.bat</code>を実行しておきましょう。これでXAMPPの構成設定が更新されます。</p>



<h2 class="wp-block-heading">XAMPPの設定変更</h2>



<p>このままでも既にXAMPPは実行可能な状態なのですが、ここではNetBeansでPHPアプリケーションの開発を行うという前提で、必要となる設定をしていきます。</p>



<h3 class="wp-block-heading">PHPのモジュールを設定する</h3>



<p>当然のように使用するモジュールが使えなかったりするので、<code>php.ini</code>をテキストエディタで開いて編集します。</p>



<p>エクスプローラから直接エディタを起動しても良いですし、<code>xampp-control.exe</code>を実行してApacheの「Config」ボタンをクリックしても設定ファイルを開くことができます。というか後者のほうがラクでしょう。</p>



<p>右側にある「Config」から、使用するエディタの設定もできたりします。</p>



<figure class="wp-block-image"><a href="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114149.png" target="_blank" rel="noopener noreferrer" data-wpel-link="internal"><img loading="lazy" decoding="async" width="744" height="477" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114149.png" alt="PHPの設定ファイルを編集" class="wp-image-393" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114149.png 744w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114149-300x192.png 300w" sizes="auto, (max-width: 744px) 100vw, 744px" /></a></figure>



<p>いずれかの方法で<code>php.ini</code>を編集できる状態になったら、990行目あたり以降の<code>extension=php_*.dll</code>が羅列してある部分を変更します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>;extension=php_openssl.dll</code></pre></div>



<p>↓ コメントを外す</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>extension=php_openssl.dll</code></pre></div>



<p>これでSSLモジュールが使用できるようになりました。PHPのComposerが動かない！といった場合はコレが悪さをしている可能性大です。なぜ無効にしてあるのかは不明です。</p>



<p>他に、せっかくXAMPPにはMercuryという聞きなれないメールサーバも付属していますので、imapモジュールも有効にしておきたいところです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>;extension=php_imap.dll</code></pre></div>



<p>↓ コメントを外す</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>extension=php_imap.dll</code></pre></div>



<h3 class="wp-block-heading">PHPのXdebugを有効にする</h3>



<p>これも、主に開発環境の一部として使われるXAMPPでなぜ無効にしてあるのかわかりませんが、デバッグを行うためのXdebugが無効になっているので有効にします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>;zend_extension = &quot;C:¥xampp¥php¥ext¥php_xdebug.dll&quot;</code></pre></div>



<p>↓ コメントを外す</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>zend_extension = &quot;C:¥xampp¥php¥ext¥php_xdebug.dll&quot;</code></pre></div>



<p>そして設定値が色々ありますが、面倒なので以下をコピペして最終行に追記しておきましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=&quot;dbgp&quot;
xdebug.profiler_enable=1
xdebug.profiler_output_dir=&quot;C:¥xampp¥tmp&quot;</code></pre></div>



<h3 class="wp-block-heading">MySQLの設定を変更する</h3>



<p>同じようにして、MySQLの設定ファイルである<code>my.ini</code>を編集します。Linux等では<code>/etc/my.cnf</code>だったりするアレです。</p>



<p>デフォルトで使用する文字コードをUTF-8にする設定です。</p>



<p>まずは<code>[mysqld]</code>の下に以下の行を追記します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>character-set-server = utf8</code></pre></div>



<p>そして<code>[mysql]</code>と<code>[mysqldump]</code>それぞれの下に以下の行を追記します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>default-character-set = utf8</code></pre></div>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">XAMPPの実行と自動実行の設定</h3>



<p>ここまでで、大抵の本番環境と似た状態になったと思います。</p>



<p>早速XAMPPを起動してみましょう。起動するのは<code>xampp</code>フォルダにある<code>xampp-control.exe</code>です。</p>



<p>デスクトップなどにショートカットを作っておくと便利です。</p>



<p>起動したら、まず右端にある「Config」ボタンをクリックしましょう。そして、今後のXAMPP起動時に自動実行したい項目を選択しておきます。</p>



<figure class="wp-block-image"><a href="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114207.png" target="_blank" rel="noopener noreferrer" data-wpel-link="internal"><img loading="lazy" decoding="async" width="359" height="435" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114207.png" alt="自動実行する項目を選択" class="wp-image-395" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114207.png 359w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_114207-248x300.png 248w" sizes="auto, (max-width: 359px) 100vw, 359px" /></a></figure>



<p>ここではApache, MySQL, Mercuryを自動実行するよう設定しておきました。よく見るとテキストエディタも変更してあります。</p>



<p>ほかに、起動時に最小化してくれる「Start Control Panel Minimized」も地味に便利です。</p>



<p>「Save」したら再起動しても良いですし、このままApacheなどの「Start」ボタンをクリックしてもOKです。</p>



<h2 class="wp-block-heading">NetBeansの設定</h2>



<p>NetBeansで、XAMPPを使用するための設定をしておきます。</p>



<p>まずは「ツール」→「オプション」と進み、オプションダイアログの上部アイコン「PHP」をクリックします。</p>



<p>そして「一般」タブにある「PHP 5インタプリタ」の項目に、インストールしたXAMPPの<code>php.exe</code>を指定します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="915" height="649" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_1218011.png" alt="" class="wp-image-398" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_1218011.png 915w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_1218011-300x213.png 300w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_1218011-768x545.png 768w" sizes="auto, (max-width: 915px) 100vw, 915px" /></figure>



<p>次に「デバッグ」タブを開き、不要だと思われる「最初の行で停止」のチェックを外しておきます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="915" height="649" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_121814.png" alt="" class="wp-image-399" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_121814.png 915w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_121814-300x213.png 300w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-18_121814-768x545.png 768w" sizes="auto, (max-width: 915px) 100vw, 915px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p>これで、NetBeansとXAMPPを使ったWebアプリケーション開発とデバッグができるようになりました。</p>



<p>NetBeansでは、さらにPHPUnitによるユニットテストや、各種PHPフレームワークのプラグインなども豊富に揃っていますので、公式サイトやGoogle先生を参考に色々調べてみてください。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>大手のSymfonyやZend Frameworkだけでなく、CakePHPやFuelPHP等のプラグインもあります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/xampp-for-netbeans/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CentOS 6にLAMP, Git, Redmine, phpMyAdminな開発サーバを一発構築するスクリプト</title>
		<link>https://blacknd.com/develop-wordpress/centos-development-server-bootstrap-script/</link>
					<comments>https://blacknd.com/develop-wordpress/centos-development-server-bootstrap-script/#respond</comments>
		
		<dc:creator><![CDATA[りゅう]]></dc:creator>
		<pubDate>Mon, 14 Oct 2013 22:14:42 +0000</pubDate>
				<category><![CDATA[開発・WordPress]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[公開鍵]]></category>
		<category><![CDATA[bundle]]></category>
		<category><![CDATA[秘密鍵]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[bundlerr]]></category>
		<category><![CDATA[鍵認証]]></category>
		<category><![CDATA[開発サーバ]]></category>
		<category><![CDATA[Passenger]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[dotfiles]]></category>
		<category><![CDATA[自動化]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[仮想マシン]]></category>
		<category><![CDATA[Redmine]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">https://blacknd.com/?p=206</guid>

					<description><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/centos-development-server-bootstrap-script-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>CentOS 6の開発環境を一発で構築するスクリプトを公開しました。NetBeansやRedmineも紹介します。 GitHubのリポジトリ https://github.com/ryu-blacknd/bootstra [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://blacknd.com/wp-content/uploads/2013/10/centos-development-server-bootstrap-script-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>CentOS 6の開発環境を一発で構築するスクリプトを公開しました。NetBeansやRedmineも紹介します。</p>



<h2 class="wp-block-heading">GitHubのリポジトリ</h2>



<p>https://github.com/ryu-blacknd/bootstrap</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" loading="lazy" src="https://blacknd.com/wp-content/uploads/2019/12/ryu-icon.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"><span class="c-balloon__iconName">りゅう</span></div><div class="c-balloon__body -speaking -border-none"><div class="c-balloon__text">
<p>気が向いた時に更新するかもしれません。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">想定している開発フロー</h2>



<ol class="wp-block-list"><li>Redmineでプロジェクト管理</li><li>NetBeansで開発</li><li>ローカルのGitリポジトリでコミット</li><li>リモートのベアリポジトリへプッシュ(Redmineが参照するのはココ)</li><li>本番環境リポジトリ(<code>/var/www/html</code>以下)で自動プル</li></ol>



<h2 class="wp-block-heading">スクリプトの概要</h2>



<ul class="wp-block-list"><li>セキュリティ関係の設定(ローカル開発環境なので甘々に設定)</li><li>yumのリポジトリを追加(epel, remi)</li><li>yum updateと、必要なパッケージのインストール</li><li>不要なサービスの停止</li><li>LAMP環境のインストールと最低限の設定</li><li>RubyとPassenger周りのインストール</li><li>Gitユーザーの作成と関連する設定</li><li>phpMyAdminのインストール</li><li>Redmine本体、テーマ、プラグインをインストール</li><li>おまけ：ベアリポジトリ用フックスクリプトの雛形</li></ul>



<p>詳細は、シェルスクリプトを読んでみてください。たいしてトリッキーなことはしていません。</p>



<h2 class="wp-block-heading">動作環境</h2>



<ul class="wp-block-list"><li>LAN内のサーバPC、またはVirtualBox等の仮想マシン(Vagrant可)</li><li>CentOS6 x86/64 minimal isoイメージでのインストール直後であること</li></ul>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">インストール</h2>



<p>rootでログインし、gitをインストール後、取得したbootstrap.shを実行するだけです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yum -y install git
cd
git clone https://github.com/ryu-blacknd/bootstrap.git
chmod +x bootstrap/bootstrap.sh
bootstrap/bootstrap.sh</code></pre></div>



<p>ほぼノンストップで進みますが、Passengerのインストール時のみ画面に表示される通りEnterを押して進んでください。</p>



<p><strong>※2013.10.16 追記：Passengerインストール時にEnterを自動入力することで、ノンストップになりました。</strong></p>



<p>インストール後はシステムを再起動します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>reboot</code></pre></div>



<h2 class="wp-block-heading">開発に関する情報</h2>



<figure class="wp-block-table"><table><thead><tr><th>種別</th><th>値</th></tr></thead><tbody><tr><td>Gitユーザー</td><td><code>gituser:gituser</code></td></tr><tr><td>Gitベアリポジトリ *<strong>1</strong></td><td><code>/var/repos/[プロジェクト名]</code></td></tr><tr><td>Git公開鍵を追記するファイル *<strong>2</strong></td><td><code>/home/gituser/.ssh/authorized_keys</code></td></tr><tr><td>RedmineのURL</td><td><code>http://[ホスト名]/redmine/</code></td></tr><tr><td>Redmineユーザー</td><td><code>admin:admin</code></td></tr><tr><td>phpMyAdminのURL</td><td><code>http://[ホスト名]/phpmyadmin/</code></td></tr><tr><td>各プロジェクトのURL</td><td><code>http://[ホスト名]/[プロジェクト名]/</code></td></tr></tbody></table></figure>



<p>*<strong>1</strong> NetBeansでのプッシュ先リポジトリ&nbsp;=&nbsp;Redmineでの参照リポジトリ</p>



<p>*<strong>2</strong> 開発ユーザー毎にSSH公開鍵を作成し、このファイルに追記していく(後述)</p>



<h2 class="wp-block-heading">初回の開発フロー</h2>



<p>初回のみGit絡みで面倒ですが、以下のフローが済めば、以降は自動化され楽になります。</p>



<ol class="wp-block-list"><li>[サーバ] ユーザー<code>gituser</code>でSSHログイン</li><li>[サーバ] <code>/var/repos/[プロジェクト名]</code>を作成し、ディレクトリ内で<code>git init --bare</code></li><li>[ローカル] NetBeansでローカルのリポジトリにファーストコミット</li><li>[ローカル] NetBeansから先ほど作成したベアリポジトリにプッシュ</li><li>[ローカル] Redmineで新規プロジェクトを作成、リポジトリを設定、ユーザー割り当て</li><li>[サーバ] <code>cd /var/www/html</code>して<code>git clone /var/repos/[プロジェクト名]</code></li><li>[サーバ] <code>/var/repos/[プロジェクト名]/.git/hooks/</code>に<code>post-update</code>をコピーして編集</li></ol>



<p><code>post-update</code>ファイルはユーザー<code>root</code>のホームディレクトリにあるため、<code>gituser</code>はアクセスできません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>chown gituser. post-update</code></pre></div>



<p>としておき、<code>gituser</code>のホームディレクトリにでもコピーしておくとよいでしょう。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0828111045403072"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-0828111045403072"
     data-ad-slot="7288081085"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">post-updateのコピーと編集</h2>



<p>フックスクリプト<code>post-update</code>は、プロジェクトを作成する毎に手動でコピー、<code>****</code>の部分を編集します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>#!/bin/sh
/usr/bin/wget -q -O /dev/null http://localhost/redmine/sys/fetch_changesets?key=****
(cd /var/www/html/**** &amp;&amp; git --git-dir=.git pull)</code></pre></div>



<p>2行目は、Redmineの 管理 → 設定 → リポジトリ で生成したAPIキーを記述します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="902" height="486" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_004148.png" alt="" class="wp-image-277" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_004148.png 902w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_004148-300x162.png 300w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_004148-768x414.png 768w" sizes="auto, (max-width: 902px) 100vw, 902px" /></figure>



<p>3行目は、上記手順のプロジェクト名(=リポジトリのディレクトリ名)を記述します。</p>



<p>これで冒頭に書いたようなフローの準備が整いました。</p>



<p>以後はNetBeansで、ローカルコミットとベアリポジトリへのプッシュを繰り返して開発を進めます。</p>



<h2 class="wp-block-heading">コミット・メッセージでチケットの状態を更新する</h2>



<p>NetBeansからのコミット時は、コミット・メッセージの文末に<code>refs #1 @1.5h</code>等を付与すると、Redmineのチケットと連携することができます。</p>



<p>このとき、作成者とコミッタをRedmineのユーザー名に合わせるようにしてください。</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="791" height="565" src="https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_202424.png" alt="コミット・メッセージ" class="wp-image-382" srcset="https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_202424.png 791w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_202424-300x214.png 300w, https://blacknd.com/wp-content/uploads/2013/10/2013-10-16_202424-768x549.png 768w" sizes="auto, (max-width: 791px) 100vw, 791px" /></figure>



<p>上記ユーザー名がRedmine側と一致しない場合は、チケット連携が正常に行われません。その場合はプロジェクト毎の 設定 → リポジトリ から、ユーザーの関連付けを行ってください。</p>



<p>※詳しくはこちらを参照してください。</p>



<p>http://blog.redmine.jp/articles/new-feature-1_1/automatic-spent-time-logging/</p>



<h2 class="wp-block-heading">リポジトリへのアクセスにSSH鍵認証を利用する</h2>



<p>ユーザー毎のSSH公開鍵をユーザー<code>gituser</code>の<code>authorized_keys</code>に追記していきます。</p>



<p>以下の手順でSSH公開鍵と秘密鍵のペアを生成します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ssh-keygen -C user@example.com</code></pre></div>



<p>なお、この鍵ペアを外部サーバへの接続用途に使わないのであれば、パスフレーズは無視して構いません。</p>



<p>これでユーザーのホームディレクトリに2つの鍵ファイルが作成されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>役割</th><th>ファイル名</th></tr></thead><tbody><tr><td>SSH秘密鍵</td><td><code>~/.ssh/id_rsa</code></td></tr><tr><td>SSH公開鍵</td><td><code>~/.ssh/id_rsa.pub</code></td></tr></tbody></table></figure>



<p>この公開鍵をサーバ管理者に渡し、管理者は<code>gituser</code>ユーザーで<code>~/.ssh/authorized_keys</code>に追記します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>cd ~/.ssh
cat id_rsa.pub &gt;&gt; authorized_keys</code></pre></div>



<p>次にNetBeans側で、「秘密鍵ファイル」に上記の秘密鍵ファイルを指定すれば、リポジトリにアクセスすることができるようになります。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blacknd.com/develop-wordpress/centos-development-server-bootstrap-script/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
