2014年1月27日月曜日

linuxを丸ごとバックアップをしたい(ddかdumpか、それが問題だ)

何故かmondo rescueが激調子悪い今、どうしようか、
ということで、ddとdumpを使うことにする。

方法:dd
ddはセクター単位でバックアップをしていく(簡単に言うと、ディスクに書き込まれているデータを「そのまま」バックアップする)ようなので、
「まさに正しいバックアップを取れる」が、その代わりぶち壊れることもある(認識しなかったりする)らしい。
しかし、imgファイルとしてバックアップすれば、中身はマウントしてみられるので、まあ悪くはないと思う。

http://takuya-1st.hatenablog.jp/entry/20101025/1288002819

の通りで、コマンドは
dd if=バックアップするディスク(例:/dev/sda1) of=バックアップ先(例:/media/mountdisk/backup.img)

if=がバックアップ元指定、of=がバックアップ先指定。


dd でディスクからイメージファイルへ

HDDに空き容量があるなら、イメージファイルを作っちゃうのが後で使いやすい。

dd if=/dev/sdb of=/var/disk-img/some-winXp-hdd.img

とURLでは書かれているので、ドライブ丸ごとバックアップも可能だろう。

バックアップの途中経過は
killall -USR1 dd
で見られる。他詳しくはURL参照のこと。

imgファイルのマウント方法は、
mount -o loop マウント先 マウントしたいimg
たとえば
mount -o loop /media/image/ /media/mountdisk/backup.img

方法:dump
dumpは恥ずかしながら一階も触ったことがない。
大抵のドキュメントが、詳しいのかそうで無いのかよく分からない説明ばかりだから。
一応
http://www.usupi.org/sysad/122.html
http://chidipy.jpn.com/server/other/ext3backuprestore.html
を見て、

dump -0 -f バックアップファイル バックアップ対象のパス
というのは分かった。
dump -0f /media/backup/sda5.dump /dev/sda5
こんな感じでバックアップを取る。

また、パーティション構造も記録(UUIDが違うと駄目だったりするらしいのでuuidも)

fdisk -l > /<任意の場所>/fdisk_<デバイス名>.txt
df -k > /<任意の場所>/df.txt # cat /etc/fstab > /<任意の場所>/fs.txt
ls -l /dev/disk/by-uuid/ > /<任意の場所>/by-uuid.txt
#以下はあるのとないのがある。
pvdisplay > /<任意の場所>/lv.txt
vgdisplay > /<任意の場所>/vg.txt
lvdisplay > /<任意の場所>/vp.txt

さて書き戻し方だけど、
http://www.atmarkit.co.jp/ait/articles/0301/07/news001_3.html
とか、他諸々を参考に・・・実は未だ書き戻していなかったりする。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1332476248
は、ddでバックアップを取るか、dumpでバックアップを取るか、どちらが良いかの参考になる。

好みは、ddかな・・・。

2014年1月22日水曜日

兎に角海外からのアクセスを制限、遮断したい(centos上でiptablesを使ったIPアドレスアクセス制限)

サーバ立てていると、兎に角どこから沸いてきたのか辞書攻撃をばんばんする輩がいる。
勘弁してください・・・ddosとか掛けられると速攻落ちるくらいの貧弱スペックで運用してる奴に限って、
何故か半端ない・・・。





環境は
centos(サーバはcentos5とcentos6)とiptables。


hosts.allowとhosts.denyで制限するという方法も散見されたが、正直どうだろう。
正しいと思うけど、複雑なことをさせようとすると凄いことになりそう。

で、その対処法。
まず考えたのは、SSHを通しているので、こいつに辞書攻撃を仕掛けられていること。

http://blog.browncat.org/2007/07/sshiptables2.html

を参考に、2行書いてやればかなり収まる。
60秒間に8回SSH接続しようとしたIPをはじく、とある。

-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

がcentosには適応する。

が、それだけでは怒りが収まらない。
こうなったらと、日本以外の外国からアクセスを遮断することにする。

http://vogel.at.webry.info/201306/article_1.html

