はじめに:ネットワークはサーバーの生命線

サーバーはネットワークを通じて外部と通信します。正しいネットワーク設定とファイアウォール構成は、サーバー運用とセキュリティの核心です。今回はIP設定、DNS、ルーティングから様々なファイアウォールツールまでを扱います。

1. ネットワーク基本確認

1.1 ネットワークインターフェース確認

# IPアドレスとインターフェース情報
ip addr
ip a

# 特定インターフェースのみ
ip addr show eth0

# 旧コマンド(deprecated)
ifconfig

1.2 ネットワーク接続状態

# ルーティングテーブル
ip route
ip r

# デフォルトゲートウェイ確認
ip route | grep default

# DNSサーバー確認
cat /etc/resolv.conf

# 接続テスト
ping -c 4 8.8.8.8
ping -c 4 google.com

1.3 ポートと接続確認

# 開いているポート確認
ss -tuln

# 特定ポート確認
ss -tuln | grep :80

# 接続状態含む
ss -tuna

# プロセスと一緒に確認
sudo ss -tulnp

# netstat(旧)
sudo netstat -tulnp

2. IPアドレス設定

2.1 一時的なIP設定

# IPアドレス追加
sudo ip addr add 192.168.1.100/24 dev eth0

# IPアドレス削除
sudo ip addr del 192.168.1.100/24 dev eth0

# インターフェース有効化/無効化
sudo ip link set eth0 up
sudo ip link set eth0 down

2.2 永続的なIP設定(Ubuntu/Debian - Netplan)

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

# 適用
sudo netplan apply

# テスト(問題時自動ロールバック)
sudo netplan try

2.3 永続的なIP設定(RHEL/CentOS - nmcli)

# 接続リスト確認
nmcli connection show

# 固定IP設定
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify eth0 ipv4.method manual

# 適用
sudo nmcli connection up eth0

3. DNS設定

3.1 DNSサーバー設定

# /etc/resolv.conf(一時的、再起動時リセットの可能性あり)
nameserver 8.8.8.8
nameserver 8.8.4.4

# systemd-resolved使用時
sudo systemctl status systemd-resolved
resolvectl status

3.2 hostsファイル

# /etc/hosts - ローカルDNS
127.0.0.1   localhost
192.168.1.10   webserver.local webserver
192.168.1.20   dbserver.local dbserver

3.3 DNS照会テスト

# nslookup
nslookup google.com
nslookup google.com 8.8.8.8

# dig(詳細情報)
dig google.com
dig @8.8.8.8 google.com

# host
host google.com

4. ファイアウォール概要

4.1 Linuxファイアウォール体系

  • netfilter:カーネルレベルパケットフィルタリング
  • iptables:netfilterの従来のフロントエンド
  • nftables:iptablesの後継(最新ディストリビューション)
  • firewalld:RHEL/CentOSの動的ファイアウォールマネージャー
  • UFW:Ubuntuのシンプルなファイアウォール(iptablesフロントエンド)

5. iptables

5.1 基本構造

# テーブル → チェーン → ルール
# 主要テーブル:filter、nat、mangle
# filterチェーン:INPUT、OUTPUT、FORWARD

# 現在のルール確認
sudo iptables -L -n -v
sudo iptables -L -n --line-numbers

5.2 基本ルール設定

# デフォルトポリシー設定
sudo iptables -P INPUT DROP      # デフォルト拒否
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# ローカルホスト許可
sudo iptables -A INPUT -i lo -j ACCEPT

