Linuxサーバー管理完全攻略 第4編:ネットワーク設定とファイアウォール
Linux Server Administration Complete Guide Part 4
Linuxサーバー管理完全攻略シリーズ
第3編:パッケージとサービス | 第4編:ネットワークとファイアウォール(現在)| 第5編:SSHとリモート管理
はじめに:ネットワークはサーバーの生命線
サーバーはネットワークを通じて外部と通信します。正しいネットワーク設定とファイアウォール構成は、サーバー運用とセキュリティの核心です。今回は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とリモートサーバー管理を扱います。
シリーズ
← 第3編:パッケージとサービス | 第4編(現在)| 第5編:SSHとリモート管理 →