鸟哥的 Linux 私房菜 服务器架设篇 Notes

第一章 搭建服务器前的准备工作

1.2 搭建服务器的基本流程

1.2.1 网络服务器成功连接的分析

查询已启动的网络监听服务:

1
netstat -tulnp

网上邻居需要安装的是 Samba 这个软件.

第二章 网络的基本概念

2.1 网络

2.1.1 什么是网络

2.1.2 计算机网络组成组件

每部主机的内部都拥有一个内部的网络接口,即 loopback (lo) 这个循环测试接口.

2.1.3 计算机网络的范围

2.1.4 计算机网络协议: OSI 七层协议

Open System Interconnection, 无论是接收端还是发送端,每一层次只认识对方的同一层的数据.

在七层协议中, 每层都会有自己独特的头部数据 (header).

TCP/IP 简化为 4 层. 其将应用, 表示, 会话三层整合成一个应用层, 将数据链路层和物理层整合成网络接口层.

2.2 TCP\IP 的网络接口层的相关协议

2.2.1 广域网使用的设备

1. 传统电话拨号连接: 通过 PPP 协议

PPP 协议 (Point-to-Point Protocol).

PPP 协议支持 TCP/IP, NetBEUI, IPX/SPX 等通信协议.

2. 整合服务数字网络 (Integrated Services Digital Network, ISDN)

3. 非对称数字用户环路 (Asymmetric Digital Subscriber Line, ADSL): 使用 PPPoE 协议

由于上传/下载的带宽不同, 因此才称为非对称的环路.

PPPoE 为 PPP over Ethernet.

4. 电缆调制解调器 (Cable Modem)

2.2.2 局域网使用的设备 – 以太网

整个网络世界并非仅有以太网这个硬件接口.

1. 以太网的速度与标准

以太网标准为 802.3 的 IEEE 10BASE5, 主要定义为: 10 代表传输数据为 10 Mbps, BASE 表示采用基带信号来进行传输, 至于 5 则是指每个网络节点之间最长可达 500 米.

网络传输的信息就是 0 和 1.

一般的 2Mbps/128Kbps 指的是 bit 的传输而不是 byte, 因此要除以 8.

使用四对绞线的网线,也就是常见的 8 蕊网线, 这种网线常被称为五类 (Category 5) 的网线.

提升传输速度, 和网线极大相关.

2. 以太网的网线接头 (交叉/直连线)

目前在以太网上最常见到的接头就是 RJ-45 的网络接头.

2.2.3 以太网络的传输协议: CSMA/CD

整个以太网的重心就是以太网卡.

以太网的传输主要就是网卡对网卡之间的数据传输.

每张网卡都有一个独一无二的编号, 即 MAC (Media Access Control).

集线器是一种网络共享介质设备, 即,网络共享介质在单一时间点内, 仅能被一台主机所使用.

不管哪一台主机发送出数据帧, 所有计算机都会接收到.

2.2.4 MAC 的封装格式

在 Linux 当中,可以使用 ifconfig 命令来查看网卡卡号.

数据包上的 MAC 地址会变化.

防火墙软件大多也能够针对网卡来进行策略的定义. 不过针对网卡的限制仅能在局域网内进行, 因为 MAC 不能跨 Router.

数据量最小需要有 46 bytes.

2.2.5 MUT (最大传输单位)

以太网数据帧所能传送的数据量最大可以达到 1500 bytes, 这个数值就被称为 MTU (Maximum Transmission Unit, 最大传输单元).

每种网络接口的 MTU 都不同.

不论你的网络媒体支持的 MTU 有多大, 你必须考虑到你的数据包需要传到目的地时, 所需要经过的所有网络设备,然后在来决定你的 MTU 配置.

2.2.6 集线器, 交换器与相关机制

1. 共不共享很重要, 集线器还是交换器

交换器 (switch) 是非共享的, 其不会有冲突.

交换器与集线器最大的差异, 在于交换器内有一个特别的内存, 这个内存可以记录每个 Switch port 与其连接的 PC 的 MAC 地址.

当来自 Switch 两端的 PC 要互传数据时, 每个数据帧将直接通过交换器的内存数据而传送到目标主机上, Switch 的每个端口 (port) 都有独立的带宽.

Switch 已经克服了数据包冲突的问题, 因为 Switch port 有对应 MAC 的相关功能.

在选购的时候, 选择支持全双工/半双工, 以及支持 Jumbo frame 的为佳.

2. 什么是全双工/半双工 (full-dumplex/half-dumplex)

3. 自动协调速度机制 (auto-negotiation)

可自动协调出最高的传输速度来通信.

4. 自动分辨网线的交叉或直连接口 (Auto MDI/MDIX)

自动分辨网线的接口来调整连接.

2.3 TCP/IP 的网络曾相关数据包与数据

2.3.1 IP 数据包的封装

2.3.2 IP 地址的组成与分级

将 32 bits 的 IP 分成四小段, 每段含有 8 个 bits, 将 8 个 bits 换算成十进制.

IP 又分为:

  • Net_ID, 网络号码, 前面三组数字
  • Host_ID, 主机号码, 后面一组数字

对于同一个网络的定义是 – 在同一个物理网段内, 主机的 IP 具有相同的 Net_ID, 并且具有独特的 Host_ID.

1. IP 在同一网络的意义

Net_ID 与 Host_ID 的限制

在同一个网段内, Net_ID 是不变的, 而 Host_ID 则是不可重复的.

Host_ID 在二进制的表示法中, 不可同时为 0, 也不可同时为 1.

