HOME >  コンピュータ系 >  サーバー系 >  CentOS

CentOS

【 httpd再起動に失敗 】

   Posted on 2012年9月9日

* じつはこれ、Fedora時代のトラブルですが
  CentOSがVer7となり、SystemV形式からsystemdに
  変更されたりもしたので、参考になるかと思い
  こちらに残しました。

珍しく昼寝をしてしまったため、眠気が来ずに
パソに向かってます。

SSLの更新のドメインが一つあったため、
更新手続きをして、証明書を頂いたのですが、
CERTに貼り付けてhttpdを再起動させるとエラーが。^^;;
どんなエラーや!?ってログを覗くと、なにやら
パスフレーズがどぉたらこぉたら・・・
そう言えば、再起動時にパスフレーズを尋ねられないまま
エラーになってしまうんですねぇ。
通常は尋ねられないようにするには、それなりの
細工しなければならないんですけど。
ちょいと閃いて、逆にパスフレーズ尋ねられなければ
行けるかと思い、その細工をしてみました。

#cd /etc/pki/tls/private/ユーザーディレクトリ/
 (プライベートキーを作成したディレクトリに行く)
#/usr/bin/openssl rsa -in ***.key -out ***.key
 (***.key は作成時のプライベートキー名)

今度はエラーもなくhttpdは見事無事再起動!

以前の再起動は

# /etc/init.d/httpd restart

で、細工前ではパスフレーズを尋ねられましたが、
現在の

# systemctl restart httpd.service

で再起動させるとエラーになっちゃうってことですね。
つまり、再パスフレーズを尋ねられないよう細工することが
必須になったってことです。

しかし、ググったところ、同様の再起動でパスフレーズを
尋ねられたという事例もあり、何が違うのかはまだ
判明しておりませぬ。。。
格安のサーバー証明で、実在証明(運用者情報)証明の
ついてないやつだからかなぁ?

SystemV形式からsystemdに変更になってから、こんなん
ばっかりで、いや~な感じ!
htttpの再起動が失敗に終われば、すべてのサイト閲覧や
webアプリケーションが死んでしまうんだから、勘弁して
欲しいよなぁ。

【 サーバーダウン顛末記@あれもこれもぶっ飛んだ・・ 】

    Posted on 2013年3月19日

今年は電源関係が鬼門のようです。

今度はサーバーの電源で使用していたUPSがぶっ飛びました。
バッテリが一瞬ショートしたような大きな音がして、
AC100Vが出力されていません。
いきなり電源が落ちたのですから、ぶら下がっていた2台の
サーバーがおかしくなっていないことを祈って、UPS交換後
スイッチオン・・・

1台は起動しましたがもう1台はブートできるディバイスが
ないと怒られ、全く起動しません。
レスキューモードからや、他のマシンにHDDをぶら下げて
ファイル救済を試みましたが、全く中身が見えません。
ファイルシステムが完全にブッ飛んだのでしょう。

幸運にも拙宅サーバーは、30分おきにユーザー領域を
バックアップしてあるので、新しいマシンにFedoraを入れて
再構築することにしました。

ここで大きな問題が。
ブッ飛んだマシンはFedora17でしたが、すでにFedora18が
リリースされていたので18をインストール。
Webやメールサーバーを設定したあと、あとはユーザー
領域をバリバリコピーするだけで良いはずなのですが、
18のユーザーインターフェイスや設定ファイルのパスが
ガラリと様変わりして、いつものように簡単に、というわけには
いかなくなってしまいました。
設定ファイルの場所を検索しながら、なんとかインストール
・設定をしてみましたが完璧とは程遠く、何かやるたびに
エラーを吐くし、こんな調子でやっていたら復旧に10日も
かかりそうなので、思い切ってFedoraへのこだわりを捨てて
CentOSに鞍替えしました。

CentOSの最新バージョン6.4は、Fedoraの古めのバージョンと
ほぼ一緒なので、問題なく設定できましたが、ブッ飛んだ方の
サーバーにはユーザーが100人近くいて、SSLの認証ドメインも
複数抱えていたので、復旧動作確認だけでもかなりの時間を
要し、すごく焦った作業になったのでイージーミスの連発。
緊急事態ほど落ち着かなきゃダメってことですよね。

