# GMOハッカソン 知識スタックシート ## 設定 サーバーIP: 192.168.1.121 ドメイン名: server.team-b.example.jp サブドメイン名: sub.server.team-b.example.jp ## [課題1-1](http://192.168.1.2:3000/user/hackathon-unei/phase1-1) * 制限時間は40分。40分超えると点数は入らない * 物理サーバーのパーツ調達からスタート * BIOSの変更は許されない * サーバを組み立て、IMMに接続してください。 接続確認後後、【IMMにログイン後の画面キャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 * 運営の島にディスク、メモリ等を置いています。 最大利用個数を守って受け取り、サーバ構築してください。 サーバー前面にテープで番号が振ってあります。 番号によってIPMIのID/パスワードを変えているので下記でログインしてください。 ### メモ * パスワード違ってハード取り替えたり,陸の孤島になったり,GW側の設定でSSLが通らずgdったけどメンターさんのサポート等で一応クリア ## [課題1-2](http://192.168.1.2:3000/user/hackathon-unei/phase1-2) * 冗長性のあるRAIDを組んでください。 * RAID設定完了後、【webbiosのRAID設定画面キャプチャ】と【設定したRAIDレベルを選択した理由】を各チームの課題結果報告チャンネルに添付/記載してください。 @運営/メンター CC @shingo-nakamura @kengo-kuwahara 【課題報告】 冗長性を持ったRAID構築完了。 ・設定したRAIDレベル 10 ・設定理由 冗長性が要件として求められているため、冗長性に優れるRAID10(スライピング+ミラーリング)かRAID6(二重パリティ)が選択肢として挙がりました。 RAID10とRAID6を比較すると、RAID10はパフォーマンスに優れるが実容量が少なくなっていて、RAID6はより実容量を多く取れてより冗長性が高いですがRAID10よりもパフォーマンスは落ちます。 今回のサーバー構成だと500GB×6本のディスクがあるのでRAID10でも容量は十分だと考えて、パフォーマンスの高さを重視してRAID10を選択しました。 ~~~~~~~~ ### Raidの種類 * 0 I/Oの速度が上がる * 1 ミラーリング * 6 二重パリティ CPUを使用してしまう ### 制限時間 30分 ### 補足 * [/user/hackathon-unei/scenario1/RAID](http://192.168.1.2:3000/user/hackathon-unei/scenario1/RAID) ### メモ * RAIDの設定を考慮し,IMMから設定しようとしたが,リモートコントロールのjnlpが開ける環境がほぼなかったため時間を取られた. * D-Subで直で確認しつつ(F1職人)RAID設定しようとしたが,RAID10の設定方法に手間取り,タイムアウト. ## [課題1-3](http://192.168.1.2:3000/user/hackathon-unei/phase1-3) 指定しているOSをインストールしてください。 【インストール後のログインプロンプト画面キャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 ### 制限時間 30分 ### 補足 [OSインストール](http://192.168.1.2:3000/user/hackathon-unei/scenario1/OS-install) ### メモ * ISOダウンロードに多少時間がかかりつつもインストール開始.キーボードが打てない事件もありつつ,パーティションをわけ,インストールを終える.応援したもののタイムアウト. * ここで例のパスワードが爆誕 ## [課題1-3.5](http://192.168.1.2:3000/user/hackathon-unei/phase1-3#head5) ### メモ * OSインストールと共にユーザー作成したため1-3が終わる前に終わっていた.が,提出できるわけもないので当然タイムアウト. ## [課題1-4](http://192.168.1.2:3000/user/hackathon-unei/phase1-4) セキュアなSSH設定を行ってください。 【どんな設定を行ったか】と【ログなどの証跡】を各チームの課題結果報告チャンネルに添付/記載してください。 * ポート番号変更 `62222` * [CentOS 7 で sshd のポート番号を変更する方法](https://weblabo.oscasierra.net/openssh-sshd-centos7-change-port/) * rootログイン禁止 * [sshのrootログインを禁止する](https://kazmax.zpp.jp/linux/lin_ssh.html) * パスワード認証無効化 * `sshd_config`の`PasswordAuthentication`を`no`にする * ssh有効ユーザを定義 * [sshによるログイン制限](https://linux.just4fun.biz/?Linux環境設定/特定ユーザのみSSHによるログインを可能にする) * sshプロトコルはv2を使う * 認証猶予時間、試行回数の設定 * 可能なら接続元IPアドレスを制限する ### 報告用テンプレート 〜〜〜ここから〜〜〜 @運営/メンター CC @shingo-nakamura @kengo-kuwahara 【課題報告】 SSH設定完了。 ■行った設定 ・非rootのユーザー作成(admin) ```bash # useradd admin ``` ・公開鍵によるSSH接続 ```bash $ cat authorized_keys ``` 〜〜〜ここまで〜〜〜 ### メモ * 皆でadminアカウント使いながらいろんな設定ファイルをカキカキした.sshd_configについては時間切れ直後に書き終えたので提出分にギリギリ入らなかった. ## [課題2-1](http://192.168.1.2:3000/user/hackathon-unei/phase2-1) webサーバをインストールし、デフォルトのwebページトップ画面を表示させてください。 表示確認後、【トップ画面のキャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 ### メモ * デフォルトで入っていたnginxを使用 * 早々に通過 ## [課題2-2](http://192.168.1.2:3000/user/hackathon-unei/phase2-2) DNSサーバをインストールし、サイトのドメインを登録して名前解決できるようにしてください。 【ローカル端末(自分のノートPC)で名前解決できた結果(コマンド結果など)】を各チームの課題結果報告チャンネルに添付/記載してください。 ### 目標時間 20分 ### 報告 @運営/メンター CC @shingo-nakamura @kengo-kuwahara 【課題報告】 名前解決の動作確認完了。 ・過程 ``` ``` ・名前解決結果 ~~~ ### メモ * BINDを導入 * gmo-sukisuki.sukiを登録.あんまり受けなかった. * 苦戦した(詳細はてんぷくん)のでタイムアウトしたが,メンターさんの助けも多少あり(?),無事DNSサーバーの完成 * てんぷくんが悔しがっていた * ここで1日目終わり ## [課題2-3](http://192.168.1.2:3000/user/hackathon-unei/phase2-3) webサーバの設定を変更し、下記のドメインでブラウザから接続できるようにしてください。 【指定したドメイン名のwebページのトップ画面のキャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 ### メモ * nginxを使用して,server_nameの設定でアクセスができるように設定 * のはずだが,後にlocalhostになっていたのを修正したのでなんで動いてたかよくわかんない * そこまで苦戦せずできた記憶 ## [課題2-4](http://192.168.1.2:3000/user/hackathon-unei/phase2-4) phpをインストールして、ブラウザからphp.infoを表示できるようにしてください。 【php.infoの画面キャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 ### メモ * php-fpmの導入 * `/usr/share/nginx/html`にphpinfo.phpを作成 * nginxのphpサーブの設定をし忘れていたため少し手間取ったが,nginxは得意だったためさらっとできた ## [課題2-5](http://192.168.1.2:3000/user/hackathon-unei/phase2-5) DBサーバをインストールして、mysqlコマンドでローカル接続できるようにしてください。 【mysqlコマンドでDB接続できている画面のキャプチャ】を各チームの課題結果報告チャンネルに添付/記載してください。 ### メモ * mariadbを爆速でインストールしmysqlで起動し通過 * ユーザー作成やパスワード設定をしていなかった * 2-2, 2-3が順調すぎたところでつまづきに躓いたので,だいぶメンタルに来た(鳩屋敷談) ## [課題2-6](http://192.168.1.2:3000/user/hackathon-unei/phase2-6) php.infoを削除。wordpressをインストール、設定してデフォルトのコンテンツを表示できるようにしてください。 【wordpressデフォルト画面】を各チームの課題結果報告チャンネルに添付/記載してください。 ### メモ * `/etc/nginx/conf.d/default.conf`の`server-name`が`localhost`になっていたためブラウザで確認ができなかった(先述の謎挙動) * phpが古かったため見れなかった ## [課題2-7](http://192.168.1.2:3000/user/hackathon-unei/phase2-7) wordpressのコンテンツを設置して、サイトを完成してください。 コンテンツを使ったデフォルト画面を課題結果報告チャンネルに貼ってください。 課題6のリンクから.php.txtファイルと.zipファイルをダウンロードし、wordpressを設置したディレクトリにコピーします。 .php.txtファイルの拡張子を.phpに変更してアクセスしてください。Duplicatorが起動します。 画面の指示に従って、既存のコンテンツを上書きする形でコンテンツを設置してください。 wordpress管理画面のログイン情報は以下のようになります。 ユーザ名: wp_admin_user パスワード: devsecopsthon2022 ### メモ * Zip関連のパッケージが不足 * yumのデフォルトのphpのversionが5だったため必要なパッケージでないパッケージが落ちた * パッケージの差し替えに時間が取られた * https://beyondjapan.com/blog/2019/02/php71-zip/ これやったら解決した ## [課題3-1](http://192.168.1.2:3000/user/hackathon-unei/phase3) サイトを追加の依頼が来ました。 サブドメインとして、"sub.server.team-b.example.jp"を立ち上げ2つ目のサイトを作成しましょう!! 2つ目のサイト追加が完了後、【トップ画面のキャプチャ】を各チームの課題結果報告チャンネルに報告してください 目標時間45分 1位通過のチームは高得点ゲットのチャンス 運用を意識したグッドポイントがあれば加点 ### メモ * DNSさわるてんぷくんがてきぱきで速かった * CNAMEにしなと提案しつつAレコードでのIPに当たる所をドメインに書き換えなきゃいけないのを提案し忘れた阿呆屋敷 * pythonのhttpサーバーで/tmpをサーブ.メンター苦笑い. * 3番目でした. * 後でhttpdのdockerコンテナに差し替え. ## [課題3-2](http://192.168.1.2:3000/user/hackathon-unei/phase3-2) サイトに見知らぬIPから不正なアクセストライが。。。 セキュリティ向上のために、該当アクセスを確認して対策しましょう! 対策が完了したら、【対策内容】を各チームの課題結果報告チャンネルに対応内容を報告してください 目標時間45分 ### メモ * SSHに来たIPを手動で弾く * tcpdumpでIPを調査し,iptablesでドロップ ## [課題3-3](http://192.168.1.2:3000/user/hackathon-unei/phase3-3) Webサイトへのアクセス状況を確認しましょう。 不審なアクセスを確認した際は対策にTryしてください! 対策できましたら、各チームの課題結果報告チャンネルに対応内容を報告してください ### 目標時間 40分 ### テンプレート @ug-メンター 【課題報告】 webサイトへの不審な通信への対策完了。 対策した内容1 ~~~ 対策した内容2 ~~~ : 対策した内容X ~~~ ### メモ * nginx(80番)にDDoS攻撃がきた.叩きすぎた人をnginxで444を返すようにしたが,502が444に変わっただけで根本的解決ではない.そのためiptablesでなんとかできないかと考えた末にfail2banを導入 * てんぷくんがんばってくれてギリッギリにip提出して通過 ## [課題3-4](http://192.168.1.2:3000/user/hackathon-unei/phase3-4) セキュリティチェックが実施されます。 制限時間内でサーバのセキュリティを強化しましょう!! セキュリティスキャンは、192.168.1.3のIPからになります。 このIPからの通信は許可しておいてください。 ### メモ * WordPressのパスワードを変えた * SSHのルートログイン禁止,パスワード認証禁止, * GMOチェックアカウントのSUDO権限ダッシュ * 80番を閉める * ## [課題3-5](http://192.168.1.2:3000/user/hackathon-unei/phase3-5) 人気サイトになり、サイトへの正常なアクセスが急増しました!! 「多くのアクセスに対して」「正しい応答を返す」ことを目指してチューニングを実施してください。 アクセスはサイトのトップページだけではなく、各個別の記事にも行われます。 60分経過後メンターが各チームを回りますので、メンターの目の前でwordpressの表示や操作が問題なく行えることを示してください。 webアクセスが来ないというチームは、正常なアクセスもブロックしてしまっている可能性があります。設定を確認してください。 時間当たりの接続回数制限を入れているチームは、厳しすぎるとサーバの負荷は軽くても閲覧できない人が多くなり、緩すぎてもサーバの過負荷で正しい応答を返せません。 最適なバランスを目指してください。 ### メモ ## Wordpress高速化メモ * [ブラウザキャッシュ有効化](https://onoredekaiketsu.com/speed-up-with-expires-browser-cache-of-nginx/#toc4) * https化 * http2を使う * QUIC? * https-portalを使うと簡単にhttps化できる? * https://github.com/SteveLTN/https-portal * https://4mo.co/start-wordpress-with-docker/ * WordPress管理画面のプラグイン【新規追加】で「EWWW Image Optimizer」をインストール * https://adam-technologies.jp/column/seo-speed/high-speed-wordpress/ * プラグイン * EWWW Image Optimizer * W3 Total Cache * WP Encryption ## 課題解決用の共有資料 * IMM * [05server](https://192.168.1.15) * サーバー物理構成 * 6Gb SAS FRU 500GB * 6 * メモリ 4GB * 16 * GMOインフラハッカソンポータルディレクトリ * [/user/hackathon-unei/settings/notes](http://192.168.1.2:3000/user/hackathon-unei/settings/notes) * [/user/hackathon-unei/scenario1/OS-install](http://192.168.1.2:3000/user/hackathon-unei/scenario1/OS-install) * [/user/hackathon-unei/scenario1/RAID](http://192.168.1.2:3000/user/hackathon-unei/scenario1/RAID) * RAID * 耐障害性を考えるとRAID 10かRAID 6かなぁ * * iptables周り ``` vim /etc/sysconfig/iptables # ポート解放程度ならば見ればなんとなく理解できると思うのでコピペから編集 iptables-restore < /etc/sysconfig/iptables systemctl restart iptables service iptables save ``` * docker `docker ps -a` これでwordpressが動いている場合は、誰かがコンテナを使っている `docker attach <NAMES>` 作業中のコンテナにアタッチする 繰り返すが、他の人は作業中である `docker commit <CONTAINER ID> wordpress` これで変更を保存 ただし他の人に確認をする事! ## 黒瀬ToDo * iptables : Done ! * named.conf: Done ! * DNSキャッシュの作成: Done ! ## 雑多メモ (箇条書きで書きまくれ!) * オフィス綺麗だった *