Host_ID 全为 0 表示整个网段的地址 (Network IP). 全为 1 则表示为广播的地址 (Broadcast IP).

在局域网内通过 IP 广播传递数据

同一个网段内, 可直接用 MAC 地址交流.

2. IP 与门牌号码的联想

3. IP 的分级

IP 网段分为 5 个等级, 每种等级的范围主要与 IP 的 32 bits 数值的前面几个位有关.

2.3.3 IP 的种类与取得方式

在 IPv4 里面就只有两种 IP 的类别:

  • Public IP : 公共 IP, 经由 Inter NIC 所统一规划的 IP, 这种 IP 才能连接 Internet
  • Private IP : 私有或保留 IP, 不能直接连上 Internet 的 IP, 主要用于局域网格内的主机连接规划

私有 IP 分别在 A, B, C 三个 Class 当中各保留一段作为私有 IP 网段.

在防火墙上加上 NAT (Network Address Transfer) 服务, 可以通过伪装 IP 来使私有 IP 的计算机来连上 Internete.

1. 特殊的 Loopback IP 网段

即 lo 网络,用来测试操作系统内部循环所用的一个网络, 同时也能够提供给系统内部原本就需要使用网络接口的服务 (daemon) 所使用.

这个网段在 127.0.0.0/8 这个 class A, 默认的主机 IP 为 127.0.0.1, 可用来测试网站. 用 http://localhost.

2. IP 的取得方式

  • 直接手动配置 (static)
  • 通过拨号取得
  • 自动取得网络参数 (DHCP)

2.3.4 Netmask, 子网与CIDR (Classless Interdomain Routing)

1. Netmask

Netmask 又称 Subnet mask, 即子网掩码. 用来实现子网的划分.

2. 子网划分

根据 24 位来判断有几个网段, 如 Net_ID 为 26 位, 即 26 - 24 = 2, 有 $2^2$ 即 4 个网段.

3. 无类别域间路由 CIDR (Class Interdomain Routing)

2.3.5 路由概念

在同一个局域网内, 可以通过 IP 广播的方式来实现数据传递的目的.

不同网段之间通过路由器传递数据.

每台主机都有自己的 路由表. 数据的传递将依据这个路由表进行传送.

网关/路由, Gateway/Router 的功能就是负责不同网络之间的数据包传递 (IP Forwarding). 所以网关和路由似乎可以等价.

2.3.6 观察主机路由: Route

路由一旦设置错误, 将会导致某些数据包完全无法正确的送出去.

观察路由表的命令:

1
route [-n]

-n 是将主机名以 IP 的方式显示.

输出中的 Destination 就是 Network, 表示网络.

Gateway 那一栏为 0.0.0.0 表示不需要通过 Gateway 传播, 而是直接从 Iface 接口发送.

若要传送的数据包目的地 IP 不再路由规则里, 那么数据包就会被传送到 “default” 所在的路由规则.
输出中的 Flags, 有多个标志可以来表示该网络或主机代表的意义:

  • U : 代表该路由可用
  • G : 代表该网络需要经由 Gateway 来帮忙传递
  • H : 代表该行路由为一台主机, 而非一整个网络

2.3.7 IP 与 MAC: 网络接口层的 ARP 与 RARP 协议

ARP (Address Resolution Protocol, 网络地址解析) 协议.

RARP (Revers ARP, 反向网络地址解析).

当我们想了解某个 IP 配置在哪张以太网卡上时, 我们的主机就会对整个局域网发送出 ARP 数据包, 对方收到 ARP 数据包后就会返回它的 MAC.

当 ARP 协议取得目标 IP 与它的网卡卡号后, 就会将该笔记录写入主机的 ARP table 中, 记录 20 分钟.

取得网卡卡号 (MAC):

1
ifconfig

取得 ARP 表格内的 IP/MAC 对应数据:

1
arp -[nd] hostname

参数与选项:

  • -n : 将主机名以 IP 的形态显示
  • -d : delete, 将 hostname 的 hardware_address 由 ARP table 中删掉
  • -s : set, 设定某个 IP 或 hostname 的 MAC 到 ARP table 当中

2.3.8 ICMP 协议

Internet Control Message Protocol, 因特网信息控制协议.

其最大功能就是确保我们网络的连接状态与连接的正确性.

利用 ICMP 来检验网络状态最简单的命令就是 pingtraceroute.

2.4 TCP/IP 的传输层相关数据包与数据

2.4.1 面向连接的可靠的 TCP 协议

IP 地址的两端, 连接的是 Server 和 Clicent 的 port.

1. 通信端口

来源与目标的端口都是 16 位, 其做大可达 65535 ( $2^16$ ).

可以通过 port 来判断应用程序.

2. 特权端口 (Privileged Ports)

Internet 上面已经有很多规范好的固定 port (well-known port), 这些 port number 通常小于 1024.

小于 1024 以下的端口要启动时, 启动者的身份必须要是 root 才行, 所以叫做特权端口.

在 Linux 环境内下, 各网络服务与 port number 的对应默认写在 /etc/services 文件内.

3. Socket Pair

由于网络是双向的, 要达成连接的话需要服务器与客户端均提供了 IP 与端口才行. 因此, 常称这个成对的数据为 Socket Pair.

  • Source Address + Source Port
  • Destination Address + Destination Port

2.4.2 TCP 的三次握手

在连接之前都必需要通过三个确认动作, 所以这种连接方式也就被称为三次握手 (Three-way handshake).

2.4.3 无连接的 UDP 协议

User Datagram Protocol, 用户数据报协议.

UDP 在传输过程中, 接收端在收到数据包之后, 不会回复响应数据包 (ACK) 给发送端.