http://vogel.at.webry.info/201306/article_2.html
を参考に(というか丸パクりして)設定。

以下は僕の環境下で使ったmemoなので、ちゃんとしたものと解説はURLの方参照してください。

#!/bin/sh
#COPYRIGHT
#http://vogel.at.webry.info/201306/article_1.html
#http://vogel.at.webry.info/201306/article_2.html
#http://blog.browncat.org/2007/07/sshiptables2.html
IPTABLES=/sbin/iptables
if [ $# -eq 1 ]
then
    if [ $1 = "stop" ]
    then
        $IPTABLES -F
        $IPTABLES -Z
        $IPTABLES -X
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -P FORWARD DROP
        echo stopped..
        exit
    fi
fi
$IPTABLES -F
$IPTABLES -Z
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -N ACCEPT_FILTER
$IPTABLES -A ACCEPT_FILTER -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type redirect -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT

$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT_FILTER

$IPTABLES -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

#SSH Accept(上2行は別から)
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT_FILTER

#WWW Accept
#$IPTABLES -A INPUT -p tcp -m multiport --dport 80,443 -m state --state NEW -j ACCEPT_FILTER

#日本のIPからのみアクセス出来る
wget -N http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip -q -f -c cidr.txt.gz > cidr.txt
if [ -f cidr.txt ]; then
    $IPTABLES -F ACCEPT_FILTER
    sed -n 's/^JP\t//p' cidr.txt | while read address; do
        $IPTABLES -A ACCEPT_FILTER -s $address -j ACCEPT
    done
    $IPTABLES -A ACCEPT_FILTER -j DROP
fi
#eof
シェルスクリプトなので、実行可能な場所において、ファイル名.shで保存(もういっそ/rootとか)、
chown root.
chmod 700
(rootの持ち物(ドットまで入れるとグループもrootになる)で、アクセス権はルートのみフルアクセス)
/etc/rc.d/rc.local

sh /ファイルまでの絶対パス/ファイル名.sh
とかの形式で書いてやれば、起動時に読み込んでくれる。

これで収まった。
味噌は、有志がIPアドレスレンジのファイルを公開してくれてるところ。凄いよなあ・・・。

追記
torのアクセス遮断を別記事で

2014年1月21日火曜日

中途半端に旧バージョンのphpをcentosにインストールしたい(外部リポジトリだけどolds内にある時)

いまいちyumの仕組みが分かっていないけど、旧バージョンのphp関係をインストールしなければならなくなったので、そのメモ。

今回はcentos5指定だったので、centos5.10(i386版)にphpの旧バージョン5.3をインストール。


ここを参考にする。
http://blog.hello-world.jp.net/?p=584
http://d.hatena.ne.jp/omiyan/20110114/p1

remiリポジトリを登録して、更に

http://rpms.famillecollet.com/enterprise/5/olds/i386/
(URLはremiリポジトリのディレクトリ)
からパッケージをダウンロードしておかなければならない。

外部リポジトリの追加方法は
http://oxynotes.com/?p=4792
を参照。

remi    Fedora プロジェクトのコントリビュータでもある Remi Collet 氏が運営しているリポジトリhttp://www.1x1.jp/blog/2013/12/how-to-install-php-rpm-on-centos-5-and-6-amazone-linux.html
epel    レッドハット(fedoraプロジェクト)提供のリポジトリ。https://fedoraproject.org/wiki/EPEL/ja
ius    PHPとMySQLの普及振興を目的としたリポジトリ。http://iuscommunity.org/pages/About.html

ダウンロードして置かないと、yum install php-5.3*とか入れても、そんなパッケージは無いと怒られる。
釈然としないがそんなものなのだろう(多分oldsの中だからと勝手に推測する)。

i386版なので、参考URLのシェルスクリプトをいじって、i386版をダウンロードするようにする。

#! /bin/bash
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-cli-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-common-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-bcmath-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-dba-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-devel-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-gd-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-imap-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-ldap-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-mbstring-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-mysql-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-odbc-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pdo-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pear-1.9.4-7.el5.remi.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pecl-ncurses-1.0.2-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pgsql-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-process-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-snmp-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-soap-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-xml-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-xmlrpc-5.3.23-1.el5.remi.i386.rpm
wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pecl-apc-3.1.13-3.el5.remi.i386.rpm

ダウンロードできたら、

yum install --enablerepo=remi,epel php-common-5.3.23* php-cli-5.3.23* hp-5.3.23*

とかでインストール。
rpmコマンドでも多分インストールできるが、必要パッケージがないとか言われることがある。


勘所は、
remiだけでなくepelもリポジトリとして登録しておくこと。
なんとremiだけだと、libeditを見つけられずにエラーが出た。
うへえ。

2013年12月18日水曜日

三菱重工のアフターサービスは万全だった。

三菱重工製のとある商品を買ったところ、1週間もしないうちに壊れてしまった。
正直何故壊れたのか、全く分からない突然死だったので、初期不良だろうと思い、マニュアルに書いてあるコールセンターに電話した。
すると、郵送かドアtoドアかどちらかになるという。
本来は販売店に持ち込んでくれと言うことらしいが、そこはamazonなのでそんなことをやってくれない。
郵送するにも箱を捨ててしまっており、無い。
ではドアtoドアということで、取りに来てくれることになった。

明日取りに来てくれるというので、運送屋(ヤマトか佐川か)が来ると思っていたら、なんと現れたのは三菱社員(多分提携のサポート会社)。
因みに商品価格は2万円以下。
大丈夫ですか三菱さん・・・と思いながらも商品を預けたところ、3日くらいでまた届けに来てくれた。
ホントに大丈夫ですか三菱さん・・・。
修理内容は現品交換とのこと。
いや技術者動かすよりも安いかも知れませんが、真面目に大丈夫ですか三菱さん・・・。

未だにこんな動きが出来る会社があることにびっくりしつつ、三菱に惚れ込んだ次第。
思わず業務用エアコンを三菱で見積もり出したり、仕舞いには株を買ってしまったというオチがつくのは、また別の話。

2013年11月14日木曜日

port53番ポートが兎に角開かない(iptablesでは開放しているのに、外から見ると閉じている)

CentosにBINDを突っ込んで設定していたところ、どうしても53番ポートが開かない。
というか、サーバ的には53番は開放しているのだけれども、外から見た場合、closedに見えるという切ない状況。
iptablesとしては、53番開放済み。
nmapをわざわざインストールして見ても、53番は開いている。
dig @192.168.XXX.XXX google.com(XはサーバのIP) も通る。
でも外からwindowsで見た場合、
nslookup google.com 192.168.XXX.XXX
はタイムアウトするし、windowsからnmapでサーバを見ても、port 53はclosed。
困りに困ってまたまたgoogle先生にお伺いを立て続けたところ、

http://q.hatena.ne.jp/1296524427

が出てきた。
named.conf に
listen-on port 53 { 127.0.0.1; };
という行がありませんか? つまり、localhost のインタフェースでしか Listent していない状態です。
この行を外せば、全てのインタフェースで Listen するようになります。
間違いない。
これのせいだ。ということで、
vi /etc/named.conf


// listen-on port 53 { 127.0.0.1; };
という風にコメントアウト。
無事外からも見えるようになりましたとさ。

ただ、ポートがふさがっているということになると、やはり疑うのはfirewall。
iptablesの内容を何度もさらった。

iptables -A INPUT -p udp -s $internal_ip --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -d $internal_ip --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s $internal_ip --dport 53 -j ACCEPT

で大丈夫なんだろうけど、もっと良い書き方有ったら教えてください。

また、named.confにforwardの設定をしているのだけれど、
Nov 14 21:50:40 servername named[1876]: error (no valid DS) resolving 'XXX.XXX.168.192.in-addr.arpa/PTR/IN': 8.8.4.4#53
Nov 14 21:50:40 servername named[1876]: error (no valid RRSIG) resolving '168.192.in-addr.arpa/DS/IN': 8.8.4.4#53
Nov 14 21:50:40 servername named[1876]: error (no valid RRSIG) resolving '168.192.in-addr.arpa/DS/IN': 8.8.8.8#53
 みたいなログをmessagesに吐き出されてげんなり。
8.8.8.8と8.8.4.4と192.168.XXX.XXX
をforward先として設定しているのだけれども、全部エラー。しかもgoogle先生教えてくれない。

追記
と思ったら出てきた。
http://jsapachehtml.hatenablog.com/entry/2014/01/13/113229

ということで、DNSSECの問題らしい。が、それはそれで気持ち悪いなあ・・・。
named.confを書き換える。

vi /etc/named.conf

dnssec-enable no;
dnssec-validation no;
//dnssec-lookaside auto;
chrootしている場合はファイルの場所が違うので注意。

2013年11月13日水曜日

名前の解決は出来るがpingが通らない

久しぶりにやらかした。


NICが2つあるマザーでゲートウェイを組もうとしていた。
DNSリゾルバを組み込もうとしたところで躓く。
何故かpingが通らない。
そして名前も引けない。
ここでの解法は簡単な物だった。
namedを設定する直前に、squidプロキシの設定やらがちがちの禁止事項を盛り込んだiptablesのシェルスクリプトファイルを読み込んだからである。
そこまでは良かった。
そしてそこからが大変だった。
取り敢えず物理的環境を実運用スタイルにと思い、

インターネット

ルータ(192.168.69.1)

eth0(192.168.69.2)

ゲートウェイサーバ本体

eth1(192.168.96.1)

ハブ

設定用ノートPC(192.168.96.2)

という構成にしたところ、
素の状態で、何故かgoogle.comにpingが通らない。
何をしても通らない。
iptablesを落とし、selinuxを落としても直らない。
 だがdigするとgoogle.comの名前は引ける。
ルータ(192.168.69.1)にもpingが通る。
でもdigで引けたgoogleにpingが通らない。
ルータにノートを直づけすると、勿論gogle。comは通る。

名前は解決できているので、少なくともサーバはルータには繋がっている。
ルータはgoogle.comに繋がっている。
 でもサーバからgoogleにpingが通らない。
ある意味「半分繋がっている」、という不思議な状態。
経路の問題というのは分かるのだけれども、tcpdumpを眺めても特になく。

嫌な感じがして、わざわざgnome環境をサーバに入れてみたところ、
サーバ上のfirefoxでもgoogle.comに繋がらない。
意味が分からない・・・。

やはりそこはgoogle先生にということでお伺いを立て続けると、

http://okwave.jp/qa/q7244798.html

が。

外部、というのが202.xxx.xxx.xxx/28や192.168.xxx.xxx/24以外のネットワークだとしたら当然そうなります
デフォルトルートが2つ設定されていますが、実際に有効になるのは片方だけなので

ネットワークのあて先がわからないときの最終的なパケットの投げ先がデフォルトゲートウェイなので、そんなものが2つあっても片方にしか投げられないのが原因
片方のデフォルトゲートウェイを残し、もう片方のNICに対しては必要な分のスタティックルーティングを設定すべきです

まるっきり状況が同じ。

要は、eth0とeth1に、別のゲートウェイを指定していたためにこうなってしまったのである。

実はeth1は、元から有る環境に接続するため(ぶら下がるために)IPアドレスは、
192.168.96.1ではなく、192.168.96.20だった。なので、eth1にはGATEWAY=192.168.96.1が設定されていた。

上記のような環境にするために、eth0にGATEWAY=192.168.69.1を設定したにもかかわらず、
eth1のGATEWAYが優先され、本来GATEWAYとして通らなければならない192.168.69.1は無視されたと。

要は、一番初っ端のネットワーク設定をしくじっていたということである。
eth1のGATEWAY記述を192.168.69.1にすることで一応の解決を見た(これ消した方が良いのかしらん)が、
全く気付かなかった・・・。

EchoLife HG8045jの初期ユーザ名とパスワード

EchoLife HG8045jの初期ユーザ名とパスワードは
admin
admin

HUAWEI製品・・・。