ひとり情シスのためのLinuxサーバー入門ガイド
Windows中心の環境から一歩踏み出し、Linuxサーバーを活用するための入門ガイド。ディストリビューション選定、基本コマンド、Webサーバー構築、セキュリティ設定まで実践的に解説します。
1. なぜLinuxを学ぶべきか
ひとり情シスの多くはWindows中心の環境で業務をしていますが、Linuxの知識を持つことで選択肢が大幅に広がります。ここでは、なぜLinuxを学ぶ価値があるのかを具体的に説明します。
コスト削減効果
Linuxの最大のメリットは、OSライセンスが無料であることです。これは中小企業のIT予算に大きく影響します。
| 項目 | Windows Server | Linux | 年間コスト差 |
|---|---|---|---|
| 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 Server | Rocky Linux | AlmaLinux |
|---|---|---|---|
| ベース | Debian系 | RHEL互換 | RHEL互換 |
| パッケージ管理 | apt | dnf(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 addr | IPアドレス確認 | ip addr show |
| ip route | ルーティング確認 | ip route show |
| ss | ソケット状態確認 | ss -tlnp(リスニングポート一覧) |
| curl | HTTPリクエスト | curl -I https://example.com(ヘッダ確認) |
| dig | DNS確認 | 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
| 項目 | Apache | Nginx |
|---|---|---|
| 歴史 | 1995年〜。最も歴史の長いWebサーバー | 2004年〜。高速処理を目的に開発 |
| 処理方式 | プロセス/スレッド型 | イベント駆動型 |
| 静的ファイル | 標準的 | 非常に高速 |
| 動的コンテンツ | mod_phpで直接処理可 | PHP-FPMとの連携が必要 |
| .htaccess | 対応(ディレクトリごとの設定) | 非対応(設定ファイルに集約) |
| メモリ使用量 | 同時接続数に比例して増加 | 少ない(固定的) |
| 設定の難易度 | 低い(情報が豊富) | 中程度 |
| 推奨場面 | PHPアプリ、既存環境との互換性 | 高トラフィック、リバースプロキシ |
ポイント:社内向けWebシステムの構築では、Apacheから始めるのがお勧めです。情報量が豊富で、WordPressなどのPHPアプリケーションとの相性も抜群です。一方、リバースプロキシやロードバランサーとして使う場合、あるいはパフォーマンスを重視する場合はNginxが優れています。両方触ってみて、自社の用途に合う方を選びましょう。
ApacheでのWebサーバー構築(Ubuntu Server)
Ubuntu ServerでApache+PHPの環境を構築する基本手順です。
- パッケージのインストール:apt updateでパッケージリストを更新後、apache2、php、php-mysql等の必要パッケージをインストール
- Apacheの起動確認:systemctl status apache2で稼働状態を確認。ブラウザからhttp://サーバーIPでデフォルトページが表示されることを確認
- バーチャルホスト設定:/etc/apache2/sites-available/にサイト設定ファイルを作成
- 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のパスワード認証を無効化し、鍵認証のみに制限することは、最も重要なセキュリティ対策の一つです。
- 鍵ペアの作成:クライアントPCでssh-keygen(Ed25519推奨)コマンドで秘密鍵と公開鍵を作成
- 公開鍵の転送:ssh-copy-id コマンドでサーバーに公開鍵を登録
- パスワード認証の無効化:/etc/ssh/sshd_config で PasswordAuthentication を no に設定
- rootログインの無効化:PermitRootLogin を no に設定
- SSHポートの変更:デフォルトの22番から別のポートに変更(オプション。セキュリティスキャンの軽減に有効)
| 設定項目 | 推奨値 | 理由 |
|---|---|---|
| PasswordAuthentication | no | ブルートフォース攻撃の防止 |
| PermitRootLogin | no | root直接ログインの防止 |
| PubkeyAuthentication | yes | 鍵認証の有効化 |
| MaxAuthTries | 3 | 認証試行回数の制限 |
| ClientAliveInterval | 300 | アイドル接続のタイムアウト(秒) |
⚠️ 注意
SSH鍵認証に切り替える前に、鍵認証でログインできることを必ず確認してください。パスワード認証を無効化した後に鍵認証がうまくいかないと、サーバーにログインできなくなります。作業中は別のSSHセッションを開いたまま維持し、設定変更後にそのセッションで接続テストを行うのが安全です。
ファイアウォール(firewalld / ufw)
Linuxのファイアウォールは、不要なポートへのアクセスを遮断する基本的なセキュリティ対策です。
| ツール | ディストロ | 基本コマンド例 |
|---|---|---|
| ufw | Ubuntu | ufw allow 22/tcp、ufw enable |
| firewalld | Rocky/Alma | firewall-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を導入するだけで、これらの攻撃の大半を自動的にブロックできます。
自動セキュリティアップデート
セキュリティパッチの適用は、サーバー運用の最重要タスクの一つです。ひとり情シスが毎日手動で確認するのは現実的ではないため、自動化を検討しましょう。
| ディストロ | ツール | 設定方法 |
|---|---|---|
| Ubuntu | unattended-upgrades | apt install unattended-upgrades で導入、/etc/apt/apt.conf.d/50unattended-upgrades で設定 |
| Rocky/Alma | dnf-automatic | dnf install dnf-automatic で導入、/etc/dnf/automatic.conf で設定 |
ポイント:自動アップデートは「セキュリティパッチのみ」を自動適用する設定にしましょう。すべてのパッケージを自動更新すると、アプリケーションの互換性問題が発生する可能性があります。カーネルアップデートなどの再起動を伴う更新は、自動適用後に再起動が必要になるため、自動再起動の設定も併せて検討してください。メンテナンスウィンドウ(深夜3時など)に自動再起動を設定するのが一般的です。
Linuxサーバーの構築と運用は、最初は難しく感じるかもしれませんが、基本を押さえれば着実にスキルアップできます。まずは仮想マシン(VirtualBox等)で練習環境を作り、手を動かしながら学んでいきましょう。