2.4.5 网络防火墙与 OSI 七层协议

以 OSI 七层协议来说, 每一层可以阻挡的数据有:

  • 第二层 : 可以针对来源与目标的 MAC 进行阻挡
  • 第三层 : 主要针对来源于目标的 IP, 以及 ICMP 的类别 (type) 进行阻挡
  • 第四层 : 针对 TCP/UDP 的端口进行阻挡, 也可以针对 TCP 的状态 (code) 来处理

2.5 连上 Internet 前的准备事项

2.5.1 IP 地址, 主机名与 DNS 系统

主机名称对应 IP 的系统就是 Domain Name System (DNS).

在 Linux 里, DNS 主机的 IP 的设定在 /etc/resolv.conf 这个文件中.

2.5.2 连上 Internet 的必要网络参数

一组合理的网络设置, 需要以下这些数据:

  • IP
  • Netmask
  • Network
  • Broadcast
  • Gateway
  • DNS

第3章 局域网架构简介

3.1 局域网的连接

3.1.1 局域网的布线规划

3.1.1.1 Linux 直接联网 – 让 Linux 与一般 PC 的地位相同

3.1.1.2 Linux 直接联网 – 让 Linux 与一般 PC 处于不同地位

3.1.1.3 Linux 直接联网 – 让 Linxu 直接管理 LAN

让 Linux 作为 IP 路由器的功能相当简单, 同时 Linux 必须具有两张网卡, 分别是对外和对内.

3.1.1.4 Linux 放在防火墙后 – 让 Linux 使用 Private IP

3.1.2 网络设备选购建议

内置网卡的芯片通常是比较特殊的, 可能导致 Linux 内置的网卡驱动程序无法顺利驱动该网卡.

3.2 本书使用的内部链接网络参数与通信协议

3.2.1 网络联机参数与通信协议

一张网卡可以设定多个 IP.

一个 IP 即为一个网络接口, 两个网络接口即可进行 NAT (类似 IP 路由器功能) 的设定.

在 Linux 中, 只要网络参数设定妥当, 那么 TCP/IP 就已经被启用了, 所以不需要额外再安装其他通信协议.

如果需要将 Linux 系统中的硬盘空间分享给同网络的 Windows PC, 那么需要额外安装 SAMBA 这个服务器软件才行.

内部的 LAN 用 Private IP 来设定.

LAN 内的 PC 网络相关设定参数为:

  • IP
  • Netmask
  • Network
  • Default Gateway
  • DNS

第4章 连接 Internet

4.1 Linux 连接 Internet 前的注意事项

4.1.1 Linux 网卡

若 Linux 内核还未支持网卡设备, 可通过:

  • 重新编译内核
  • 编译网卡的内核模块

3. 观察内核所捕捉到的网卡信息

1
dmesg |grep -in eth

查看相关的设备芯片数据:

1
lspci |grep -i ethernet

4. 观察网卡模块

内核是否顺利加载模块:

1
lsmod | grep 1000

模块的相关信息:

1
modinfo e1000

不同的内核版本使用的驱动程序是不一样的, 在更改内核之后, 自己编译的硬件驱动程序需要重新编译.

4.1.2 编译网卡驱动程序

在购买硬件时, 可以先查阅一下硬件包装上面是否提及支持 Linux.

由于编译程序需要编译程序以及内核相关信息, 因此需要预安装 Gcc. Make, Kernel-Header 等软件.

1. 取得官方网站的驱动程序

在官网下载对应的驱动后放在 /root 下.

2. 解压缩与编译

大概看下就好:

1
2
3
4
tar -zxvf e1000-8.0.30.tar.gz -C /usr/local/src
cd /usr/local/src/e1000-8.0.30/
cd src
make install

最后这个模块会被编译完成且安装在: /lib/modules/$(uname -r)/kernel/drivers/net/e1000/e1000.ko

3. 模块的测试与处理

要先删除就的模块, 才能够重新加载这个模块:

1
2
3
rmmod e1000
modprobe e1000
modinfo e1000

4. 设定开机自动启动网卡模块

/etc/modprobe.d/ 目录下建立一个名为 ether.conf 文件, 将模块与网卡代号链接在一起:

1
2
3
4
# vim /etc/modprobe.d/ether.conf
alias eth0 e1000
alias eth1 e1000
# sync ; reboot

5. 尝试配置 IP

手动分配私有 IP:

1
ifconfig eth0 192.168.1.100

4.1.3 Linux 网络相关配置文件

  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network
  • /etc/resolv.conf
  • /etc/hosts
  • /etc/services
  • /etc/protocols

4.2 连接 Internet 的设置方法

4.2.1 手动配置固定 IP 参数

4.2.3 ADSL 拨号上网 (适用 ADSL 拨号以及光纤接入)

拨号上网, 可以使用 rp-pppoe 这套软件.

可以到以下网站取得:

re-pppoe 使用的是 Point to Point (ppp) over Ethernet 所产生的网络接口, 因此当顺利拨号成功之后, 会多产生一个网络接口 ppp0.

ppp0 是构建在以太网卡上的, 必须要有以太网卡, 同时, 即使拨号成功后, 也不能将没有用到的 eth0 关闭.

当 ppp0 拨号成功之后, 不要定义 GATEWAY, ISP 会主动给予 ppp0 接口一个可以连上 Internet 的 Default Gateway, 如果又定义另一个, 两个网关可能会造成网络不通.

4.3 无线网络 – 以笔记本电脑为例

4.3.1 无线网络所需要的硬件: AP, 无线网卡

