Nibelungen Code

Category Archives: サーバー構築

VMwareでゲストOSを移動させた時にNICが認識しない

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

というようなことがありました。

これは以前にも同じ現象が起こったことがあったので焦らず対処。

参考:vmwareでclone化したUbuntu 8.04でeth0がeth1になってしまう

対処方法は2つ。
/etc/network/interfacesの設定をeth1として書き換えるか
/etc/udev/rules.d/70-persistent-net.rulesの設定でeth0の設定をコメントアウトしてeth1をeth0に書き換えるという方法がある。

今回は後者で対応した。

sudo nano /etc/udev/rules.d/70-persistent-net.rules

NAME=”eth0″となっている行を#でコメントアウト
NAME=”eth1″となっているところをNAME=”eth0″に書き換える。

ネットワークを再起動して反映させる。

sudo /etc/init.d/network restart
 | 
このエントリーをはてなブックマークに追加

Ubuntuで静的ルーティング

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

ubuntuで静的ルートを設定する方法。参考:永続的な静的ルーティング

/etc/network/if-up.d/の下にstatic-routesを作成。(ファイル名は何でもいいはず)

sudo nano /etc/network/if-up.d/static-routes

以下のように記述する。

#!/bin/sh
/sbin/route add -net 9.0.0.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0

static-routesに実行権限を付ける。

sudo chmod +x /etc/network/if-up.d/static-routes

そして実行すれば静的ルーティングが追加される。

sh /etc/network/if-up.d/static-routes

もちろんサーバー自体を再起動しても起動時に/etc/network/if-up.d/配下のファイルが実行されるので問題ない。

 | 
このエントリーをはてなブックマークに追加

Ubuntuで固定IP

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

IPはデフォルトでDHCPサーバーからの自動取得で設定されている。
変更する場合は/etc/network/interfacesを書き換える。

#  The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.x.x
netmask 255.255.255.0
gateway 192.168.x.x

というように記述してネットワークをリスタート

sudo /etc/init.d/networking restart
 | 
このエントリーをはてなブックマークに追加

Ubuntuでコンソールの日本語文字化けを英語に

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

標準のコンソールでは日本語を出力しようとして文字化けが起こってしまうので
.bashrcファイルの末尾に

case  $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8 ;;
esac

と記述して、ログインしなおせば英語になります。

 | 
このエントリーをはてなブックマークに追加

iptablesでログを取る

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

iptablesではDropしたログをなるべく取っておいた方がいいですね。
あれ、なんで繋がらないの!な~んてことがあったときにログを見れば
iptablesで拒否してたことがわかりますのでね。

まずログの出力先を確保

sudo mkdir -p /var/log/iptables

次にログを出す設定
Ubuntu10.04?あたりからsyslogが無くなって代わりにrsyslogになったようで。
今までと同じような書き方でもいいだけど折角なのでrsyslogの書き方で紹介。

rsyslogの場合は/etc/rsyslog.d/のなかに設定ファイルを置く形になってます。

sudo nano /etc/rsyslog.d/35-iptables.conf
:msg,contains,"Dropped" -/var/log/iptables/iptables.log
:msg,contains,"Dropped" ~

ちなみにsyslogの時と同じようにするなら以下のファイルの末尾に追加します。

sudo nano /etc/rsyslog.d/50-default.conf
# Log iptables
kern.=debug                                             /var/log/iptables/iptables_debug.log
kern.=warning                                           /var/log/iptables/iptables_warn.log
kern.=notice                                            /var/log/iptables/iptables_notice.log

rsyslogのサービスを再起動します。

sudo service rsyslog restart

iptablesを掛けるときに–log-prefixに先ほど設定したDroppedという文字列を先頭に書いておきます。

sudo nano /etc/iptables.sh
#!/bin/sh
#
# パス
PATH=/sbin:/usr/sbin:/bin:/usr/bin

# インタフェース名定義
#LAN0=eth0
#LAN1=eth1

#自サーバーIP
MYIP=xxx.xxx.xxx.xxx

