sshのポート番号を変更します
ポート番号の変更は必ずしないといけない訳ではないですが、簡単にできる攻撃対策です。インターネットでは、全世界の22番ポートをくまなく調べ、セキュリティホールのあるサーバが無いかチェックしているロボットがいます。もちろん、どうしてもあなたのサーバを落としたい!というロボットがいたら別ですが、普通のロボットは無差別なIPアドレスへポート22固定で攻撃をしてきますから、22番ポート以外に変更することは非常に効果があります。
/etc/ssh/sshd_config #Port 22 Port 10022TOP
公開鍵認証で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 COMMITTOP
不要なデーモンをストップします。
ここからはパフォーマンスの設定です。
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 offTOP
selinuxを無効にします。
selinuxについても、一般的なウェブサーバでは不要でしょうから、offにします。
/etc/sysconfig/selinuxのSELINUX=enforceを以下のように書き換えれば完了です。。
/etc/sysconfig/selinux SELINUX=disabledselinuxが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の自動アップデートを行う |