ファイヤーウォール, 日本語化, IPTABLES, シェル ( zsh ) の設定  ( Webサーバー構築四苦八苦 2nd Day )

[この記事](http://qiita.com/mugyuu/items/533f591cf5d79b81a3aa)で、サーバーへのアクセス環境は整いまし前回の記事で、基本的なサーバー設定は整いました。

次は、ファイヤーウォールと日本語化とシェル指定など。

# IPTABLESの設定

まず方針を決める。

```
1. 自分のホストからの通信を通す
2. 外からのpingは通す
3. 外からのSSHは通す
4. それ以外の外からの通信は受け付けない
5. 中から外へ出ていく通信はすべて通す
````

# 全体はこんな感じで。/etc/sysconfig/iptables

SSH/HTTP/HTTPS用のポートのみ公開し、それ以外のポートを拒否する設定をする。
sudo vim /etc/sysconfig/iptablesを実行して、以下の様に編集。
（デフォではこのファイルがない場合もある....）

```apache:/etc/sysconfig/iptables
*filter
# インプットチェーンの定義
:INPUT ACCEPT [0:0]
# フォワードチェーンの定義
:FORWARD ACCEPT [0:0]
# アウトプットチェーンの定義
:OUTPUT ACCEPT [0:0]
# RH-Firewall-1-INPUT チェーンの定義
:RH-Firewall-1-INPUT - [0:0]
# INPUTチェーンに来たものはすべて無条件にRH-Firewall-1-INPUTチェーンへ転送する
-A INPUT -j RH-Firewall-1-INPUT
# FORWARDチェーンに来たものはすべて無条件にRH-Firewall-1-INPUTチェーンへ転送する
-A FORWARD -j RH-Firewall-1-INPUT
# ループバックは通す。自ホストからの通信は問答無用で全部通す
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
# pingは通す。プロトコルがICMPなら通す
-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 ( SSH_PORT は先に自分で設定したものを指定 )
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3103 -j ACCEPT

# HTTP, HTTPS
# RH-Firewall-1-INPUTチェーン内のルール設定で、外部からの80番と443番ポートへのアクセスを許可
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
# フレームワークを使うときに何かと必要になるので、一応開けておく。必要なければ消す
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
# ここも必要なければ消す
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6000 -j ACCEPT

# RH-Firewall-1-INPUT チェーン内のどのルールにもマッチしなかったパケットは、icmp-host-prohibitedエラーを返す
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
````

# iptablesを再起動して設定を反映させる。

```shell-session
# sudo service iptables restart  もしくは  /etc/init.d/iptables restart
````

```shell-session
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]
````

上のようになれば設定成功です
iptableの再起動時にエラーが出たら、その行末に空白が入っていないかチェック。
全角も一応チェック。

サーバの起動時に一緒にiptableを起動させるように設定。

# 自動起動の設定確認。

```shell-session
% sudo chkconfig iptables on
````

```shell-session
% /sbin/chkconfig --list iptables
#=> iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off となっていれば成功です
````

ref) http://okwave.jp/qa/q6986608.html


# zshの設定

oh-my-zshを使っていたのですが、UIや操作性がしっくりこなかったので止めて、.zshrcをいじりました。
（以下のはいろんな方の情報の寄せ集め(|| ×ｍ×) 早く自由にカスタマイズ出来る様になりたい... ）

ref) 
http://d.hatena.ne.jp/oovu70/20120405/p1
http://news.mynavi.jp/column/zsh/index.html
https://github.com/bpymasinn/Config/blob/master/.zshrc

## まずはインストール

