もうちょいコード化やりますか 4杯目 せめてRubyらしく

ChefでソースからApacheをインストールとおまけでIptablesを設定

いつの間にやら4杯目!それではぼちぼち動的な事をやってみようと思います。

前回作ったVagrantのファイルをGitHubにあげました。アカウントはTwetterと同じtakekentwにしました。よろろ。

takekentw/vagrant_001 · GitHub:

設定ファイルを弄る前に、下記の参考サイトでちょこっと勉強しました。

Ruby on Railsをはじめよう | Mitakalab:

さ~っとやってみてふむふむ(*´▽`*)と、ぼんやり輪郭ができたので実際に検証してみます。
Railsで初めてさわってみましたが、過去にレンタル鯖にRedmineを入れたときの作業でも、当時はほぼコピペで依存関係に四苦八苦して、意味まで考えれてなかったんだけれど、こういう事をやってたんだなってのがわかったw(*´ω`*)
前回か前々回にも言っていたと思いますが、Chefで設定ファイルを設定するもう1つのやり方です。

参考サイト
apache2.4のrecipeを書いてみた – Qiita:k-motoyan

ひとまずは上記の参考サイトを参考にしながら、ソースからApacheのインストールという事だけをおこなうようにしました。
これがRubyか・・。
Iptablesは基本的な設定をするような感じにしてみました。

あと、Chefをする場合はTreeコマンドは入れておいた方がいいと思いますね。

前回と同じIPですが、これはWin機の方のVMwareで立てたサーバーのIPです。

$ cat nodes/192.168.24.64.json
{
     "user": {
     "name": "root",
     "password" : "$1$wJVOjlmk$NdQ/FUU6EMVT394jhuS/I."
   },
  "run_list": [
      "yum",
      "recipe[selinux::disabled]",
      "recipe[apache]"
  ],
"automatic": {
    "ipaddress": "192.168.24.64"
  }
}
$ cat site-cookbooks/apache/recipes/default.rb
#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
# 基本的なパッケージをインストール
%w{ traceroute gcc make pcre pcre-devel openssl-devel wget tar }.each do |p|
        package p do
                action :install
        end
end
# 外部cookbookを利用してselinuxを無効
selinux_state "SELinux Disabled" do
        action :disabled
end

# sourceのインストールディレクトリ
install_dir = '/usr/local/src'

# インストールするソースの情報

source_info = {
  :apr => {
    :file_name  => 'apr-1.5.1.tar.gz',
    :file_dir   => 'apr-1.5.1',
    :configure  => './configure --prefix=/opt/apr/apr-1.5.1',
    :remote_uri => 'http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.5.1.tar.gz'
  },
  :apr_util => {
    :file_name  => 'apr-util-1.5.4.tar.gz',
    :file_dir   => 'apr-util-1.5.4',
    :configure  => './configure --prefix=/opt/apr-util/apr-util-1.5.4 --with-apr=/opt/apr/apr-1.5.1',
    :remote_uri => 'http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.5.4.tar.gz'
  },
  :httpd => {
    :file_name  => 'httpd-2.4.10.tar.gz',
    :file_dir   => 'httpd-2.4.10',
    :configure  => './configure --prefix=/opt/httpd/httpd-2.4.10 --enable-ssl --with-apr=/opt/apr/apr-1.5.1 --with-apr-util=/opt/apr-util/apr-util-1.5.4',
    :remote_uri => 'http://ftp.jaist.ac.jp/pub/apache/httpd/httpd-2.4.10.tar.gz'
  }
}

# 情報を利用してインストール
source_info.each do |key, info|
  remote_file "/tmp/#{info[:file_name]}" do
    source "#{info[:remote_uri]}"
  end

  script 'install_httpd' do
    not_if 'ls /etc/init.d/httpd'
    interpreter 'bash'
    user        'root'

    code <<-EOL
      install -d #{install_dir}
      tar zxvf /tmp/#{info[:file_name]} -C #{install_dir}
      cd #{install_dir}/#{info[:file_dir]} && #{info[:configure]} && make && make install
    EOL
  end
end

# IPtablesをコードで入力

script 'iptables_create' do
  interpreter 'bash'
  user        'root'

  code <<-EOL
                #!/bin/sh
                iptables -F
                iptables -P INPUT DROP
                iptables -P OUTPUT ACCEPT
                iptables -P FORWARD DROP

                #BroadCast Guard
                iptables -A INPUT -d 255.255.255.255 -j DROP
                iptables -A INPUT -d 224.0.0.1 -j DROP
                iptables -A INPUT -d 192.168.0.255 -j DROP

                iptables -N RH-Firewall-1-INPUT
                iptables -A INPUT -j RH-Firewall-1-INPUT
                iptables -A FORWARD -j RH-Firewall-1-INPUT
                iptables -A RH-Firewall-1-INPUT -i lo -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

                #SMTP HTTP SNMP POP SSH Guard
                iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 3000 -j ACCEPT
                iptables -A RH-Firewall-1-INPUT -m limit --limit 1/s -j LOG --log-prefix "[FW DROP] : "
                iptables -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
                /etc/rc.d/init.d/iptables save
                /etc/rc.d/init.d/iptables start

                echo settings complete
   EOL
end

Rubyのスクリプトもほぼマネだし、まだまだ独り立ちできてないです。
上のスクリプトは、こないだDockerでサーバーを立てて手動でやった事と全く同じことをしているのですが、やっぱりこりゃあ楽ですなぁ。
MPMをいろいろな感じで入れたりできるくらいはやりたいなぁと。

4杯目ですが、Chefはほぼ1回目なのでこのあたりで今回は終了。

あ、knifeで繋いでrsyncした時にパスワードを聞かれまくる現象は公開鍵を登録すれば回避できるので、そこはさくっと済ませましょう。

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です