TCP/IPとイーサネット
インターネットでは、TCP/IPがデフォルトスタンダードとなっている
規格としてはイーサネットが広く使われていて、イーサネットは、プロトコルとしてTCP/IPを使用する規格になっている
IPアドレス
IPアドレスは、住所のようなもので、グローバルIPアドレスとプライベートIPアドレスが存在する
グローバルIPアドレスは、WANの中での場所を示すものであり、JPNICが管理している
JPNICが各プロバイダに割り当て、各プロバイダがユーザに割り当てる
LAN内での場所を示すものがプライベートIPアドレスで、こちらはLAN内で一意であればよい
これはLANのネットワーク管理者が自由に割り当てることができる
IPアドレスはネットワークアドレス部とホストアドレス部に分かれている。その境を表すのがサブネットマスク
ホストアドレス部がすべて0のアドレスは、そのネットワーク自身のアドレスを示す
ホストアドレス部がすべて1のアドレスは、そのネットワーク内のすべてのホストに届くブロードキャストアドレスを表す
サブネットマスクによって、通信先ホストが同一ネットワークにいるかいないかが判断できる
また、サブネットマスクを変えることで、ネットワークを分割し、効率的にIPアドレスを使用できる メリットがある
DHCP
プライベートIPアドレスは、ネットワーク内で一意に決まらないといけない
管理者が自由に決められるといっても、空いているアドレスを探して、割り振ったりというのは面倒
これを自動的にやってくれるのが、DHCP
ネットワーク起動時に、自動的にそのPCに適切なIPアドレスを割り振ってくれる
これはMACアドレスと紐づいた管理をしているので、起動ごとにアドレスが変わることは少ない
DNS
IPアドレスはわかりづらい。なので名前を付けるのが良い。IPアドレスの名前解決をするのが、DNS(ドメインネームシステム)サーバ 。
DNSサーバがIPアドレスとドメインネーム(-.com等)の対応付けを行っている
TCPとUDP
TCPとは、IPを使用してデータを送るプロトコルで、データの破損等のエラーチェックを行う信頼性の高いプロトコル
UDPは、エラーチェックを行わない代わりに高速に通信できるプロトコルで、小さなデータや映像等の多少欠損しても問題ない通信に適する
あくまで「エラーチェック」の有無であって、安全性の問題でない。信頼性の問題
NIC
ネットワークへアクセスするためには、ネットワークインタフェースが必要。
現在はネットワークへアクセスすることが当然になっているので、ネットワークインタフェースがコントロールチップの中に統合されている
有線LANを使う場合には、ネットワークインタフェースカードと呼ばれるNICを利用する
eth0 等で表されるのがネットワークインタフェース。NICにはMACアドレス という、NICを識別するための番号がついている
さらに、物理的なNICだけでなく、仮想的なNICもある。
仮想的なNICとしては、ループバックインタフェースという、自分自身と通信するためにプログラムが内部的に使用するNICがある
ネットワークインタフェース は、広くネットワークの窓口を指している
**ネットワークインタフェースカード(NIC)**というのが具体的なカードのこと
したがってNICがネットワーク接続に必須なわけではなく、窓口であるネットワークインタフェースが必須だということ
コントロールチップに内蔵されているのはインタフェースであってカードではない
ゲートウェイ
LANとLANをつなげるのは、ゲートウェイ(ルータ)。異なるネットワークをつなげる役割を果たし、他のネットワークと通信する際に必ず通らなければならない接続ポイント であるといえる
異なるプロトコルをつなぐ場合には、プロトコルを変換し、よしなにしてくれる
ゲートウェイはゲートウェイのアドレスを持つ
たとえばプライベートネットワークとインターネットの接続点となるルータは、ゲートウェイの役割を果たす。
デフォルトゲートウェイといった場合のゲートウェイは、狭義のゲートウェイであり、ルータとほぼ同義となる。
同一ネットワークに存在しない外部ネットワークと通信する際に、どのゲートウェイ(ルータ)を使用したらよいかあらかじめ指定しておく
ネットワーク内部からみると、デフォルト(規定)のゲートウェイさえ知っておけば、外部ネットワークとの通信はゲートウェイが取り持ってくれる
PC→L2SW→L3SW→ゲートウェイ→ゲートウェイ→…→L3SW→L2SW→PCという流れ
自分に一番近い出口を探して(出口は設定する)、相手に近い方に近い方に投げられていく
MACアドレステーブルとARPテーブル
L2スイッチにあるテーブルがMACテーブル(バカハブ:リピータハブだと持っていない→つながっているもの全部に垂れ流し)
MACテーブルは、MACアドレスと自分のポート(ポート番号ではない、差込口のこと)を対応させたもの
L2スイッチにとって、IPアドレスは意味不明。MACアドレスで判断している
クライアントPCにあるのが、ARPテーブル
ARPテーブルは、MACアドレスとIPアドレスを対応させたもの
スタティックNAT、ダイナミックNAT、NAPT
Network Address Translationの略
LAN内部ホストの(プライベート)IPアドレスと、外部向け(グローバ)IPアドレスを変換する機能
スタティックNAT
内部ホストのIPアドレスと、外部向けIPアドレスを1対1で結びつける
内部から外部へアクセスするパケットの送信元IPアドレスを、外部向けIPアドレスに書き換えて通信を行う
ダイナミックNAT
複数の内部ホストのIPアドレスと、複数の外部向けIPアドレスをN対Nで結びつける
NAPT(IPマスカレード)
複数の内部ホストのIPアドレスと、1つの外部向けIPアドレスを結びつける
内部向けIPアドレスは、外部に出る際に外部向けIPアドレスに書き換えられる
その際にNAPTではポート番号の変換も行う
つまりポート番号と、内部ホストを対応させることで識別する
pingコマンド
ping ターゲット
ターゲットにデータを送り、返答が戻るまでの時間を表示する
通信が可能かどうか調べるのに使ったりする
-c
オプションをつけると、pingを発行する回数を指定することができる
オプションなしだと無限に発行し続ける、Ctrl+C
で終了する
tracerouteコマンド
traceroute ターゲット
ターゲットや、その途中で通過するゲートウェイへデータを送って、ゲートウェイから返答が返ってくるまでの時間を表示する
どこのゲートウェイまで行けてるのか調べるのに使うことがある
minimalインストールしたり、vagrantのboxに入っていなかったりするから、その場合はインストールする必要がある
pingやtracerouteは、セキュリティ面の考慮から、必要ない場合は応答しない設定にする
pingはICMPというプロトコルを使用するので、このプロトコルをブロックすることで実現する
pingのレスポンス結果(RTT)の目安としては、同じネットワークセグメント上のホストは、1ms(ミリ秒)以内、国内なら10-30ms、地球の裏側だと500ms程度
ネットワークインタフェースに対するハードウェアスペックやファームウェア(*)、リンク状態、リンクスピードなどの確認や、
アクセラレーション機能の有効化・無効化を制御するのに使うのが、ethtool
コマンド
ethtool オプション インタフェース名
インタフェースの情報を確認する
オプションは、-i
でファームウェアのバージョン等を表示
仮想ネットワークインタフェースの場合は、多くの情報が取得できない場合がある
*ファームウェアとは、コンピュータに内蔵されるソフトウェアの一種で、回路などの基本的な制御をつかさどるもの。ROMに内蔵される
なんか通信がうまくいってない時に、原因がルーティングにあることが、よくある
netstatコマンド
本来は、ネットワークに関する様々な状況を表示してくれる コマンド(network statistics)
ルーティングを調べるのにも使うことができ、route
とした時とnetstat -nr
とした時の表示がほぼ一緒
オプションは、
-r
でルーティング(ゲートウェイへの流れ)を表示する
-a
ですべてのサービスを表示
-n
でIPアドレスを数値で表示する
-t
でTCPソケットを表示する
-u
でUDPソケット表示
-i
でネットワークインタフェースの統計情報を表示(各インタフェースのパケット転送量を表示)
-l
で状態が接続待ち(LISTEN)状態にあるソケットのみ表示する
**netstat -tnlp
**として使うことが多い(LISTEN状態のTCPをポート番号込みの、IPは数字で表示)
cf) ipコマンド
routeコマンド
route add [-net|-host] ターゲット [netmask サブネットマスク] [インタフェース]
このコマンドでルーティングに経路を追加できる
ターゲットには、-net
を追加した場合はネットワークアドレスを、-host
の場合にはホストアドレスを宛先として指定
サブネットマスクを省略した場合、ターゲットに設定したアドレスから判別されるマスク値が設定される
インタフェースを省略すると、カーネルが自動的に最適なデバイスを設定する
route add default gw ターゲット [インタフェース]
default gwとすると、デフォルトゲートウェイ(適切な経路がほかにない場合のゲートウェイ)をルーティングに追加
route del [-net|-host] ターゲット [netmask サブネットマスク] [インタフェース]
delを指定すると、ルーティングから経路を削除する
route
としてオプションをなしにすると、ルーティングを表示する(netstat -nrとほぼ同じ)
cf) ipコマンド
ipコマンドは、ネットワークにおける操作全般を扱うことができる
CentOSでは今後、ifconfig,route,arp,netstatコマンドなどのnet-toolsパッケージに含まれていたコマンドは標準ではなくなり、ipコマンドに置き換わる
IPアドレス、MACアドレスの確認(= ifconfig)
ルーティングテーブルの確認(= route, netstat -nr)
ARPテーブルの確認(= arp)
ip neighbor(neighでも可) show
DNSとは、Domain Name Systemの略で、IPアドレスとドメイン名を紐づけるシステム
一般に、名前の機能を使うには、
定義ファイルを使う
DNSを使う
かの二つが考えられる
どちらを(優先して)使うかは、/etc/nsswitch.conf という設定ファイルで指定する
ファイルを使う場合には**/etc/hostsを参照し、DNSを使う場合には /etc/resolv.conf**を参照してDNSサーバを使う
/etc/nsswitch.conf
ファイルとDNSのどちらを優先して使うかを指定するファイル
項目に、hosts:
という所があり、これに続くのがファイルとDNSの優先順位
たとえば、hosts: files dns
だった場合には、まず/etc/hostsを参照して、解決しなかった場合にDNSを使うということ
/etc/resolv.conf
DNSサーバを指定するファイル
このファイルでは、nameserverとしてDNSサーバを3つまで指定できる
優先は上に記述されているもので、応答が返ってこない場合は順番に次に指定しているサーバに問い合わせる
プロバイダが解決
DHCPサーバに設定されている
この、/etc/resolv.confは、直接編集するのはNG
NetworkManagerやnetworkサービス、DHCPクライアントの設定ファイルなどによって、自動的に変更されるので、意図しない動きをする可能性があることが理由
DNSサーバの設定は、/etc/sysconfig/network-scripts/ifcfg-eth0 に、DNS1=192.xxx.xxx.x``DNS2=192.xxx.xx.xx
と追記すると、ネットワークインタフェースが有効になる際に/etc/resolv.confが設定される
なので、システム再起動、NetworkManager、networkを再起動すると反映される
/etc/hosts
ファイルで、静的に名前を定義するファイル
書式はIPアドレス 名前(FQDN) ホスト名
で、1行に1つの定義を記述する
自力解決(自分で解決できるものは自力で解決したい)
nslookupコマンド
インターネット上では、IPアドレスだけを使うとわかりづらいので、FQDN(Fully Qualified Domain Name)と呼ばれる名前(例:www.xyz.co.jp)を使うことができる
DNSに問い合わせて、名前とIPの対応を表示してくれるのがnslookupコマンド
名前からIPを調べるのが、正引き(nslookup xxx.co.jp → xxx.yyy.zzz
)
IPから名前を調べるのが、逆引き(nslookup xxx.yyy.zzz → xxx.co.jp
)
TCP/IPにおいては、IPアドレスでどこのPC(ノード)かはわかるが、そのPCのどのサービスにアクセスするかまでは指定できない
この、どのサービスかを指定するのが、ポート番号
ポート番号には、何番がどのサービスに対応するかが規格で決まっている
一般的なサービスは、ポート番号との対応が**/etc/service**に記述されている
規格で決まっている対応は、
WELL KNOWN PORT NUMBERS(一般的なポート番号) → 0-1023
REGISTERED PORT NUMBERS(登録済みポート番号) → 1024-49151
DYNAMIX AND/OR PRIVATE PORTS(自由に利用できるポート番号) → 49152-65535
サーバで使われる主なポート番号は以下の通り
ポート番号
サービス
20
FTP(データ)
21
FTP(制御)
22
SSH
23
Telnet
25
SMTP
53
DNS
80
HTTP
443
HTTPS
たとえば、SSHが22番だということは皆知っているので、アタックされやすい
だからポート番号を変えることがあり、その時に割り当てられるのが、上記のPRIVATE PORTS(49152-65535)になる
TCPラッパー
ネットワークセキュリティのためにTCPラッパー(TCP Wrapper)というきのうが提供されている
TCPラッパーでセキュリティを強化する場合は、サービスがTCPラッパー機能を提供するライブラリ(プログラム)を利用している必要がある
TCPラッパーには、アクセスを制限する**/etc/hosts.denyと、アクセスを許可する /etc/hosts.allow**の二つのファイルが必要
この二つのファイルは、サービス名 : 適応するネットワークやIPアドレス、ホスト名、ドメイン名などのクライアントのリスト
という書式で記述
クライアントのリストの後に:
で区切ると、制限に引っかかる場合に実行するシェルスクリプトを記述できる
denyのファイルですべて不可にしてから、allowで必要なサービスを開放すると安全
ファイアウォール(パケットフィルタリング)の設定
ポート番号単位でセキュリティの設定ができるのが、ファイアウォール
ファイアウォールの設定には、iptables
コマンドを使う(管理者権限)
iptablesは、実際にはパケットフィルタリングであり、ファイアウォールの機能の一部
これに加えて、iptablesは、NATの機能を持つ
iptablesは、カーネルのNF(netfilter)によって定義されており、ユーザーランド(カーネル以外のOS)のパケットフィルタリングのルール定義を行うコマンドとして用意されている
iptales
コマンド
ファイアウォールの設定に使う
-L
オプションで引数なしにすると、現在のファイアウォール設定を表示 してくれる
iptablesの設定ファイル(/etc/sysconfig/iptables)
コマンドではなく、設定ファイルをいじると、サービス起動時に設定される
service iptables start/stop
iptables-save
iptablesコマンドの設定を、iptablesコマンドのオプションの形式で表示しつつ保存する
service iptables save
service iptables reload
ファイルを直接変更した場合に、その変更を適用するときにリロードするコマンド
restart
でもできるが、プロトコルによっては、iptablesの追加モジュールを使用している場合があり、restartすると接続が切れる
reloadだと接続を切らずに適用できる
iptables -A チェーン 条件 -j ターゲット
コマンドでの設定の基本的な書式の一例(-Aは追加、-Dだと削除、-Rで置き換え)
チェーンにはINPUT(受信パケット)やOUTPUT(送信パケット)を
条件にはさまざまなパラメータを使用する
ターゲットにはACCEPT(許可)やDROP(破棄)などを指定
チェーン
説明
INPUT
受信パケット
OUTPUT
送信パケット
FORWARD
フォワードするパケット
PREROUTING
受信時に変換するチェーン
POSTROUTING
送信時に変換するチェーン
ターゲット
説明
ACCEPT
パケットの通過を許可
DROP
パケットを破棄
REJECT
パケットを拒否し、ICMP(pingにも使うプロトコル)で通知
LOG
パケットの情報をsyslogに出力
パラメータ
説明
-p
プロトコル指定
-s
送信元アドレスを指定
-d
宛先のアドレスを指定
--sport, --dport
送信元、宛先のポートを指定
-j
ルールにマッチした場合の移動先をターゲットとする
iptablesのルールは設定された順番に適用される。
デフォルトでは、すべてのパケットをREJECTするルールが設定されているため、コマンドで一番最後に追加されたルールは実際には機能しない(-Iとかでインサートするとまた別)
また、iptablesの設定をGUIで行えるツールがある
⇒system-config-firewall-tui
これは、インストールする必要があることもある(yum install system-config-firewall-tui)
これで設定の変更を行うと、/etc/sysconfig/iptablesの設定が上書きされるので、シャットダウンしても変更は反映されたまま
networkサービスとNetworkManager
CentOS上のネットワークの管理は、networkサービスおよびNetworkManagerサービスで行う
networkサービスは、Linuxで従来から使われているネットワーク管理の仕組み
起動時に設定ファイルからネットワークの情報を読み込み、ネットワークインタフェースに対してIPアドレスなどの設定を行ったり、デフォルトゲートウェイやDNSサーバの情報を起動時に反映させる
これ等の中身はシェルスクリプトの集まりになっている
一方、NetworkManagerは、Linuxにおけるネットワークの管理を抽象化して新たに作った仕組み
また、NetworkManagerはD-bus(*)のAPIを持っていて、ネットワークを利用するアプリケーションと連携を行うことができる
*D-busとは、アプリケーション間で通信を行う時に使用するもの
CentOS6では、NetworkManagerを標準で利用しているがあ、Minimalインストールや、NetworkManagerに非対応のアプリケーションでnetworkサービスを使いたい場合、これ等をいじることがある
**chkconfig
**コマンドは、ランレベルに応じて、サービス(デーモン)の自動起動の有効・無効を操作するコマンド
chkconfig サービス on/off
とする
chkconfig --list
とすると、自動起動するサービスをランレベル別にリスト表示する
--listのあとにサービス名を記述すればそのサービスだけ表示する
ランレベル とは、LinuxOSの動作モードを表す
ランレベル
説明
0
システムが停止した状態
1
シングルユーザモード(セーフモード)。rootでしかログインできない。サーバにトラブルがあった時、コンソールでのトラブル対応時に利用する
2
NFSマウントなしのマルチユーザモード
3
X Windows以外のデーモンのほとんどを起動する動作モード
4
未使用
5
X Windowsのデーモンも起動する
6
システム再起動時
DHCPは、IPアドレスを自動的に取得するためのプロトコル
DHCPサーバから、DHCPクライアントに対してIPアドレスなどの設定を自動的に提供する仕組みになっている
*DHCPサーバは、同一ネットワークセグメント内に1つだけ設置すること
そうしないとクライアントは先に受け取ったDHCPサーバからの設定でIPアドレスを設定する
DHCPプロトコルはルータを超えることができないので、ルータで分割された別のネットワークセグメントネットワークセグメントには別のDHCPサーバを設置できる
DHCPサーバのインストール → yum install dhcp
DHCPサーバの設定をいじる → /etc/dhcp/dhcpd.conf
DHCPサービスの開始 → service dhcpd start
DHCPサービスの起動時の自動有効化 → chkconfig dhcpd on
DHCPサーバ設定ファイルの編集
/etc/dhcp/dhcpd.confにはインストール直後はコメントしかない
ddns-update-style none;
↓ ネットワークアドレスとマスクの設定(ネットワークアドレスとマスクは、サーバ自身のネットワークと一致させなければならない)
subnet 192.xxx.xxx.xx netmask 255.255.xxx.xx {
range 192.168.0.200 192.168.0.254; ← 何番から何番までの範囲で割り当てるか
option routers 192.xxx.xxx.xx; ← デフォルトゲートウェイ(ルータ)の指定
option domain-name-servers 192.168.xxx.xx, 192.xxx.xxx; ← DNSサーバの指定
default-lease-time 18000; デフォルトの貸出時間(秒)を指定
max-lease-time 36000; 最大の貸出時間(秒)を指定
}
以下、特定のクライアントに固定のIPアドレスを割り当てる設定
host client1 {
hardware ethernet FA:XX:YY:ZZ:SS; ← 物理(MAC)アドレス
fixed-address 192.168.zzz.zzz; ← 割り当てる指定IPアドレス
}
リース時間が過ぎるとDHCPクライアントはDHCPサーバに対してIPアドレスの再要求を行う
クライアントがIPアドレス要求時にリース時間を指定しなかった場合、default-lease-timeが設定される
リース時間を指定しても、maxより長い時間は要求できない
また、DHCPクライアントの方では、ネットワークインタフェースの設定ファイルにBOOTPROTO=dhcpとしなければならない
DHCPサーバからDNSの情報を受け取ると、デフォルトでクライアントの/etc/resolv.confが自動的に変更される
この自動変更を有効にする設定項目は、PEERDNS=yes
ネットワークの有効化やホスト名などの情報→/etc/sysconfig/network
静的な名前解決→/etc/hosts
参照DNSファイル→/etc/resolv.conf
ネットワークインタフェース設定(DNS情報含む)→/etc/sysconfig/network-scripts/ifcfg-xxx
名前解決(参照優先順設定)→/etc/nsswitch.conf
ポート番号とサービスの対応リスト→/etc/services
各種コマンドがポート番号を表示する際、ポート番号に対応した名前に置き換えて表示するのに使う
名前とポート番号の表示に使うだけであって、実際にはほかのプロトコルがポートを使用している場合がある
プロトコル定義ファイル→/etc/protocols
各種プロトコルの名前とプロトコル番号が記述されている
iptables(パケットフィルタリング)→/etc/sysconfig/iptables
DHCPサーバ設定→/etc/dhcp/dhcpd.conf
DHCPサーバが提供しているIPアドレス一覧→/var/lib/dhcpd/dhcpd.leases