[こちら](http://qiita.com/mugyuu/items/ddff8d836d03c460edfe)を参照して下さい。

## .zshrc の設定

```zsh:~/.zshrc

# ------------------------------
# General Settings
# ------------------------------

export EDITOR=vim        # エディタをvimに設定
export LANG=ja_JP.UTF-8  # 文字コードをUTF-8に設定
export KCODE=u           # KCODEにUTF-8を設定
export AUTOFEATURE=true 

bindkey -e               # キーバインドをemacsモードに設定

setopt no_beep           # ビープ音を消す
setopt auto_cd           # ディレクトリ名の入力のみで移動
setopt auto_pushd        
setopt correct           # コマンドのスペルを訂正
setopt magic_equal_subst # =以降も補完する(--prefix=/usrなど)
setopt prompt_subst      # プロンプト定義内で変数置換やコマンド置換を扱う
setopt notify            # バックグラウンドジョブの状態変化を即時報告
setopt equals            # =commandを`which command`と同じ処理

### Complement ###
autoload -U compinit; compinit # 補完機能を有効
setopt auto_list               # 補完候補を一覧で表示(d)
setopt auto_menu               # 補完キー連打で補完候補を順に表示(d)
setopt list_packed             # 補完候補をできるだけ詰めて表示
setopt list_types              # 補完候補にファイルの種類も表示
bindkey "^[[Z" reverse-menu-complete  # Shift-Tabで補完候補を逆順("\e[Z"でも動作する)
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 補完時に大文字小文字を区別しない

setopt extended_glob
unsetopt caseglob    # ファイルグロブで大文字小文字を区別しない

### History ###
HISTFILE=~/.zsh_history   # ヒストリを保存するファイル設定
HISTSIZE=10000            # メモリに保存されるヒストリの件数
SAVEHIST=10000            # 保存されるヒストリの件数
setopt bang_hist          # !を使ったヒストリ展開(d)
setopt extended_history   # ヒストリに実行時間も保存
setopt hist_ignore_dups   # 直前と同じコマンドはヒストリに追加しない
setopt share_history      # 他のシェルのヒストリをリアルタイムで共有
setopt hist_reduce_blanks # 余分なスペースを削除してヒストリに保存

# マッチしたコマンドのヒストリを表示
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end

# すべてのヒストリを表示
function history-all { history -E 1 }

# 色の設定
export LSCOLORS=Exfxcxdxbxegedabagacad
# 補完時の色の設定
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
# ZLS_COLORSとは？
export ZLS_COLORS=$LS_COLORS
export CLICOLOR=true
# 補完候補に色を付ける
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}

# プロンプトに色
autoload -U colors; colors
# 一般ユーザ時
tmp_prompt="%{${fg[cyan]}%}%n%# %{${reset_color}%}"
tmp_prompt2="%{${fg[cyan]}%}%_> %{${reset_color}%}"
tmp_rprompt="%{${fg[green]}%}[%~]%{${reset_color}%}"
tmp_sprompt="%{${fg[yellow]}%}%r is correct? [Yes, No, Abort, Edit]:%{${reset_color}%}"

# rootユーザ時(太字にしアンダーバー
if [ ${UID} -eq 0 ]; then
  tmp_prompt="%B%U${tmp_prompt}%u%b"
  tmp_prompt2="%B%U${tmp_prompt2}%u%b"
  tmp_rprompt="%B%U${tmp_rprompt}%u%b"
  tmp_sprompt="%B%U${tmp_sprompt}%u%b"
fi

PROMPT=$tmp_prompt    # 通常のプロンプト
PROMPT2=$tmp_prompt2  # セカンダリのプロンプト(コマンドが2行以上の時に表示される)
RPROMPT=$tmp_rprompt  # 右側のプロンプト
SPROMPT=$tmp_sprompt  # スペル訂正用プロンプト
# SSHログイン時のプロンプト
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
  PROMPT="%{${fg[white]}%}${HOST%%.*} ${PROMPT}"
;

### Title (user@hostname) ###
case "${TERM}" in
kterm*|xterm*|)
  precmd() {
    echo -ne "\033]0;${USER}@${HOST%%.*}\007"
  }
  ;;
esac

# ------------------------------
# Other Settings
# ------------------------------
### Aliases ###
alias vi=vim # viって入力したらvimが立ち上がる
alias history='history -E' # ヒストリーの時刻表示
alias   sl='ls -Fa'
alias   ls='ls -Fa'
alias   la='ls -a'
alias   ll='ls -la'
alias   dir='dir -pa'
alias   rm='rm -i'
alias   cp='cp -i'
alias   mv='mv -i'
alias   vi='vim'
alias   less='lv'

# cdコマンド実行後、lsを実行する
function cd() {
  builtin cd $@ && ls;
}

````

設定の反映

```shell-session
# シェルの変更
% zsh 
# zshrcの反映
% source ~/.zshrc
```


ref) http://morizyun.github.io/blog/sakura-vps-centos63-ssh-setup/