Wireless Access Point, 即 AP, 无线接入点, 其本身就是个路由器, 有两个接口, 一个可以与外部的 IP 沟通, 另一个则是作为 LAN 内部其他主机的 GATEWAY.

Linux 的无线网卡网站说明: http://linux-wless.passys.nl/

每台 AP 都会有一个联机的名字, 即 ESSID 和 SSID, SSID 可以提供给 Client 端, 当 Client 端需要进行无线连接时, 他必须说明它要利用哪一台 AP, ESSID 就是那时需要输入的数据.

第5章 Linux 中常用的网络命令

5.1 网络参数设定使用的指令

主要使用的命令:

  • ifconfig: 查询, 设定网卡和 IP 网域等相关参数
  • ifup, ifdown: 用于启动网络接口
  • route: 查询, 设定路由表
  • ip, 一个汇总功能的命令

ifconfig 可以暂时手动来设定或修改某个网卡的功能, 可以添加虚拟网络接口.

如果以配置文件启动网络接口, 就是用 ifupifdown

5.1.2 路由修改: route

一般来说, 只要有网络接口, 该接口就会产生一个路由.

Gateway0.0.0.0 表示该路由是直接由本机传送, 即通过局域网的 MAC 直接交流.

Flag 的信息可以在 man route 中查看.

若出现:

1
SIOCADDRT: Network is unreachable 

这样的报错, 其源于 gw 后面接的 IP 无法直接与你的网域沟通.

5.2 网络排错与查看命令

5.2.1 两台主机的两点沟通: ping

TTL 的默认值为 255.

如果你的主机与带检测主机并不在同一个网络内, 那么 TTL 默认使用 255, 如果是同一个网络内, 那么 TTL 则默认使用 64.

5.2.2 两主机间各节点分析: traceroute

traceroute 会对每个节点做 UDP 的回声等待, 并侦测回复的时间, 每节点侦测三次, 最终回传结果.

回传的星号表明, 该节点有某些防护措施, 让我们发送的数据包被丢弃.

某些路由器不接受来自客户端的各项侦测.

5.2.4 检测主机名与 IP 的对应: host, nslookup

host 命令可以用来查出某个主机名的 IP. 这个 IP 是向 /etc/resolv.conf 文件中的 DNS 服务器查询的.

也可指定查询主机.

5.3 远程连接命令与即时通信软件

可以通过 Telent, SSH, 或者 FTP 等协议来进行远程主机登录.

第8章 路由观念与路由器设定

8.1 路由

8.1.1 路由表产生的类型

每一台主机都有自己的路由表.

查看路由表:

1
$ route -n

路由表主要有这几种情况来设计:

  • 依据网络接口产生的 IP 而存在的路由
  • 手动或预设路由 (default route), 要注意, 所规划的路由必须是你的装置可以直接沟通的

8.1.2 一个网卡绑多个 IP: IP Alias 的测试用途

利用 ifconfig 命令可以在 eth0 上模拟出一个虚拟接口.

IP 路由器的设置通常是使用 WWW 接口来提供的, 这个 IP 路由器通常会给予一个私有 IP, 即 192.168.0.1 来让用户开启 WWW 接口的预览.

所有的 IP Alias 都是由实体网卡仿真来的, 所以在启动 eth0:n 的模拟网卡时, eth0 必须要先被启动.

开机时启动 IP alias

建立 /etc/sysconfig/network-scripts/ifcfg-eth0:0 配置文件.

8.1.3 重复路由问题

同一部主机上面设定相同网域的 IP 时, 得特别留意你的路由规则.

8.2 路由器架设

路由器会分析来源端数据包的 IP 表头, 在表头内找出要送达的目标 IP 后通过路由器本身的路由表 (routing table) 来将这个数据包向下一个目标(next hop) 传送.

查看内核是否启动了传递数据包的能力:

1
$ cat /proc/sys/net/ipv4/ip_forward

输出中为 1 表示启动了.

直接修改系统配置文件的内容, 可以在开机启动时启动.

  • 静态路由, 网域变化需要手动利用 route 指令修改.
  • 动态路由, 自动侦测网域的变化并直接修改 Linux 内核的路由表信息.

8.2.3 静态路由之路由器

只要是具有路由器功能的设备 (Route A, Linux Router) 都会具有两个以上的接口, 分别用来沟通不同的网域, 同时该路由也都会具有一个预设路由.

第9章 防火墙与 NAT 服务器

Linux Netfilter 与 TCP Wrappers 两个机制来管理的.

通过 Netfilter 防火墙机制, 可以达到让私有 IP 的主机上网 (IP 路由器功能), 并且能够让 Internet 连到内部的私有 IP 所架设的 Linux 服务器 (DNAT 功能).

9.1 认识防火墙

防火墙可以分为硬件防火墙与本机的软件防火墙.

9.1.3 Linux 系统上防火墙的主要类别

主要的防火墙有数据包过滤型的 Netfilter 与依据服务软件程序作为分析的 TCP Wrappers 两种.

1. Netfilter (数据包过滤机制)

数据包过滤, 即通过分析进入主机的网络数据包, 将数据包的头部数据提取出来进行分析, 以决定该连接为放行或抵挡的机制, 这种方式可以直接分析数据包头部数据, 所以包括 MAC, IP, TCP, UDP, ICMP 等数据包的信息都可以进行过滤分析.

Linux 使用内核内建的 Netfilter 机制, 提供 iptables 这个软件来作为防火墙数据包过滤的指令.

2. TCP Wrappers (程序管理)

分析谁对某程序进行访问, 通过规则去分析该服务器程序谁能够连接, 谁不能连接.