#ZabbixサーバーIP
ZABBIXIP=xxx.xxx.xxx.xxx

# 内部ネットワークとして許可する範囲
LOCALNET=xxx.xxx.xxx.xxx/xx

# 外部ネットワークとして許可する範囲
#GLOBALNET=xxx.xxx.xxx.xxx/xx

###########################################################
# ポリシーの初期化
###########################################################
# すべてのルールを削除
iptables -F
iptables -t nat -F
iptables -X

# パケットカウンタをクリア
iptables -Z

# デフォルトのポリシーを設定する
# INPUTはリモートでの設定を考慮する
iptables -P INPUT ACCEPT
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

###########################################################
# ループバックインターフェイスの開放
###########################################################
# ローカルアドレスへの許可
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p tcp -s $LOCALNET -j ACCEPT
iptables -A OUTPUT -p tcp -d $LOCALNET -j ACCEPT


###########################################################
# 内部から行ったアクセスに対する外部からの返答アクセスを許可
###########################################################
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

###########################################################
# ステルススキャンに対抗
###########################################################
# すべてのTCPセッションがSYNで始まらないものをログに記録し、拒否する
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Dropped by Stealth Scan: "
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

###########################################################
# Ping of Death対策
###########################################################
# 1秒間に10回を超えるpingはログを記録して破棄
#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j LOG --log-prefix "Dropped by Ping of Death: "
#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 10 -j DROP

###########################################################
# ICMP制御
###########################################################
# ICMPの入力について設定
iptables -A INPUT -p icmp -j ACCEPT

# ICMPの出力について設定
iptables -A OUTPUT -p icmp -j ACCEPT

###########################################################
# NetBIOS関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
###########################################################
iptables -A INPUT -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -p udp -m multiport --sports 135,137,138,139,445 -j DROP

###########################################################
# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
###########################################################
iptables -A INPUT -d 192.168.1.255 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

###########################################################
# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
###########################################################
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

###########################################################
# DHCP関連のアクセスはログを記録せずに破棄
# ※不要ログ記録防止
###########################################################
iptables -A INPUT -p udp -m multiport --dports 67,68 -j DROP
iptables -A OUTPUT -p udp -m multiport --sports 67,68 -j DROP

###########################################################
# (Ubuntu/Debian系のみ)
# 60秒以内に10回以上のssh接続を試みたIPアドレスをシャットアウトする
###########################################################
iptables -A INPUT -p tcp ! -s $LOCALNET --dport 22 -m state --state NEW -m recent --set --name ssh_attack
iptables -A INPUT -p tcp ! -s $LOCALNET --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --rttl --name ssh_attack -j LOG --log-prefix 'Dropped by SSH Attack: '
iptables -A INPUT -p tcp ! -s $LOCALNET --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --rttl --name ssh_attack -j DROP

###########################################################
# 内向きポリシー
###########################################################
# LOCALNETからのTCP22番ポート(SSH)へのアクセスを許可
iptables -A INPUT -p tcp -s $LOCALNET --dport 22 -j ACCEPT

# LOCALNETからのTCP20,21番ポート(FTP)へのアクセスを許可
iptables -A INPUT -p tcp -s $LOCALNET -m multiport --dport 20,21 -j ACCEPT

# 外部からのTCP80番ポート(HTTP)へのアクセスを許可
iptables -A INPUT -p tcp -d $MYIP --dport 80 -j ACCEPT

# 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
iptables -A INPUT -p tcp -d $MYIP --dport 443 -j ACCEPT

# 外部からのTCP3306番ポート(MySQL)へのアクセスを許可
iptables -A INPUT -p tcp -s $LOCALNET --dport 3306 -j ACCEPT

