読者です 読者をやめる 読者になる 読者になる

kopug memo

名古屋で働くとあるWebエンジニアの覚書。

Vim Bootstrapを使ってお手軽にvimrcを強化

f:id:kopug:20161231230409p:plain

はじめに

vimを使っているけど, vimrcをあんまり頑張ってメンテしてない人向けの記事です.
素のvimでコーディングをするのは正直しんどいです. それならIDEを使ったほうが絶対良い.

自分でvimrcをイチから書き起こすのはメンドイけど, vimを使いやすくしたい!という人にお勧めなのが Vim Bootstrapです.

インストール方法

Vim Bootstrapを見ると分かりますが, 複数の言語に最適化されたvimrcを作ることができます.
普段自分が使っている言語をココでは選んで, Generate!ボタンを大クリックしてください.
そうすると generate.vim というファイルがダウンロードできます.

このファイルを ~/.vimrc に名前を変更をし, 以下のコマンドを実行します.

vim +PlugInstall +qall

詳しいインストール方法はここを参考に.

GitHub - avelino/vim-bootstrap: Vim Bootstrap is generator provides a simple method of generating a .vimrc configuration for vim

こんな感じになりました

f:id:kopug:20161231231525p:plain

まとめ

ソードアートオンライン トップアルバム & ソング には 131曲も収録されていますが, 特におすすめは以下の曲です. 胸アツになること間違い無し.

  • swordland
  • in your past
  • light your sword
  • we have to defeat it
  • gracefully
  • a tiny love

※ ちなみにアフィコードは含まれていませんので, 気にせずクリックしてください.

Amazon LinuxにハニーポットCowrieを入れてみる

はじめに

最近suzuki.sh に刺激されたのもあり, 2013年からhatena diaryの更新が完全停止していたが, hatena blog にインポートをして再度開始してみることに. 今年の夏/冬と"とあるイベント"があり, そこでSSHハニーポットを入れて遊ぶことがあったので, それの備忘録をここで残してみます. ただその時は, kippoを利用して構築したので, 今回は前々から気になっていたCowrieを利用する.

ハニーポットってなに?

元来は「蜜(の詰まった)壷」の意味で、何らかの有益そうな情報や資源がありそうな場所を用意して、それにつられた者を観察したり、肝心な部分で被害を出さないために目をそらせたり、コンピュータ・フォレンジックスを行うための証拠を集めたりする、一種のおとり手法に使われる。 手法そのものをハニーポットと呼ぶこともある。

ハニーポット - Wikipediaからの引用によると上記のように示されている.
ここではsshハニーポットを利用するので, 通常22番ポートでsshdがListenしているが, そこを全く別のモノに置き換えてしまい, ダミーのsshdで受け付けてしまおうという事である.

今回目指す構成

上にも書いたが, 22番ポートでListenしたい. ただ Cowrieを起動するにはrootユーザではなく一般ユーザにしたいので, その場合は通常だと1024番ポート未満ではListen出来なくなる.
なので今回はiptablesのNATテーブルを利用して, 22番ポートに来たリクエストを CowrieのListenポートにリダイレクトする事にした.

まとめるとこんな感じ

  1. sshdのポートは22番から2754番に変更
  2. Cowrieは2222番ポートでListenさせる
  3. iptablesのNATを利用して, 22番ポートへのアクセスを2222番ポートにリダイレクトさせる

まずはインストール

必要なパッケージをインストールする

必要なパッケージは以下に記載されている
cowrie/requirements.txt at master · micheloosterhof/cowrie · GitHub

$ sudo yum -y install gcc git python-setuptools python-devel python-crypto libffi-devel openssl-devel gmp-devel
$ sudo easy_install pip
$ sudo easy_install PyCrypto pyasn1
$ sudo pip install twisted==15.2.1 cryptography configparser pyopenssl tftpy

※ twistedのバージョンが 15.3以上の場合, 起動しなかったためバージョンを15.2.1に指定しています.

Cowrieの起動用アカウントの作成

$ sudo adduser cowrie

ここから先は cowrieユーザにswitchして作業をしていきます.

$ sudo su - cowrie

Cowrieのダウンロードと設定

$ git clone http://github.com/micheloosterhof/cowrie
$ cd cowrie/
$ cp cowrie.cfg.dist cowrie.cfg

今回は設定はデフォルトのままでいきます. listenポートを変更したり, ホスト名を変更したい場合はここを適宜触ってください.

ダミーユーザの追加

以下のファイルを編集/追加することで, ダミーユーザの作成ができます.
今回はこのまま利用するので, rootのパスワードは!rootです.

$ cat data/userdb.txt

root:x:!root
root:x:!123456
root:x:*
richard:x:*
richard:x:fout

Cowrie を起動する

$ ~/cowrie/start.sh

このままだと, 2222番ポートでListenしているだけですが, 以下のように接続をしてテストをしてみます.

$ ssh root@localhost -p 2222

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@svr04:~#

こんな風に返ってきたらOKです.
Cowrieを停止したい場合は以下のコマンドで停止することができます.

$ ~/cowrie/stop.sh

ポート番号を変更していく

ここからは適宜rootで実行していくので sudoを利用しています.

sshdのポート番号を変更

$ sudo vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
# Port 22
Port 2754  <- ここを追加

変更をしたら設定を再読込させます.

$ sudo service sshd reload

iptablesの設定

必要最低限の設定だけをここではします.

sudo vim /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
$ sudo service iptables start

これで 22番ポートで ssh接続をすると 2222番ポートに転送されるようになりましたね.

ログの出力と確認

リアルタイムに見たい場合はこんな感じで.

$ tail -f ~/cowrie/log/cowrie.log

セッションごとにどんなコマンドが実行されたのかを見る場合は, 以下のコマンドでみれます.

$ ~/cowrie/bin/playlog ~/cowrie/log/tty/YYYYDDMM-AAAAAA-BBBBBBB-xx.log

このコマンドを実行すると, そのセッションでの出来事を再現してくれるので面白いですね.

まとめ

今回は遊び用で入れたものを書いているので, これをそのまま実運用に使わないでください.
マジメにやる場合は, CowrieよりもT-Pot: A Multi-Honeypot Platformのほうが可視化もされて良さそうですね.

blog.takanabe.tokyo

3年半ぶりともなると, なかなか投稿が進みませんでしたが, SAOのサウンドトラックのお陰で最後まで書ききる事ができました.

Ruby2.0.0 を CentOS6.4, OS X に 入れてみる

仕事ではここ数年ずっとPHPなので, プライベートではRubyにしようと.
PHPは別に嫌いじゃないですが, Rubyは書いてて気持ちがいいですね.

ということで, そろそろ2.0に移行しようと思って, 久々に環境構築をしたのでその備忘録です.

1. 前提条件

  • OSのメジャーなパッケージ管理ソフトを使用する(CentOSyum, mac は homebrew)
  • rbenv + ruby-build で バージョンの切り替えができるように
  • gem は プロジェクト毎にインストールしたいので, Bundler を利用する

2. rbenv + ruby-build + ruby のインストール

OS X (Mountain Lion) の場合

(1) rbenv + ruby-build

$ brew update
$ brew upgrade
$ brew install rbenv ruby-build
$ cat << EOF >> ~/.zshrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
EOF
$ source ~/.zshrc

(2) ruby を入れるのに必要なパッケージをインストール

$ brew install openssl
$ brew link openssl --force

$ brew install readline
$ brew link readline --force

$ brew install libyaml
$ brew link libyaml --force
  • --force を付けないと warning が出たのでつけています

(3) ruby 2.0 を インストール

$ ruby-build --definitions

   :     :
1.9.3-rc1
2.0.0-p195
2.1.0-dev
   :     :

$ CONFIGURE_OPTS="--with-opt-dir=/usr/local/" rbenv install 2.0.0-p195
$ rbenv rehash
$ rbenv versions

* system (set by /Users/kopug/.rbenv/version)
   2.0.0-p195

$ rbenv global 2.0.0-p195
$ ruby -v

ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
CentOS 6.4 の場合

(1) yum で 依存パッケージをインストール

$ sudo yum -y install git zlib zlib-devel readline readline-devel openssl openssl-devel curl curl-devel

(2) rbenv + ruby-build

# cd /usr/local
# git clone git://github.com/sstephenson/rbenv.git rbenv
# git clone https://github.com/sstephenson/ruby-build.git rbenv/plugins/ruby-build
# cat << EOF >> /etc/profile.d/rbenv.sh
export RBENV_ROOT="/usr/local/rbenv"
export PATH="/usr/local/rbenv/bin:$PATH"
eval "$(rbenv init -)"
EOF
# source /etc/profile.d/rbenv.sh

(3) ruby 2.0 を インストール

# rbenv install --list

   :     :
