もうちょいコード化やりますか 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した時にパスワードを聞かれまくる現象は公開鍵を登録すれば回避できるので、そこはさくっと済ませましょう。

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *