🏗️ サーバー構築・運用

ひとり情シスのためのLinuxサーバー入門ガイド

Windows中心の環境から一歩踏み出し、Linuxサーバーを活用するための入門ガイド。ディストリビューション選定、基本コマンド、Webサーバー構築、セキュリティ設定まで実践的に解説します。

1. なぜLinuxを学ぶべきか

ひとり情シスの多くはWindows中心の環境で業務をしていますが、Linuxの知識を持つことで選択肢が大幅に広がります。ここでは、なぜLinuxを学ぶ価値があるのかを具体的に説明します。

コスト削減効果

Linuxの最大のメリットは、OSライセンスが無料であることです。これは中小企業のIT予算に大きく影響します。

項目Windows ServerLinux年間コスト差
OSライセンス約13万円(Standard)0円13万円
CAL(50ユーザー)約25万円0円25万円
商用データベースSQL Server 約50万円~MySQL/PostgreSQL 0円50万円以上
WebサーバーIIS(OS付属)Apache/Nginx 0円-

5年間で見ると、サーバー1台あたり50~100万円以上のコスト削減が可能です。

ポイント:Linux=無料ではありますが、「学習コスト」と「運用コスト」は考慮する必要があります。しかし、一度スキルを身につければ、そのコストは今後のキャリア全体で回収できます。また、AWSやAzureなどのクラウドサービスでも、LinuxインスタンスはWindowsインスタンスより安価です(ライセンス費用が不要なため)。

サーバー用途でのシェア

世界のWebサーバーの約70~80%がLinux上で動作しています。クラウドサービスの普及により、その比率はさらに増加傾向にあります。

  • Webサーバー:Apache、Nginxの大多数がLinux上で稼働
  • データベース:MySQL、PostgreSQL、MongoDBはLinuxが主要プラットフォーム
  • コンテナ:Docker、Kubernetesの基盤はLinux
  • クラウド:AWS EC2、Azure VMの過半数がLinuxインスタンス
  • ネットワーク機器:多くのルーター、FWの内部OSはLinuxベース

ひとり情シスにとってのLinux活用場面

  • 社内Webシステム(勤怠管理、ワークフロー、社内Wiki)のホスティング
  • ネットワーク監視サーバー(Zabbix、Nagios)の構築
  • ファイルサーバー(Samba)のコスト削減代替
  • メールサーバー(Postfix + Dovecot)の運用
  • プロキシサーバー(Squid)の構築
  • 開発・検証環境の構築(Docker利用)

📋 具体例

社員30名のB社では、Windows Server 2台(AD+ファイルサーバー)に加え、Linux(Ubuntu Server)1台を監視・社内Wikiサーバーとして導入しました。Zabbixで社内ネットワーク機器を監視し、Wiki.js で社内ナレッジベースを運用しています。追加ライセンスコストはゼロで、古いPCを再利用したため、ハードウェアコストもほぼかかっていません。

2. ディストリビューション選定

Linuxには多くの「ディストリビューション(ディストロ)」があります。これは、Linuxカーネルをベースに、パッケージ管理システムや標準ソフトウェアを組み合わせた配布形態です。中小企業のサーバー用途で候補となる主要3ディストロを比較します。

主要ディストリビューション比較

項目Ubuntu ServerRocky LinuxAlmaLinux
ベースDebian系RHEL互換RHEL互換
パッケージ管理aptdnf(yum)dnf(yum)
LTSサポート5年(ESMで10年)約10年約10年
リリースサイクル2年ごと(LTS)RHEL追従RHEL追従
日本語情報の豊富さ非常に多い多い多い
コミュニティ世界最大級CentOS後継として活発CentOS後継として活発
初心者向け度高い中程度中程度
商用サポートCanonical(有料)CIQ(有料)TuxCare(有料)

ポイント:初めてLinuxを触る方には「Ubuntu Server LTS」を強くお勧めします。日本語の情報量が圧倒的に多く、aptコマンドでのパッケージ管理も直感的です。一方、Red Hat系の企業環境で経験を積みたい場合は、Rocky LinuxまたはAlmaLinuxを選択してください。CentOSのEOLに伴い、多くの企業がこれらに移行しています。