大丈夫だと思っていたもう1台ですが、実はまったく
大丈夫ではありませんでした。
メールやWebサーバーなどは活きていたので気づかなかった
のですが、久しぶりに自分のサイトを覗くと、データベース
接続エラーが出ていて、サイトが表示されてません。
mysql再起動・・・何をやっても起動しません。。。
プロセスを調べてもmysqlは立ち上がっていません。

mysqlのデータもバックアップしてあるので、思い切って
アンインストールしてしまい、新たにインストールを
しなおしましたが、起動するものの機能しません。
しかも一度起動すると、リロードができなくなり
プロセスがずっと残ってしまいます。
kill -9 プロセスナンバー で殺すと再度起動しますが
状況は変わりません。

このサーバーもFedora17なので、直にサポートが切れるため、
こちらもCentOSに変更し、全てを構築しなおすことに。
( CentOSもいずれFedora18と同様なものになるでしょうけど、
 バージョンは完全更新期限が2015年で、最終サポートは
 2020年まであるので、その間ゆっくりお勉強できそうです。)

別マシンにCentOS6.4をインストール、Web・Mail・FTP・DNS
MYSQL・など最小限の設定し、ユーザー領域やSSLのキー・
mysqlのデータなどをrsyncで移動させます。
バックアップからの復旧ではないので、かなり楽チンですが、
FTPサーバーなどはバージョンが異なることで、設定ファイルが
大幅に変更があったものもあり、手打ち設定作業も発生しましたが、
Fedoraの古いバージョンで経験しているので作業は順調でした。

バックアップしてあったデータを所定の位置に戻すと、
ブログのひとつは復旧しました。
ところが拙生のブログが復旧せず、相変わらずエラーを
履き続けます。
あんなことやこんなこと、思いつくこと全てを
やったのですがダメです。

あんなことやこんなことってのは具体的には

mysqlcheck -c データベース名 -u ユーザー名 -p
mysqlcheck –auto-repair -c -o データベース名 -u ユーザー名 -p
mysqlcheck -r データベース名 -u ユーザー名 -p
等々。

phpMyAdminからも修復や最適化をやってみましたがこれもNG。
エクスポートしてみると特にちゃんとSQL文が構成されているように
見えるので、それを新しい方にインポート・・・NGです。

そこでついに諦めました。
テキストでエキスポートしておいて、新たに構築したWordpressに
手作業でコピペしようと決心しました。
何年分もの投稿は一気には無理なので、とりあえず今年の分だけ
復旧させ、あとは少しずつやることにしますが、固定ページも
半端でないボリュームです。
固定ページのサーバー関係は自身の備忘録であり、拙宅以外の
サーバーをいじる時に役立つため、このあたりから復旧ですね。

無線やサーバーのカテゴリは、サーチエンジンから飛んでくる方が
多かったので、リンク切れになっちゃいますね。
パーマネントリンクを書き換える?(却下です。)
Facebookなんかに貼ったページリンクもかぁ。@ため息

今回のトラブルは、いくらログを眺めても決定的な原因が
探し当てられなかったのですが、以前のマシンでmysqlが
全く稼働しなくなったことと、新たに構築したマシンに
データ移動しても一部のデータベース(拙性のブログ)が
NGであったことから、mysqlが拙生のデータベースへアクセス
している最中に電源が切れて、mysqlがぶっ飛び、データベースは
異常終了したため、InnoDBとの整合性が取れなくなったのでは
ないかと睨んでいます。

疲れたぁ~~~

【 NetworkManagerが原因だった? 】
 
        Posted on 2013年4月1日

LANからインターネットにアクセスするために
ルータ仕様になっているサーバーが2台。
1台はまともぽいのですが、最近構築したもう1台でインターネットを
覗きに行くと、特定ページの表示に時間がかかります。
ひどい時はタイムアウトで表示しません。
何事もなくサクッと開くページもあるのですが。

