2019年11月19日火曜日

PHPの拡張子を隠す

Apache設定の話ですが、検索すると以下の設定をすればできるよ、というサンプルがよく出てきます。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

でも、私の環境だとうまく動いてくれなかったんですよね。
代わりに、以下の設定であればうまく動きました!
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^.]+)$ $1.php [NC,L]

このあたり、ちゃんと理解していないのがダメですね。。。

以下のサイトを参考にさせていただきました。

2019年11月18日月曜日

「名前解決確認(nslookup/dig)」のエンハンスを行いました!

名前解決確認(nslookup/dig)でホスト名の指定にURLをそのまま入力できるようにしました。
例えば、これまで「https://service.suama.onl/dig-nslookup.php」をそのまま入力するとフォーマットチェックエラーになっていましたが、今後は自動的に「service.suama.onl」に変換されます。

ブラウザからURLをそのままコピーして名前解決を確認したいときに、少し便利になりました。

2019年11月4日月曜日

「IPおみくじ」を公開しました!

新たに「IPおみくじ(β)」を公開しました!

今回、接続元のグローバルIPアドレスと今日の日付を元に計算を行い、結果を返すおみくじサイトを作りました。計算ロジックは秘密ですが、大したことはしていません(笑)

ある夜、寝る前に「占いって出身地とかでもするよね...インターネットの世界での位置情報ってIPアドレスなわけだから、IPアドレスで占いを作るのって、今どきじゃない!?」と思いついたわけです。まあ、翌朝冷静になって考えると大した思いつきでもない気はしたものの、まあ取り敢えず作ってみるかと思い、作成を勧めたところ「これって占いではなく、おみくじでは?」となった次第です。

(β)としているのは、将来的に一般的なおみくじに書いてある和歌的なものも自動で生成して載せたいなー、と思っているためです。この機能を搭載することができたら、晴れてGAとしたいと思います。今の自分のスキルでは、時間がかかりそうですけどね(笑)

2019年10月28日月曜日

任意のフォーマットの日時を変数に取り込む

PHPで任意のフォーマットの日時データを変数として格納させる。

例えば以下のような変な日時データの場合
2019/Oct/1 02:10:08

$format = 'Y/M/j H:i:s';
$date = DateTime::createFromFormat($format, '2019/Oct/1 02:10:08');

echo $date->format('Y-m-d H:i:s'); #2019-10-01 02:10:08

以下のサイトを参考にさせて頂きました。

DateTime クラスのまとめメモ Qiita
PHPで日付や時刻をフォーマットする(1月1日、1/1など) flatFlag
※「date関数のフォーマット文字列一覧」を参考にさせて頂きました。

2019年10月27日日曜日

公開WEBサーバの証明書有効期限を確認するAPIを公開しました!

新たに証明書有効期限確認APIを公開しました!

これはターゲットのFQDNとポート番号(指定しないと443)を指定すると、設定されている証明書の発行日、有効期限、現在日時から有効期限までの日数を返すAPIとなっています。

将来的に証明書の有効期限切れをメールなどでお知らせしてくれるツールを作ろうと思っているのですが、まあ取り敢えずチェックするところまでをAPIで作っておきました。という感じです。

2019年9月7日土曜日

パスワード生成APIを公開しました!

新たにパスワード生成APIを公開しました!

これは条件を指定するとパスワードを単純にテキストで返すAPIです。また、指定可能な条件は全てオプションとなっており、何も指定しなくても8文字のパスワードを返します。

使い所があるのか、という気もしますが、まあ自分としてはあったら便利だなと思っていたので作っておきました。

ちなみに、条件に誤りがあるとERRORという文字列を返します。単純にテキストを返すAPIにしたかったのでエラーをどう返すのかは悩んだのですが、一旦これで行きたいと思います。

2019年8月21日水曜日

About Suama Online Service

Suama Online Service is a web service group that is built by one engineer who is usually involved in the infrastructure layer of IT technology to learn about the front end and programming.

The basic concept is as follows.

  • Keep it as simple as possible
  • It ’s okay to recreate something already in the world
  • What I want to use

