tag:crieit.net,2005:https://crieit.net/tags/VPS/feed 「VPS」の記事 - Crieit Crieitでタグ「VPS」に投稿された最近の記事 2020-04-26T16:32:05+09:00 https://crieit.net/tags/VPS/feed tag:crieit.net,2005:PublicArticle/15868 2020-04-25T02:52:35+09:00 2020-04-26T16:32:05+09:00 https://crieit.net/posts/VPS-HTTP-80-HTTPS-443 VPSを引っ越したらHTTP(80)は繋がるがHTTPS(443)は繋がらなくなった原因 <h1 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h1> <p>sslhの設定のIPアドレスが古いVPNのもののままだったせいでした。<br /> 新しいVPSのIPアドレスに修正したら直りました。</p> <h1 id="現象"><a href="#%E7%8F%BE%E8%B1%A1">現象</a></h1> <p>VPSを引っ越したらHTTP(80)は繋がるがHTTPS(443)は繋がらなくなりました。<br /> IPアドレスを指定しても、HTTPは繋がるのにHTTPSは<code>connection refused</code>になってしまいました。<br /> Webサーバーにsshでログインして、<code>curl https://localhost</code>を実行しても<code>connection refused</code>になるので、ufwなどを疑い無効にしてみたりしましたが、現象は変わらずHTTPSだけが問題で、他は問題なしでした。<br /> 結局、<code>grep -nr 443 /etc</code>で設定をさらったら、<code>/etc/default/sslh</code>が引っかかって、sslhのインストールしたことを思い出したのでした。</p> <h1 id="sslhとは?"><a href="#sslh%E3%81%A8%E3%81%AF%EF%BC%9F">sslhとは?</a></h1> <p>sslポート(443)などに、sshなどのプロトコルでも接続できるようにしてくれる、プロトコル多重化サーバーです。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.rutschle.net/tech/sslh/README.html">sslh – A ssl/ssh multiplexer</a></p> 真田 保 tag:crieit.net,2005:PublicArticle/15179 2019-06-30T21:16:15+09:00 2019-06-30T21:16:15+09:00 https://crieit.net/posts/Ansible-VPS-2 AnsibleでVPSをセットアップする【その2】 <p><a href="https://crieit.net/posts/VPS-Ansible">VPSをAnsibleを使ってセットアップする</a>の後日譚的なものです。</p> <h1 id="docker/docker-composeのインストール"><a href="#docker%2Fdocker-compose%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">docker/docker-composeのインストール</a></h1> <pre><code class="yml">- name: Add Docker GPG key apt_key: url=https://download.docker.com/linux/ubuntu/gpg </code></pre> <h2 id="apt-get updateでロックがかかってしまう問題"><a href="#apt-get+update%E3%81%A7%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E5%95%8F%E9%A1%8C">apt-get updateでロックがかかってしまう問題</a></h2> <h3 id="pathで指定したファイルを削除"><a href="#path%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4">pathで指定したファイルを削除</a></h3> <p>state "absent"に変える。absent(欠席の意=つまりない状態)<br /> 対義語は<strong>present</strong></p> <pre><code class="yml">- name: remove lock file file: path: /var/lib/apt/lists/lock state: absent </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/makaaso/items/432274ac18fe5bd254e3">エラー「E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)」</a></p> <h1 id="NodeJS/npmのインストール"><a href="#NodeJS%2Fnpm%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">NodeJS/npmのインストール</a></h1> <p>後でgit pullしてnpm installするのですが、インストールされてないことに気づいたのでここでインストールしてしまいます。</p> <pre><code class="yml"> - name: Install basic list of packages apt: name: ['apt-transport-https','ca-certificates','curl','gnupg2','software-properties-common','npm','nodejs'] state: present update_cache: yes </code></pre> <pre><code class="yml"> - name: Add Docker APT repository apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/<span>{</span><span>{</span>ansible_distribution|lower<span>}</span><span>}</span> <span>{</span><span>{</span>ansible_distribution_release<span>}</span><span>}</span> stable - name: Install Docker packages apt: name: ['docker-ce','docker-ce-cli','containerd.io'] state: present - name: Install Docker-compose shell: curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - name: command: chmod +x /usr/local/bin/docker-compose </code></pre> <h1 id="プライベートリポジトリをgit clone"><a href="#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92git+clone">プライベートリポジトリをgit clone</a></h1> <p>まだメインのスクリプトと統合してない状態です。<br /> githubからpersonal tokenを発行して使います。</p> <pre><code class="yml">- hosts: all user: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" #become: yes tasks: - name: git pull git: repo: "https://<span>{</span><span>{</span>account_name<span>}</span><span>}</span>:<span>{</span><span>{</span> personal_token <span>}</span><span>}</span>@github.com/<span>{</span><span>{</span>account_name<span>}</span><span>}</span>/<span>{</span><span>{</span> repo_name <span>}</span><span>}</span>.git" dest: "~/<span>{</span><span>{</span> target_dir <span>}</span><span>}</span>" accept_hostkey: yes </code></pre> <h1 id="課題点"><a href="#%E8%AA%B2%E9%A1%8C%E7%82%B9">課題点</a></h1> <h2 id="docker-composeがパーミッションエラーで起動できない"><a href="#docker-compose%E3%81%8C%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84">docker-composeがパーミッションエラーで起動できない</a></h2> <p>ユーザをsudoできる権限を持ったグループに追加しないといけないみたいです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/docker/compose/issues/4181">ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?</a></p> ckoshien tag:crieit.net,2005:PublicArticle/15050 2019-06-01T23:26:13+09:00 2019-06-02T20:14:05+09:00 https://crieit.net/posts/VPS-Ansible VPSをAnsibleを使ってセットアップする <p>一念発起してVPSを借りたのですが、サーバの初期設定の操作で色々詰まってサーバ削除・新規作成を繰り返していたので、手順を残すこともできるAnsibleを使い始めました。</p> <h1 id="Ansibleって?"><a href="#Ansible%E3%81%A3%E3%81%A6%EF%BC%9F">Ansibleって?</a></h1> <p>RedHatが提供している、サーバの設定自動構成ツール。<br /> クライアントからサーバへSSHで接続してリモートでコマンドを実行できます。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://docs.ansible.com/ansible/latest/index.html">Ansible Documentation</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/Ansible_%28ソフトウェア%29">Ansible(ソフトウェア)</a></li> </ul> <h2 id="動作条件"><a href="#%E5%8B%95%E4%BD%9C%E6%9D%A1%E4%BB%B6">動作条件</a></h2> <ul> <li>クライアント: ansibleがインストールされていること</li> <li>サーバ: SSHで接続できること。python(2系でも3系でも可)がインストールされていること。</li> </ul> <h1 id="まずクライアント(mac)にansibleをインストール"><a href="#%E3%81%BE%E3%81%9A%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%28mac%29%E3%81%ABansible%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">まずクライアント(mac)にansibleをインストール</a></h1> <pre><code>$ brew install ansible </code></pre> <h1 id="playbookを作る"><a href="#playbook%E3%82%92%E4%BD%9C%E3%82%8B">playbookを作る</a></h1> <p>playbookと呼ばれる、実行したいスクリプトをyamlで記述します。<br /> 以下がplaybookの設定例です。</p> <h2 id="サーバにログインする"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%99%E3%82%8B">サーバにログインする</a></h2> <p>hostsファイルで設定したallというグループに属するサーバにアクセスします。<br /> サーバ作成直後でroot以外のユーザがいない状況を想定しているのでrootでログインします。</p> <pre><code class="yml">- hosts: all user: root </code></pre> <h2 id="一般ユーザを新規作成する"><a href="#%E4%B8%80%E8%88%AC%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%92%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">一般ユーザを新規作成する</a></h2> <p><strong>ubuntuはsudo権限を持ったグループ名がsudo</strong></p> <pre><code class="yml"> - name : add user user: name: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" state: present password: "<span>{</span><span>{</span> password <span>}</span><span>}</span>" groups: sudo </code></pre> <h2 id=".sshディレクトリを作成する"><a href="#.ssh%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">.sshディレクトリを作成する</a></h2> <p><strong>パーミッションは700ではなく0700</strong></p> <pre><code class="yml">- name: mkdir .ssh file: path: "~<span>{</span><span>{</span> user_name <span>}</span><span>}</span>/.ssh" state: directory owner: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" group: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" mode: 0700 </code></pre> <h2 id="公開鍵を一般ユーザのホームディレクトリに配置する"><a href="#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E4%B8%80%E8%88%AC%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B">公開鍵を一般ユーザのホームディレクトリに配置する</a></h2> <p><strong>パーミッションは600ではなく0600</strong></p> <pre><code class="yml">- name: private key for slave server copy: dest: "~<span>{</span><span>{</span> user_name <span>}</span><span>}</span>/.ssh/authorized_keys" content: "<span>{</span><span>{</span> lookup('file', '~/.ssh/public_openSSH') <span>}</span><span>}</span>" mode: 0600 owner: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" group: "<span>{</span><span>{</span> user_name <span>}</span><span>}</span>" </code></pre> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://dev.classmethod.jp/server-side/ansible/deploy-private-key-using-ansible-lookup/">Ansibleのlookupを使って秘密鍵を配備する</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.netassist.ne.jp/blog/?p=1970">Ansibleで複数ユーザ追加と鍵作成</a></li> </ul> <h2 id="セキュリティ設定変更"><a href="#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4">セキュリティ設定変更</a></h2> <h3 id="ポート番号変更"><a href="#%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E5%A4%89%E6%9B%B4">ポート番号変更</a></h3> <pre><code class="yml"> - name: "待受ポートを <span>{</span><span>{</span> sshd_port <span>}</span><span>}</span> に変更" lineinfile: dest: /etc/ssh/sshd_config regexp: "^Port" insertafter: "^#Port" line: "Port <span>{</span><span>{</span> sshd_port <span>}</span><span>}</span>" </code></pre> <ul> <li>iptablesで変更後のSSHポートを許可</li> </ul> <pre><code class="yml"> - name: Allow new incoming SYN packets. iptables: chain: INPUT protocol: tcp destination_port: "<span>{</span><span>{</span> sshd_port <span>}</span><span>}</span>" ctstate: NEW syn: match jump: ACCEPT comment: Accept new SSH connections. </code></pre> <ul> <li>ufw(ubuntuのファイアウォール)で変更後のSSHポートを許可</li> </ul> <h3 id="パスワードログイン禁止"><a href="#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E7%A6%81%E6%AD%A2">パスワードログイン禁止</a></h3> <pre><code class="yml">- name: パスワード認証の無効化 lineinfile: dest: /etc/ssh/sshd_config regexp: "^PasswordAuthentication" insertafter: "^#PasswordAuthentication" line: "PasswordAuthentication no" </code></pre> <h3 id="rootログイン禁止"><a href="#root%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E7%A6%81%E6%AD%A2">rootログイン禁止</a></h3> <p><a target="_blank" rel="nofollow noopener" href="https://blog.apar.jp/linux/5299/">Ansible でSSHのセキュリティ設定</a></p> <h2 id="rootユーザからログアウト"><a href="#root%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8B%E3%82%89%E3%83%AD%E3%82%B0%E3%82%A2%E3%82%A6%E3%83%88">rootユーザからログアウト</a></h2> <p>これ以降は作成した一般ユーザでスクリプトを実行した方がよいのでユーザ切り替えのためにログアウト。</p> <pre><code class="yml">- name: logout meta: reset_connection </code></pre> <h1 id="playbookを実行する"><a href="#playbook%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">playbookを実行する</a></h1> <p><strong>server_setup.yml</strong>というplaybookを、<strong>hosts</strong>というファイルで設定したサーバに対して実行します。公開鍵認証をする場合は<strong>private-key</strong>オプションでopenSSH形式の秘密鍵を指定します。</p> <pre><code>$ ansible-playbook server_setup.yml -i hosts --private-key ~/.ssh/private_openSSH.ppk </code></pre> <h1 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/okatai/items/ad02dbbcbe710ba56589">Ansibleでユーザ追加とグループ作成方法</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/rch1223/items/e698036e52661c333f4c">ubuntuサーバをansible制御下に置くための準備</a></li> </ul> ckoshien