最初はファイヤーウォール(iptables)の設定かと思い、
フラグメント化されたパケットの処理や、内部ネットワークからの
要求に対する外部からの返答などをいじってみましたがNGでした。

2台のどこが違う!?
2日ほど考えたあげく思いついたのが、ダメルータは時間がないところ
でやったため、簡単に設定できるNetworkMnagerを使用したこと。
そこで昔ながらのnetworkに変更し、rp-pppoeをインストールして設定しなおし。


# yum -y install rp-pppoe

まともな一台はIP16のunnumberedですが、こいつは固定IP1個で
MASQUERADEするためにNICを2枚抱いてます。

eth1をpppoe、eth0がLAN側で設定してあります。

# /etc/init.d/NetworkManager stop

pppoeで使うため、eth1の設定はほとんどなく、
また自動起動させません。

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
ONBOOT=no

以下のコマンドで対話式に設定します。
プロバイダへの接続情報(ユーザー名・パスワード)を用意しておきます。

# pppoe-setup(変更以外はディフォルトのままENter)

Enter your Login Name (default root): xxx@xxxx.xxxxx.jp
(default eth0): eth1
Enter the DNS information here: xxx.xxx.xxx.xxx 
Enter the secondary DNS server address here: xxx.xxx.xxx.xxx
Please enter your Password:xxxxx
Please re-enter your Password:xxxxx
Choose a type of firewall (0-2): 2
Please enter no or yes (default no): yes

設定の確認

# cat /etc/sysconfig/network-scripts/ifcfg-ppp0

USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=no
PIDFILE=/var/run/pppoe-adsl.pid
FIREWALL=NONE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=yes
SYNCHRONOUS=no
ETH=eth1
PROVIDER=DSLppp0
USER=xxx@xxxx.xxxxx.jp
PEERDNS=no
DEMAND=no

これらの設定でサーバー自体はインターネットにアクセス
できるのですが、内部ネットワークからもアクセスできるように
ルーター仕様にしなくてはいけません。

ルータにするための設定

1)NIC

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=”eth0″
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.x.x
PREFIX=24
DNS1=127.0.0.1
DOMAIN=oba-q.com
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=”System eth0″
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:1D:7D:07:82:C3
LAST_CONNECT=1364741567

2)NAT機能

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

#sysctl -p

3) ファイヤーウォールの変更

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# iptables -A INPUT -s 192.168.xx.0/24 -j ACCEPT
# iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
# iptables-save > /ets/sysconfig/iptables
# /etc/init.d/iptables restart

上記設定により、内部ネットワークからインターネットへのアクセス、
要求によるインターネットからの返答に穴をあけました。

サーバー起動時に自動的にファイアウォールのルールが適用されるおまじない。

# /etc/init.d/iptables save

ネットワーク起動

# /etc/init.d/network start

プロバとの接続も切断されるので、再接続するのに多少時間がか
かりますが、これで内部ネットワークからもアクセス可能になります。

おっと一つ忘れていました。
現在では必要ないかもしれませんが、TCPMSSターゲットのおまじないも
ルールに組み込んでおきます。

# iptables -A FORWARD -p tcp -m tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
    ↑ 一行です

MSS値はMTU値から40バイト引いた値で、直接数値を書き込める書式も
あるのですが、その昔エラーになったことがあり、それ以来自動数値設定を
してくれる上記書式を採用しています。

ジャジャジャ~ン!お待ちかねの結果発表です。

どのページもサクサク表示です。
100MbpsのNICなですが上り下りとも60Mbps。
な~んの問題もありませぬ。

ちなみにいまどきのrp-pppoeはインストールしただけでカーネルモードで
動作するようになったようです。
最初のころはカーネルの再コンパイルが必要で面倒だったのですが、
次にpppoe.confに
LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
と記載するだけでOKになり、楽ちんできると喜んだものでした。
で、現在は何もしなくてもCPU負荷は4コアの内の一つだけが、1%程度
使用されるることを確認しましたので、カーネルモードで稼働しています。
(ユーザーモードだとCPU負荷が大きく、しかもどうしようもなく遅い)

結論

