🎬初めに
お久しぶりです!!フューチャースピリッツ、エンジニアブログの中の人、「通行人 R」でございます。
私たちの生活に欠かせないインターネットインフラであるサーバー!!
しかしサーバーとは何か....?と言われてもピンとくる人は多くいないかと思います!!
そこで今回はサーバーエンジニアである「通行人 R」が独断と偏見で選んだサーバーのアレコレについてご紹介する新コーナー!!
「ゼロから始めるサーバー入門講座」を始めたいと思います!!
記念すべき第一回目は「シェルスクリプトでIPアドレスを秘匿化する方法」について皆様にお届け致します!!
📘秘匿化とは?
秘匿化と言われてもピンとくる人は多くいないかと思います!!
何となく「スパイ」を連想させるようなダークでカッコイイ言葉ですが......
そもそも「秘匿化」とは何なのか?
秘匿化とは、公開してはいけないまたは公開したくない特定の情報を、削除または変換などを行い見えないように変更する処理の事を指します!
どのような時に必要なのか?
実際、サーバーエンジニアとして業務を行っていると、様々な場面で秘匿化処理が必要となる事がございます。
では実際にどのような場面で秘匿化処理が必要となるのかについて解説致します!
ログ等を翻訳する時
「I can't read english」な人間にとって翻訳ツールは必需品と言っても過言ではございません。
勇者で例えるならば「エクスカリバー」のような存在です!!
聖剣なくして魔王と戦う事はできません!!
ましてや専門用語が連なるログ等では読めない単語や文字が多く、恥ずかしながら、英文だけでは理解できない事が多々あります。
そこで活躍してくれるのが「Google」や「deepl」等の翻訳ツールです!!
しかしエラーログやサーバーログ等は接続元のIPアドレスやドメイン名、サーバー名等、様々な極秘情報が記載されており、秘匿化処理を行わずに他社様の翻訳サービスを使用すると、情報を渡してしまう事になります。
そこで必要となるのが秘匿化処理です!!
アプリケーション内部にて使用する
アプリケーションにて一部外部のAPIを使用している場合や、情報の保存等を行う場合等に公開したくない情報を秘匿化処理する場合がございます。
📘秘匿化する方法
では実際に情報を秘匿化する方法をいくつか解説したいと思います!!
情報を秘匿化する方法は様々ございますが一般的には下記の方法等がございます。
- 情報を削除する
- 情報を置き換える
- 情報をハッシュ化する
- 情報を暗号化する
「削除」「置き換え」は比較的簡単に実装する事が可能となっております。
「ハッシュ化」や「暗号化」等の方法は上記方法に比べ比較的、実装難易度が高いかと思います!!
あくまでも個人の感想ですが!!
📘シェルスクリプトでIPアドレスを秘匿化する方法
ここまで長くお付き合い頂き、ありがとうございます!!
ではでは、本日のメインディッシュ「シェルスクリプトでIPアドレスを秘匿化する方法」についてご紹介させて頂きます!
使用するコマンド
今回、秘匿化で使用するコマンドは「sed」です!!
「sed」コマンドは特定の文字を変換、編集、削除できるコマンドとなります。
今回は「sed」コマンドを使用してIPアドレスを変更する方法を解説致します!!
基本的な変換方法は以下になります。
sed "s/変更したい文字/変更後の文字/g"
上記を使用した変換の例となります。
##IPアドレスの格納された変数[txt]を用意
txt="IPアドレスは198.51.100.0となります"
##通常の呼び出し
echo $txt
#結果
IPアドレスは198.51.100.0となります
##変換した呼び出し
echo $txt | sed "s/198.51.100.0/XXXXXXXXX/g"
#結果
IPアドレスはXXXXXXXXXとなります
※上記IPアドレスはダミーIPアドレスとなります。
sedコマンドを使用して全てのIPアドレスを秘匿化する
先程「sed」コマンド使用した変換の例を紹介させて頂きましたがこちらは対象のIPアドレスを直接指定する為、ナンセンスなコードとなっております。
そこで全てのIPアドレスを秘匿化する方法を解説致します!!
使用するコマンドはたったこれだけです!!
sed -r "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/***.***.***.***/g"
上記ではIPアドレスを正規表現にて指定し「***.***.***.***」に変換しております。
IPアドレスを正規表現指定する事で全てのIPアドレスを対象に秘匿化する事が可能となっております!!
コマンド解説
・「-r」について
オプションの「-r」は拡張表現を使用する為のオプションとなります。
今回のIPアドレス表現は拡張表現となりますので使用する際は指定必須となります!!
・IPアドレスの正規表現について
IPアドレスの正規表現の指定方法は様々あると思いますが今回は「[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}」を使用致しました。
その他にも下記等で指定頂く事が可能となっているようです!!
- (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
- ([0-9]{1,3}\.){3}[0-9]{1,3}
※上記はIPV4の正規表現となります。
・「/g」について
「/g」は指定対象全ての文字列を置換するオプションとなります。
上記を使用した変換の例
##IPアドレスの格納された変数[txt]を用意
txt="IPアドレスは198.51.100.0となります"
##変換した呼び出し
echo $txt | sed -r "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/***.***.***.***/g"
#結果
IPアドレスは***.***.***.***となります
※上記IPアドレスはダミーIPアドレスとなります。
sedコマンドを使用して全てのIPアドレスを削除する方法
先程紹介致しましたコマンドは秘匿化における「置き換え」の処理となっております。
秘匿化には様々な方法があると述べましたが「削除」も秘匿化処理の一つとなります。
おまけとして全てのIPアドレスを秘匿化(削除)する方法を解説致します!!
先程のコマンドの「***.***.***.***」を消す事で削除する事が出来ます。
sed -r "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}//g"
上記を使用した変換の例
##IPアドレスの格納された変数[txt]を用意
txt="IPアドレスは198.51.100.0となります"
##変換した呼び出し
echo $txt | sed -r "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}//g"
#結果
IPアドレスはとなります
※上記IPアドレスはダミーIPアドレスとなります。
📘話題のChatGPTに聞いてみた
ChatGPT先生!!
お呼びでしょうか??
シェルスクリプトでIPアドレスを秘匿化する方法を教えてください!!
シェルスクリプトでIPアドレスを秘匿化する方法には、以下のようなものがあります。
- 正規表現を使ってIPアドレスをマスクする方法
- IPアドレスをランダムな文字列に変換する方法
- 外部ツールを使ってIPアドレスを秘匿化する方法
なるほど!
1番と2番は本日紹介した、置き換えの処理ですね!!
1番の方法について詳しく教えてください!!
かしこまりました。
正規表現を使ってIPアドレスをマスクする方法は以下になります。
#!/bin/bash
ip_address="192.168.0.1"
masked_ip_address=$(echo $ip_address | sed 's/[0-9]\+\.[0-9]\+\.[0-9]\+\./XXX.XXX.XXX./g')
echo "IP address: $masked_ip_address"
こちらもsedコマンドをしようした置き換えですね!!
2番の方法について詳しく教えてください!!
かしこまりました。
IPアドレスをランダムな文字列に変換する方法は以下になります。
#!/bin/bash
ip_address="192.168.0.1"
masked_ip_address=$(echo $ip_address | md5sum | cut -c 1-8)
echo "IP address: $masked_ip_address"
というわけでChatGPT先生にお聞きしたところ、今回同様にIPアドレスをマスクする方法と他2件が返ってきました!!
AIって凄すぎる...........と衝撃を受けました!
今後、ブログの相棒はAIになる日も近いかもしれません。
🎯まとめ
いかがだったでしょうか?
今回はシェルスクリプトでIPアドレスを秘匿化する方法について解説させて頂きました!!
エンジニアにとって情報は命!!意図しない情報流出を防ぐためも秘匿化は大事ですね!!
IPアドレス以外にもKEYやパスワード、ドメン名やサーバー名等も秘匿化する事をお勧め致します!!
それでは次回の記事でお会いしましょう!!さよなら!!