2019-06-02に更新

VPSをAnsibleを使ってセットアップする

一念発起してVPSを借りたのですが、サーバの初期設定の操作で色々詰まってサーバ削除・新規作成を繰り返していたので、手順を残すこともできるAnsibleを使い始めました。

Ansibleって?

RedHatが提供している、サーバの設定自動構成ツール。
クライアントからサーバへSSHで接続してリモートでコマンドを実行できます。

動作条件

  • クライアント: ansibleがインストールされていること
  • サーバ: SSHで接続できること。python(2系でも3系でも可)がインストールされていること。

まずクライアント(mac)にansibleをインストール

$ brew install ansible

playbookを作る

playbookと呼ばれる、実行したいスクリプトをyamlで記述します。
以下がplaybookの設定例です。

サーバにログインする

hostsファイルで設定したallというグループに属するサーバにアクセスします。
サーバ作成直後でroot以外のユーザがいない状況を想定しているのでrootでログインします。

- hosts: all
  user: root

一般ユーザを新規作成する

ubuntuはsudo権限を持ったグループ名がsudo

    - name : add user
      user: 
        name: "{{ user_name }}"
        state: present
        password: "{{ password }}"
        groups: sudo

.sshディレクトリを作成する

パーミッションは700ではなく0700

- name: mkdir .ssh
      file: 
        path: "~{{ user_name }}/.ssh"
        state: directory
        owner: "{{ user_name }}"
        group: "{{ user_name }}"
        mode: 0700

公開鍵を一般ユーザのホームディレクトリに配置する

パーミッションは600ではなく0600

- name: private key for slave server
      copy: 
        dest: "~{{ user_name }}/.ssh/authorized_keys"
        content: "{{ lookup('file', '~/.ssh/public_openSSH') }}"
        mode: 0600
        owner: "{{ user_name }}"
        group: "{{ user_name }}"

セキュリティ設定変更

ポート番号変更

 - name: "待受ポートを {{ sshd_port }} に変更"
       lineinfile:
         dest: /etc/ssh/sshd_config
         regexp: "^Port"
         insertafter: "^#Port"
         line: "Port {{ sshd_port }}"
  • iptablesで変更後のSSHポートを許可
    - name: Allow new incoming SYN packets.
      iptables:
        chain: INPUT
        protocol: tcp
        destination_port: "{{ sshd_port }}"
        ctstate: NEW
        syn: match
        jump: ACCEPT
        comment: Accept new SSH connections.
  • ufw(ubuntuのファイアウォール)で変更後のSSHポートを許可

パスワードログイン禁止

- name: パスワード認証の無効化
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: "^PasswordAuthentication"
        insertafter: "^#PasswordAuthentication"
        line: "PasswordAuthentication no"

rootログイン禁止

Ansible でSSHのセキュリティ設定

rootユーザからログアウト

これ以降は作成した一般ユーザでスクリプトを実行した方がよいのでユーザ切り替えのためにログアウト。

- name: logout
      meta: reset_connection

playbookを実行する

server_setup.ymlというplaybookを、hostsというファイルで設定したサーバに対して実行します。公開鍵認証をする場合はprivate-keyオプションでopenSSH形式の秘密鍵を指定します。

$ ansible-playbook server_setup.yml -i hosts --private-key ~/.ssh/private_openSSH.ppk 

参考リンク

ツイッターでシェア
みんなに共有、忘れないようにメモ

view_list 【Ansible】VPSをAnsibleを使ってセットアップする
第1回 VPSをAnsibleを使ってセットアップする
第2回 AnsibleでVPSをセットアップする【その2】

ckoshien

個人開発5年目。普段はフロントエンドエンジニア。 ReactJS/NextJS/NodeJS/ReactNative/Java

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント