投稿

AWS WAFを導入する理由

こんにちは。AWS初心者のASD堤です。 サーバに不正アクセスされクレジットカードの情報漏洩や会社職員の個人情報が流出したりと、何かとセキュリティに関連するニュースが立て続けに起きているこの頃。 不正アクセスの手口は様々ありますが、主に使われるケースは次の2つになります。 ・不正ログイン ・脆弱性等の悪用 不正ログインは利用者側がログインIDやパスワードを適切に管理していれば、被害にあう確率は下がるでしょう。 しかし、脆弱性については日々変化しており対応するのも一苦労・・・。 SQLインジェクションやクロスサイトスクリプティング、ディレクトリトラバーサル等、技術者にとっては悩みのタネの一つ。 そのような脆弱性対策を簡単に実現してくれるAWS WAFなるものが2015年からサービスインされています。 そもそも、WAFとは一体なんなのか? Web Application Firewallの略で、正常な入り口から入ってくる悪意のあるデータを排除してくれる機能です。 よく耳にするFirewallは、IPアドレスとポートを入り口として、「この入り口には〜のIPアドレスは入っちゃダメ」とか 「この入り口は常に閉じておかないとダメ」と言った、不正な通信経路からの侵入を防ぐものでした。 しかし、正しい通信経路からくる不正なデータに対しては無力な訳です。 そこでWAFでは、通過するデータの中身を解析し、あらかじめ設定しておいたデータパターンと入力データを突き合わせ、 マッチしたデータを遮断・排除してくれます。 ただし、すべての不正データを防げるわけではなく、データパターンをガチガチに設定してしまうと 正常なデータも予期せぬ形で遮断してしまう可能性があります。 誤検知や誤遮断が発生するリスクを踏まえて、使う事をお勧めします。 データパターンを自分でカスタマイズし設定できるのですが、 現在はサードパーティのベンダーが様々なユースケースに対応するルールを提供してくれています。 マーケットプレイスから購入し、ALBやCloudFront等にアタッチする事で簡単に導入できるようになっています。 デメリットとして、サードパーティのルールはチューニングができないことに注意してください。 以下にWAFの要素と価格について簡単に紹介して...

フレッツ光を新方式(IPoE方式)に乗り換えましょう

こんにちは。福岡事務所の石橋です。 光回線による一般向けインターネット接続サービスの登場から15年以上が経過し、今ではほとんどの地域で利用可能となっています。 NTTのフレッツ網を利用した最大1Gbpsプランが主流ですが、夜間など利用者が多い時間帯に、動画が頻繁に止まるくらい遅い場合があります。 何故遅くなるのか?その原因と改善方法について説明します。 2015年ごろまでに光回線を契約した場合、ほぼ間違いなくPPPoE方式でインターネットに接続しています。 2016年以降でも、申し込んだISP(インターネットサービスプロバイダー)次第ではこの方式での接続になってしまいます。 PPPoE方式では、県ごとに存在するNTTの施設内で、網終端装置によりフレッツ光網とISP網とが接続されています。 ISPの県ごとの利用者数や通信量に対してこの部分の設備数が不足すると、通信速度が低下してしまいます。 また、設備の増設はNTT側が行っているため、ISP側が希望しても増設できない場合があります。 近年では、スマートフォンの普及と動画視聴などでの利用から、著しく混雑することが増えてきました。 この問題を抜本的に改善できるのが、IPoE方式によるインターネット接続です。 IPoE方式では、東京または大阪の接続点(2018年時点)まではフレッツ網を通り、そこからはゲートウェイルータを通してISP網に接続しています(両者の間をVNE事業者が仲介しています)。 PPPoEと違い、接続事業者側が自由に設備を増設することができるため、接続点がボトルネックとならず、混雑することがありません。 本来、IPoE方式はIPv6のみのサービスで、これだとGoogleやYoutube、Facebookなどごく一部のサイトしか閲覧できません。 しかし、IPoE方式と、PPPoEなしでIPv4接続を提供する方法を組み合わせることで、PPPoEとほぼ同じようにインターネット接続を行うことができます。 ISPによって異なりますが、v6プラスやIPv6オプション、IPv6 IPoE+IPv4 over IPv6方式などの名前で提供されています。 注意点として、これらの方式では対応ルーターへの買い替えが必要です。従来のルーターは利用できません。 大手ISPのほか、携帯各社の光コ...

C#で配列操作の可読性を高めるには