其与启动的端口无关, 只与程序的名称有关.

9.5 NAT 服务器设定

NAT 是 Network Address Translation 的缩写.

9.5.1 什么是 NAT ? SNAT ? DNAT ?

3. Proxy (代理服务器)

第11章 远程联机服务器 SSH / XDMCP / VNC / RDP

由于修改的 IP 不一样, 分为:

  • SNAT (Source NAT, 修改 Source IP)
  • DNAT (Destination NAT, 修改 Destination IP)

最常见的 IP 分享器就是一个路由器, 这个 IP 分享器一定会有一个 Public IP 和一个 Private IP.

比如:

  • 外部接口用 eth0, 这个接口有 public IP
  • 内部接口用 eth1, 假设 IP 为 192.168.100.254

9.5.2 最简单的 NAT 服务器: IP 分享功能

11.1 远程联机服务器

11.1.1 什么是远程联机服务器

11.2 文字接口联机服务器

SSH 是 Secure SHell protocol 的简写.

SSH 本身就提供两个服务器功能:

  • 类似 telnet 的远程联机使用 shell 的服务器
  • 类似 FTP 服务的 sftp-server, 提供更安全的 FTP 服务

非对称密钥 (Public and Private Key):

  • 公钥 (public key), 提供给远程主机进行数据加密的行为
  • 私钥 (privat key), 远程主机使用你的公钥加密的数据, 在本地端能够使用私钥来进行解密

服务器端有客户端的公钥以及自己的私钥, 客户端有服务器端的公钥和自己的私钥.

在服务器端, 每一次启动 sshd 服务, 该服务会主动去找 /etc/ssh/ssh_host* 文件 (存放成对的公私钥), 若系统刚刚安装完成, 由于没有这些公钥文件, 因此 sshd 会主动去计算出这些需要的公钥文件, 同时也会计算出服务器自己需要的私钥文件.

服务器的公钥数据存放在客户端的 ~/.ssh/known_hosts 文件中.

客户端的密钥实在随机运算产生于本次联机当中的, 所以你这次的联机与下次的联机的密钥可能会不一样.

关于 ssh 自己的理解

服务器上运行 sshd 进程,等待客户端的连接,在接收到连接请求后,先查看自己有没有钥匙对,若没有则创建,有则将自己的公钥发送给客户端.

客户端会将公钥数据存放在 ~/.ssh/known_hosts 中. 客户端也会查看自己的钥匙对,并把自己的公钥发给服务器端.

免密登陆的核心是 authorized_keys 里的内容,里面存放公钥. 创建这个公钥的主机就可以免密登陆. 这里就相当于是用公钥替代了用户密码.

11.2.2 启动 SSH 服务

在我的 Archlinux 上:

1
$ sudo systemctl start sshd

一般架构在 port 22 上面.

sshd 这个服务包含很多指令, 包括 ssh, sftp, scp 等.

11.2.3 ssh 客户端联机程序 - Linux 用户

1. SSH: 直接登入远程主机的指令

直接连接主机:

1
$ ssh 127.0.0.1

后面不加用户名, 就使用当前用户登录.

确认公钥指纹码时, 需要用 Yes 而不是 Y/y.

使用 student 帐号登录:

1
$ ssh student@127.0.0.1

使用 -f 选项, 只让对方主机执行命令而不登录.

1
$ ssh -f student@127.0.0.1 find / &> ~/find1.log

使用 -o 选项指定项目:

1
$ ssh -o StrictHostKeyChecking=no root@localhost

StrictHostKeyChecking=no 能够不需要 Yes 确认添加主机到 known_host 文件中.

2. 服务器公钥记录文件: ~/.ssh/known_hosts

当你登入远程服务器时, 本机会主动的用接受到的服务器的 public key 去对比 ~/.ssh/known_hosts 中有无相关的公钥.

伪装 ssh 服务器, 就是返回伪装者的公钥.

若遇到因为公钥不同而导致的无法登入, 可以选择删除 ~/.ssh/known_hosts 再重新添加.

3. 模拟 FTP 的文件传输方式: sftp

sftpscp (这个 cp 是 copy) 这两个命令都是使用 ssh 的隧道 (port 22), 只是模拟成 FTP 与复制的动作.

登录:

1
$ sftp student@localhost

有很多指令, 大部分和 bash 指令相同, 具体见书.

4. 文件异地直接复制: SCP

通常使用 sftp 是因为可能不知道服务器上面已存在的文件名信息, 如果已经知道服务器上的文件名, 可以使用 scp 直接复制. 具体见书.

上传格式:

1
scp [-pr] [-l 速率] file [帐号@]主机:目录名

下载格式:

1
scp [-pr] [-l 速率]  [帐号@]主机:file 目录名

11.2.5 SSHD 服务器详细配置

基本上, 所有的 SSHD 服务器的详细设置都放在 /etc/ssh/sshd_config 配置文件中.

在配置文件内, 只要是未被注释的设置值, 即为 “默认值”.

具体见书.

LoginGraceTime 就是设置经多长时间没连接上, 就断开.

11.2.6 制作不用密码可立即登录的 SSH 用户

  • Client 必须制作出 Public & Private 这两把 Keys, 且 Private Key 需要放到 ~/.ssh/
  • Server 必须要有 Public Key, 且放置到用户主目录下的 ~/.ssh/authorized_keys 同时目录的权限 (.ssh/) 必须是 700 而文件权限必须为 644, 同时文件的属主与属组都必须与该帐号吻合才行

