CentOSをサーバとして活用するための基本的な設定 (さくらインターネット創業日記)

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

  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     cachedMem:        510008     219440     290568          0      12284     126340-/+ buffers/cache:      80816     429192Swap:      1048568          0    1048568

    変更後のfree結果

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

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

    広告

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中