« さくらのVPSにFreeBSDをインストールする | メイン

CentOSをサーバとして活用するための基本的な設定

自宅やホスティングなどにおいてCentOSなどのLinuxを利用する人が増えてきました。
最近では格安VPSも増え、さくらインターネットのVPSなど、個人で利用できる安価でパフォーマンスの高いLinux環境が簡単に手に入るようになりました。
このようにサーバを活用する人が増えることは喜ばしい事ですが、いつの間にか乗っ取られていたり、大量のアクセスが来てダウンしてしまったり、自宅のパソコンとの違いに驚く人も多いようです。

今回は、CentOSをサーバとして利用する際に、最初にやっておきたい基本的な設定について解説をします。

本解説は特にさくらのVPSに限ったものではなく、CentOS全般を対象にしています。
さくらのVPSのデフォルトでは、多くのデーモンを停止済みにしているほか、selinuxもdisabledとなっています。

それではみていきましょう。

  1. まず最初にsshのポート番号を変更します。
  2. ポート番号の変更は必ずしないといけない訳ではないですが、簡単にできる攻撃対策です。
    インターネットでは、全世界の22番ポートをくまなく調べ、セキュリティホールのあるサーバが無いかチェックしているロボットがいます。
    もちろん、どうしてもあなたのサーバを落としたい!というロボットがいたら別ですが、普通のロボットは無差別なIPアドレスへポート22固定で攻撃をしてきますから、22番ポート以外に変更することは非常に効果があります。

    /etc/ssh/sshd_config

    #Port 22
    Port 10022

    今回は10022番ポートに変更しました。
    再起動されれば変更が反映されます。

  3. 次に公開鍵認証でssh接続するように変更します
  4. sshでは公開鍵を利用してパスワードを使わずに接続することが可能です。
    具体的にはクライアントでキーペア(秘密鍵と公開鍵)を生成し、サーバには公開鍵だけを登録することで達成できます。
    キーペアの生成方法はクライアントによって異なりますが、teratermの場合でしたら「設定」→「SSH鍵生成」で生成できます。
    もしクライアントがLinuxやFreeBSDなどでOpenSSHを利用しているのであれば、以下のようにして生成を行います。

    # ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    ・・・・

    次に生成された公開鍵をサーバにセットします。

    # cat >> ~/.ssh/authorized_keys
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArg5hePwQQPJKWvlNFGi4TArKI2kB
    e4pZNGY/KeEYp3JkmRbcFgThliRmaCVUauCYvSddenbuwF5jytP8py5JtYNaUOnEO
    J4JU5298dA1Ul2rrft9B+GcEN1tYL4iJStMi4gkK1234567890/3rD+0bfEv5M6PwgRhy6
    gE3LrYw+hpigyi7EChcgtv0e205fDUFcenArrjgGxz9Vw5edz7pHA9dSHLveLanrxNu0p
    Ry5KYH49IdSp141TcQXm1xL/l/3erH+pnoG4taDjH3LIdC8BglZzVPbuO5jySW62ciRw
    QFguH7hzp/Uily3pbsmy0EtAjIcrZ5SCUe7rXLHlfQ== tanaka@tanaka-PC
    ^D
    #

    これで公開鍵を利用したログインが可能になります。

    ただ、ここで安心してはいけません。
    今の状態は、公開鍵”でも”ログインできる状態なだけで、公開鍵”でしか”ログインできないわけではありません。
    これを変更するには、再度sshの設定を変更します。

    /etc/ssh/sshd_config

    PermitRootLogin without-password

    このあとでsshdを再起動すれば、rootログインは公開鍵認証でのみ行えるようになります。

    なお、root以外のユーザにおいても公開鍵のみのログインにしたい場合には、以下のような設定を行います。

    PasswordAuthentication no

    これで、SSHログインは全てのユーザにおいてパスワード認証が無効化されました。

  5. 次にiptablesを設定します。
  6. 基本は、sshとhttp以外は通さないようにするのが吉ですし、sshについては自宅や会社、レンタルサーバなどのIPアドレスからのみ接続できるように設定したほうが良いでしょう。
    以下の例では、httpのみどこからでも接続できるように設定し、sshは210.224.160.0/19からのみ、それ以外のポートは閉じる設定です。

    /etc/sysconfig/iptables

    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :RH-Firewall-1-INPUT - [0:0]
    -A INPUT -j RH-Firewall-1-INPUT
    -A FORWARD -j RH-Firewall-1-INPUT
    -A RH-Firewall-1-INPUT -i lo -j ACCEPT
    -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
    -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
    -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
    -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A RH-Firewall-1-INPUT -s 210.224.160.0.0/19 -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    COMMIT

  7. 次に不要なデーモンをストップします
  8. ここからはパフォーマンスの設定です。
    CentOSデフォルトでは、びっくりするくらいのサービスが動いています。これらのほとんどはサーバに必要ないものですので、ざっくりoffにしましょう。

    chkconfig acpid off
    chkconfig auditd off
    chkconfig autofs off
    chkconfig avahi-daemon off
    chkconfig bluetooth off
    chkconfig cups off
    chkconfig firstboot off
    chkconfig gpm off
    chkconfig haldaemon off
    chkconfig hidd off
    chkconfig isdn off
    chkconfig kudzu off
    chkconfig lvm2-monitor off
    chkconfig mcstrans off
    chkconfig mdmonitor off
    chkconfig messagebus off
    chkconfig netfs off
    chkconfig nfslock off
    chkconfig pcscd off
    chkconfig portmap off
    chkconfig rawdevices off
    chkconfig restorecond off
    chkconfig rpcgssd off
    chkconfig rpcidmapd off
    chkconfig smartd off
    chkconfig xfs off
    chkconfig yum-updatesd off

  9. 要らないコンソールを無効にします
  10. /etc/inittabを以下のようにコメントアウトしましょう。

    #2:2345:respawn:/sbin/mingetty tty2
    #3:2345:respawn:/sbin/mingetty tty3
    #4:2345:respawn:/sbin/mingetty tty4
    #5:2345:respawn:/sbin/mingetty tty5
    #6:2345:respawn:/sbin/mingetty tty6

  11. selinuxを無効にします
  12. selinuxについても、一般的なウェブサーバでは不要でしょうから、offにします。
    /etc/sysconfig/selinuxのSELINUX=enforceを以下のように書き換えれば完了です。

    SELINUX=disabled

    selinuxがoffにすることで、幾分パフォーマンスが向上するそうです。