# ルータからのTCP/UDP53番ポート(DNS)へのアクセスを許可
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# 外部からのTCP123番ポート(NTP)へのアクセスを許可
# ntp.nict.jp
iptables -A INPUT -p udp -s 133.243.238.163 --dport 123 --sport 123 -j ACCEPT
iptables -A INPUT -p udp -s 133.243.238.164 --dport 123 --sport 123 -j ACCEPT
iptables -A INPUT -p udp -s 133.243.238.243 --dport 123 --sport 123 -j ACCEPT
iptables -A INPUT -p udp -s 133.243.238.244 --dport 123 --sport 123 -j ACCEPT
iptables -A INPUT -p udp -s 210.171.226.40 --dport 123 --sport 123 -j ACCEPT

# Zabbixセッションを許可するパケットを受理
iptables -A INPUT -p tcp -s $ZABBIXIP -d $MYIP --dport 10050 -j ACCEPT

###########################################################
# 外向きポリシー
###########################################################
# 既に認証されたパケットを受理
iptables -I OUTPUT 1 -p tcp -s $MYIP -m state --state ESTABLISHED,RELATED -j ACCEPT

# LOCALNETからのTCP22番ポート(SSH)へのアクセスを許可
iptables -A OUTPUT -p tcp -d $LOCALNET --sport 22 -j ACCEPT

# LOCALNETへのTCP20,21番ポート(FTP)へのアクセスを許可
iptables -A OUTPUT -p tcp -d $LOCALNET -m multiport --sport 20,21 -j ACCEPT

# HTTPセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 80 -j ACCEPT

# SSLセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 443 -j ACCEPT

# MySQLセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -d $LOCALNET --sport 3306 -j ACCEPT

# DNSセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# SMTPセッションを開始するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -s $MYIP --dport 465 -j ACCEPT
iptables -A OUTPUT -p tcp -s $MYIP --dport 587 -j ACCEPT

# NTPを許可
iptables -A OUTPUT -p udp -d 133.243.238.243 --dport 123 --sport 123 -j ACCEPT          # ntp-a2.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.244 --dport 123 --sport 123 -j ACCEPT          # ntp-a3.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.163 --dport 123 --sport 123 -j ACCEPT          # ntp-b2.nict.go.jp
iptables -A OUTPUT -p udp -d 133.243.238.164 --dport 123 --sport 123 -j ACCEPT          # ntp-b3.nict.go.jp
iptables -A OUTPUT -p udp -d 210.171.226.40 --dport 123 --sport 123 -j ACCEPT

# Zabbixセッションを許可するパケットを受理
iptables -A OUTPUT -p tcp -s $MYIP -d $ZABBIXIP --dport 10051 -j ACCEPT

###########################################################
# 拒否IPアドレスからのアクセスはログを記録せずに破棄
# ※拒否IPアドレスは/etc/.deny_ipに1行ごとに記述しておくこと
# (/etc/.deny_ipがなければなにもしない)
###########################################################
if [ -s /etc/.deny_ip ]; then
        iptables -N DENY_HOST
        for ip in `cat /etc/.deny_ip`
        do
                iptables -A DENY_HOST -s $ip -m limit --limit 1/s -j LOG --log-prefix 'Dropped by Deny IP: '
                iptables -A DENY_HOST -s $ip -j DROP
                iptables -I INPUT -j DENY_HOST
        done
fi

###########################################################
# INPUTロギング
###########################################################
iptables -N IN_LOGGING
iptables -A IN_LOGGING -j LOG --log-level warning --log-prefix "Dropped by INPUT: "
iptables -A IN_LOGGING -j DROP
iptables -A INPUT -j IN_LOGGING

###########################################################
# OUTPUTロギング
###########################################################
iptables -N OUT_LOGGING
iptables -A OUT_LOGGING -j LOG --log-level warning --log-prefix "Dropped by OUTPUT: "
iptables -A OUT_LOGGING -j DROP
iptables -A OUTPUT -j OUT_LOGGING

###########################################################
# ポリシーの初期化
###########################################################
# デフォルトのポリシーを設定する
# INPUTのみリモートでの設定を考慮する
iptables -P INPUT DROP

###########################################################
# 設定の保存と反映
###########################################################
/etc/init.d/iptables save
/etc/init.d/iptables restart

そして実行権限を付けて実行。

sudo chmod +x /etc/iptables.sh
sudo sh /etc/iptables.sh