こんにちは。福岡事務所の荒平です。 私は前回LINQを使用し、ソースコードの可読性を高める記事を書きました。 今回も可読性に注意しながら「配列などの複数要素から特定の条件に一致する先頭要素」を取得する方法について説明していきたいと思います。 さて、いきなり質問ですが、皆さんは配列から特定の条件に一致する先頭要素を取得したいときどのようにして取得しますか? ・配列の中をfor文などのループで回して条件に合う要素が見つかればそれを取得してbreakする… 条件に合った要素を取得することはできますが、可読性の視点から見るともう少しスマートに書きたい… そこで登場するのがLINQメソッドの「First」です。 ■Firstとは  配列などの複数要素のうち、先頭の要素(条件を指定した場合は条件に一致する最初の要素)を返すメソッド  ◆基本的な書き方①   value = 配列.First(条件);   このように書くだけで配列の中から条件に合った最初の要素をvalueに入れることができます。   しかし、条件に一致する要素が1つもない場合System.InvalidOperationExceptionの例外が発生してしまいますので、   実際にはより汎用的な「FirstOrDefault」というメソッドを使います。  ◆基本的な書き方②   value = 配列.FirstOrDefault(条件);   こちらは条件に一致する要素が1つもない場合は型のデフォルト値(0やnullなどデータ型ごとにdefault構文で取得できる値)を返します。     ここまで配列から要素を取得することについて書きましたが、もちろん配列だけではなく「List」などのコレクションにも使えます。 ■「Last」、「Single」メソッド  ちなみに類似機能として「Last」、「Single」があります。  (それぞれにXxxOrDefaultがあります)  Firstが最初の要素を返すのに対し、Lastは最後の要素を返します。  Singleは条件を満たす唯一の要素を返します。  しかし、Singleについては唯一の情報を取得する目的に使われるメソッドなので、条件に一致する要素が複数あった場合、  System.Inv...

Windows 10に.NET Framework 3.5が入らない?

イメージ
こんにちは。 熊本事務所の庄村です。 今回は、実際の業務中に遭遇したトラブルとその解決法についてご紹介したいと思います。 弊社で開発し、お客様に納品しているアプリケーションについて、 最近、Windows 10上で動作するか検証する機会がありました。 対象のアプリケーションは.NET Framework 3.5を使用しており、 現在はWindows 7上で運用していますが、近日中にOSをWindows 10に移行する予定のため、 OS移行前に動作検証しておく必要がありました。 事前の調べでは、Windows 10では追加のインストールが必要なものの、 .NET Framework 3.5はサポート対象となっているため、特に問題は発生しないはずでした...。 しかし、業務アプリケーションのインストール時に、 自動で.NET Framework 3.5のダウンロードインストールが実行された際、途中でエラーが発生。 改めて、Microsoftのサポートサイトを確認すると、Windows 8以降で発生する現象の様でした。 しかし、今回発生したエラーコード:0x800F0954とそれに対応する直接の対策手順は確認できませんでした。 エラーが発生するタイミングから、ダウンロードの時点で失敗しているようなので、 その後の調査で判明した、コンポーネントのダウンロード元を変更するグループポリシーを設定することで、 何とか.NET Framework 3.5のインストールに成功しました。 以下にその際の対応手順を記します。 1. グループポリシーエディタを起動する。 Winキー+Rキー押下で表示される、「ファイル名を指定して実行」に"gpedit.msc"を入力し、 [OK]ボタンを押して「グループ ポリシー エディター」を起動します。 2. オプションコンポーネントのインストール設定画面を開く。 上記選択行をダブルクリックします。 3. オプションコンポーネントのインストール設定を有効にする。 上記青枠を選択し、[OK]ボタンを押下します。 4. .NET Framework 3.5を有効化する。 上記1~3までの手順実施後に、コントロールパネルの...

SambaがWindowsサーバーの代わりになる理由

こんにちは。熊本事務所の上田です。 今回はSambaについてお話ししようと思います。 まずSambaとは何か? 一言で言うと、LinuxをWindowsファイルサーバーとして利用出来るソフトウェアです。 近年では、本家のWindowsサーバーに代わって多くの企業や官公庁などで基幹サーバーとして活躍の場が広がっています。 何故Windowsサーバーの代わりになるのか?そのポイントは3点あります。 まず、導入時の初期コストが抑えられます。 クライアントマシンになると一般的にWindowsになると思いますが、 WindowsOSをファイルサーバーとした場合、接続にCAL( = Client Access License)というライセンス料が必要なのです。 LinuxでSambaを利用する場合はCALの支払いが必要ありません。 次にランニングコストが抑えられます。 Windowsサーバー系のOSだと高性能なスペックを要求に対して、Linuxを動作させる場合は低スペックな性能でも十分です。 例えばWindowsXPやWindowsVista世代のPCでも問題なく動いてくれます。 また、OSのサポートが切れてしまった際新しいOSへ入れ替える必要が出てきます。 Windowsはライセンスの購入が必要なので有料ですが、Linuxなら無料。 古いPCを再利用することでハード面でもソフト面でも費用を大きく抑えることが出来ます。 最後はセキュリティです。 セキュリティ対策はWindowsもLinuxも大きな違いはありません。 ただ、セキュリティホールなどの問題が見つかった場合、問題が解決されるまでセキュリティが無防備となってしまいます。 WindowsはMicrosoftから修正プログラムが提供されるまで時間が掛かりますが、 オープンソースであるLinuxだと、世界中のプログラマーによって修正が行われる為比較的早く提供出来ます。 但し、Linuxの有料セキュリティソフトは法人向けが殆どなので、個人で使用する場合は注意が必要です。 私もファイルのバックアップ用途として運用を始めましたが、 自宅で使う分なら特に難しい設定を必要としませんので、Linux初心者でも手軽に利用できる点は素晴らしいと思いました。 使わなくなったPCやサーバ...