これで設定は完了です。
再起動を行うことで、全ての設定変更が反映されます。
sshdのポートが変わっていますから、あせらず新しいポートへ接続してみてください。

さて今回、後半に解説したパフォーマンス改善は意外と見落としがちのことです。
今回は512MB搭載した64ビットの仮想環境(VPSでは無い)で実験しましたが、起動時間、空きメモリ共に大きな改善が見られました。
起動時間はチューンナップ前が61秒だったのに対し、チューンナップ後は41秒と3割以上も短縮されました。
メモリの使用量についても、チューンナップ前が219MBだったのが144MBにやはり3割以上も削減されました。

変更前のfree結果

[root@localhost ~]# free
total used free shared buffers cached
Mem: 510008 219440 290568 0 12284 126340
-/+ buffers/cache: 80816 429192
Swap: 1048568 0 1048568

変更後のfree結果

[root@localhost ~]# free
total used free shared buffers cached
Mem: 510008 144544 365464 0 10220 109736
-/+ buffers/cache: 24588 485420
Swap: 1048568 0 1048568


最近では自宅サーバの搭載メモリも増えましたし、さくらのVPSやSaaSesなどスワップが利用できるVPSも増えてきましたので、以前ほどはメモリ不足に悩まされる機会も減りました。
しかし、古いマシンを活用する場合や、OpenVZ系VPSのServersman@VPSなどスワップが利用できないサービスの場合には、メモリ不足に悩まされる方も多いと聞きます。
このようなときに、上記のようなチューンナップを行うことによって、エラーに悩まされることなく利用できるようになるでしょう。