インストール時のポイント

  • パーティション設計:/(ルート)、/home、/var、/tmp、swapを分けると運用しやすい。特に/varはログが肥大化するため、独立パーティションにする
  • 最小インストール:サーバー用途ではGUI(デスクトップ環境)は不要。セキュリティリスクを減らすため最小構成で
  • LVM(論理ボリューム管理):ディスク拡張が容易になるため、LVMの使用を推奨
  • ネットワーク設定:サーバーには必ず固定IPアドレスを設定
  • 時刻同期:NTPまたはchronyで時刻同期を設定(ログ管理やAD連携に必須)

⚠️ 注意

本番サーバーにはデスクトップ環境(GNOME、KDEなど)をインストールしないでください。不要なパッケージが増え、セキュリティリスクが高まります。また、メモリ消費も増えます。Linuxサーバーの管理はSSH経由のコマンドライン操作が基本です。最初は慣れないかもしれませんが、すぐに効率の良さを実感できるはずです。

3. 基本コマンドチートシート

Linux管理に必要な基本コマンドを、用途別にまとめます。これらは日常的に使うコマンドですので、繰り返し練習して身につけてください。

ファイル・ディレクトリ操作

コマンド機能使用例
lsファイル一覧表示ls -la /var/log(詳細表示)
cdディレクトリ移動cd /etc/nginx
pwd現在のディレクトリ表示pwd
cpファイルコピーcp -r /etc/nginx /etc/nginx.bak(ディレクトリ丸ごと)
mvファイル移動/リネームmv old.conf new.conf
rmファイル削除rm -rf /tmp/old/(注意:確認なしで削除)
mkdirディレクトリ作成mkdir -p /opt/app/config(親ディレクトリも作成)
chmod権限変更chmod 755 script.sh
chown所有者変更chown www-data:www-data /var/www
findファイル検索find /var/log -name "*.log" -mtime +30(30日以上古いログ)

⚠️ 注意

「rm -rf /」はLinuxの全データを削除するコマンドです。絶対に実行しないでください。特にroot権限で作業する場合は、rmコマンドの対象パスを必ず確認してください。安全策として「rm -i」(削除前に確認)をエイリアス設定しておくことをお勧めします。

テキスト操作

コマンド機能使用例
catファイル内容表示cat /etc/hosts
lessページ単位で閲覧less /var/log/syslog(q で終了)
head / tail先頭/末尾の表示tail -f /var/log/syslog(リアルタイム監視)
grep文字列検索grep "error" /var/log/syslog
vi / vimテキストエディタvi /etc/nginx/nginx.conf
nano初心者向けエディタnano /etc/hosts(viが苦手な方向け)
sed文字列置換sed -i 's/old/new/g' file.txt
awkテキスト処理awk '{print $1}' access.log

プロセス管理

コマンド機能使用例
psプロセス一覧ps aux(全プロセス表示)
top / htopリアルタイムプロセス監視top(q で終了)
systemctlサービス管理systemctl status nginx
journalctlシステムログ確認journalctl -u nginx --since today
killプロセス終了kill -9 1234(PID指定で強制終了)
dfディスク使用量df -h(人間が読みやすい形式)
freeメモリ使用量free -h
uptime稼働時間・負荷確認uptime

ネットワーク関連

コマンド機能使用例
ip addrIPアドレス確認ip addr show
ip routeルーティング確認ip route show
ssソケット状態確認ss -tlnp(リスニングポート一覧)
curlHTTPリクエストcurl -I https://example.com(ヘッダ確認)
digDNS確認dig example.com
ping疎通確認ping -c 4 8.8.8.8
traceroute経路確認traceroute 8.8.8.8
nmapポートスキャンnmap -sV 10.1.10.1(サービス検出)

📋 具体例

