《鸟哥的LINUX私房菜_服务器篇》笔记
这本书很长很长,这里暂时只记录和整理了我目前常用和常见的。
以后用到其他模块再来翻阅和做笔记,比如邮件服务器等等。
现在有在线阅读版本了
基础网络概念
计算机联网结构
本书的局域网结构
网络接口
利用软件设计的网络接口,主要是提供网络地址IP
一张网卡至少可以搭配多个网络接口
每部主机内部也有一个内部接口,loopback(lo)循环测试接口。
网络形态或拓扑结构
各个节点在网络上的链接方式,一般指物理方式。
上图则为星形拓扑结构。
网关(route/gateway)
具有两个以上的网络接口,可以连接两个以上不同的网段的设备。
IP分享器
具有网关、防火墙、DHCP等功能的设备。
TCP/IP的数据链路层
主要是以太网的相关概念
局域网网络结构
以太网的传输主要是网络卡对网络卡之间的数据传递
每个主机都是联机到集线器(hub/switch),然后通过集线器向所有主机发起联机
每个以太网网卡出厂时,赋予一个独一无二的MAC卡号,一般不能被修改
使用CSMA/CD协议进行通讯
可以使用MAC通讯
MAC不能跨局域网通信!
TCP/IP的网络层
关于IP相关参数可以做如下假设,来理解:
在某一街道的所有用户作为主机,门牌号想象为IP
- 网域:只要在这条街上都是一个网域
- Network IP:这个街道的第一个门牌,代表整个街道,整个网域
- Broadcast IP:街道的最后一个门牌
- 路由器:这个街道的邮局,要想发送数据给其他街道的用户,只需要把数据给邮局进行转发即可
主机连上Internet的必须参数如下:
一些概念
网段与网域
物理网段
当所有的主机都使用同一个网络媒体串在一起,这个时候这些主机在实体装置上其实是联机在一起的,那么就可以称为在同一个物理网段。
同一个物理网段,主机可以直接通过MAC通信,也可以通过广播进行网络联机
网域
IP地址的网络号相同,主机号不同
IP网段
同一个物理网段内,可以依据不同的IP设定,设置为多个IP网段
Network与Broadcast
全0的主机号,表示整个网段的地址(Network IP)
网域的第一个IP
全1的主机号,表示广播地址(Broadcast IP)
网域的最后一个IP
广播地址不同的两个主机的通信,需要使用路由器(router)
loopback IP
作为内部循环测试的网络接口,没有网卡也可以使用。
一般为127.0.0.0/8,是个Class A。
Netmask
子网掩码,网络号全1,主机号全0。
划分子网的作用,标识网络号的位置。
CIDR
无等级网域间路由,在IP后标出网络号的位数
IP/net number
,如192.168.0.0/24
通常表示一个网段会使用NetWork/Netmask
的方式,由此就可以算出Broadcast和可用IP。
IP分级
IP分类
Public IP
公共IP,有这个IP才能连上Internet
Private IP
不能直接连上Internet的IP,主要用于局域网的主机联机
在私有IP后加上NAT服务即可连上Internet
路由(网关相关)
- 两个主机在两个网段时,不能直接IP广播通信,只能借助路由器
在主机查询路由表时,没有符合的路由,就会把IP包送去预设路由器(默认网关,default gatway,大部分为广播地址,具体需要问管理员)
观察主机路由
route
命令输出一共有8个字段,按顺序是:
Destination
就是Network。
字段为default时,表示当要去的网域不在其他Destination列表内时,通过default这行的gateway转发出去。
Gateway
该网络接口的gateway的IP
若为0.0.0.0即为不需要额外的IP
Genmask
就是Netmask
Flags
U:代表路由可用
G:代表网域需要经过Gateway准发
H:目标是一个主机IP而不是一个网域
R:使用动态路由时,恢复路由信息的旗标
D:以及由服务或转port功能设定为动态路由
M:路由以及被修改了
!:这个路由不会被接受,用来抵挡不安全的网域
Metric
Ref
Use
Iface
Interface(网络接口),表示要去本机要去这个Destination需要走的网络接口
Linux连接Internet
局域网常见布线规划
局域网(Local Area Network, LAN)的Linux服务器的布线方式有多种,这些方式有下面几个前提条件:
较小空间局域网,如一个办公室
以一个switch为中心的星形联机架构
假设仅有一条ADSL线对外联机的情况下
Linux直接联网-与PC同地位
此时如果ADSL是多IP的(可以拨接2-8个IP)的情况,可以使用这个模式。
每个节点可以直接通过私有IP进行联机
每个节点可以自行通过ADSL拨接连接Internet
局限性:
- 每个节点相对独立,不好管理
- 这是一个没有防火墙的环境!
- 内外部网络没有明确的分开
Linux直接联网-与一般PC分开网域
如果有多个Public IP,可以将Linux和其他节点的网域分开。
LAN的每个节点可以直接通过私有IP进行联机
LAN的每个节点必须通过IP分享器(一个类似网关的设备)连接到Internet,IP分享器也可以设置一些简单的防火墙规则。
LAN内的节点方便维护
Linux直接联网-让Linux直接管理LAN
没有IP分享器的时候,可以让Linux充当。此时Linux必须具备两张网卡,一个对外,一个对内。
Linux可以作为内网对外的防火墙使用。
维护内网简单,但是Linux一旦挂点,整个内网就不能对外联机。
比较推荐!
Linux放在防火墙后-让Linux使用Private IP
依然使用IP分享器充当防火墙的角色
连接
网络卡
网络卡的装置有自己的代号,默认的网卡是eth0,第二张网络卡为eth1,依次类推。
网卡硬件信息查看dmesg
dmesg | grep -in eth
e1000是网卡核心模块的名字。
确认网卡是否被载入lsmod\modinfo
lsmod | grep 1000
Internet参数设置
有多种上网方式可以进行设置。
网络相关配置文件
- 参数配置文件
相关命令脚本
/etc/init.d/network restart
重启整个网络参数!读取上述配置文件,并恢复系统默认的参数
ifup/ifdown eth0
启动或关闭某个网络接口。
手动设定固定IP
IP相关参数
注意,其中
GATEWAY
是整个系统的默认网关,在有多个网卡的时候,只需要一个网卡的配置文件设置即可。DNS
使用
dig
命令可以测试是否设置正确hostname
设置完后一定要reboot(重启)。
自动取得IP
利用DHCP功能,从DHCP服务器(比如IP分享器)取得IP。
文件里面的其他参数都可以用#注释掉,特别是GATEWAY参数一定不能设置。
通过无线网的连接设置
无线网络(Wireless LAN,WLAN)的机制非常多,场景的WIFI是IEEE 802.11b标准。
硬件
WLAN中有两个重要的网络设备:无线基地台(Wireless Access Point,AP)和无线网卡。
AP本身就是一个IP分享器,一个对外连接Internet,一个对内接收无线网卡的数据。常见的AP设备如TP-Link。
AP一般需要做一些限制,来保护内部的WLAN,常见的就是连接AP时需要验证密钥。主要是两个参数:
ESSID/SSID
AP的名字
密码
密码有2中常见的加密方式
- WPA/WPA2
- WPA-PSK/WPA2-PSK(一般用这个)
配置文件
也在/etc/sysconfig/network-scripts
下面
查看无线网卡状态iwconfig
然后可以继续使用modinfo
来查看加载状况。
启动无线网卡
ifconfig netcardid up
或
ifup wlname
侦测AP
iwlist netcardid scan
利用上述得到的参数,修改配置文件,在/etc/Wireless
目录下,比较麻烦。
Linux网络安全
主机的基本防护
主机的基本防护包含:软件自动更新、限制联机端口、启动SELinux等。
软件更新,可以修复当前版本的一些系统BUG。
Internet数据包进入主机的过程
防火墙分析
Linux 系统有内建的防火墙机制,预设的 Linux 防火墙就有两个机制,这两个机制都是独立存在的:
第一层,封包过滤防火墙:IP Filtering 或 Net Filter
简单的说,就是 iptables 这个软件所提供的防火墙功能。主要是分析 TCP/IP 的封包表头 来进行过滤的机制,主要分析的是 OSI 的第二、三、四层,主要控制的 就是 MAC, IP, ICMP, TCP 与 UDP 的埠口与状态 (SYN, ACK…) 等。
第二层防火墙:TCP Wrappers
通过 netfilter 之后,网络封包会开始接受 Super daemons 及 TCP_Wrappers 的检验。 即 /etc/hosts.allow 与 /etc/hosts.deny 的配置文件功能。 这个功能也是针对 TCP 的 Header 进行再次的分析,同样你可以设定一些机制来抵制某些 IP 或 Port ,好让来源端的封包被丢弃或通过检验。
服务的限制
如httpd服务可以在httpd.conf文件来规范某些IP不可以使用。
SELinux控制
文件系统的
rwx
权限限制
限制联机端口
当启动一个网络服务,这个服务会依据 TCP/IP 的相关通讯协议 启动一个埠口在进行监听, 那就是 TCP/UDP 封包的 port (端口) 了。
网络联机是双向的,服务器端得要启动一个监听的端口, 客户端得要随机启动一个埠口来接收响应的数据才行。
服务器端启动的监听端口所对应的服务是固定的:
例如 WWW 服务开启在 port 80 ,FTP 服务开启在 port 21,email 传送开启在 port 25 等等,都是通讯协议上面的规范!客户端启动程序时,随机启动一个大于 1024 以上的端口:
客户端启动的 port 是随机产生的,主要是开启在大于 1024 以上的端口。这个 port 也是由某些软件所产生的, 例如浏览器、Filezilla 这个 FTP 客户端程 序等等。一部服务器可以同时提供多种服务:
所谓的『监听』是某个服务程序会一直常驻在内存当中,所以该程序启动的 port 就会一直存在。 只要服务器软件激活的端口不同,那就不会造成冲突。当客户端连接到此服务器时,透过不同的埠口,就可以取得不同的服务数据啰。 所以,一部主机上面当然可以同时启动很多不同的服务啊!共 65536 个 port:
TCP/UDP 表头数据中 port 占用 16 个位,因此一般主机会有 65536 个 port,而这些 port 又分成两个部分,以 port 1024 作区隔:
- 只有 root 才能启动的保留的 port: 在小于 1024 的埠口,都是需要以 root 的身份才能启动的,这些 port 主要是用于一些常见的通讯服务,在 Linux 系统下,常见的协议与 port 的对应是记录在 /etc/services 里面的。
- 大于 1024 用于 client 端的 port: 在大于 1024 以上的 port 主要是作为 client 端的软件激活的 port 。
是否需要三向交握:
建立可靠的联机服务需要使用到 TCP 协议,也就需要所谓的三向交握了,如果 是非面向连接的服务,例如 DNS 与视讯系统, 那只要使用 UDP 协议即可。通讯协议可以启用在非常规的 port
所谓的 port 的安全性
没有必要的服务就将他关闭! 尤其某些网络服务还会启动一些 port !另外,那些已启动的软件也需要持续的保持更新!
路由
路由最大的功能就是在帮我们规划网络封包的传递方式与方向。可以使用 route 这个指令来查阅与设定。
路由表产生的类型
在 Linux 系统下的路由表是由小网域排列到大网域
路由表的设计主要有以下三种:
依据网络接口产生的 IP 而存在的路由:
主机上面有几个网络接口的存在时,该网络接口就会存在几个路由
如192.168.1.0/24的路由对应本机192.168.1.100接口;如果本机还有192.168.2.100时,则路由表就相应存在192.168.2.0/24的路由规则
手动或预设路由(default route)
使用 route 这个指令手动的给予额外的路由设定,例如那个预设路由 (0.0.0.0/0) 就是额外的路由。
使用 route 这个指令时,最重要的一个概念是: 『你所规划的路由必须要是你的装置 (如 eth0) 或 IP 可以直接沟通 (broadcast) 的情况』才行
动态路由
透过路由器与路由器之间的协商以达成动态路由的环境
需要额外的软件支持,如zebra或Quagga等。
路由器
路由器的功能和实现
主机想要将数据传送到不同的网域时得透过路由器的帮忙,即路由器可以实现『转递网络封包』。
路由器会分析来源端封包的 IP 表头, 在表头内找出要送达的目标 IP 后,透过路由器本身的路由表 (routing table) 来将这个封包向下一个目标 (next hop) 传送。
一般来说,路由器会有两个网络接口,透过路由器本身的 IP 转递功能让两 个网域可以互相沟通网络封包。
实现路由的2种方法:
硬件功能
例如 Cisco, TP-Link, D-Link (注 2) 等公司都有生产硬件路由器, 这些路由器内有嵌入式的操作系统,可以负责不同网域间的封包转译与转递等功能
软件功能
使用Linux作为路由服务器,例如 Linux 这个操作系统的核心就有提供封包转递的能力。
在
/etc/sysctl.conf
文件中,设置net.ipv4.ip_forward=1
。然后使用sysctl -p
命令,是的配置立即生效。
Linux路由器的分类
静态路由
直接以类似 route 这个指令来直接设定路由表到核心功能当中, 设定值只要与网域环境相符即可。 不过,当你的网域有变化时,路由器就得要重新设定;
动态路由
透过类似 Quagga 或 zebra 软件的功能,这些软件可以安装在 Linux 路由器上, 而这些软件可以动态的侦测网域的变化,并直接修改 Linux 核心的路由表信息, 你无须手动以 route 来修改你的路由表信息
NAT
NAT(Network Address Translation, 网络地址转换)本身就是一个路由器,只是比路由器多了“IP转换功能”。
NAT透过修改封包的 IP 表头数据之来源或目标 IP , 让来自私有 IP 的封包可以转成 NAT 服务器的公共 IP ,就可以连上Internet。
防火墙
作用
比如,你可以限制文件传输服务 (FTP) 只在子域内的主机才能够使用,而不对整个 Internet 开放;你可以限制整部 Linux 主机仅可以接受客户端 的 WWW 要求,其他的服务都关闭;你还可以限制整部主机仅能主动对外联机。反过来说,若有客户端对我们主机发送主动联机的封包状态 (TCP 封包的 SYN flag) 就予以抵挡等等
可以假设在路由器上面保护路由器后的整个内网。
总的来说:
- 切割被信任(如子域)与不被信任(如 Internet)的网段;
- 划分出可提供 Internet 的服务与必须受保护的服务;
- 分析出可接受与不可接受的封包状态;
Linux防火墙的类别
Netfilter 封包过滤机制
分析进入主机的网络封包,将封包的表头数据捉出来进 行分析,以决定该联机为放行或抵挡的机制。 由于这种方式可以直接分析封包表头数据,所以包括硬件地址(MAC), 软件地址 (IP), TCP, UDP, ICMP 等封包 的信息都可以进行过滤分析的功能,因此用途非常的广泛。(其实主要分析的是
OSI 七层协议的 2, 3, 4 层)Linux上Netfilter 提供了iptables这个软件来作为防火墙封包过滤的指令。
TCP Wrappers (程序控管)
分析谁对某程序进行存取,然后透过规则去分析该服务器程序谁能够联机、谁不能联机。 由于主要是透过分析服务器程序来控管,因此与启动的端口无关,只与程序的名称有关。
Proxy (代理服务器)
其实代理服务器是一种网络服务,它可以『代理』用户的需求,而代为前往服务器取得相关的资料。
- client 会向 proxy server 要求数据,请 proxy 帮忙处理;
- proxy 可以分析使用者的 IP 来源是否合法?使用者想要去的服务器是否合法?如果这个 client 的要求都合法的话,那么 proxy 就会主动的帮忙 client 前往服务器取得资料;服务器回传的数据是传给 proxy server 的,所以服务器上面看到的是 proxy server 的 IP
- 最后 proxy 将 服务器回传的数据送给 client。
Netfilter之iptables
它的主要工作是:
拒绝让 Internet 的封包进入主机的某些端口口
拒绝让某些来源 IP 的封包进入
拒绝让带有某些特殊旗标 (flag) 的封包进入
最常拒绝的就是带有 SYN 的主动联机的旗标了!只要一经发现,就可以将该封包丢弃
分析硬件地址 (MAC) 来决定联机与否
Linux主要是iptables这个防火墙机制。有个具体的例子,用到的时候再翻看9.4小节。
防火墙规则的顺序
如果这个封包并不符合 Rule 1 的比对,那就会进入 Rule 2 的比对了!如此一 个一个规则去进行比对就是了。 如果所有的规则都不符合,此时就会透过预设动作 (封包政策, Policy) 来决定这个封包的去向。
iptables的表格与链
防火墙软件里面有多个表格 (table) ,每个表格都定义出自己的默认政 策与规则, 且每个表格的用途都不相同。
Linux 的 iptables 至少就有三个表格,包括管理本机进出的 filter 、管理后端主机 (防火墙内部的其他计算机) 的 nat 、管理特殊旗标使用的 mangle (较少使用)
- filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的 table
- INPUT:主要与想要进入我们 Linux 本机的封包有关;
- OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
- FORWARD:这个与 Linux 本机比较没有关系, 他可以『转递封包』到后端的计算机中,与下列 nat table 相关性较高。
- nat (地址转换):是 Network Address Translation 的缩写, 这个表格主 要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。
- PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
- POSTROUTING:在进行路由判断之后所要进行的规则 (SNAT/MASQUERADE)
- OUTPUT:与发送出去的封包有关
- mangle (破坏者):这个表格主要是与特殊的封包的路由旗标有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。
iptables内建表格与链的相关性(不含mangle):
iptables设定
iptables查看
每条记录的格式如下:
- target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外, 尚有 DROP (丢弃) 的项目!
- prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源 IP』进行限制
- destination :代表此规则是针对哪个『目标 IP』进行限制
另外,
iptables-save
会列出完整的防火墙规则,只但是并没有规格化输出清除规则
定义预设规则policy
定义一般规则
也可以通过端口来设定
设定iptables的外挂模块
针对特殊mac和已经响应的封包的规则设置
设定是否响应ping(ICMP数据包)
TCP Wrappers
TCP wrappers 就是透过 /etc/hosts.allow, /etc/hosts.deny 这两个文件来管理的一个类似防火墙的机制。
文件的配置格式:
<service(program_name)> : <IP, domain, hostname>
<服务 (亦即程序名称)> : <IP 或领域 或主机名>
Linux远程联机服务
常见的方式
基本上有文字接口与图形接口两种:
- 文字接口明码: telnet, rsh 等为主,目前非常少用;
- 文字接口密码: ssh 为主,已经取代上述的 telnet, rsh 等明码方式;
- 图形接口: Xdmcp, VNC, RDP 等较为常见
SSH
SSH 是 Secure Shell protocol 的简写 (安全的壳程序协议),它可以透过数据封包加密技术,将等待传输的封包加密后再传输到网络上, 因此,数据讯息当然就比较安全。这个 SSH 可以用来取代较不安全的 finger, R Shell (rcp, rlogin, rsh等), talk 及 telnet 等联机模式。
这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能:
类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh
类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务
联机加密
目前常见的网络封包加密技术通常是所谓的『非对称密钥系统』来处理的。 主要是透过两把不一样的公钥与私钥 (Public and Private Key) 来进行加密与解密的过程。由于这两把钥匙是提供加解密的功用, 所以在同一个 方向的联机中,这两把钥匙当然是需要成对的!它的功用分别如下:
- 公钥 (public key):提供给远程主机进行数据加密的行为,也就是说,大家都能取得你的公钥来将数据加密的意思;
- 私钥 (private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。由于私钥是这么的重要, 因此私钥是不能够外流的!只 能保护在自己的主机上。
目前 SSH 的协议版本有两种,分别是 version 1 与 version 2 ,其中 V2 由于加上 了联机检测的机制, 可以避免联机期间被插入恶意的攻击码,因此比 V1 还要更加的安全。所以啰,请尽量使用 V2 版本即可,不要使用 V1 !
ssh联机的步骤如下:
服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找
/etc/ssh/ssh_host*
的档案,若系统刚刚安装完成时,由于没有这些公钥档案, 因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需要的私钥档;客户端主动联机要求
服务器传送公钥档给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);
客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:
- 若客户端第 一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的
~/.ssh/known_hosts
。 - 若是已经记录过该服务器的公钥数据,则客户端会去比 对此次接收到的与之前的记录是否有差异。
若接受此公钥数据, 则开始计算客户端自己的公私钥数据;
- 若客户端第 一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的
回传客户端的公钥数据到服务器端: 用户将自己的公钥传送给服务器。
- 此时服务器:『具有服务器的私钥与客户端的公钥』
- 而客户端则是: 『具有服务器的公钥以及客户端自己的私钥
开始双向加解密:
- 服务器到客户端:服务器传送数据时,拿用户的公钥 加密后送出。客户端接收后,用自己的私钥解密;
- 客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密
启动ssh服务
Linux 系统当中,默认就已经含有 SSH 的所有需要的软件 了!这包含了可以产生密码等协议的 OpenSSL 软件与 OpenSSH 软件。
/etc/init.d/sshd [restart|start|stop]
启动后,同时在22端口提供了FTP服务!
client使用ssh
登入远程主机
文件传输sftp
sftp [账号@]IP
档案异地直接复制scp
ssh配置
都在/etc/ssh/sshd_config
里面
VNC
VNC server 会在服务器端启动一个监听用户要求的端口,一般端口号码在 5901 ~ 5910 之间。当客户端启动 X server 联机到 5901 之后, VNC server 再将一 堆预先设定好的 X client 透过这个联机传递到客户端上,最终就能够在客户端显示服务器的图形接口了。
设置和连接VNC
修改VNC密码
客户端软件
Linux下是vncviewer.
# 安装 yum install tigervnc # 连接 vncviewer ip:号码
Linux网络常用指令总结
网络参数设定
设定与开闭IP参数
ifconfig
手动的启动、观察与修改网络接口的相关参数,IP参数以及MTU等
ifup
和ifdown
手动修改完
/etc/sysconfig/network-scripts
目录下的文件后,使用ifup
使得配置生效。
路由修改route
网络参数综合指令ip
无线网络
iwlist
和iwconfig
设置DCHP方式
dhclient netcardid
网络侦错与观察指令
两步主机沟通ping
两主机间各节点分析traceroute
查看本机的网络联机与后门netstat
侦测主机名与IP对应
除了dig
还有host
和nslookup
host
‘
nslookup
远程联机指令与实时通讯软件
终端机联机服务器
FTP联机
ftp
ftp [host|IP] [port]
Iftp
文字接口网页浏览
文字浏览器links
进行网页的浏览
文字接口下载器wget
网页数据的取得
数据包获取
文字接口数据包获取器tcpdump
图形接口数据包获取器wireshark
安装
yum install wireshark wireshark-gnome
必须要在X Window底下运行。
任意端口的数据包监听和连接
可以监听某些服务的port,也可以和其他端口连接(同步显示stdout等)