なお、CentOSの場合にはインストール時にDesktopとかServerとか選択せず、X-Window Systemも入れるべきではありません。
また、64bitのOSは高速ですがメモリを多く消費するので、メモリの少ない環境(2GB以下)の場合には32bit版の活用も検討すると良いと思います。

最後になりますが、改めてパフォーマンスと併せてセキュリティに関心を持ってもらえればと思います。
以前友達のパソコンにLinuxをインストールしていた時のこと、アップデートをしている間に裏でクラックされていたなんて笑えない話もありました。
最近のパッケージはそれなりに初期状態からしっかりしていますが、周りの人に迷惑をかけないためにも、きっちりとサーバ管理を行われることをお願いします。

CentOSで標準で稼働しているサービス一覧

コマンド名 標準 設定後 解説
NetworkManager × - ネットワークの自動設定を行う
acpid × 電源管理(offにすると電源ボタンでシャットダウンできなくなる)
anacron cronの補助的な役割を持つ
atd atコマンドで登録されたタスクを管理する
auditd × システム監査結果のログ保存などを行う
autofs × ファイルシステムの自動マウントを行う
avahi-daemon × LAN内でのネットワーク自動構成を行う
avahi-dnsconfd × - 同上
bluetooth × bluetoothに対応させる
capi × -
conman × - 複数コンソールを管理する
cpuspeed 省電力の為のCPU速度管理を行う
crond cron
cups × 印刷の管理を行う
dnsmasq × - DNSキャッシュサーバ
dund × - bluetoothを使ってダイアルアップを行う
firstboot × インストール直後に呼び出される(その後は/etc/sysconfig/firstbootを作成し、意味のないサービスになる)
gpm × コンソールマウス機能
haldaemon × D-BUSサポートを行う
hidd × bluetoothのキーボードやマウスを対応させる
httpd
ip6tables
iptables
irda × - 赤外線通信
irqbalance マルチCPU時の割り込み管理を行う(シングルCPUの場合は不要)
isdn × ISDN用のサービス。ただし海外向け
kudzu × ハードウェアの構成変更を検知する
lvm2-monitor × LVMの障害監視を行う
mcstrans × SELinuxの運用サポート
mdmonitor × mdデバイスの監視を行う
mdmpd × - mdデバイスを複数インターフェースで利用する際の管理を行う
messagebus × D-BUSサポートを行う
microcode_ctl インテル系CPUのマイクロコードの更新を行う
multipathd × - DeviceMapperの管理を行う
netconsole × - カーネルエラー発生時に、その内容を他のホストへ送信する
netfs × NFSクライアント
netplugd × - DHCPの補助
network ネットワーク。必ず有効にする
nfs × - NFSサーバ
nfslock × NFSロック
nscd × - DNSキャッシュサーバ
oddjobd × - D-BUSサポートを行う
pand × - bluetoothのネットワーク対応を行う
pcscd × スマートカードの管理
portmap × RPCのポートマッパー
psacct × - アカウンティングを行う
rawdevices × ハードディスクをブロックデバイスとして利用する際の補助
rdisc × - 経路監視
readahead_early 起動を速くする
readahead_later × -
restorecond × SELinuxの運用サポート
rpcgssd × RPCサポート
rpcidmapd × RPCサポート
rpcsvcgssd × - RPCサポート
saslauthd × - SASL認証のサポート
sendmail
smartd × S.M.A.R.Tのサポート
sshd
syslog
tcsd × - TCGのサポート
wpa_supplicant × - 無線LANにおけるWPAをサポート
xfs × X-Window System用のフォントサーバ
ypbind × - NISクライアント
yum-updatesd × CentOSの自動アップデートを行う


2010/9/10追記
twitter:@tetsuro_n さんからの指摘もあり、ssh公開鍵認証の説明を追加しました。

トラックバック

このエントリーのトラックバックURL:
http://tanaka.sakura.ad.jp/mt/mt-tb.cgi/1012

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2010年09月10日 17:34に投稿されたエントリのページです。

ひとつ前の投稿は「さくらのVPSにFreeBSDをインストールする」です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type