登录其他主机时, 只要将你的 Public Key (即 id_rsa.pub) copy 到其他主机上面, 并且添加到某帐号的 ~/.ssh/authorized_keys 文件中即可.

11.2.7 简易安全设置

11.3 最原始图形接口: XDMCP 服务的启用

11.3.1 X Window 的 Server/Client 架构与各组件

X Client 主数据的处理 (就真的只是处理数据), X Server 主图形的绘制 (硬件也是 X Server 管理).

比如要在 Client 机子上面要打开一个软件, X Client 会将相关信息传递给 X Server 来绘制.

X Client 和 X Server 可以位于不同的机器中.

11.3.2 设定 GDM 的 XDMCP 服务

11.4 华丽的图形接口: VNC 服务器

VNC 即 Virtual Network Computing.

11.4.1 默认的 VNC 服务器

VNC Server 会在服务器端启动一个监听用户要求的端口, 一般端口号码在 5901 ~ 5910 之间. 当客户端启动 X Server 连接到 5901 之后, VNC Server 再将一堆预先设置好的 X Client 通过这个连接传递到客户端上.

一般来说, VNC Server 都是手动启动的, 使用完毕后, 再将 VNC Server 关闭即可.

使用:

1
$ vncserver [:号码] [-geometry 分辨率] [options]

:号码 就是将 VNC Server 开在哪个端口, 如果是 :1 则代表 VNC 5901 端口.

-kill, 将已经启动的 VNC 端口删除.

下载服务器软件:

1
$ sudo pacman -S tigervnc-server

建立的密码存放在 .vnc/passwd 文件中.

使用 vncpasswd 修改密码.

修改防火墙规则放开端口.

11.4.2 VNC 的客户端连接软件

1. Linux 的客户端程序: VNC Viewer

安装:

1
$ sudo pacman -S tigervnc

连接, 需要指明服务端的图形接口:

1
$ vncviewer 192.168.10.254:3

一般建议使用一般身份来启动 VNC Server.

11.4.3 VNC 搭配本机的 XDMCP 画面

11.4.4 开机就启动 VNC Server 的方法

11.4.5 同步的 VNC: 可以通过图示同步教学

参考 网址

11.5 仿真的远程桌面系统: XRDP 服务器

XRDP 就是 Linux Remote Desktop Protocol. 其连接具有加密功能.

安装在需要被连接的主机上.

XRDP 会自动启动 VNC 来获取画面, 因此要配合 VNC 使用.

11.6 SSH 服务器的高级应用

11.6.1 在非标准端口启动 SSH (非 Port 22)

第12章 网络参数控管者: DHCP 服务器

一定需要的网络参数:
IP, netmask, network, broadcast, Gateway, DNS IP

12.1.2 DHCP 协议的运作方式

DHCP 通常用于局域网中, 由客户端广播数据包给物理网段内的所有主机, 若局域网中有 DHCP 服务器时, 才会响应客户端的 IP 参数要求.

DHCP Server 在接收到请求后, 会针对用户的 MAC 和本身设定的数据来配置:

  • 到服务器的登录文件中寻找该用户之前是否曾经用过某个 IP, 若有且该 IP 目前无人使用, 则提供此 IP 给客户端
  • 若配置文件针对该 MAC 提供额外的固定 IP (static IP), 则提供该固定 IP
  • 若都不符合, 随机分配并记录.

在接受一个 DHCP Server 提供的参数后, Client 也会发送一个广播包给该物理段内的所有主机, 告知已经接受了该服务器的租约.

DHCP 的租约会到期, 可以重新申请.

可以设定 DHCP 服务器给予客户端的 IP 参数:

  • 固定 IP, 让计算机每次都能以一个固定的 IP 连上 Internet
  • 动态 IP

观察别人的 MAC, 用 ping 配合 arp:

1
2
$ ping -c 3 192.168.1.254
$ arp -n

设定期限的优点是避免 IP 被某些使用者一直占用.

一般来说, 假设租约期限是 T 小时, 那么客户端在 0.5T 会主动向 DHCP 服务器发出重新要求网络参数的数据包, 如果这次要求没有成功, 那么在 0.875T 后还会再次发送数据包一次.

多部 DHCP 服务器在同一个物理网段时, 先抢先赢.

12.1.3 何时需要架设 DHCP 服务器

当公司内部有相当多的笔记本电脑时.

区域内计算机数量相当多时.

第17章 局域网控制者: Proxy 服务器

代理服务器的功能是可以代理局域网络的个人计算机来向因特网取得网页或其他服务器的一种服务.

代理服务器使用在应用层上的一种防火墙方式, 而 iptables 是用在网络, 传输层.

Linux 上启动代理服务器的是 squid 这个软件.

17.1 什么是代理服务器 (Proxy)

我们可以透过代理服务器来达成防火墙功能与用户浏览数据的分析.

也可以用代理服务器来达成节省宽带的目的.

17.1.1 什么是代理服务器 (Proxy)

当客户端有因特网的数据要求时, Proxy 会帮用户去向目的地取得用户所需要的数据.

客户端向外部要求的资料事实上都是 Proxy 帮用户取得的, 因此因特网上面看到要求数据者, 将会是 Proxy 服务器的 IP 而不是客户端的 IP.

17.1.2 代理服务器的运作流程

17.1.3 上层代理服务器

即指定另一台 Proxy 作为我的 Proxy 的 Proxy.

由于代理服务器需要管控信任的来源客户端计算机, 因此各 ISP 仅能针对自家的用户来开放 Proxy 使用权.

17.1.4 代理服务器与 NAT 服务器的差异

17.1.5 架设代理服务器的用途与优缺点