This service can be used freely for both personal and commercial use. However, there are the following points to consider.

  • Please refrain from using in violation of laws and morals.
  • We do not guarantee any trouble or damage that may occur when using this service.
  • If you use the service in an abnormal manner, you may be asked to stop using it or you may be disconnected.
  • Although we will make every effort to continue this service as much as possible, please understand that it may be suspended without notice.

This site is link-free.
You can use your favorite page as the link destination.

Thank you.

About the access analysis tool used by this site

  • This site uses Google Analytics to analyze and improve the site
  • Web browsers using this site automatically send Google-specific information (for example, the web address or IP address of the page you visited)
  • In order to collect data, Google may set a cookie in the browser or read the set cookie.
  • By using this site, you are deemed to have been granted permission to process data performed by Google for the above methods and purposes.

About ads on this site

  • This site uses a third-party advertising service (Google Adsense).
  • In order to display advertisements for products and services according to the user's interests, such advertisement distributors use information cookies related to access to this site or other sites (for example, the web address or IP address of the accessed page). May be used.
  • By using this site, the user is deemed to have given permission for such data processing performed by Google for the above methods and purposes.

IPアドレス確認のエンハンス



IPアドレス確認のエンハンスを行いました。

追加したのは接続すると分かるのですが、接続元IPアドレスの国情報を表示するようになっています。それだけです!

2019年8月20日火曜日

接続元IPアドレスを返すAPI(json形式)のエンハンス

接続元IPアドレスを返すAPI(json形式)のエンハンスを行いました。

返すデータにIPアドレスだけでなく、そのIPアドレスが所属している国の情報などを追加しています。これで自分のIPアドレスがどこの国に割り当てられているのかが一発で分かりますね!

使い所は不明ですが。。。(笑)

2019年8月19日月曜日

ポートスキャン(nmap)の公開

先日このブログにも纏めた開発計画に基づき、ポートスキャンをしてくれるサイトを作成しました。
ポートスキャン(nmap)

まあ、あまり時間を取れない中ではスムーズに作れたかな、と思っています。WebAPIを呼び出して処理させる部分についての知見が得られたのが、特に良かったですね。(自分で作ったWebAPIなので、怪しいところもありますが。。。)

注意事項にも記載していますが、必ず自身の資産、もしくは管理されている環境に対して実施して下さい。不正アクセス準備を行っていると認識され、トラブルになる可能性があります。ご協力、宜しくお願いします!

2019年8月18日日曜日

nmapコマンド、実行結果の見方について

nmapコマンドはオープンソースのセキュリティスキャナです。主な機能はポートスキャンですが、ポートスキャン結果からOSやWebサーバの種類、バージョンを判定できるなど、高度な機能を持っています。

【重要な注意事項】
本コマンドを利用してスキャンする対象は、必ず自身の所有、もしくは管理しているサーバ、ネットワーク環境として下さい。インターネットに公開されているシステムを含め、他者、他団体の所有している環境に対してnmapを利用したポートスキャン等を実施した場合、不正アクセスの予備行為とみなされ、トラブルになる可能性があります。

nmapコマンドの利用の仕方は様々なサイトで紹介されていますので、本ブログでは取りあえげません。幾つか参考になるサイトを紹介しておきます。
nmapコマンドの使い方 Qiita
nmapコマンドで覚えておきたい使い方11個 俺的備忘録 なんかいろいろ

今回、Suama Online Serviceで公開したポートスキャン(nmap)ですが、こちらの実行結果の味方を解説します。

無事スキャンが実行されると、結果が返ります。
実行結果で表示される項目は以下のとおりです。

  • 対象IPアドレス
    • スキャンした対象のIPアドレスです。ターゲットにIPアドレスを指定した場合はそのまま、ホスト名を指定した場合は、名前解決された結果のIPが表示されます。
  • 対象Port番号
    • スキャン対象のポート番号です。ターゲットに指定したポート番号がそのまま表示されます。
  • 対象プロトコル
    • スキャン対象のプロトコル(tcp/udp)です。ターゲットに指定したものがそのまま表示されます。
  • state
    • 実行結果です。実行結果は6パターンあります。
      • open(対象ポートは開いている)
      • closed(対象ポートは到達可能だが、該当ポートで受信待機しているアプリケーションはない)
      • filtered(ファイアウォールなどによりフィルタされ、対象ポートまで到達できなかった)
      • unfiltered(対象ポートまで到達可能だが、受信待機しているアプリケーションがあるか判定できなかった)
      • open|filtered(対象ポートがopenかfilteredかの判定ができなかった)
      • closed|filtered(対象ポートがopenかfilteredかの判定ができなかった)
  • service
    • namapが検出したサービス
