LPIC 学習記録として
用語
ソケット
$ netstat
で表示されるソケット情報の「ソケット」とは、通信を行うための エンドポイント(接続点)を指し、具体的には IPアドレス + ポート番号(プロトコル) の組み合わせのことを指す。
Linux では /temp/
、/proc/
ディレクトリのファイルとして管理される。
デフォルトゲートウェイ
パケットの宛先がルーティングテーブル中で見つからない場合に使用される送信先。
ルーティングテーブルでは destination
が 0.0.0.0
として設定される。
NetworkManager
ネットワーク設定を簡単に管理するための デーモン。
無線 LAN、イーサネット接続、VPN など、さまざまなネットワークインターフェースを $ nmcli
によって統合して管理できる。
設定ファイル
/etc/services
ポート番号と サービス の対応関係が記述されたファイル。
ポート番号 はコンピュータ内でアプリケーションを識別するために使用される。
サービス ポート番号/プロトコル 別名
tcpmux 1/tcp
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
...
/etc/hostname
ホスト名が記述された設定ファイル。
ホスト名はネットワーク上で通信相手を識別するために利用される。
my_server
$ hostname
で変更することができる。
/etc/hosts
ホスト名と IP アドレスの対応関係が記述された設定ファイル。
あくまでも対応関係の設定であり、ホスト名の設定は /etc/hostname
にて行う。
127.0.0.1 localhost
127.0.1.1 my_server
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/hosts.allow
/ /etc/hosts.deny
TCP Wrappers と呼ばれるアクセス制御システムで使用される設定ファイル。
特定の サービス に対する接続を許可または拒否するために使用される。
サービス名: ホスト
サービス名: IPアドレス
/etc/hosts.allow
が評価された後に /etc/hosts.deny
が評価される順番になっており、どちらもの記載がないものは 許可 になる。そのため、許可するものを /etc/hosts.allow
に記載しておき、/etc/hosts.deny
では全てを拒否対象としておく設定が一般的。
ALL: ALL
/etc/network/interfaces
Debian 系のディストリビューションにおけるネットワークのインターフェース設定ファイル。
/etc/sysconfig/network-scripts/
Red Hat 系ディストリビューションにおけるネットワークの設定ファイルが配置されたディレクトリ。
/etc/resolv.conf
参照先の DNS サーバの設定ファイル。
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
options timeout:1 attempts:2
DHCP や NetworkManager が自動的にファイルを更新するため、手動で変更しても上書きされることがある。
nameserver
使用する DNS サーバを指定する。
nameserver 8.8.8.8
nameserver 8.8.4.4
このように複数設定した場合は上から順に使用される。
search
サーチドメインをリスト形式で記述する。
サーチドメインを設定しておくと、ドメイン名が完全ではなくても補完して名前解決をしてくれる。例えば example
というホスト名を解決しようとしたとき、example.com
や example.local
をサーチドメインに設定しておくことでこれらが検索対象に追加される。
search example.com example.local
と設定しておくと、example
というホスト名に対して、まず example.com
が、次に example.local
の名前解決を試みることになる。
options
タイムアウト時間や最大再試行回数などの DNS クエリに関する設定を追加する。
/etc/nsswitch.conf
Name Service Switch
名前解決の順序を制御する設定ファイル。
例えば、ホスト名を名前解決する際に、最初に /etc/hosts
ファイルを確認し、その後 DNS サーバに問い合わる、などの順序が設定できる。
fiels
となっている項目は、ローカルファイルが最初に検索対象になる。
passwd: files systemd
group: files systemd
shadow: files systemd
gshadow: files systemd
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
passwd
ユーザ情報に関する設定。
ユーザ名をユーザ ID(UID)へ変換する際に利用される。
passwd: files systemd
となっていた場合、最初に files
(/etc/passwd
)、次に systemd が検索される。
group
グループ情報に関する設定。
グループ名をグループ ID(UID)へ変換する際に利用される。
shadow
ユーザーのパスワード情報に関する設定。
ユーザーのパスワードが格納されたファイルを指定する。
files
は /etc/shadow
のこと。
hosts
ホスト名解決に関する設定。
ホスト名(hostname
)を IP アドレスに変換する際に利用される。
hosts: files dns
となっていた場合、ホスト名を解決する際は /etc/hosts
ファイル → DNS サーバの順に検索が行われる。
/etc/systemd/resolved.conf
systemd の サービスの一つである systemd-resolved.service
で DNS 名前解決に利用される設定ファイル。
/etc/resolv.conf
に依存しない仕組みになっている。
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#DNSSEC=no
#DNSOverTLS=no
#MulticastDNS=no
#LLMNR=no
#Cache=no-negative
#CacheFromLocalhost=no
#DNSStubListener=yes
#DNSStubListenerExtra=
#ReadEtcHosts=yes
#ResolveUnicastSingleLabel=no
#StaleRetentionSec=0
~/.ssh/known_hosts
$ ssh
で必要になるクライアント側に保存される、サーバの公開鍵情報が格納されたファイル。
~/.ssh/authorized_keys
SSH においてサーバ側に配置する公開鍵。
※ $ ssh-keygen
を参照
コマンド
$ host
DNS の問い合わせを行うためのツール。
ホスト名の IP アドレス解決や、逆引き(IP アドレスからホスト名)に利用される。
$ host ホスト名
$ host IPアドレス
$ dig
Domain Information Groper(grope=探る)
DNS サーバに問い合わせを行い情報を取得するツール。
$ host
よりも詳細な情報が取得できる。
$ dig ホスト名
$ dig IPアドレス
$ hostname
$ sudo hostname
$ sudo hostname 新ホスト名
$ hostname
によるホスト名の変更は一時的なもので、再起動によって変更が元に戻ってしまう。恒久的に変更したい場合、以下を実行する必要がある。
$ sudo systemctl set-host-name 新ホスト名
$ ping
/ $ ping6
指定された IP アドレスに対して ICMP Echo Request(パケット) を送信し、そのホストから応答(Echo Reply)があるかどうかで接続を確認するためのツール。
$ ping ホスト名
$ ping IPアドレス
$ ping -c パケット数 ホスト名 # デフォルトは Ctrl + C で終了するまで延々と送り続ける
$ ping -i 秒数 ホスト名 # デフォルトは 1 秒
IPv6 では $ ping6
を使用する。利用方法は $ ping
と同じ。
$ traceroute
/ $ traceroute6
$ traiceroute ホスト名
$ traiceroute IPアドレス
IPv6 では $ traceroute6
を使用する。
※ 仕組みついては こちら
$ tracepath
/ $ tracepath6
$ tracepath ホスト名
$ tracepath IPアドレス
IPv6 では $ tracepath6
を使用する。
$ lsof
List Open Files
システム内で開かれているファイルやソケットを一覧表示する。
$ lsof
$ lsof -p PID
$ lsof -u ユーザ名
$ lsof ファイル名
$ lsof -i:ポート番号
$ nmap
Network Mapper
ネットワークのスキャンを行うためのツールで、オープンポートの検出(ポートスキャン)、サービスの確認、OSの推定などを行うことができる。
ネットワーク管理者がセキュリティ診断やトラブルシューティングに利用するほか、攻撃者が脆弱性を探るためにも使われる。
$ nmap IPアドレス
$ nmap -O IPアドレス
$ nc
netcat
ネットワーク接続を確立し、データの送受信を行うためのツール。
様々な用途に使用することができる。
- ポートスキャン
- 指定した IP アドレスのポートが開いているか確認する
- TCP / UDP 通信
- サーバーとクライアント間でデータを送受信する
- 簡易 Web サーバー
- 一時的に HTTP サーバーを起動する
- ファイル転送
- リモートマシンとの間でファイルを転送する
オプション | 説明 |
---|---|
-l |
指定したポートをリッスンする(listen) |
-p ポート番号 |
使用するポート番号を指定する(port) |
-v |
詳細情報を表示する(verbose) |
-n |
ホスト名ではなく IP アドレスを使う(numeric) |
-z |
接続テストのみ。データ送受信しない。(zero-I/O) ポート番号をスペース区切りで複数指定できる。 |
-u |
UDP を使用する(デフォルトはTCP) |
-p
オプションはクライアント側の送信元ポートを指定する。サーバ側のリッスン用ポートの指定には -l
を使用する。
$ nc [-option] ホスト名 ポート番号
$ nc [-option] IPアドレス ポート番号
$ nc -zv example.com 80 443
クライアントとサーバ側でそれぞれ利用することができる。
$ nc -l -p ポート番号
$ nc サーバのIPアドレス サーバのポート番号
$ ip
ネットワーク設定を管理するための標準コマンド。
従来の $ ifconfig
、$ route
、$ netstat
などに換わる新しいツール(iproute2
パッケージ)として提供される。
$ ip 操作対象 サブコマンド オプション dev デバイス名
$ ip 操作対象 サブコマンド オプション # デバイス名を省略するとすべてのインターフェースが対象
操作対象 | 説明 |
---|---|
addr |
IPアドレス |
link |
データリンク層 のインターフェース |
route |
ルーティング |
neigh |
ARP テーブル |
tunnel |
トンネル設定 |
サブコマンド | 説明 |
---|---|
show |
表示する |
add |
追加する |
del |
削除する |
set |
設定する |
up |
有効化する |
down |
無効化する |
$ ip addr
$ ip addr show
$ ip addr show インターフェース名
$ ip addr add IPアドレス dev インターフェース名
$ ip addr del IPアドレス dev インターフェース名
$ ip link
$ ip -s link
$ ip -s link show
$ ip -s link show dev インターフェース名
RX
= Receive(受信)
TX
= Transmit(送信)
$ ip link set up dev インターフェース名
$ ip link set dev インターフェース名 up
$ ip link set インターフェース名 up
$ ip link set down dev インターフェース名
$ ip link set dev インターフェース名 down
$ ip link set インターフェース名 down
$ ip route
$ ip route show
$ ip route add IPアドレス via ゲートウェイのIPアドレス dev インターフェース名
PCに設定されるゲートウェイは、ルータの場合「ネクストホップ」と呼ばれる。
$ ip route add default via IPアドレス dev インターフェース名
$ ip route del IPアドレス
$ ip route del default via ゲートウェイのIPアドレス
$ ip route del default
$ ip neigh
$ ip neigh show
$ ip neigh add IPアドレス lladdr MACアドレス dev インタフェース名
$ ip neigh del IPアドレス lladdr MACアドレス dev インターフェース名
$ ip neigh del IPアドレス dev インターフェース名
$ curl
Client URL
URL を指定してネットワークからデータを取得、送信するコマンド。
HTTP(S)、FTP、SMTP など、さまざまなプロトコルをサポートしている。
$ curl URL
$ curl -o ファイル名 URL
$ curl -O URL
$ curl -L URL
$ curl -I URL
$ curl -d 送信データ URL
$ curl -X リクエストメソッド URL
$ curl -H ヘッダー情報 URL
Net-Tools
1990年代の設計による古いネットワークに関するツール群(パケーじ)。
新しいコマンドに置き換わり、メンテナンスがされていない可能性があるため現在では *非推奨。
Linux ディストリビューションによっては標準搭載されていない。
$ ifconfig
Interface Configuration
現在では、より新しく高機能な $ ip
を使用することが推奨されている。
ネットワークインターフェースの設定や状態を確認するコマンド。
$ ifconfig
$ ifconfig -a
$ ip a # 推奨
$ ifconfig インターフェース名
$ ifconfig インターフェース名 up
$ ip link set インターフェース名 up # 推奨
$ ifconfig インターフェース名 down
$ ip link set インターフェース名 down # 推奨
$ ifup
/ $ ifdown
interface up / interface down
$ ifup ネットワークインターフェース名
$ ifdown ネットワークインターフェース名
$ netstat
Network Statistics
現在では、より新しく高機能な $ ss
を使用することが推奨されている。
開いているポート、アクティブな接続、ルーティングテーブル、インターフェースの状態などネットワークの統計情報を表示する。
Net-Tools($ ifconfig
、$ route
などと同じ、古いツール群)の一部。
$ netstat
接続待ちの状態(state)を LISTEN
、接続が確立した状態を ESTABLISHED
で表現する。
オプション | 説明 |
---|---|
-a --all
|
すべての ソケット 情報を表示する |
-l --listening
|
接続待ちのソケット情報を表示する |
-p --program
|
ソケット、ポートをオープンしているプロセスを表示する |
-t --tcp
|
TCP 接続用ソケットのみ表示する |
-u --udp
|
UDP 接続用ソケットのみ表示する |
-i --interface
|
ネットワークインターフェースの状態を表示する$ ip -s link と同じ |
-r --route
|
ルーティングテーブルを表示する$ ip route show と同じ |
$ route
現在では、より新しく高機能な $ ip
を使用することが推奨されている。
ルーティングテーブルを表示したり、操作することができる。
Net-Tools($ ifconfig
、$ netstat
などと同じ、古いツール群)の一部。
$ route # ホスト名で表示する
$ route -n # IP アドレスで表示する
オプション | 説明 |
---|---|
-n |
ホスト名ではなく IP アドレスを表示する(numeric) |
add |
新しいルートを追加する |
del |
ルートを削除する |
default |
デフォルトゲートウェイを設定する |
netmask |
サブネットマスクを指定する |
$ route add default gw IPアドレス
$ nmcli
NetworkManager の制御を行うコマンド。
$ nmcli 操作対象 サブコマンド
操作対象 | 説明 |
---|---|
device |
ネットワークインターフェースの表示、管理 |
connection |
ネットワーク接続の管理(接続の確立、編集、切断) |
networking |
ネットワークの状態を表示、機能の有効化、無効化 |
radio |
ワイヤレスデバイス(Wi-Fi、Bluetooth)の管理 |
agent |
ネットワークの認証エージェントを管理 |
monitor |
ネットワークの状態を監視 |
$ nmcli device
$ nmcli device status
$ nmcli conection show
$ nmcli device wifi list
$ $ nmcli device wifi connect "SSID" password "パスワード"
$ nmcli device disconnect インターフェース名
$ nmcli networking off
$ nmcli networking on
$ nmcli monitor
$ ssh
Secure Shell
ネットワーク上(リモート)のコンピュータに暗号化された通信によって接続することにより、安全に操作する。
$ ssh IPアドレス
$ ssh -p ポート番号 IPアドレス
$ ssh -p ポート番号 IPアドレス
$ ssh -i パス IPアドレス
※ デフォルトの秘密鍵パスは ~/.ssh/id_rsa
初回接続時に ~/.ssh.known_hosts
ファイルにサーバの公開鍵が保存される。
※ 関連事象: 仮想環境を再インストールしたら SSH 接続に失敗する
$ ssh -X
/ X転送
リモートサーバ上の GUI アプリケーションを $ ssh
コマンドを実行したローカル環境で表示し、ローカル環境上で GUI 操作できるようにする機能を X 転送 と言うこと。
X 転送は X Window System 上で動作する。
$ ssh -X IPアドレス
-X
と同様に X 転送を行うオプションに -Y
がある。-X
よりもセキュリティが弱いものの、アプリケーションの動作上は障害が発生しづらく、信頼性が高い。
$ ssh-keygen
SSH プロトコルで使用される鍵ペア(公開鍵と秘密鍵)を生成する。
-
公開鍵
- サーバーへ配置することになる鍵
- デフォルトではローカル環境の
~/.ssh/id_rsa
として生成される - サーバーの
~/.ssh/authorized_keys
に配置することで、公開鍵認証が有効になる($ ssh-copy-id
を使用して配置する)
-
秘密鍵
- ローカル環境で安全に保存する必要がある鍵
- デフォルトでは
~/.ssh/id_rsa
として生成される
$ ssh-keygen
実行後はパスフレーズの入力を求められる(空文字でも良い)。
$ ssh-keygen -f ファイルパス
$ ssh-keygen -t 種類
種類:rsa
、ecdsa
、ed25519
(推奨)、dsa
(非推奨)
$ ssh-copy-id
ローカル環境の SSH 公開鍵(~/.ssh/id_rsa
)をリモートサーバーの ~/.ssh/authorized_keys
ファイル末尾に追加する。
$ ssh-copy-id サーバのIPアドレス
$ ssh-agent
/ $ ssh-add
ssh-agent
は、SSH の秘密鍵をメモリ上に一時的に保持し、SSH 接続のたびにパスフレーズを入力する手間を省くための デーモン。
現在のシェルで起動する方法と、新しいシェルセッション(サブシェル)で一時的に起動する方法がある。
現在のシェルで起動する場合、現在のシェルを $ exit
しない限り、ssh-agent
は有効(長時間の使用向き)。一方、サブシェルを使用した場合、サブシェルを $ exit
すれば ssh-agent
は終了する。
ssh-agent
は、$ ssh-agent
の実行によって 環境変数($SSH_AUTH_SOCK
と $SSH_AGENT_PID
) を設定する必要があるが、現在のシェルで有効な環境変数を設定するtために、このような違いがある。
$ eval $(ssh-agent)
$ ssh-agent bash
ssh-agent
が起動したら、秘密鍵を登録する。
$ ssh-add ~.ssh/id_rsa
ここでパス付レースを入力することで、以降の SSH 接続で入力する必要がなくなる。
$ ssh-add -l
$ ssh-add -D
$ scp
Secure Copy
ファイルやディレクトリをローカル - リモート、または異なるリモートホスト同士で転送する。
SSH が使用されるため、転送されるデータは暗号化される。
$ scp 送信元ホスト名:ファイルパス 送信先ホスト名:ファイルパス