GO言語のgofmtの-tabオプションは、v1.2以降使えない

イメージ
こんにちは、ASD熊本の菊池です。 最近業務でGO言語を触る機会があったのですが、 インデントは必ずタブでそろえるという慣習に少し苦戦していました。 GO標準フォーマッタであるgofmtは、スペースをタブに変換してくれるのですが、 既にスペースインデントでGitに上げてしまっていた場合は比較が多少面倒...といった具合です。 gofmtにタブを使わないオプションがないか調べたところ、 「gofmtは、-tab=falseオプションを使えばスペースでインデントしてくれる」 という記事を見かけました。しかし... そんなオプションは知らんとGOに突き返されます。 まさかバグじゃないだろうなと本家のGitHubを覗いてみたところ、 バージョン1.3を境に-tabオプションが削除されていることを確認できました。 更にgofmtのコミットも確認したところ、理由とおぼしき記述が見られました。 私訳:  これらのフラグを持つことは「gofmtされたはず」のコードとして容認してもいい、と誤解させます。  組織がgofmtを内部的に異なる設定で使用したい場合、gofmtを簡単に変更することができますが、  オープンソースのコミュニティが使用する "gofmt"では、この古いスイッチをサポートすべきではありません。  -commentsフラグも削除します。  "cmd/gofmt: remove -tabwidth and -tabs flags・golang/go@014f3dc・GitHub"より引用   https://github.com/golang/go/commit/014f3dcc837cb6789076cff4fccaa3bd221f823e この修正の経緯としては、Git上で"gofmtの-tabs、-tabwidthフラグは削除されるべき" という旨のIssueが挙げられていたことから始まっていたようです。 意見のいくつかを要約すると... ・-tab,-tabwidthはGO言語の初学者を混乱させる可能性がある。 ・-tab,-tabwidthされたコードは、gofmtを通したGO標準のコードとは言い難い。 ・この機能を削除したと...

LINEBOTはなぜ自動で返信できるのか?

こんにちは、熊本事業所の清島と萓嶋です。私たちはLINEBOTについて説明したいと思います。 BOTとは人間の代わりに作業を行ってくれる自動化プログラムの総称です。 BOTにも様々な種類がありますが、LINEBOTはLINE上でユーザーの発言に対して自動返信を行う、チャットボットに分類されます。 皆さんはLINEBOTと聞いて何を思い浮かべましたか? 企業が定期的にプロモーションを行うBOTや、発言を他の言語に素早く変換してくれる翻訳BOT、AIを用いて自然な会話を行えるBOTなど、一度は利用したことがあるのではないでしょうか? 今回はLINEBOTの自動返信の仕組みについて解説していきたいと思います。 まず、ユーザーがLINEBOTへメッセージを送信します。 送信されたメッセージはLINEサーバを通り、BOTはそれをイベントとして取得します。 イベントにはユーザーの名前やID、リプライトークンが含まれており、 それを取得したBOTは返信プログラムを実行します。 リプライトークンは、特定のユーザーに返信するために使用されます。 取得したユーザーの名前を使うと、BOTが名前で呼びかけるような返信もできますね。 更に、BOTはメッセージだけでなく、 ユーザーが起こした動き(BOTと友達になる、グループに招待する、など)もイベントとして受け取ることができます。 皆さんも公式アカウントを友達登録した際、「登録ありがとうございます」という内容のメッセージを受け取ったことがあると思います。 これは、友達登録イベントを受け取ったBOTが、返信プログラムを実行しているからです。 ここまでBOTがイベントを取得する、と説明してきましたが、そのために必要なのがAPIです。 APIとはApplication Programming Interfaceの略で、プログラムを構築するために必要な機能を呼び出すものです。 また、APIはwebhookを用いてBOTへ中継しており、メッセージのリアルタイム受信を可能にしています。 APIを使うことで、テキスト形式での返信はもちろん、ユーザーに選択してもらうボタンを出現させたり、 画像とテキストを同時に表示したりできます。 また、最近のバージョンアップにより、クイックリプライ機能という、画...