(参考)
Nmapに認識されるポートの6つの状態 nmap.org

文字列から空白スペースを削除する

やり方は幾つかあるようですが、str_replaceを使った方にしておきますかね。。。

1.preg_replace関数を利用
$string  = preg_replace("/( | )/", "", $string );
2.str_replace関数を利用
$string = str_replace(array(" ", " "), "", $string);

こちらのサイトを参考にさせていただきました。
PHP 文字列の空白を削除する 

2019年7月17日水曜日

「ポートスキャン(namp)を実行し、その結果を返すAPI」のエンハンス

早速ではありますが、WebAPIのエンハンスを行いました。
ポートスキャン(namp)を実行し、その結果を返すAPI

グローバルIPのみの対応だったものが、これでFQDNも指定できるようになっています。

今回の修正は思いの外難しくはなかったですね。ちなみに、名前解決はgethostbyname関数を利用しています。この勢いで近い内にGUI版についても作成したいと思います!

2019年7月16日火曜日

Suama Online Serviceエンハンス予定(2019年7月時点)

最近、全然サービスを作る時間が取れていません。が、一方で作りたい機能やちょっとしたアイディアは溜まる一方です。この辺りで一回今後の予定を整理しておきたいと思います。

まず最近取り組んでいるのはポートスキャンの機能です。実は密かにWebAPIは一旦公開しています。
ポートスキャン(namp)を実行し、その結果を返すAPI

これをベースにしてGUIを作成中ではあるのですが、一旦WebAPI側を修正しようかと考えています。

というのも、このWebAPIですがターゲットに指定できるのをグローバルIPだけにしています。FQDNも指定できるようにしようかと思ったのですが、例えばDNSラウンドロビンをしようとしてAレコードを複数登録しているような環境だと、どのIPに対してポートスキャンをかけたのかが不明確になるのかなと思い、グローバルIPだけを指定できるようにしたわけです。

しかし、GUIを作るにあたり、やはりFQDNを指定できないのはなんか不便ではないか、と思い始めました。それで、GUIについては追加でFQDNに対応させようかとも思ったのですが、そうするとWebAPIをまず作って、という流れにしている意味がないのでは?と思い、先にWebAPIを修正しようとしている次第です。

ということで、今後の開発計画ですがまず、以下を実施します。
ポートスキャン機能WebAPI修正→ポートスキャン機能GUI作成

その後ですが、今度は接続元IPを返す機能に機能追加を行おうかと考えています。具体的には、接続元IPアドレスを返すAPI(json形式)IPアドレス確認に国情報を追加しようかと考えています。自分がどこの国のIPから接続しているか分かると、(一部の方には)便利ですからね!既にIPアドレスの国を確認して返すAPIは作成済みなので、これはそんなに難しくはないはず、と考えています。(まあ、こういうのがはまったりするんですけど。)

ということで、第2弾の機能エンハンスは以下のようになる予定です。
接続元IPアドレスを返すAPI(json形式)、国情報追加→IPアドレス確認、国情報追加

その次ですが、色々と作りたい機能はあるのですが、前々から計画している英語化対応を一旦ここでやっておこうかと考えています。これ以上機能が増えてからだとやる気が起きないかも知れないので、ここがやり時だと判断しています。
英語化対応

まあ、とりあえずはこのくらいですかね。あまり先の計画を綿密に決めても計画倒れになりそうなので、まずはここをやりきることを目標にしたいと思います。

2019年6月23日日曜日

OSを再起動したところ403エラーが出てWEBサイトに繋がらなくなる

先程、久しぶりにサーバのメンテナンスをしていました。その中で一度サーバの再起動を行っていたのですが、再起動後に403エラーが出てWEBサイトに繋がらない、という事態が発生しました。正確に言うと、トップページに関してはApacheのWelcomeページが表示されるという、ある意味なお悪い事態が発生していました。

