1. OSインストール直後の各種設定(iptables、パッケージのアップデートほか)
ここでは次の処理を行います。
①yumパッケージの更新
②OpenSSHクライアントのインストール
③/etc/ssh/sshd_configの設定
④ファイアウォール(iptables)の設定
⑤SELinuxの無効化
①yumパッケージの更新
最初にyum update
コマンドで、インストール済みのyumパッケージを更新しておきます。
一撃シェルスクリプトの「対話式の入力は可能な限り回避する」という仕様に則り、yum
コマンドの引数に-y
を与え、yum
コマンドがユーザーに問い合わせることすべてに対してyesを回答するようにします。手動でyum
コマンドを実行するときには-y
オプションを外すことで、「うっかり処理を続行してしまう」ことを防ぐメリットがありますが、ここでは自動実行できることを優先事項とします。
# Yum Update yum -y update
なお、kernelやglibcなどをアップデートした際には再起動が必要ですが、再起動は一撃シェルスクリプトの最後に行うようにします。
②OpenSSHクライアントのインストール
CentOS 6は、OSを最小構成でインストールすると、openssh-clientsパッケージがインストールされません。手元のPCからsshログインするには問題ないのですが、openssh-clientsパッケージがインストールされていないと、scp
コマンドによるファイル転送を行うことができないので、これをインストールします。
# openssh-clients install [ ! 0 = $(rpm -q openssh-clients > /dev/null ; echo $?) ] && \ yum -y install openssh-clients
なお、OSインストール時にopenssh-clientsパッケージを選択している場合もあるので、上記のコマンドでは、openssh-clientsパッケージの有無をrpm
コマンドで確認し、終了ステータスが0
でなければ、すなわちopenssh-clientsパッケージがインストールされていなければ、インストールを行うようにしています。
③/etc/ssh/sshd_configの設定
これは好みに合わせた設定なので必須ではないのですが、今回はGSSAPI(Generic Security Service Application Programming Interface)を用いたシングルサインオンを使う予定がないので、sshd_configで無効化設定します。また、接続元ホストの名前解決を行う必要がないので、UseDNSをnoにします。これにより、sshクライアントからの接続で待たされる時間を短縮することができます。
# SSHD Setting cp -p /etc/ssh/sshd_config{,.orig} sed -i 's/#GSSAPIAuthentication no/GSSAPIAuthentication no/' /etc/ssh/sshd_config sed -i 's/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config sed -i 's/^GSSAPICleanupCredentials yes/GSSAPICleanupCredentials no/' /etc/ssh/sshd_config sed -i 's/#GSSAPIStrictAcceptorCheck yes/GSSAPIStrictAcceptorCheck no/' /etc/ssh/sshd_config sed -i 's/#GSSAPIKeyExchange no/GSSAPIKeyExchange no/' /etc/ssh/sshd_config sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config service sshd reload
上記コマンドですが、/etc/ssh/sshd_configを/etc/ssh/sshd_config.origとしてバックアップし、sed
コマンドの-i
オプションで/etc/ssh/sshd_configに変更を加えたのち、sshdを再読み込みしています。一撃シェルスクリプトの特徴として、1行1行に対して変更を加える場合、sed
コマンドの-i
オプションを使うことで、人の手を介さず非対話的に変更を加えるようにしています。
④ファイアウォール(iptables)の設定
パケットフィルタリングを行うためのiptablesの設定を行います。テキストエディタを使って/etc/sysconfig/iptablesファイルに書く方法もありますが、なるべく使わずシンプルに行いたいので、今回はiptables
コマンドを用います。
# Firewawll Setting service iptables stop iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT service iptables save service iptables start chkconfig iptables on
設定内容ですが、上から次の処理を行っています。
行目 | 処理の内容 |
---|---|
1行目 | iptables停止 |
2行目 | 外部からのパケットはすべて拒否する |
3行目 | 自ホストから外部へのパケットはすべて許可する |
4行目 | パケット転送はすべて拒否する |
5行目 | localhostからのアクセスをすべて許可 |
6行目 | 内部から行ったアクセスに対する外部からの返答アクセスを許可 |
7行目 | 外部からのTCP22番ポート(SSH)へのアクセスを許可 |
8行目 | 外部からのTCP80番ポート(HTTP)へのアクセスを許可 |
9行目 | 設定を保存 |
10行目 | iptablesを起動 |
11行目 | iptablesをスタートアップ登録する |
⑤SELinuxの無効化
SELinuxのポリシーは環境によって要件が様々なので、いったんdisableモードにします。permissiveモードにして、ポリシーに違反するアクセスに対し、ログに書き出して許可するようにしても構いません。
# SELinux Disable cp -p /etc/selinux/config{,.orig} sed -i 's/enforcing$/disabled/' /etc/selinux/config