sshのポート番号を変更します

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

/etc/ssh/sshd_config

#Port 22
Port 10022

TOP

公開鍵認証でssh接続するように変更します

 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ログインは全てのユーザにおいてパスワード認証が無効化されました。

TOP

iptablesを設定します。

 基本は、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

TOP

不要なデーモンをストップします。

 ここからはパフォーマンスの設定です。
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

TOP

selinuxを無効にします。

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

/etc/sysconfig/selinux

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をインストールしていた時のこと、アップデートをしている間に裏でクラックされていたなんて笑えない話もありました。最近のパッケージはそれなりに初期状態からしっかりしていますが、周りの人に迷惑をかけないためにも、きっちりとサーバ管理を行われることをお願いします。

TOP

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
tcsd × - TCGのサポート
wpa_supplicant × - 無線LANにおけるWPAをサポート
xfs × X-Window System用のフォントサーバ
ypbind × - NISクライアント
yum-updatesd × CentOSの自動アップデートを行う

TOP