日常的に使うコマンド例:サーバーにSSH接続後、まず「uptime」で稼働時間と負荷を確認、「df -h」でディスク空き容量を確認、「free -h」でメモリ使用状況を確認、「journalctl -p err --since yesterday」で昨日以降のエラーログを確認。この4コマンドだけでサーバーの健康状態を素早く把握できます。慣れてきたら、これらをシェルスクリプトにまとめて「サーバー日次チェックスクリプト」を作成しましょう。

4. Webサーバー構築

LinuxでのWebサーバー構築は、ひとり情シスが最初に挑戦すべきタスクの一つです。社内ポータルサイトや業務アプリケーションの基盤として活用できます。

Apache vs Nginx

項目ApacheNginx
歴史1995年〜。最も歴史の長いWebサーバー2004年〜。高速処理を目的に開発
処理方式プロセス/スレッド型イベント駆動型
静的ファイル標準的非常に高速
動的コンテンツmod_phpで直接処理可PHP-FPMとの連携が必要
.htaccess対応(ディレクトリごとの設定)非対応(設定ファイルに集約)
メモリ使用量同時接続数に比例して増加少ない(固定的)
設定の難易度低い(情報が豊富)中程度
推奨場面PHPアプリ、既存環境との互換性高トラフィック、リバースプロキシ

ポイント:社内向けWebシステムの構築では、Apacheから始めるのがお勧めです。情報量が豊富で、WordPressなどのPHPアプリケーションとの相性も抜群です。一方、リバースプロキシやロードバランサーとして使う場合、あるいはパフォーマンスを重視する場合はNginxが優れています。両方触ってみて、自社の用途に合う方を選びましょう。

ApacheでのWebサーバー構築(Ubuntu Server)

Ubuntu ServerでApache+PHPの環境を構築する基本手順です。

  1. パッケージのインストール:apt updateでパッケージリストを更新後、apache2、php、php-mysql等の必要パッケージをインストール
  2. Apacheの起動確認:systemctl status apache2で稼働状態を確認。ブラウザからhttp://サーバーIPでデフォルトページが表示されることを確認
  3. バーチャルホスト設定:/etc/apache2/sites-available/にサイト設定ファイルを作成
  4. PHPの動作確認:phpinfo()を表示するテストファイルを作成して確認(確認後は必ず削除)

Let's Encrypt SSLの導入

Let's Encryptを使えば、無料でSSL/TLS証明書を取得できます。certbot ツールを使えば、証明書の取得から自動更新まで簡単に設定できます。

  • certbot パッケージをインストール
  • certbot --apache コマンドでApache用の証明書を自動取得・設定
  • 自動更新の確認:certbot renew --dry-run でテスト
  • 証明書は90日間有効。certbot のcronジョブが自動更新を実行

⚠️ 注意

Let's Encryptの証明書取得には、サーバーがインターネットから到達可能である必要があります。社内LANのみで使用するサーバーには利用できません。社内サーバーのSSL化には、自己署名証明書を作成するか、内部CAを構築する必要があります。自己署名証明書はブラウザで警告が出ますが、通信の暗号化自体は有効です。

リバースプロキシの構成(Nginx)

Nginxをリバースプロキシとして使い、背後の複数アプリケーションサーバーに振り分ける構成は、中小企業でも有用です。

📋 具体例

リバースプロキシの活用例:1台のNginxサーバーをフロントに置き、社内の複数Webアプリへのアクセスを集約します。wiki.example.local → 社内Wiki(ポート3000)、monitor.example.local → Zabbix(ポート80)、git.example.local → Gitea(ポート3001)。これにより、ユーザーはポート番号を意識せず、わかりやすいドメイン名でアクセスできます。SSL終端もNginxで一括処理できるため、各アプリサーバーのSSL設定が不要になります。

5. セキュリティ設定

Linuxサーバーのセキュリティは、初期設定の段階で適切に構成することが重要です。特にインターネットに公開するサーバーは、構築直後から攻撃を受ける可能性があります。

SSH鍵認証