NAT 服务器是由较底层的网络进行分析的工作.

proxy 则主要是由一个 daemon 的功能达成的, 所以必须要符合该 daemon 的需求, 才能达到某些功能.

若要连上国外的网页, 最好使用 ISP 提供给你的代理服务器.

17.2 Proxy 服务器的基础设定

在小型的网络环境中, 架设 Proxy 的用处不大.

17.2.1 Proxy 所需的 squid 软件及其软件结构

squid 主要提供的配置文件有:

  • /etc/squid/squid.conf, 其包含所有的设定
  • /etc/squid/mime.conf, 设定 mine 格式

其他重要的目录与文件:

  • /usr/sbin/squid, 提供 squid 主程序
  • /var/spool/squid, 默认的 squid 缓存存储的目录
  • /usr/lib64/squid/, 提供 squid 额外的控制模块, 尤其是影响认证密码方面的程序.

17.2.2 CentOS 默认的 squid 设置

配置文件各设置值的含义, 具体见书.

第19章 主机名控制者: DNS 服务器

/etc/hosts 文件的用法: “IP 主机名 主机别名1 主机别名2 …”. localhost 需要对应 127.0.0.1

Domainname 加上 hostname 才是 FQDN.

BIND 指 Berkeley Internet Name Domain, 是阶层式管理.

DNS 是协议名称, BIND 是提供 DNS 服务的软件.

FQDN 指 Fully Qualified Domain Name. 指由 hostname 和 domain name 共同组成. 如: www.google.com.tw, 这里的 www 为主机名, google.com.tw 为 domain name. 具体的如:

注意并不是以 . 区分 hostname 和 domain name, 如 hostname 也可以为 www.test

根域名都是 . (root), 其与特殊域名如 com, edu, org 等和国家域名都被称为 Top Level Domains (TLDs).

一个特点: 每个上一层的 DNS 服务器所记录的信息, 只有其下一层的主机名.

DNS 服务器的查询流程:

  1. 若本身无记录, 则向 . (root) 查询
  2. 逐层向下询问
  3. 记录找到后暂存内存 (有时间限制) 并返回用户

使用 dig 命令查看查询流程:

1
dig +trace orkarin.com

DNS 一般占用的是 53 端口 (tcp 和 udp). 可以在 /etc/services 文件中查询到.

NS (Name Server) 记录, 表示 DNS 服务器的 FQDN.

A (Address) 记录的才是 IP Address.

从主机名查询 IP: 正解

从 IP 解析到主机名: 反解

每一个 domain 之下的记录都称为 zone (区域, 可能指一个数据库文件).

zone 内通常有:

  • SOA (Start of Authority)
  • NS (Name Server)
  • A (Address)
  • PTR (PoinTeR)
  • hint

把记录 . 的 zone 类型称为 hint 类型.

master/slave 通过序列号来同步数据.

  • /etc/resolv.conf 记录 ISP 的 DNS 服务器位置
  • /etc/nsswitch.conf 记录先使用 /etc/hosts 还是 /etc/resolv.conf 进行查询

/etc/resolv.conf 的文件内容如:

1
nameserver 8.8.8.8

(通常至少填两部)

host, nslookup, dig 命令的基本使用

1
2
3
4
5
6
host [-a] FQDN [server]
host -l domain [server]

nslookup [FQDN] [server]

dig [options] FQDN [@server]

dig 的 options 主要有:

  • +trace
  • -t type
  • -x

反解的查询目标如果是 120.114.100.20 则返回如 20.100.114.120.in-addr.arpa.

查询域名管理者 whois

1
whois centos.org

BIND 软件包

bind-chroot 设置 bind 程序启动的 root 目录.

主要要设置好两类数据:

  • BIND 本身的配置文件, /etc/named.conf
  • 正反解数据库档案 (zone file), 可以在 /etc/named.conf 中指定 (因此名字随便取)

相关文件:

  • /etc/named.conf, 主配置文件
  • /etc/sysconfig/named, 启动 chroot 的额外参数
  • /var/named, 数据库文件默认存放
  • /var/run/named, pid-file

系统可能默认将 bind 相关程序 chroot, 具体参数可查看 /etc/sysconfig/named

Cache-only 和 Forwading 功能

只有 . 这个 zone file 的 DNS 服务器为 cache-only. (也就是自己向其他 DNS 查询)

如果连 . 的 zone file 都没有, 则需指定一个上层 DNS 服务器作为 forwarding 的目标, 并将查询任务传递给他. (将查询工作都交给其他 DNS 服务器)

设置 Forwading 功能

注意 /etc/named.conf 文件的部分语法:

  • // 为注释
  • 每行以 ; 结尾

内容如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
options {
listen-on port 53 { any; }; // 监听哪一个网络接口, 这里是 any
directory "/var/named"; // zone file 存放的位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; // 哪些客户端可进行查询
recursion yes;
forward only; // 设置为 cache only
forwarders { // 转交给哪些 DNS 服务器
168.95.1.1;
139.175.10.20;
};
};

named 服务的日志保存在 /var/log/messages 文件中.

正解文件的 RR 数据

正解的 zone 常包括:

  • RR (Resource Record) 资源记录, 这是一种格式(标志), 如:
    1
    2
    3
    4
    5
    6
    7
    [domain]  IN [[RR type] [RR data]]
    主机名. IN A IPv4地址
    主机名. IN AAAA IPv6地址
    领域名. IN NS 管理这个领域名的服务器主机名字.
    领域名. IN SOA 管理这个领域名的七个重要参数
    领域名. IN MX 顺序数字 接收邮件的服务器主机名字
    主机别名. IN CNAME 实际代表这个主机别名的主机名字.