1.9.3-rc1
2.0.0-p353
2.1.0-dev
   :     :

# rbenv install 2.0.0-p353
# rbenv rehash
# rbenv versions

* 2.0.0-p353 (set by /usr/local/rbenv/version)

$ rbenv global 2.0.0-p353
$ ruby -v

ruby 2.0.0-p353 (2013-05-14 revision 40734) [x86_64-linux]

3. Bundler の インストール

※ ~/.gemrc にある "custom_shebang directive" を削除してから以下を実行すること(途中でエラーになるため)

$ rbenv exec gem update --system
$ rbenv exec gem install bundler
$ rbenv exec gem install rbenv-rehash
$ rbenv exec gem list
*** LOCAL GEMS ***

bigdecimal (1.2.0)
bundler (1.3.5)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
test-unit (2.0.0.0)

$ rbenv exec gem which bundler
     /Users/kopug/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler.rb

4. Railsのローカルインストール及びプロジェクト作成

$ cd ~/Work/projects
$ cat << EOF > Gemfile
source "http://rubygems.org"
gem "rails", "バージョン(省略可能. その場合は最新版)"
EOF
一時的にrailsプロジェクトを作成するために --path で指定した箇所に railsで必要なgemをインストール
$ bundle install --path vendor/bundle
$ bundle list
プロジェクト名は example(適当), --skip-bundle を指定しておかないと, project作成時に勝手に bundle install が走って, global 環境にgemがインストールされてしまう
$ bundle exec rails new example --skip-bundle
プロジェクトが作成できたら, 以下は不要なので削除
$ rm -rf Gemfile Gemfile.lock .bundle vendor
ここでプロジェクトに必要なgem をプロジェクト配下にインストールをする
$ cd example/
$ bundle install --path vendor/bundle
git の管理からgemを外す
$ echo '/vendor/bundle' >> .gitignore 
Rails Server 起動
$ bundle exec rails server

Ruby on Rails(RoR) 開発環境を構築する

久々の更新です。(毎回言っているが…^_^;)
Railsの開発環境を急遽構築したという事もあり, 備忘録がてらに残します.

1. 最新のパッケージに更新をする

$ sudo yum -y update

2. 必要なパッケージをインストールしておきます

$ sudo yum -y install gcc kernel-devel zlib-devel openssl-devel readline-devel curl-devel libyaml-devel sqlite-devel

3. Rubyのインストールをする

普段ならrpmでインストールをしようとするのですが, ebenvを使ってrubyのバージョン(環境)管理をします.

$ sudo git clone git://github.com/sstephenson/rbenv.git /usr/local/share/rbenv
$ vi /etc/profile.d/rbenv.sh
export PATH="/usr/local/share/rbenv/bin:$PATH"
export RBENV_VERSION="1.9.3-p327"
export RBENV_DIR=/usr/local/share/rbenv
export RBENV_ROOT=/usr/local/share/rbenv
eval "$(rbenv init -)"
$ source /etc/profile.d/rbenv.sh