SSHのパスワード認証を無効化し、鍵認証のみに制限することは、最も重要なセキュリティ対策の一つです。

  1. 鍵ペアの作成:クライアントPCでssh-keygen(Ed25519推奨)コマンドで秘密鍵と公開鍵を作成
  2. 公開鍵の転送:ssh-copy-id コマンドでサーバーに公開鍵を登録
  3. パスワード認証の無効化:/etc/ssh/sshd_config で PasswordAuthentication を no に設定
  4. rootログインの無効化:PermitRootLogin を no に設定
  5. SSHポートの変更:デフォルトの22番から別のポートに変更(オプション。セキュリティスキャンの軽減に有効)
設定項目推奨値理由
PasswordAuthenticationnoブルートフォース攻撃の防止
PermitRootLoginnoroot直接ログインの防止
PubkeyAuthenticationyes鍵認証の有効化
MaxAuthTries3認証試行回数の制限
ClientAliveInterval300アイドル接続のタイムアウト(秒)

⚠️ 注意

SSH鍵認証に切り替える前に、鍵認証でログインできることを必ず確認してください。パスワード認証を無効化した後に鍵認証がうまくいかないと、サーバーにログインできなくなります。作業中は別のSSHセッションを開いたまま維持し、設定変更後にそのセッションで接続テストを行うのが安全です。

ファイアウォール(firewalld / ufw)

Linuxのファイアウォールは、不要なポートへのアクセスを遮断する基本的なセキュリティ対策です。

ツールディストロ基本コマンド例
ufwUbuntuufw allow 22/tcp、ufw enable
firewalldRocky/Almafirewall-cmd --add-service=ssh --permanent

ファイアウォールの基本方針は「デフォルト拒否、必要なポートのみ許可」です。

  • SSH(22/tcp または変更後のポート):管理用。接続元IPを制限するとさらに安全
  • HTTP/HTTPS(80/tcp, 443/tcp):Webサーバーの場合
  • その他:必要なサービスのポートのみ個別に許可

fail2ban - ブルートフォース攻撃対策

fail2banは、不正なログイン試行を検出し、自動的にIPアドレスをブロックするツールです。

  • 動作原理:ログファイルを監視し、一定回数以上のログイン失敗を検出するとファイアウォールルールでそのIPをブロック
  • 主な設定項目
    • maxretry:ブロックするまでの失敗回数(推奨:3~5回)
    • bantime:ブロック期間(推奨:1時間~24時間)
    • findtime:失敗回数をカウントする期間(推奨:10分)
  • 対応サービス:SSH、Apache、Nginx、Postfix、Dovecotなど多数

📋 具体例

fail2banのSSH設定例:findtime=600(10分間)、maxretry=3(3回失敗)、bantime=3600(1時間ブロック)と設定すると、10分間に3回SSHログインに失敗したIPアドレスが1時間ブロックされます。インターネットに公開するサーバーでは、1日に数百~数千の不正ログイン試行が発生することも珍しくありません。fail2banを導入するだけで、これらの攻撃の大半を自動的にブロックできます。

自動セキュリティアップデート

セキュリティパッチの適用は、サーバー運用の最重要タスクの一つです。ひとり情シスが毎日手動で確認するのは現実的ではないため、自動化を検討しましょう。

ディストロツール設定方法
Ubuntuunattended-upgradesapt install unattended-upgrades で導入、/etc/apt/apt.conf.d/50unattended-upgrades で設定
Rocky/Almadnf-automaticdnf install dnf-automatic で導入、/etc/dnf/automatic.conf で設定

ポイント:自動アップデートは「セキュリティパッチのみ」を自動適用する設定にしましょう。すべてのパッケージを自動更新すると、アプリケーションの互換性問題が発生する可能性があります。カーネルアップデートなどの再起動を伴う更新は、自動適用後に再起動が必要になるため、自動再起動の設定も併せて検討してください。メンテナンスウィンドウ(深夜3時など)に自動再起動を設定するのが一般的です。

Linuxサーバーの構築と運用は、最初は難しく感じるかもしれませんが、基本を押さえれば着実にスキルアップできます。まずは仮想マシン(VirtualBox等)で練習環境を作り、手を動かしながら学んでいきましょう。