# 既存接続許可
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH許可(ポート22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP/HTTPS許可
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 特定IPからのみ許可
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT

5.3 ルール削除と保存

# 特定ルール削除(番号で)
sudo iptables -D INPUT 3

# 全ルール削除
sudo iptables -F

# ルール保存
sudo iptables-save > /etc/iptables.rules

# ルール復元
sudo iptables-restore < /etc/iptables.rules

# Ubuntu/Debian永続化
sudo apt install iptables-persistent
sudo netfilter-persistent save

6. firewalld(RHEL/CentOS)

6.1 基本コマンド

# 状態確認
sudo firewall-cmd --state
sudo systemctl status firewalld

# 起動/有効化
sudo systemctl start firewalld
sudo systemctl enable firewalld

6.2 ゾーンベース管理

# 利用可能なゾーン一覧
sudo firewall-cmd --get-zones

# デフォルトゾーン確認
sudo firewall-cmd --get-default-zone

# アクティブゾーン確認
sudo firewall-cmd --get-active-zones

# 特定ゾーンのルール確認
sudo firewall-cmd --zone=public --list-all

6.3 サービスとポートの許可

# サービス許可(一時的)
sudo firewall-cmd --zone=public --add-service=http

# サービス許可(永続的)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# ポート許可
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 変更適用
sudo firewall-cmd --reload

# サービス/ポート削除
sudo firewall-cmd --zone=public --remove-service=http --permanent

6.4 リッチルール

# 特定IP許可
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'

# 特定IPブロック
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'

# ログ記録
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" log prefix="SSH Access: " level="info" accept'

7. UFW(Ubuntu)

7.1 基本コマンド

# 状態確認
sudo ufw status
sudo ufw status verbose

# 有効化/無効化
sudo ufw enable
sudo ufw disable

# デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

7.2 ルール追加

# サービス許可
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

# ポート許可
sudo ufw allow 8080
sudo ufw allow 8080/tcp
sudo ufw allow 8080:8090/tcp

# 特定IP許可
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 192.168.1.100 to any port 22

# 特定インターフェース
sudo ufw allow in on eth0 to any port 80

7.3 ルール削除

# ルール番号で削除
sudo ufw status numbered
sudo ufw delete 3

# ルール直接削除
sudo ufw delete allow 8080

# 全ルールリセット
sudo ufw reset

8. 実践シナリオ

8.1 Webサーバーファイアウォール(UFW)

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH許可(管理用)
sudo ufw allow ssh

# Webサービス許可
sudo ufw allow http
sudo ufw allow https

# 特定IPからの管理のみ許可
sudo ufw allow from 192.168.1.0/24 to any port 22

# 有効化
sudo ufw enable

8.2 データベースサーバー(firewalld)

# MySQLポートを内部ネットワークにのみ許可
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept'

# SSHは管理サーバーからのみ
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" service name="ssh" accept'

# デフォルト拒否
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --reload

8.3 NAT/ポートフォワーディング(iptables)

# IPフォワーディング有効化
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永続設定(/etc/sysctl.conf)
net.ipv4.ip_forward = 1

# ポートフォワード:外部8080 → 内部サーバー80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

9. ネットワークトラブルシューティング

9.1 接続問題の診断

# 段階別診断
# 1. インターフェース確認
ip addr

# 2. ゲートウェイ接続確認
ping -c 4 192.168.1.1

# 3. 外部IP接続
ping -c 4 8.8.8.8

# 4. DNS確認
ping -c 4 google.com

# 5. 経路追跡
traceroute google.com
mtr google.com

9.2 ポート接続テスト

# ポート接続テスト
nc -zv 192.168.1.100 22
telnet 192.168.1.100 80

# ポートスキャン(自分のサーバーのみ)
nmap -p 1-1000 localhost

9.3 パケットキャプチャ

# tcpdump基本
sudo tcpdump -i eth0

# 特定ポートのみ
sudo tcpdump -i eth0 port 80

# 特定ホスト
sudo tcpdump -i eth0 host 192.168.1.100

# ファイルに保存
sudo tcpdump -i eth0 -w capture.pcap

まとめ

ネットワーク設定とファイアウォール構成は、サーバーの接続性とセキュリティを決定します。基本原則は、必要なものだけを許可し、残りはブロックすることです。

次の第5編ではSSHとリモートサーバー管理を扱います。