zsh を使っていると /etc/profile.d 配下を読み込まないので,以下を /etc/zprofileに追加

    for i in /etc/profile.d/*.sh ; do
      [ -r $i ] && source $i
    done

ruby-build をインストールして, rubyをいれる

$ sudo git clone git://github.com/sstephenson/ruby-build.git /usr/local/src/ruby-build
$ cd /usr/local/src/ruby-build
$ sudo ./install.sh

rubyをインストール

$ sudo rbenv install 1.9.3-p327
$ sudo rbenv rehash
$ sudo rbenv global 1.9.3-p327
$ sudo gem install bundler

rails, unicorn をインストール

$ sudo gem install rails unicorn

1. さくらVPS CentOS6.2で基本設定をする

久々の更新です。
最近サーバ構築するのもスクリプトを流して終了…というのが多かったですが、久々に手動で構築したので備忘録として残します。

1. CentOS 6.2を再インストール

最近のさくらVPSCentOS 6.2が標準なんですね。
これはコントロールパネル(Web)でやったので省略…

2. etckeeper を入れて /etc配下をgitで管理

epel リポジトリが初めから入っていたのですんなり入った。

# yum -y install etckeeper
# etckeeper init

3. 作業用ユーザの作成

rootで毎回作業するのは怖いので、作業用のユーザを作成して sudo権限を付けておく

# adduser kopug
# passwd kopug
# usermod -G wheel kopug
# visudo
# 以下のコメントを外す
## Allows people in group wheel to run all commands
%wheel        ALL=(ALL)       ALL

作業用ユーザのSSH公開鍵を置いておく

※ ここからは作業用ユーザで繋ぎ直してから作業を行う

4. SSHの設定

4-1) デフォルトのポート番号を変更

$ sudo sed -i 's/^#Port 22/Port 10022/' /etc/ssh/sshd_config

4-2) rootでの接続をNG

$ sudo sh -c 'echo "PermitRootLogin no" >> /etc/ssh/sshd_config'

4-3) パスワードなしでのログインNG

$ sudo sh -c 'echo "PermitEmptyPasswords no" >> /etc/ssh/sshd_config'

4-4) 鍵認証必須

$ sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

4-5) 設定反映

$ sudo /sbin/service sshd restart

※ ~/.ssh/authorized_keys に公開鍵を設定しておくこと

5. iptablesの設定

管理用のポートと, sshとweb以外は閉じておく

# /etc/sysconfig/iptables

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022  -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80        -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

あとはiptablesを再起動させ、デフォルト起動するようにしておく。

$ sudo /sbin/service iptables restart
$ sudo /sbin/chkconfig iptables on

6. root宛のメールを受け取るようにする

メールアドレスの部分は置き換えてください(^_^;

$ sudo sudo sed -i '/^root:/d' /etc/aliases
$ sudo sh -c "echo 'root: user@example.com' >> /etc/aliases"
$ sudo newaliases

6. パッケージを最新版にする

$ sudo yum upgrade -y

7. etckeeper でcommitをしてサーバを再起動

$ sudo etckeeper commit
$ sudo reboot

いつも忘れるので覚書 - svnで外部リポジトリを含めたい場合 -

例えば、symfonyのとあるplugin(ここではsfHogePlugin)がsvnで管理されている場合、


$ cd sf_project_root
$ export EDITOR=vim
$ svn pe svn:externals plugins


sfHogePlugin http://<リポジトリURL>/branches/1.0.0


$ svn up

こうする事で、svn up をすると上記で追加されたリポジトリから取得してきます。
もちろんコミット権限があれば、コミットすることもできます。

さくらVPSのカスタムOSインストールでUbuntuを入れてみる #1

今までCentOSを使っていたけど、2011年からはUbuntuを使うことにする。


Mac OS X(10.6.6)のChrome(8.0.552.237)を使ってインストールをしようとしたところ、
VNCコンソールが正常に起動しなかったため、Firefox(3.6.13)を使用しました。(´・ω・`)


さくらインターネットVPSのコントロールパネルより、
OS再インストール > カスタムOSインストールへ のリンクを押下する。


1. この画面でOSの選択が可能になるので、ここでは"Ubuntu 10.04 amd64"を選択し、確認ボタンを押下
2. IPアドレス等の情報がでてくるので閉じないようにし、VNCコンソールを起動する
3. 以下のマニュアルを参考にしながらインストールを行う
カスタムOSインストールガイド : Ubuntu 10.04
4. インストールが完了したら、コントロールパネルよりサーバを起動させ、Ubuntuのバージョンを10.10にアップグレードする

$ sudo sed -i 's/^Prompt=lts/Prompt=normal/g' /etc/update-manager/release-upgrades
$ sudo do-release-upgrade
$ sudo reboot
$  lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.10
Release:        10.10
Codename:       maverick

5. バージョンが10.10 になっているのを確認したら、パッケージのフルアップデートをします。

$ sudo aptitude full-upgrade
$ sudo aptitude install build-essential

6. ロケールを ja_JP.UTF-8 にする

$ sudo locale-gen ja_JP.UTF-8
$ sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8

7. sshの設定

$ mkdir ~/.ssh
$ vi ~/.ssh/authorized_keys
"自分の公開鍵を貼り付ける"

$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
$ sudo vi /etc/ssh/sshd_config
Port 22**
PermitRootLogin no
PasswordAuthentication no
$ sudo /etc/init.d/ssh restart

8. 適当に見繕ってパッケージをインストールする

$ sudo aptitude install zsh git-core git-svn subversion vim screen

9. iptables の設定

$ sudo ufw allow 22**   <- ssh port
$ sudo ufw allow 80
$ sudo ufw default deny
$ sudo ufw enable
$ sudo iptables -L      <- ポリシーの確認

10. shellの変更

$ chsh -s /usr/bin/zsh

後は自分の好みで、.screenrc .vimrc .zshrc を配備する感じ。


参考