現象事態は以下のサイトを参考にさせて頂き、解消しています。
Apacheで403 Forbiddenが表示された時のチェックポイント5選 Wedding Park Tech Blog

SELinuxが有効になっており、そちらを無効にしたら復活しました。勿論、それとは別に勝手に復活したwelcome.confも対処しています。

原因ですが、恐らく何も考えずにyum updateを行い、Kernelが上がってSELinuxの設定がデフォルトに戻った、といったところでしょうか。yum updateは定期的にかけたほうが絶対に良い派ではあるのですが、やはりkernelまでガンガン上げるのは良くないのかもしれません。

以下のサイトを参考に、yum.confに除外を書いてしまいます。
yum updateでkernelを除外する方法 DQNEO
/etc/yum.confで指定する方法
exclude=kernel*
昔、kernelを除外するときは、それ以外にも除外したほうが良いモジュールがあるという資料を読んだ気がするのですが、忘れたので一旦気にしないことにしましょう。

2019年5月21日火曜日

ARINからIPリストのダウンロードができない場合がある

以前作成したIPアドレス国確認という機能は、日々IPアドレス情報をICANN配下の管理組織(RIR)のサイトからダウンロードし、IPアドレスリストを生成しています。このIPアドレスリスト生成が2日連続で失敗していたので、原因を調べてみました。

結論から言うと、北米を管理しているARIN (American Registry for Internet Numbers) からのIPアドレスリストダウンロードに、時々失敗しているようです。なんか、認証を求められることがあります。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest

でも、上手くいくときは上手くいくんですよね。謎です。
まあ向こう側の設定の問題だと思うので、しばらく様子見としたいと思います。

【2019/6/2追記】
なんか最近は上手くダウンロードできています。何でですかね?
今回は対向側が原因っぽいので、これで解決としておきたいと思います。

2019年5月6日月曜日

PHPでroot権限でコマンドを実行させる

nmapを実行して結果を表示するページを作成中です。nmapはお馴染みのコマンドですが、実はroot権限でないと動作しません。
PHPで開発するとapaheユーザ権限でコマンドを実行するため、そのままだと実行できないわけです。

ということで、sudoを利用します。
visudoを利用してsudoの設定を編集します。

以下を追加。
apache ALL=(root) NOPASSWD: ALL
参考にさせて頂きました。
Apache ユーザに別のユーザとして処理を実行させる 明滅するプログラマの思索

期待通り、sudoを利用してroot権限でコマンドが実行できます。
でも、何でもかんでも実行できるのも怖いなーということで、やはりnmapだけ実行できるように修正します。
apache ALL=(root) NOPASSWD:/usr/bin/nmap
参考にさせて頂きました。
PHPにて、root権限でコマンド実行 みズとおかズ

取り敢えず、これで大丈夫でそうです。

2019年2月23日土曜日

アカウント選択が出るためにLet’s Encryptの自動更新が上手くいかない場合の対処

サーバを移行してから初のLet’s Encrypt自動更新がうまくいきませんでした。ログを見たところ、なんかTime Outしているようなので、手動実行したところアカウントの選択が出てしまっていました。

こんな↓感じです。

Please choose an account
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): c

ここで処理が止まってTime Outしたんですね。

で、色々と調べていたのですが、Let’s Encrypt内の以下のディレクトリ配下に認証用のアカウント情報(秘密鍵とか)が入っていました。
/etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org/directory

不要な方を削除したところ、アカウント選択画面が出なくなったのでこれで大丈夫そうですね!

以下のサイトを参考にさせていただきました。
Delete duplicate account on server?

2019年1月6日日曜日

文字列を数値に変換する

PHPだと変数を特に宣言しなくても利用できてしまうので、数値チェックなどでうまく動作してくれなかったりします。そんな時、文字列を数値に変換するという方法があります。
文字列を数値に変換する

上記サイトからの抜粋ですが、10進数の場合は以下のように利用できます。
---
// 文字列型変数の宣言
$str = "11";

// 文字列型変数を数値型変数に変換する
$num10 = intval($str);
---