这里的 . 加上之后则为 FQDN.

A 标志用于用 FQDN 查询 IPv4 地址.

AAAA 标志用于用 FQDN 查询 IPv6 地址.

NS 标志用于用 domain name 查询管理这个域名的服务器主机名称.

SOA 标志用于用 domain name 查询这个域名下的七个重要参数, 如:

1
2
3
4
5
;; QUESTION SECTION:
;uestc.edu.cn. IN SOA

;; ANSWER SECTION:
uestc.edu.cn. 14400 IN SOA dns.uestc.edu.cn. lixiaodong.uestc.edu.cn. 2100000515 3600 1800 604800 86400

依次为:

  • Master DNS 服务器主机名
  • 管理员的 email
  • 序号 (Serial), 越大表示数据库越新
  • 更新频率 (Refresh)
  • 失败重新尝试时间 (Retry)
  • 失效时间 (Expire)
  • 快取时间 (Minimum TTL)

CNAME 标志用于设置主机别名 (alias).

MX, 用于查询某领域名的邮件服务器主机名.

反解文件记录的 RR 数据

反解时的 zone 中 IP 反写的原因: 对于域名的解析, 如 www.ksu.edu.tw 越右边的网域越大, 因此查询是从右往左, 但是 IP 如 120.114.100.101 是越左边网域越大(此时就需要从左往右查询), 因此将 IP 反写(结尾加上 .in-addr.arpa.), 就可以设置为从右往左查询.

其 zone 文件中的 RR 数据有:

  • PTR (PoinTeR), 用 IP 查询主机名.

zone 文件示例

正解的网域是 domain name.

反解的网域是 IP 范围.

若要设置正解网域为 centos.vbird, 反解网域为 192.168.100.0/24, 则需设置的文件有:

  • named.conf, 主配置文件
  • named.centos.vbird, 关于 centos.vbird 的正解文件
  • named.192.168.100, 关于 192.168.100.0/24 的反解文件
  • named.ca, 由 bind 提供的 . 的正解文件

设置 named.conf 文件

设置 options 以及 zone. 如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes;
allow-transfer { none; };
};

zone "." IN {
type hint;
file "named.ca";
}

zone "centos.vbird" IN {
type master;
file "named.centos.vbird";
}

zone "100.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.100";
}

allow-transfer 决定是否允许来自 slave DNS 对数据的传送.

zone 中的 type 一般设定有 3 个值:

  • hint 用于 . 的设置
  • master, 用于手动更新数据库文件
  • slave, 用于自动更新数据库文件

named.ca

文件内容如:

正解文件设置

一定需要设置的 RR 标志有:

  • TTL (快取记忆时间), ORIGIN (领域名)
  • SOA
  • NS, A
  • 其他

文件内容的格式要求:

  • 每一个 domain 的设置顶行写, 不顶行表明接着前一个 domain 的设置
  • @, 代表 zone
  • ; 表示注释 (#~ 也是)

示例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$TTL 600
@ IN SOA master.centos.vbird. vbird.www.centos.vbird. (2011080401 3H 15M 1W 1D)
@ IN NS master.centos.vbird.
master.centos.vbird. IN A 192.168.100.254
@ IN MX 10 www.centos.vbird.

www.centos.vbird. IN A 192.168.100.254
linux.centos.vbird. IN CNAME www.centos.vbird
ftp.centos.vbird. IN CNAME www.centos.vbird
forum.centos.vbird. IN CNAME www.centos.vbird

slave.centos.vbird. IN A 192.168.100.10
clientlinux.centos.vbird. IN A 192.168.100.10
workstation.centos.vbird. IN A 192.168.1.101
winxp.centos.vbird. IN A 192.168.100.20
win7 IN A 192.168.100.30

(注意一行一个记录)

若域名后没有加上 ., 则会默认加上 zone + .

反解文件设置

至少设置 TTL, SOA, NS, PTR:

1
2
3
4
5
6
$TTL    600
@ IN SOA master.centos.vbird. vbird.www.centos.vbird. (2011080401 3H 15M 1W 1D)
@ IN NS master.centos.vbird.

254 IN PTR master.centos.vbird.
254 IN PTR www.centos.vbirt

因为 zone 为 100.168.192.in-addr.arpa, 因此这里写 254 就相当于 254.100.168.192.in-addr.arpa.

第20章 WWW 服务器

用 SSL 加密通信时, 服务端会传送公钥用于客户端加密. 客户端将数据传送给服务端后, 服务端会用私钥解密.

服务端需要有 CA 证书才能发放密钥对.

Apache

配置文件

  • /etc/httpd/conf/httpd.conf, 主要配置文件
  • /etc/httpd/conf.d/*.conf, 额外配置文件

模块

  • /usr/lib64/httpd/modules/
  • etc/httpd/modules/

存放 apache 的模块.

网页

  • /ver/www/html/

错误

  • /var/www/error/

图标

  • /var/www/icons

CGI 脚本

  • /var/www/cgi-bin

登录信息

  • /var/log/httpd/

控制命令

  • /usr/sbin/apachectl

启动守护进程

  • /usr/sbin/httpd

密码保护

  • /usr/bin/htpasswd

MySQL

主要配置文件

  • /etc/my.cnf

数据

  • /var/lib/mysql

鸟哥的 Linux 私房菜 服务器架设篇 Notes
http://example.com/2022/09/08/鸟哥的-Linux-私房菜-服务器架设篇-Notes/
作者
Jie
发布于
2022年9月8日
许可协议