原因は故障・・・
いやいや楽しようと使ったNetworkManagerのせいだと判明しました。
使えないNetworkManagerなんて当然アンインストールしてやります!

【 自動アップデート エラー@CentOS6.5 】

     Posted on 2013年12月6日

貧乏暇なし状態でしばらくサーバーをかっまって
(本当は構われている・・・)やることができませんでしたが
大事なメールが届かないというユーザーの申し出でメールログをチェック。
送った方のメールには何のメーラーを使用しているかという情報を
隠ぺいするコマンドが設定してあり、スパム判定の加点が極端に
大きかったため、留置されてましたので、とりあえず釈放しておきました。(笑
たぶんご本人は意識していないのでしょうがそんなこともあります。
お役所のパソコンからのメールということで、信用してそのアドレスは
ホワイトリストに載せておきました。

ついでにメール以外のログをチェックしていると、どうやら自動アップデートが
エラーをはいている模様なので手動でやってみると・・・

# yum update

yum update
Loaded plugins: downloadonly, fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* rpmforge: mirrors.neusoft.edu.cn
88 packages excluded due to repository priority protections
Setting up Update Process
Resolving Dependencies
–> Running transaction check
—> Package ModemManager.x86_64 0:0.4.0-3.git20100628.el6 will be updated
—> Package ModemManager.x86_64 0:0.4.0-5.git20100628.el6 will be an update

****** 省略 (しばらく滞っていたので大量にあります)*********

–> Processing Dependency: /etc/clamd.d for package: amavisd-new-2.8.0-4.el6.noarch
–> Finished Dependency Resolution
– > Running transaction check

*******通常はここからダウンロード・アップデート/インストールが
始まるのですが・・・   *****************************

—> Package amavisd-new.noarch 0:2.8.0-4.el6 will be an update
–> Processing Dependency: /etc/clamd.d for package: amavisd-new-2.8.0-4.el6.noarch
—> Package kernel.x86_64 0:2.6.32-358.6.2.el6 will be erased
—> Package kernel-devel.x86_64 0:2.6.32-358.6.2.el6 will be erased
–> Processing Dependency: /etc/clamd.d for package: amavisd-new-2.8.0-4.el6.noarch
–> Processing Dependency: /etc/clamd.d for package: amavisd-new-2.8.0-4.el6.noarch
–> Finished Dependency Resolution
Error: Package: amavisd-new-2.8.0-4.el6.noarch (epel)
Requires: /etc/clamd.d
Available: clamd-0.98-2.el6.x86_64 (epel)
Not found
Installed: clamd-0.98-2.el6.rf.x86_64 (@rpmforge)
Not found
Available: clamd-0.96.4-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.96.5-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.1-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.2-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.3-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.4-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.5-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.5-2.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.6-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.97.7-1.el6.rf.x86_64 (rpmforge)
Not found
Available: clamd-0.98-1.el6.rf.x86_64 (rpmforge)
Not found

フムフム、こいつは登録したサードパティのリポジトリepelとrpmforgeの
パッケージが競合していて、epelに置いてあるamavisd-new-2.8を、
まだ置いてないrpmforgeがそんなのねーぞと騒いでいる・・・w
(clamdはamavisd-newと親密・・密接な関係の意・・なのです)

epelは1つだけ、rpmforgeは数個のパッケージが欲しいために登録しておいた
リポジトリで、一応同時に yum-priorities をインストールしておいたのですが、
ディフォルトではプライオリティがサードパーティとなり、標準リポジトリの
パッケージで上書きされないようにするだけで、サードパーティどうしでは
priority=1 priority=2 priority=3 のごとく設定してやるか、使わないほうに
excludeの設定しなくてはいけないのを失念していたのが原因でした。

epelでは必要なのはお試しした1個だけのパッケージだったので、今回は単に
/etc/yum.repos.d/epel.repoを編集してenabled=0にしておきました。

yum updateコマンドは一つでも不具合があると、全部が止まってしまいます。
自動アップデートにしてあるからと言って、安心できないということですね。
で、これを教訓に自動アップデートのパッケージをアンインストールしてしまい
yum update –skip-broken というオプション付きコマンドをcron.dailyに設定することにします。
読んで字のごとく、ダメなやつはぶっとばしてできる奴だけアップデートします。
(ただしエラーを吐いていることに気づかないかも。。。)

 

【 サーバーからのラブレター@人騒がせ 】

          Posted on 2013年12月11日

サーバーからは1日1回ラブレターが送られてきます♪
って、ログがメールで来るだけなんですけど。w

ラブレターによると・・・
rootkit検知ツールが改ざんを検知したと騒いでます。

実際にはcron.dialyで毎日決まった時間に自動実行させますが、
手動でやる場合は以下のコマンドです。

# chkrootkit

何もなければ【not infected】や【not found】という結果が出力されます

Checking `du’… not infected


省略


Searching for Adore Worm… nothing found



以下省略

 

ところが以下のように

Checking `du’… INFECTED

rootkitが問題を検知すると、大文字で【INFECTED】と出力されます。

そこで通常は

# chkrootkit | grep INFECTED

のごとく多項目にわたる結果から【INFECTED】とされた項目のみ抜き出して
出力されるようにします。
つまり、何事もなければ何も表示されません。

ラブレター(しつこいって?)によると

for Suckit rootkit… Warning: /sbin/init INFECTED

ギョギョ!/sbin/initがSuckitにより改ざんされた!?

早速事実かどうか該当するパッケージとデータベースに
格納されているパッケージ情報と比較してみます。

# rpm -V `rpm -qf /sbin/init`

実際に改ざんされていれば、なにがしかのメッセージが
表示されますが、何も表示されませんので、検知ツールの
誤検知ということになります。

なぜ誤検知されるかをググってみると、詳細は省きますが
upstartパッケージの更新でinit が置き換わることにより
リブートするまでは誤検知するのだとか。

誤検知をさせないために

/usr/lib64/chkrootkit-0.49/chkrootkit

の中に

rpm -V `rpm -qf /sbin/init`

を実行してなにも出力されなければ未検出という条件を
加える方法も見つけましたので、修正しておきました。
人騒がせなやつめ!

 

ところでシステム全体の整合性チェック・ツールとしては
tripwireがありますが、この1台が未導入でしたので
インストールしておきます。
パッケージはサードパーティのEPELに置いてありますが、
先日のrpmforgeとの絡みで、enabled=0にしてましたので

# yum –enablerepo=epel install tripwire

ポリシーファイル最適化などは後ほどゆっくり・・・

 
ちなみにenablerepo=epelの前は【-】が2個連続なのですが、
wordpressの標準エディタの仕様なのか、うまく表示されません。。。
Evernoteでも半角のマイナスを2個並べたとき、前後がスペースや
半角文字だと、勝手に全角マイナス1個に変換されてしまいます。
横線引きたいときには便利なのでしょうけどね。

【 オープンリゾルバー 】

          Posted on 2014年3月31日

接続会社からメールで拙宅のDNSサーバーが、不特定な
IPアドレスによる外部からの再帰的な問い合わせを
許可しているというご指摘のメールがありました。

早速オープンリゾルバー確認サイト ⇒ こちら
で診断を受けたところ、オープンリゾルバーの可能性があるという結果が・・・

いくら忙しくてもこいつだけはやっつけておきました。

■ オープンリゾルバーについて少し語ります

DNSサーバーにはいくつかあって
1 権限サーバー
 ・自分で情報を持っている
  拙宅サーバーにはoba-q.comなどを含め、50ほどのドメインを管理。

2 キャッシュサーバー
 ・自分で情報は持っていないが、一度他の権限サーバーに問い合わせた
  結果をキャッシュして、設定した期間は同じドメインの問い合わせに
  キャッシュ情報から返答する。

3 権限およびキャッシュサーバーの併用

なぜキャッシュサーバーが存在するのかというと、権限サーバーしかなければ
自分で情報を抱いていないドメインには、毎回権限サーバーに問い合わせを
するることになるので、サーバーや回線に負荷がかかるのを軽減するためです。
キャッシュされたものに情報があれば直接返答するので早いということもあります。

 ★ キャッシュサーバーの功罪@余談

プロバイダのユーザーは、明示的にDNSサーバーを指定しない
(自動取得の)場合、プロバイダー管理のDNSサーバーで名前解決
(ホスト・ドメイン名⇔IPアドレス)を行います。
特に大手プロバイダーは問い合わせが多くなるため、複数のDNSサーバーで
対応していますが、キャッシュをリフレッシュする時間が長いサーバーが
見受けられます。
拙宅サーバーでは1日でリフレッシュする設定ですが、大手プロバの
サーバーでは、1月近く古い情報を抱いているものも見受けられます。
通常は3日から4日もあれば反映されることになっているのですが、
負荷軽減を意識するあまりリフレッシュ時間が長くしすぎすぎると、
WebやMailサーバーを変更した場合など、古い情報で返答されてしまい、
古い情報でサーバーを辿ればそんなサーバーはねえぞ!なんて
怒られる場合が多々あります。

それが証拠に同じプロバイダの複数のネームサーバーにIPアドレスが
更新されたドメイン(サーバーを引っ越した)の問い合わせをした場合、
違った回答(新だったり旧だったり)が返ってくることがあるのです。

対策として拙生はWebやMailサーバー切替の時は、1ヶ月くらいは
古いサーバーを活かしておき、Webサイトも新旧サーバーで見られたり、
メールも両サーバーから受信できるようにしておき、リフレッシュさ
れるのをじっと待つことにしています。@余談終了

 ★ オープンリゾルバーとは@ここから本題

キャッシュした情報から再帰的に返答する場合、今回の脆弱性が
発覚してからは指定したネットワークのみアクセスを許可します。
拙宅サーバーでは通常はLAN内のみ指定します。
(もちろん権限サーバーは誰にでもアクセスを許可)
プロバなどでは自分の降り出したIPアドレスを指定します。

しかし世の中には外部からの不特定なIPアドレスに対しても
返答するキャッシュサーバーがありこれをオープンリゾルバーと言います。
拙宅サーバーの1台がこいつであったというのが今回の事件です。。。

自分が参照しているDNSサーバーがオープンリゾルバーであるか
否かは、最初に記載したサイトにアクセスして確認できます。

■ 拙宅DNSサーバーがオープンリゾルバーだった理由

はい、単なる設定忘れです。
オープンリゾルバーの脆弱性が発覚した時には、すぐに
他のサーバーはキャッシュ情報の再帰的問い合わせはLAN内から
のみに絞っておきましたが、該当サーバーは【したつもりだったが
実は未設定だった】というお粗末なお話です。スミマセヌ。。。
勿論すぐに外部からの問い合わせはクローズしておきました。

■ DDos攻撃の踏み台となりうるオープンリゾルバー

別にけち臭いこと言わないで、誰にでも教えればばいいじゃん!?
って声が聞こえてきそうですが、DDos攻撃の踏み台と成り得るために
そうはいかないのです。

仕組みはこうです。
あるサーバーなどのIPアドレスになりすまし(IPアドレスを詐称し)多くの
オープンリゾルバーであるDNSサーバーに一斉に問い合わせをすると、
詐称されたIPアドレスを持つ攻撃対象サーバーに、一斉にあちこちの
オープンリゾルバーDNSサーバーから回答が返ってくることになります。
一つのリクエストによる回答のパケットは小さくても、イナゴの大群のごとく
数による攻撃が行えるんですね。
つまり踏み台として大規模な DDoS 攻撃の一端を担ってしまうことに
成り得えるというわけです。

オープンリゾルバーは全世界に多数存在するので、どこかのパソコンを
乗っ取ってシコシコ攻撃を掛けるよりずっと効率的なやり口です。
どぉして次から次へ悪知恵が働くのでしょう。
そんな頭が良いなら違うことに使えば良いのにと思ってしまいます。

■ オープンにしないBIND(9.*)named.confの設定

LAN内のネットワークが【192.168.1.*】だとします。
LANネットワークに適当な名前(ここではoba-q)を付けます。

acl oba-q {
  192.168.1.0/24;
  localhost;
};

//サーバーを運用されている方に192.168.1.0/24;などの意味が
//分からない方はいないと思いますので説明は省きます。

//オプション内に追記

options {
     //以下の4行をオプション内に記載。
     //recursionはすでにyesかも。
};

//権限およびキャッシュサーバー併用なので
//キャッシュサーバーを活かします。

recursion yes;

//権限サーバーはすべてのクエリを受付ます。

allow-query { any; };

// リゾルバーとしての応答を上記で設定した【oba-q】
// からのみ許可します。

allow-recursion { oba-q; };

// キャッシュの内容を【oba-q】のみに返答します。

allow-query-cache { oba-q; };

// はコメント行なので一緒にコピペしても大丈夫です。

以上簡単な設定です。
見えているところでの書式に間違いはありませんが、
スペースや改行などの関係で、このままコピペしても
大丈夫かどうかは検証しておりません。
違ったらDNSサーバー再起動時に何行目がエラーと
表示されるので分かります。
このくらいなので生書きしたほうが無難かも。。。です。

【 片割れがDOWN@RAIDアレイ 】

          Posted on 2014年4月8日

本人も5年ぶりくらいにひいた風邪でグジュグジュで
ありましたが、サーバーからのラブレターで、RAID1で
ミラーリングしているHDDの片割れもDOWNしたらしい
ことを知りました。

# cat /proc/mdstat の結果

Personalities : [raid1]
md6 : active raid1 sdb8[1] sda8[0]
3144696 blocks super 1.1 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk

md4 : active raid1 sdb6[1] sda6[0]
1048568 blocks super 1.1 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk

md0 : active raid1 sdb1[2] sda1[0]
524276 blocks super 1.0 [2/2] [UU]

md2 : active raid1 sda3[0]
31456188 blocks super 1.1 [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk

md5 : active raid1 sda7[0]
2096120 blocks super 1.1 [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk

md3 : active raid1 sda5[0]
5241848 blocks super 1.1 [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk

md7 : active raid1 sdb9[1] sda9[0]
911358844 blocks super 1.1 [2/2] [UU]
bitmap: 2/7 pages [8KB], 65536KB chunk

md8 : active raid1 sdb10[1] sda10[0]
6142968 blocks super 1.1 [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
5241848 blocks super 1.1 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk

md2・md3・md5のRAIDアレイ構成からsdbが仲間はずれ・・
一応

# mdadm -D /dev/md2

などとやってみましたが、結果はTotal DevicesやActive
Devicesが1個しか検出されません。
なにかの拍子でこうなるけど、自然復帰や再度RAIDアレイに
追加してやると直ることもあるので、まずは悪あがきを。
sdaは全て活きていて、sdb3(md2)・sdb5(md3)・sdb7(md5)が
死んでるので以下を実行してみる。。。

# mdadm –manage /dev/md2 -add /dev/sdb3
# mdadm –manage /dev/md3 -add /dev/sdb5
# mdadm –manage /dev/md5 -add /dev/sdb7

で、活き返ったのはmd5に参加するsdb7だけでした。
1回やってダメなら絶対深追いしてはなりませぬ。
かえって事態を悪化させてしまうことになりかねません。
1台交換決定ということで。

該当サーバーはこのBLOGも発信しているもので、つまり拙生の
個人的使用なものであるため、ホットスワップでやる必要はなく、
ちょうどやる予定だった清掃も含め、作業はシャットダウンして
行いました。

まずは以下の要領でsdbの関わるパーティションをRAIDアレイから
切り放してしまいます。

# mdadm /dev/md0 –manage –fail /dev/sdb1
故障と認識させSYNCを禁じます。

# mdadm /dev/md0 –manage –remove /dev/sdb1
 RAIDアレイの構成から取り除きます。 

拙生の場合はsdb10(md8)まであるので、この作業を延々と続けます。
これが終了したらシャットダウンさせます。

交換したHDDをsdbとして、再度sdaとRAID1を構築するには、
sdaと全く同じパーティションを切らなくてはいけません。
fdiskのPで表示されるsdaのパーティションのシリンダ数で
sdbを切ってやり、フォーマットするのは結構手間のいる作業です。
しかもCentOSが属するRedHat系は、インストール時にGUIで
RAID構築をすると、シリンダ数が1-50・50-100のように
切れ目が同じ50となるため、これをfdiskで切ろうとすると
1-50の次は51から始めないとダメ!って怒られてしまいます。

そんな時拙生は以下のお気に入りsfdiskコマンドで、sdaの
パーティションをsdbに一気に丸ごとコピーしてしまいます。

# sfdisk -d /dev/sda | sfdisk /dev/sdb –force

ものぐさにはこの世に勝るコマンドなし!って感じですね。w

後は

# mdadm /dev/md0 –manage –add /dev/sdb1
# mdadm /dev/md1 –manage –add /dev/sdb2
# mdadm /dev/md2 –manage –add /dev/sdb3

のごとく、sdbのすべてのパーティションをRAIDアレーへの
組み込みを全部終わるまで繰り返します。

注意としては、HDDのプライマリパーティションは4つまでで、
それ以上はプライマリの一つを拡張パーティションとして
切ることになります。
拙生の場合はsdb1~sdb3までがプライマリ、sdb4は拡張
パーティションの全体であり、さらにそれを細かく切ったものが
sdb5・sdb6・・・・のように続きます。
つまりsdb4はRAIDアレーに参加するわけではないので、
md3以降に参加するのはsdb5以降になるので間違ってはいけません。

めでたく復旧して【!万歳!】かと思いきや、syncの状況確認で

# cat /proc/mdstat

を何度か実行していると、一度UUに戻ったアレイが_Uに・・・^^;;
なんと今度はsdaのパーティションの1つがコケました。

そうなんです。
同時期に購入した同ロッドのHDDは、同じような時期にコケて
おかしくはないのです。
拙生は1台取り替えたら、数日中にもう1台も交換するのですが、
おかしくなって慌てて取り替えたのは今回が初めてですね。
ま、ギリギリセーフということで事なきを得ました。
両方一緒だったらと思うとぞっとしますね。
ラッキーだったのは風邪のために仕事で外に出ていなかったことです。

昔はRAID1の構成にCentOSなどをインストールしても、GRUBだけは
指定した片方にしかインストールされず、もう一方をgrubコマンドで
hd0に指定してインストールしておかなければ、GRUBがインストール
されている方が逝かれたら起動しなくなってしまいましたが、
grub2だと勝手にインストールしてくれますねぇ。
プラットホームやRAID・LVMのサポート、パーティション・テーブルや
ファイルシステムのサポートが格段に充実して、もうGRUB2以外は
使う気になれません。
慣れ親しんだGRUB (Grand Unified Bootloader) Legacy の時代に
幕が下りたということなのでしょう。

もう一つだけ
パーティションの話の際に必ず(しつこく)付け加えるのですが、
交換するHDDは必ず容量が同じか大きくなくては駄目です。
少しでも容量足りないと、同じパーティションは切れないので
構成することは不可能です。
1TBや2TBと表示があっても、メーカーやロッドにより若干容量が
違うので要注意です。
ノウハウとして、2TBなら1.8とか1.9しか使わないことで、微妙な
容量の違いを吸収できます。
必要なら大きい分は後から

# mdadm –grow /dev/md7 –size=max

のごとく拡大できますので、あまりケチらないように。w
ただし2TB以上のHDDを使いこなすには、MBRなどをよく
勉強してからでないと痛い目にあいます。
Logical Block Addressingでアクセスできるセクタ数40億に
論理セクターの512Bを掛けると2TBという限界が見えてくる・・・
などというお話は次回にということで。。。
ま、32bitの壁ってやつですな。

* 以前にも書きましたがaddやgrowなど複数文字の前は【-】になっていますが
  実際のコマンドは【-】が2つ並んでいます。
  WordPressのエディタが勝手に変換しちゃいます。
  例外もありますが、オプションでdなど単数文字の場合は【-】は1個、
  複数文字の場合は【-】が2つであることがほとんどです。
 

コメントを残す

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

Posts that do not include Japanese are ignored, so please be careful. (Anti-Spam)
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)