あとこのままだとログが肥大化するのでローテートさせる。

sudo nano /etc/logrotate.d/iptables
/var/log/iptables/*.log {
        daily
        rotate 30
        missingok
        notifempty
        compress
        delaycompress
        dateext
        create 644 syslog adm
        sharedscripts
        postrotate
                /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
}

ローテート動作テスト

sudo logrotate -dv /etc/logrotate.d/iptables
 | 
このエントリーをはてなブックマークに追加

Ubuntuでiptablesの自動起動

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

ubuntu severだとiptablesが自動起動するようになっていない。
そこで/etc/init.d/配下にiptablesを作成し以下を記述。

参考URL:http://ubuntuforums.org/archive/index.php/t-19106.html

#!/bin/sh
#
#This  is a ubuntu adapted iptables script from gentoo
#(http://www.gentoo.org)  which was originally distributed
# under the terms of the GNU General Public  License v2
#and was Copyrighted 1999-2004 by the Gentoo  Foundation
#
#This adapted version was intended for and ad-hoc  personal
#situation and as such no warranty is  provided.

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"

IPTABLES_SAVE="/etc/default/iptables-rules"
SAVE_RESTORE_OPTIONS="-c"
SAVE_ON_STOP="yes"

checkrules()  {
        if [ ! -f ${IPTABLES_SAVE} ]
        then
                echo "Not starting iptables. First create some rules then run"
                echo "\"/etc/init.d/iptables save\""
                return  1
        fi
}

save() {
        echo "Saving iptables state"
        iptables-save ${SAVE_RESTORE_OPTIONS} > ${IPTABLES_SAVE}
}

start(){
        checkrules || return 1
        echo "Loading iptables state and starting firewall"
        echo -n "Restoring iptables ruleset"
        start-stop-daemon --start --quiet --exec /sbin/iptables-restore -- ${SAVE_RESTORE_OPTIONS} < ${IPTABLES_SAVE}
}

case $1 in
        save)
                save
                echo "."
        ;;

        start)
                start
                echo  "."
        ;;

        stop)
                if [ "${SAVE_ON_STOP}" = "yes" ]; then
                        save || exit  1
                fi
                echo -n "Stopping firewall"

                for a in `cat /proc/net/ip_tables_names`; do
                        iptables -F -t $a
                        iptables -X -t $a

                        if [ $a = "nat" ]; then
                                iptables -t nat -P PREROUTING  ACCEPT
                                iptables -t nat -P POSTROUTING ACCEPT
                                iptables -t nat -P OUTPUT ACCEPT
                        elif [ $a = "mangle" ]; then
                                iptables -t mangle -P  PREROUTING ACCEPT
                                iptables -t mangle -P INPUT ACCEPT
                                iptables  -t mangle -P FORWARD ACCEPT
                                iptables -t mangle -P OUTPUT  ACCEPT
                                iptables -t mangle -P POSTROUTING ACCEPT
                        elif [ $a = "filter" ]; then
                                iptables -t filter -P INPUT ACCEPT
                                iptables -t filter  -P FORWARD ACCEPT
                                iptables -t filter -P OUTPUT  ACCEPT
                        fi
                done
                start-stop-daemon --stop --quiet --pidfile /var/run/iptables.pid --exec iptables
                echo  "."
        ;;

        restart)
                echo -n "Flushing firewall"
                for a in `cat /proc/net/ip_tables_names`; do
                        iptables -F -t $a
                        iptables -X  -t $a
                done;
                start
                echo "."
        ;;

        status)
                iptables -L
        ;;

        *)
                echo "Usage:  /etc/init.d/iptables {start|stop|restart|save|status}" >&2
                exit  1
        ;;
esac

exit 0

そして

sudo  update-rc.d iptables start 37 S . stop 37 0  .

として自動起動するようにする。

 | 
このエントリーをはてなブックマークに追加

GoogleからApacheのモジュールが出た

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

Googleからmod_pagespeedというApacheのモジュールが出たようなので自サーバーに入れてみる。

sudo wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb
sudo dpkg -i mod-pagespeed-beta_current_amd64.deb
sudo service apache2 restart

これでApacheに組み込まれた。

体感速度としては・・・Squidが間にあるのであまり実感できないが無いよりマシ、ということで。

 | 
このエントリーをはてなブックマークに追加

Squid配下にWEBサーバーを設置してみた

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

結構前にテスト的に立てていたSquidサーバーを使用してリバースプロキシにしてみました。
というか1ヶ月位前から既に運用はしてたんですがね・・・。

体感速度としては多少は早くなったかな?程度ですが、すこしでも早くなるならいいかな。

Squidの設定は、まだ自分でもあまり理解していないので運用しつつ少しずつ理解していこうと思います。

 | 
このエントリーをはてなブックマークに追加

Zabbix1.8.xでグラフの日本語の文字化けの対処方法

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

サーバー監視にZabbixを使用しているが、1.8系にしたところグラフの日本語部分が文字化けしてしまっていた。
どうやらフォントそのものが日本語に対応してないらしい(?)

なので グラフに使われているフォントをさざなみフォントに変更して対応することにする。

・まずフォントのインストール

sudo aptitude install ttf-sazanami-gothic

・インストールしたフォントをZabbixのWEBインターフェースのフォントディレクトリにシンボリックリンクを張る
※インストールされたフォントやWEBインターフェースの場所は各環境に合わせて読み替えて下さい。

cd /usr/share/zabbix/fonts
sudo ln -s /usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf .

・グラフのフォントを指定しているPHPを変更する

sudo nano /usr/share/zabbix/include/defines.inc.php

このPHPの51行目付近のZBX_GRAPH_FONT_NAMEの値をDejaVuSansからsazanami-gothicに変更する

--- /usr/share/zabbix/include/defines.inc.php_org 2010-10-29 00:14:45.854556983 +0900
+++ /usr/share/zabbix/include/defines.inc.php 2010-10-29 00:15:34.974556999 +0900
@@ -48,7 +48,7 @@
define('ZBX_POPUP_MAX_ROWS', 20);
define('ZBX_FONTPATH', realpath('fonts')); // where to search for font (GD > 2.0.18)
-       define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); // font file name
+       define('ZBX_GRAPH_FONT_NAME', 'sazanami-gothic'); // font file name
define('ZBX_SCRIPT_TIMEOUT', 360); // in seconds
define('ZBX_SCRIPT_BYTES_LIMIT', 1073741824); // 1073741824 is 1MB in bytes

これで日本語を表示できるようになる。

 | 
このエントリーをはてなブックマークに追加

MySQL起動時にInnoDBでエラーの対処方法

このエントリをはてなブックマークに追加このエントリをGoogle bookmarkに追加このエントリをdel.icio.usに追加このエントリをfacebookに追加

MySQLインストール後に、設定ファイルをmy-innodb-heavy-4G.cnfのものに変更する時に
いつもMySQLが起動しなくて、いろいろぐぐったりしてしまうので対処方法を記録しておく。

原因はinnodb_log_file_sizeが、デフォルトのmy.cnfとmy-innodb-heavy-4G.cnfとで違うから。

ちなみにデフォルトが5MBで4G版が256MB。

対処方法としてはib_logfileを待避して対処することになる。

・MySQLをシャットダウン
※ib_logfileを移動させるには事前にMySQLにログインして以下を実行しておく。

SET GLOBAL innodb_fast_shutdown=0;

そしてサービス停止

sudo service mysql stop

・ib_logfileを待避
※Ubuntuだとmysqlディレクトリに入れないので以下を実行しておく

sudo chmod 777 /var/lib/mysql
sudo chmod 777 /var/lib/mysql/ib_logfile*

ib_logfileを待避してパーミッションを元に戻す

sudo mv /var/lib/mysql/ib_logfile* /tmp
sudo chmod 700 /var/lib/mysql

・MySQLを起動

sudo service mysql start

これで無事に起動できる。

 | 
このエントリーをはてなブックマークに追加