赞
踩
网络的基本概念:方便进行联网与配置及排错
熟悉操作系统的基本操作:包括登陆控制,账号管理,文本编辑器的使用等技巧
信息安全方面:包括防火墙与软件更新方面的相关知识
服务器协议所需软件的基本安装,配置,排错等
不同服务器提供服务不同,每种服务原理也不同,但不同服务器从规划,搭建,安全维护的流程都大同小异
操作系统基础对服务器维护来说十分重要,连接服务器,重点在取得服务器的数据,一般数据的存在就是使用文件
客户端到服务器的网络要能连通,客户端访问服务器后,由服务器防火墙判断连接是否放行,放行后使用到服务器软件的功能,该功能需要通过 SELinux 细节权限配置后,才能读取文件系统,如果读到具体文件又与文件系统权限有关(rwx),每个步骤都要成功,否则无法顺利读取数据
大概流程分为:网络,服务器本身,内部防火墙软件配置,各项服务配置文件,细节权限的SELinux,最重要的是文件权限
基本的网络基础知识:以太网硬件与协议,TCP/IP,网络连接所需参数等
各网络服务对应通信协议的工作原理,以及实现各通信协议的具体应用程序
搭建什么样的服务器,服务器是否对Internet开放,服务是否对客户提供访问账号,是否针对不同访问账号进行磁盘容量,可用空间,可用系统资源限制,进行各项资源限制,服务器操作系统如何安装设置
软件安装与删除,管理系统的计划任务,根据服务器服务目的规划文件系统,让文件系统具有可扩展性(LVM),管理各项服务启动,服务开机流程,系统出错如何快速复原等
主机可允许多种服务器软件同时运行,很多 Linux distributions 出厂默认值已经开放很多服务给 Internet 使用,这些服务可能不想开放,通过防火墙规范使用服务器的用户,让系统具有可控性,无论防火墙系统再怎么严格,只要开放服务,防火墙对该服务就没有保护效果
,在线更新软件机制一定要定期执行,保证系统安全
服务由哪个软件实现,同一个服务是否有不同实现软件,每种软件可以实现的目的是否相同,依据所需功能设置服务器软件,观察与排查搭建过程中出现的错误,定期分析服务器相关的登录信息,方便了解服务器的的使用情况与发生错误的原因,通知多个用户进行测试,取得的较佳的服务器配置值
软件安装,查询相关配置文件所在位置
服务器软件设置
服务器软件启动,设置自动开机启动,观察启动端口
服务器软件激活失败排错,查看日志,通过日志排错
通过客户端进行链接测试,失败处理,失败原因是由于服务器还是防火墙
服务器设置修改是否存在相关日志,相关日志定期分析
服务器提供或共享的数据定期备份,自动备份或远程备份
新的 distributions 建议启动 SELinux,数据存放在非正规目录,如何处理 SELinux 问题,让文件具有保密性或共享性(文件权限概念与 ACL )
网络环境:环境内存在多台主机,需要通过网络连接在一起,都可对外通信,对外提供连接访问
对外网络:环境内只有一个对外的链接,ADSL或光纤通信。
额外服务:环境内主机都可上网,其中一台可作为文件服务器,作数据备份与数据共享
服务器管理:如需远程管理,需开放连接机制,让远程主机对服务器进行远程管理
防火墙管理:文件共享服务器会存在被黑客攻击的风险,需针对源 IP 地址进行登陆控制
账号管理:每台主机数据有隐私和共享,需为每个主机提供专门的访问账户,每个账户都需有配额的磁盘容量
后台分析:系统可能会出现问题,需使系统自动定期分析磁盘使用量,日志分析参数信息等等
建立账号,使用磁盘配额(Quota),配置共享目录,处理每个账号的 Quota 配额,/home 容量不足,扩充 /home 容量,将系统磁盘使用情况定期以邮件方式发送给管理员
ShellScript
#批量处理账号
#有多个账号,并且多个账号需共享同一目录,将用户加入同一用户组,设置用户组名,将多个用户密码统一设置为 PASSWD
#!/bin/bash
groupadd sharegroup
for username in share1 share2 share3 share4 share5
do
useradd -G sharegroup $username
echo "PASSWD" | passwd --stdin $username
# 该命令无法在 ubuntu 中使用
# ubuntu 中使用如下命令
echo $username:passwd | chpasswd
done
#共享目录权限
多个用户位于 /home/sharegroup 目录
该目录只用于用户共享文件使用,用户均可在目录内进行任何操作,其他用户无权访问
#共享目录,所以需要 SGID 权限,否则个别组数据会使这些用户之间无法修改对方数据
mkdir /home/shargroup
chgrp sharegroup /home/sharegroup
chmod 2770 /home/sharegroup
ll -d /home/sharegroup
**Quota**
磁盘配额操作
为这些用户进行磁盘配额操作,每个用户配置 2GB(hard)1.8GB(soft)
需要文件系统支持,Quota 数据文件设置,Quota 启动,建立用户 Qouta 信息等过程
#Xfs文件系统的磁盘配额操作
**目的与账号**:创建五个账号,创建相同密码,都所属 quotagroup 用户组,其他账号属性使用默认值
**账号磁盘容量限制值**:让这些用户获取 2GB(hard)1.8GB(soft),文件数量不受限制,容量使用率超过 1.8GB,予以警告
**用户组配额**(option1):系统内还存在其他用户,所以每个用户组只能使用固定的容量,如果前三个用户使用过多容量后面的用户就只能使用占用后剩余的容量,这就是用户与用户组同时设置产生的结果
**共享目录配额**(option2):每个用户具有自己独立的容量限制,但用户的共享目录在 /home/qouta,该目录设置其他人没有任何权限,仅有 qoutagrp 用户组拥有全部权限,无论如何该目录最多仅能接受固定容量,用户组和用户的限制无法同时并存,先以用户组进行设计,再以目录限制进一步说明
**宽限时间限制**:在每个用户超过 soft 限制值后,会具有固定的宽限时间
#制作环境,使用以下脚本进行配置
vim addacount.sh
#进入文件写入数据
#!/bin/bash
groupadd quotagrp
for username in share1 share2 share3 share4 share5
do
useradd -g quotagrp $username
echo "passwd" | passwd --stdin $username
done
sh addacount.sh
#运行脚本文件
mkdir /home/quota
chgrp quotagrp /home/quota
chmod 2770 /home/quota
#不可在根目录下进行磁盘配额设置,文件系统会变得复杂
df -Th
#查看文件系统
显示的是 ext4 文件系统,不同系统需使用不同命令
VFAT 文件系统不支持文件配额设置
使用 mount 查询 工作目录下的文件系统
有的版本可以通过 mount -o,remount 命令进行重新挂载启动磁盘配额功能
但是有的文件系统不能使用 remount 重新启动
一定要写进 /etc/![fstab](https://img-blog.csdnimg.cn/75204f93ccbd4e76b59b08245e843866.png)
或是在挂载过程中加入选项,否则不会生效
vim /etc/fstab
#重要的是defaults后的参数
umount /home
#卸载挂载在 home 文件下的所有
mount -a
#挂载所有
mount | grep home
#查看有关 home 的挂载
ext4 文件系统示例
quotacheck -avug
#检查是否启动 quota 文件系统支持
quotaon -avug
edquota -u 用户组名
#为用户定义 quota 配额
#quota 使用的单位是 KB
edquota -p 用户名
#添加用户
repquota -au
#查看是否配置成功
针对磁盘配额限制的选项
uqota/usrquota/quota
#针对用户账号的设置
gquota/grpquota
#针对用户组的设置
pquota/prjquota
#针对单一目录设置,不可与 grpquota 同时存在
#修改 /etc/fstab 后要立即进行测试,发生错误及时处理,如该文件进配置错误,会无法启动开机程序,vim 具有语法检索功能,不会写错代码,一般用户家目录在 /home,删除该选项时,要将所有一般账号身份注销,否则无法删除
查看磁盘配额报告数据
设置文件系统支持后,检查是否正确将磁盘配额管理数据列出,使用相关文件系统的 quota 命令,全部磁盘配额都是使用这个命令,参数很多
**参数** **作用**
-x 专家模式,后续才能加入-c命令
-c 后面加命令
**命令**
print 单纯列出目前主机内文件系统参数
df 与原本 df 相同,可加-b(block),-i(inode),-h(加上单位)等
report 列出目前磁盘配额选项
state 说明目前支持磁盘配额的文件系统信息
fstransform
#改变 Linux 已有分区的文件系统类型
apt install fstransform
#安装工具
fstransform /dev/mapper/ubuntu-vg-ubuntu-lv xfs
#将文件系统转化为 xfs
#运行中直接回车,使用默认值
xfs_quota -x -c "print"
#列出目前文件系统,磁盘配额挂载参数配置
xfs_quota -x -c "df -h" /home
#列出 home 支持磁盘配额的挂载点文件系统使用情况
xfs_quota -x -c "report -ubin" /home
#列出 home 所有用户磁盘配额限制值
#列出所有用户目前文件系统使用情况,列出设置值,注意,最上面的 block
#block 代表容量限制,inode 代表文件数量限制
#soft/hard 为 0 代表没有限制
xfs_quota -x -c "state"
#列出支持磁盘配额文件系统是否启动磁盘配额功能
Accounting:On
#有启动计算功能
Enforcement:On
#有实际磁盘配额管理功能
限制值设置
xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
xfs_quota -x -c "timer [-ug] [-bir] Ndays"
#设置命令
limit:
#针对 user/group 限制
#bsoft/bhard block 的 soft hard 限制值
#isoft/ihard inode 的 soft hard 限制值
#name 用户/用户组名称
timer:
#用于设置 grace time
#也可针对 user/group 限制
xfs_quota -x -c "limit -u bsoft=2G bhard=1.8G share1" /home
#设置用户的 block 限制值
xfs_quota -x -c "limit -g bsoft=10G bhard=9G quotagrp" /home
xfs_quota -x -c "report -gbih" /home
#设置用户组的 block 限制值
xfs_quota -x -c "timer -ug -b 14days" /home
xfs_quota -x -c "state" /home
#设置 grace time 14天
su share1
#切换到进行了磁盘配额的用户验证
dd if=/dev/zero of=123.img b=1M bs=1M count=310
ll -h
exit
#验证完成退出当前用户
xfs_quota -x -c "report -ubh" /home
#查看磁盘配额信息
Project 针对目录进行限制
不能与 group 同时进行设置,要先进行 groquota 参数取消,加入 prjquota,卸载 home 再进行挂载
vim /etc/fstab
#将 defaults 后的 grpquota 参数改为 prjquota 其余不变
umount /home
mount -a
xfs_quota -x -c "state"
#查看是否开启 project 选项
#目录设置必须指定【选项名称,选项标识符】进行规范,需用到两个配置文件,标识符 11
echo "11:/home/myquota" >> /etc/projects
#指定方案识别码与目录对应
echo "myquotaproject:11" >> /etc/projid
#规范方案名称与标识符对应
xfs_quota -x -c "project -s ,uquotaproject"
#初始化方案名称
xfs_quota -x -c "print" /home
#完整查看对应各项文件系统与 project 目录的对应
xfs_quota -x -c "report =pbih" /home
#确定获取到指定方案名称
设置规范与测试
xfs_quota -x -c "limit -p bsoft=2G bhard=1.8G myquotaproject" /home
xfs_quota -x -c "report -pbih" /home
#设置 project,方式同样使用 limit 的 bsoft bhard
dd if=/dev/zero of=123.img b=1M bs=1M count=310
#在 root 用户下进行写入都会被限制,这才是完整的针对目录规范
#如果还想针对某些目录进行限制,修改 /etc/projects 、/etc/projid 两个配置文件,然后进行目录初始化设置
磁盘配额管理与额外命令对照表
disable
#暂时取消磁盘配额限制,但系统还是在计算磁盘配额中,只是不管制
enable
#恢复到正常管制状态,与 disable 可互相取消,启用
off
#完全关闭磁盘配额限制,只能卸载重新挂载才能启动功能,建议使用 disable 选项,除非进行 remove 动作
remove
#必须在 off 状态下使用的命令,删除磁盘配额限制设置,取消 project 设置,不需要重新设置为 0 ,remove -p 即可
xfs_quota -x -c "disable -up" /home
xfs_quota -x -c "state" /home
#暂时关闭 xfs 文件系统磁盘配额限制功能
dd if=/dev/zero of=123.img b=1M bs=1M count=310
#可以看到关闭限制后可以直接写入
xfs_quota -x -c "enable -up" /home
xfs_quota -x -c "state" /home
#重新启动磁盘配额限制
dd if=/dev/zero of=123.img b=1M bs=1M count=310
#进行写入就会提示失败,错误信息
xfs_quota -x -c "off -up" /home
xfs_quota -x -c "state" /home
#完全关闭磁盘配额限制功能,取消 project 功能,已经完全关闭,要进行 umount 设置,无法进行 enable 动作
umount /home
mount -a
#使用 state,report 选项会出现磁盘配额限制重新出现
xfs_quota -x -c "off -up" /home
xfs_quota -x -c "remove -p" /home
#完全删除 project 限制值,全部归零
设置流程选项 xfs文件系统 ext4文件系统
/etc/fstab 参数配置 usrquota/grpquota/prjquota usrquota/grpquota
磁盘配额配置文件 不需要 quotacheck
设置用户/用户组限制值 limit [-ug] edquota / setquota
设置grace time timer -ug -b 14days edquota
设置目录限制值 limit -p 无
查看报告 report repquota / quota
启动与关闭 disable / enable quotaoff / quotaon
发送警告信息给用户 未支持 warnquota
LVM 文件系统扩充,如果文件目录不够用,需要将目录进行扩充,需要先查看 VG 是否够用,不够用,通过 PV 入手
vgdisplay
#查看VG容量是否够用
fdisk /dev/sda
#制作作为 pv 用的 partition
#按照制作流程进行步骤操作
partprobe
vgextend server /dev/sda9
vgdisplay
#将 /dev/sda 加入 PV,将 PV 加入 server 的 VG 内
lvdisplay
#扩充 /home,观察 LV 容量
lvresize -L 6.8G /dev/server/myhome
#增加容量
resize2fs /dev/server/myhome
#扩充文件系统
df -TH
#验证
查看系统开放哪些服务,服务是否对外网开放,服务是否存在漏洞,能否在线更新,未使用的服务能否关闭,服务能否仅开放给部分原用户不对整个Internet开放
不同 runlevel 下服务的管理
当前 runlevel 下,哪些服务默认开启,不想启动自动网络挂载(autofs)机制,让该服务在系统启动时不被自动加载启动
默认的 runlevel 使用 runlevel 命令处理,默认使用 3 号 runlevel
# 查看 autofs 启动状态
LANG=C chkconfig --list | grep '3:on'
# 关闭 autofs
chkconfig autofs off
/etc/init.d/autofs stop
查询已开启的的网络监听服务
netstat -tulnp
#检查当前主机启动的所有网络监听服务
/etc/init.d/服务名 stop
#关闭某项服务并且删除该服务对应使用的端口
chkconfig 服务名 off
#关闭开机自启动行为
启动服务名称与实际命令可能不同在 netstat 上查看的 program 项目实施及程序执行文件,与 /etc/init.d
文件下的脚本文件名称并不相同,使用 grep 管道命令查看摘取数据,或使用 tab 键补全命令,获取相关服务文件名
服务器操作系统通常会存在自带的防火墙管理工具,如果使用的软件不经常性更新,防火墙再强大,也形同虚设,要经常的进行软件更新,配置 crontab 自动执行任务,保持服务器系统软件处于最新状态
crontab -e
#直接进行crontab自动执行任务的编写
#首次进入会要求选择是用的编辑器软件格式,根据自己的喜好进行选择
10 7 * * * /usr/bin/apt -y update && apt -y upgrade
分 时 月 年 星期
#在每天的7:10,对服务器进行软件包的更新,并且进行安装
crontab命令 参数详解
crontab -e
#改写corntab自动执行任务的配置文件
#进行配置相关执行的命令,时间
crontab -l
#查看crontab服务的执行信息
service cron reload
#重新载入crontab的任务信息
service cron restart
#重启crontab服务
如何查询系统中有没有安装某些软件
dpkg -l | grep ftp
#查看系统是否安装了ftp服务的软件
这所显示的是已经安装了FTP的服务软件
如果你并没有安装相关的软件,那么就要去查找系统中是否存在相关的软件包,并且安装他
apt-cacahe search ftp
#查找ftp软件包
apt install ftp
#安装ftp软件包
apt-cache search
#搜索软件包
apt-cache show
#获取包的相关信息,如说明、大小、版本等
apt-get install
#安装包
apt-get reinstall
#重新安装包
apt-get -f install
#"-f = --fix-missing" 修复安装
apt-get remove
#删除包
apt-get remove --purge
#删除包,包括删除配置文件
apt-get autoremove --purge
#删除包及其依赖的软件包+配置文件等(只对6.10有效)
apt-get update
#更新源
apt-get upgrade
#更新已安装的包
apt-get dist-upgrade
#升级系统
apt-get dselect-upgrade
#使用 dselect 升级
apt-cache depends
#了解使用依赖
apt-cache rdepends
#了解某个具体的依赖
#查看该包被哪些包依赖
apt-get build-dep
#安装相关的编译环境
apt-get source
#下载该包的源代码
apt-get clean && apt-get autoclean
#清理下载文件的存档 && 只清理过时的包
apt-get check
#检查是否有损坏的依赖
dpkg -S filename
#查找filename属于哪个软件包
apt-file search filename
#查找filename属于哪个软件包
apt-file list packagename
#列出软件包的内容
apt-file update
#更新apt-file的数据库
dpkg --info "软件包名"
#列出软件包解包后的名称
dpkg -l
#列出当前系统中所有的包.可以和参数less一起使用在分屏查看.
#(类似于rpm -qa)
dpkg -l |grep -i "软件包名"
#查看系统中与"软件包名"相关联的包
dpkg -s
#查询已安装的包的详细信息
dpkg -L
#查询系统中已安装的软件包所安装的位置
#(类似于rpm -ql)
dpkg -S
#查询系统中某个文件属于哪个软件包
#(类似于rpm -qf)
dpkg -I
#查询deb包的详细信息,在一个软件包下载到本地之后检查是否需要安装
dpkg -i
#手动安装软件包(并不能解决软件包之前的依赖问题)
#如果在安装某一个软件包的时候遇到了软件依赖的问题,使用用apt-get -f install解决依赖性问题
dpkg -r
#卸载软件包.不是完全的卸载,配置文件还存在
dpkg -P
#全部卸载(不能解决软件包的依赖性的问题)
dpkg -reconfigure
#重新配置
apt-get install
#下载软件包,以及所有依赖的包,同时进行包的安装或升级。如果某个包被设置了 hold (停止标志,就会被搁置(不会被升级)
apt-get remove [--purge]
#移除 以及任何依赖这个包的其它包。
#--purge 指明这个包应该被完全清除 (purged)
apt-get update
#升级来自ap更新源的包列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了/etc/apt/sources.list 后,必须执行。
apt-get upgrade [-u]
#升级所有已经安装的包为最新可用版本。不会安装新的或移除老的包。如果一个包改变了依赖关系而需要安装一个新的包,将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包 (这个也就是 hold 的意思) 使用 '-u' 选项,可以看到哪些包将会被升级。
apt-get dist-upgrade [-u]
#与 apt-get upgrade 类似,dist-upgrade 会安装和移除包来满足依赖关系
#具有一定的危险性
apt-cache search
#在软件包名称和描述中,搜索软件包
apt-cache show
#显示某个软件包的完整描述
apt-cache showpkg
#显示软件包更多细节,以及和其它包的关系
dselect
console-apt
aptitude
gnome-apt
#APT 的图形前端(其中一些在使用前需要先安装)
#dselect最强大,也最古老,最难使用
普通 Dpkg 用法
dpkg -i
#安装一个手动下载的文件
dpkg -c
#列出包的内容
dpkg -I
#从中提取包信息。
dpkg -r
#移除一个已安装的包。
dpkg -P
#完全清除一个已安装的包
#和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件
dpkg -L
#列出安装的所有文件清单
dpkg -s
#显示已安装包的信息
dpkg-reconfigure
#重新配制一个已经安装的包,如果使用的是 debconf (debconf 为包安装提供了一个统一的配制界面)。能重新配制 debconf 本身,如果想改变它的前端或提问的优先权。例如,重新配制 debconf,使用 dialog 前端,简单运行dpkg-reconfigure --frontend=dialog debconf (如果你安装时选错了,这里可以改回来)
echo " hold" | dpkg --set-selections
#设置的状态为 hlod (命令行方式)
dpkg --get-selections ""
#当前状态 (命令行方式)
dpkg -P
#全部卸载(还是不能解决软件包的依赖性的问题)
支持通配符,如:
root@iZ2vcdmulmnhpw3ypohgz1Z:~# dpkg --get-selections
accountsservice install
adduser install
alien install
aliyun-assist install
alsa-topology-conf install
alsa-ucm-conf install
amd64-microcode install
apparmor install
apt install
apt-utils install
at install
autoconf install
automake install
autopoint install
autotools-dev install
base-files install
base-passwd install
bash install
bash-completion install
bc install
bind9-dnsutils install
bind9-host install
bind9-libs:amd64 install
例如现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,可以采用如下方法:
方法一:
echo "gaim hold" | dpkg --set-selections
#用下面命令检查一下:
dpkg --get-selections "gaim"
gaim hold
#的状态标志是 hold,就不能被升级了。
如果恢复怎么办
echo "gaim install" | dpkg --set-selections
dpkg --get-selections "gaim"
gaim install
#这时状态标志又被重置为 install,可以继续升级了。
这些状态标志都写在 /var/lib/dpkg/status 里,可以通过修改文件实现 hold。
有时会发现有的软件状态标志是 purge
像事先已经安装了 amsn,然后把它卸载
apt-get remove --purge amsn
那么状态标志就从 install 变成 purge。
方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存
dpkg -S
在包数据库中查找 ,并告诉你哪个包包含了这个文件。(注:查找的是事先已经安装的包)
--------------------------------------------
软件包管理工具命令不完全列表
--------------------------------------------
系统中所有的包信息都在/var/lib/dpkg下.其中/var/lib/dpkg/info目录中保存了各个软件包的信息及管理文件.每个文件的作用如下:
以 ".conffiles" 结尾的文件记录软件包的配置列表.
以 ".list" 结尾的文件记录了软件包的文件列表,用户可在文件当中找到软件包文件的具体安装位置.
以 ".md5sums" 结尾的文件记录了md5信息,用来进行包的验证的.
以 ".config" 结尾的文件是软件包的安装配置脚本.
以 ".postinst" 脚本是完成Debian包解开之后的配置工作,通常用来执行所安装软件包相关的命令和服务的重新启动.
以 ".preinst" 脚本在Debain解包之前运行,主要作用是停止作用于即将升级的软件包服务直到软件包安装或和升级完成.
以 ".prerm" 脚本负责停止与软件包关联的daemon服务,在删除软件包关联文件之前执行.
以 ".postrm" 脚本负责修改软件包链接或文件关联,或删除由它创建的文件.
/var/lib/dpkg/available是软件包的描述信息.
包括当前系统中所有使用的Debian安装源中所有的软件包,还包括当前系统中已经安装和未安装的软件包.
apt高级包管理工具
(1)GTK图形的"synaptic",APT的前端工具.
(2)"aptitude",也是APT的前端工具.
用APT管理工具进行包的管理,可以有以下几种方法做源:
(1)拿安装盘做源,方法如下:
apt-cdrom ident 扫描光盘的信息
apt-cdrom add 添加光盘源
(2)这也是最常用的方法就是把源添加到/etc/apt/source.list中,之后更新列apt-get update
APT管理工具常用命令
apt-cache
#加上不同的子命令和参数的使用可以实现查找,显示软件,包信息及包信赖关系等功能.
apt-cache stats
#显示当前系统所有使用的Debain数据源的统计信息.
apt-cache search +"包名"
#可以查找相关的软件包.
apt-cache show +"包名"
#可以显示指定软件包的详细信息.
apt-cache depends +"包名"
#可以查找软件包的依赖关系.
apt-get upgrade
#更新系统中所有的包到最新版
apt-get install
#安装软件包
apt-get --reindtall install
#重新安装软件包
apt-get remove
#卸载软件包
apt-get --purge remove
#完全卸载软件包
apt-get clean
#清除无用的软件包
在用命令apt-get install之前,先将软件包下载到/var/cache/apt/archives中,之后再进行安装的.所以可以用apt-get clean清除/var/cache/apt/archives目录中的软件包.
源码包安装
apt-cache showsrc
#查找看源码包的文件信息(在下载之前)
apt-get source
#下载源码包.
apt-get build-dep +"包名"
#构建源码包的编译环境.
清除处于rc状态的软件包
dpkg -l |grep ^rc|awk '{print $2}' |tr ["\n"] [" "] | sudo xargs dpkg -P -
该阶段需要清楚地知道,到底需要什么服务,针对该服务需要设置的项目,设置需要用到什么命令,配置文件,需要先观察该服务使用得到通信协议是什么,然后了解怎么配置,接下来编辑主配置文件,根据主配置文件的数据执行相对应的命令取得争取的环境设置,像网上邻居,需要设置工作组,然后设置可以使用网上邻居的身份为非匿名,然后开始处理主配置文件
1,使用vim编辑器编辑/etc/samba/smb.conf
2,利用useradd建立所需要的网上邻居实体用户
3,利用smbpasswd建立可用网上邻居的实体账户
4,利用testparm测试一下所有数据语法是否正确
5,检查在网上邻居内共享的目录权限是否正确
这些设置王成后,才能继续进行启动与观察的动作,如果想要了解一个服务的相关配置技巧与应用,除了网络中查找,/usr/share/doc内的文件,以及man命令的文档都可以去看一看
设置妥当后,接下来就是启动服务器了,一般服务器启动大多使用stand alone模式,如果是比较少用的服务,像Telnet,可能使用到super demon得到服务启动类型
启动Samba服务,并设置开机自动启动
了解启动,需要使用rpm找一下软件的启动方式,再去处理启动行为
# 查询启动的方式是什么
rpm -ql samba | grep '/etc'
需要使用rpm安装的软件才可以使用这个命令去查看
dpkg -L samba | grep '/etc'
apt命令安装的使用这条命令查看
root@destin:~# dpkg -L samba | grep '/etc'
/etc
/etc/apparmor.d
/etc/apparmor.d/samba
/etc/cron.daily
/etc/cron.daily/samba
/etc/init.d
/etc/init.d/nmbd
/etc/init.d/samba-ad-dc
/etc/init.d/smbd <== 启动方式是stand alone 并且文件名为smbd nmbd两个
/etc/logrotate.d
/etc/logrotate.d/samba
/etc/ufw
/etc/ufw/applications.d
/etc/ufw/applications.d/samba
root@destin:~#
这里需要用到chkconfig命令,需要安装sysv-rc-conf软件,云服务器不能进行apt update,尽量使用本地实体服务器,更改更新源或添加更新源
deb http://archive.ubuntu.com/ubuntu/ trusty universe restricted universe
可能会出现无法验证签名的情况
W: GPG error: http://archive.ubuntu.com/ubuntu trusty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
E: The repository 'http://archive.ubuntu.com/ubuntu trusty Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG错误:http://archive.ubuntu.com/ubuntu可信版本:由于公钥不可用,无法验证以下签名:NO_PUBKEY 40976EAF437D05B5 NO_
E: 存储库的http://archive.ubuntu.com/ubuntu未签署“可信版本”。
N: 从这样的存储库进行更新是不安全的,因此默认情况下是禁用的。
使用命令
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
确认是否chkconfig存在
ls /usr/sbin/ | grep sysv
对安装的文件进行更名
cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig
确认修改成功
ls /usr/sbin/ | grep chk
赋予权限
chmod 755 chkconfig
测试
sudo chkconfig
# 开始启动,并且设置为开机就启动
root@destin:~# /etc/init.d/smbd start
Starting smbd (via systemctl): smbd.service.
root@destin:~# /etc/init.d/nmbd start
Starting nmbd (via systemctl): nmbd.service.
root@destin:~# chkconfig smbd on
root@destin:~# chkconfig nmbd on
# 观察有没有启动相关端口
netstat -tlunp | grep '[sn]mbd'
可以看到开启了137,138,139,445端口
需要找一台机器作为客户端,尝试使用该机器提供得到网上邻居功能,了解配置的对错,相关的客户端链接也与服务器提供的服务有关,像WWW服务器就需要使用Browser测试,网上邻居就需要网上邻居客户端程序,很多时候客户端链接测试不成功并非是服务器配置的问题,也有可能是客户端使用方式不对,包括客户端防火墙没开,客户端账号全县密码等错误,所以教会Client用户具有最基础的Linux账号,组,文件权限等概念,才是彻底解决问题的方法
通常Linux服务器的服务出现问题,一般会在屏幕上直接提示错误原因,所以需要注意屏幕信息,并且通常会告知如何处理,如果无法解决进行下面操作
1,查看相关日志文件是否存在错误信息,像Samba除了再/var/log/message会存储相关信息,大部分日志信息应该存放在/var/log/samnba目录下,通常日志文件列出的信息,会比屏幕直接显示的更加详细
2,将信息进行浏览器搜索,通常可以解决日志中出现但是没办法解决的问题,如果一个解决不了就换一个,多次尝试,总会解决
3,通过各大论坛进行分享讨论
4,常见的就是SELinux错误,需要使用SELinux的方法进行处理解决
搭好一台主机需要知道
1,各个process与signal的观念
2,账号与组的概念与相关性
3,文件与目录的权限,包含与帐号相关的特性
4,软件管理的学习
5,Bash语法与Shell Script语法 Vim等编辑器
6,开机流程分析,日志文件的设置与分析
7,了解类似Quota,文件系统连接的概念
需要了解的很多,而且都是必须要做的步骤
特殊使用情况下,权限配置是个很重要的因素,现有share(1-5)等账号,共享目录是/home/sharegroup,sharegroup组想要让其他用户进入该共享目录进行查阅,但不能更改原有数据
让其他用户加入sharegroup组,但该用户会具有sharegrouop组的rwx权限,该方法不行
将/home/sharegroup的的权限改为2775,现在其他用户具有其他人权限rx权限,其他所有人和人都是rw权限,也不行
单一用户,组的权限设定ACL
让其他用户进入/home/sharegroup进行查阅,但不可写入,同时share5在/home/sharegroup内不具有任何权限
只能使用ACL,安装史默认格式化就加上acl文件系统功能支持,如果是使用后添加新的partition或filesystem,可能需要在/etc/fstab中额外增加acl控制参数才行
useradd master
passwd master
setfacl -m u:master:rx /home/sharegroup
setfacl -m u:share5:--- /home/sharegroup
getfacl /home/sharegroup
getfacl: Removing leading '/' from absolute path names
# file: home/sharegroup
# owner: root
# group: root
user::rwx
user:master:r-x # 额外权限参数
user:share5:--- # 额外权限参数
group::r-x
mask::r-x
other::r-x
ll -d /home/sharegroup
drwxr-xr-x+ 2 root root 4096 Aug 4 06:52 /home/sharegroup/
上述操作是权限控制行为的正确操作,如果系统管理员并不知道权限的重要性,会因为某些特殊需求,将整个目录设定为777的权限,如果为了方便,设定为777,没加上任何管理机制,这样所有的数据将会被窃取,为了预防这样的操作,就产生了SELinux,主要在控制特殊的权限,可针对某些应用程序要读取的文件设计SELinux类别,程序与文件类别形态符合时,该文件才会被读取,但配置文件权限为777时,应用程序与文件的SELinux不符,该程序还是读不到文件,SELinux相对复杂,如果是指想要应用而已,处理方式全部可以通过日志进行,所以SELinux出现问题的可能性比较大,解决技巧也相对简单,对应日志进行解决就可以
服务器的管理中,硬件问题比操作系统与软件问题严重,人的问题比硬件问题严重,系统安全方面,首要工作是通过日常生活的社交活动中,慢慢透露安全问题,提供制定安全规则方面的信息,猜密码仍是不可忽视的入侵手段,如果SSH对Internet开放,root登录权限开启,那么可以使用root尝试登陆主机,然后就是猜,如果root用户密码设置简单,很难不被入侵,所以需要严格的密码设置规则,
1,修改/etc/login.defs文件里面的规则,每过多久进行更改密码,密码长度大于多少位
2,/etc/security/limits.conf规范每个用户的相关权限
3,pam模块进行额外的密码验证工作
防火墙无用论经常被提起,但是netfilter(Linux核心的内置防火墙)仍有存在的必要,还是需要根据主机环境设计合适的防火墙规则
由于不可控的因素,自动重开机,系统不稳定,经常被攻击,电子元件老化等,备份就显得比较重要,冗余备份,备用主机接管等都是常规操作
系统中比较重要的目录有/etc /home /root /var/spool/mail,设置每天固定时间进行备份,并将备份数据存储到指定文件夹内,使用tar将备份数据打包
**Shell Script**
mkdir /root/bin
vim backup.sh
#!/bin/bash
backdir = '/etc /home /root /var/spool/mail'
basedir = /backup
[ ! -d '$basedir' ] && mkdir $basedir
backfile = $basedir/backup.tar.gz
tar -zcvf $backfile $backdir
vim /etc/crontab
crontab -e
# 两种方法都可以进行crontab配置
10 1 * * * root sh /root/bin/backup.sh
就目前网咯功能以及维护来看,搭建功能性强
的主机,不如搭建一个稳定安全的主机
,所以要严格要求主机安全,主机是为了赚钱,为了运算,搭建使用极其复杂,不方便的防火墙系统,也是合理应该的手段,数据被窃取后果不堪设想
网管人员不能只会搭建服务器,不懂维护站点安全,实际上维护比搭建更加难,需要随时知道系统状况,是否存在漏洞,并且修补,各种服务日志文件(logfile)了解系统运行情况,能够找到问题发生的地方,宕机懂的话原因是什么,出现安全问题,被入侵,除了 format + 重装 有其他办法再不删除系统的情况下修补漏洞,还需要道德感和责任感,要知道主机上所有隐私都在监控下,不论何时何地吱哟啊主机出现问题,网管人员一定是第一个要工作的人,所以要做好随时随地被召唤到主机面前的心理准备, 同时耐心这也是必须要具备的
账号管理,BASH,权限概念,Process与Signal概念,简易硬件与Linux相关性(mount)的认识,日志文件分析,daemon认识等
熟悉IP,Netmask,route,DNS,daemon,port,TCP数据包概念等
必须随时关注网站相关信息,包括网站软件漏洞修补,网络公告的网络安全通报,必须每天分析主机登录文件
努力克服偷窥欲,如果他人利用极大的诱惑请努力放弃,搭建服务器很简单,维护的工作除了全身心的投入,如果没有较高的道德感,迟早会出事
服务器是放到网络上提供服务的,如果没有网络,网络不通,服务器搭起来也没用,服务器上的网络服务都是用来实现某项Internet的通信协议,提供相对应的服务,需要掌握最基本的网络概念,不然,出现问题都不知道怎么解决,最重要的是TCP/IP和OSI七层协议,比较难理解
操作系统种类很多,多种操作系统进行网络沟通,需要制定共同遵守的标准,由国际组织规范,系统只需要提供可以加入该标准的程序代码,那么就可以通过这个标准与其他系统进行沟通,网络是跨平台的,是可以用在所有操作系统上的
网络就是计算机主机,网络打印机之间的接口设备,通过网线或者无线网络技术,将主机设备之间进行连接,数据通过这个网络介质(网线以及其他网卡等硬件)进行传输的方式
各自为政的网络硬件与软件技术发展:Ethernet & Token Ring
1970左右,为解决数据传输问题,在办公室环境下进行组织,有了施乐公司的Ethernet技术,IBM的Token Ring技术,但是这些技术都有很大的问题,就是他们彼此互不相识,只能购买同一种技术的计算机主机,Ethernet的主机和Token Ring主机并不能进行通信
以软件技术将硬件整合:ARPANET & TCP/IP
为解决硬件整合问题,20世纪60年代末期美国国防部开始研究,可以在不同网络硬件上面运行的软件技术,将不同公司的主机或数据通过软件进行数据沟通,ARPANET是TCP/IP技术最早的雏形,1975年左右,ARPANET能够在常见的Ethernet和Token Ring等硬件平台下进行数据通信,DARPA在1980年正式推出TCP/IP后,为了推广技术,联合伯克利大学,将TCP/IP植入BSD Unix系统中,在大学中TCP/IP技术吸引了大量使用者进行研究,后来这中连接网络的技术被称为Internet
没有任何约束的因特网:Internet
20世纪80年代由于对E-mail的需求以及浏览器图形接口的兴起,当时的Internet管理相当松散,只要使用任何支持TCP/IP技术的硬件与操作系统,并且实际链接进网络,就可以任意畅游,Internet只是一个接口,全世界都可以任你遨游,所以跨海攻击就比较普遍,简单说,你不能用中国的法律去制裁远在美洲的畜生,虽然可以使用国际渠道寻求协助,还是很难抓到黑客,所以在接入外网时,要确定是否真的有需求必须连进外网
软硬件标准制成功带来的影响:IEEE标准规范
以太网络(Ethernet)由施乐公司(Xerox PARC)构建,而后通过DEC,Intel 与 Xerox 合作将以太网络标准化,再经由IEEE(Institute of Electrical and Electronic Engineers)国际知名专业组织利用802项目制定标准,之后19家公司宣布支持IEEE发布的802.3标准,在1989年国际标准化组织ISO(International Organization for Standard)将以太网络编入 ISO 8023 标准,除了硬件,TCP/IP通信协议也有标准,大部分以RFC(Request For Comments)形式发布的标准文件,通过文件帮助,任何会写程序的人,都可以开发出自己的TCP/IP软件,并且连接上Internet
节点(node):具有网络地址(IP)设备的统称,PC,Server,ADSL,Print都是网络中的节点,Switch不算节点,它不具有IP
服务器主机(server):就网络连接来说,提供数据响应给用户的主机,都可以说是服务器,Yahoo是一个WWW服务器,Linux内核的FTP(ftp://ftp.kenerl,org/pub/)是一个文件服务器
工作站(workstation)或客户端(client):任何可以在计算机网络输入的设备都算工作站,以连接发起来说,主动发起连接请求数据的,都算是客户端(client),PC打开浏览器访问Yahoo的新闻信息,那么该PC就是客户端
网卡(Network Inteface Card,NIC):内置或外接在主机上的设备,用于提供网络连接,目前使用具有RJ-45接口的以太网卡,一般节点都具有一个以上的网卡,实现网络连接
网络接口:软件设计出来的网络接口,提供网络地址(IP)的任务,一张网卡至少可褡配一个以上的网络接口,每部主机内部其实也有一个内部的网络接口,loopback(lo)循环测试借口
网络形态或拓扑(topology):各个节点在网络上面的链接形式,一般是物理连接方式,上图就是拓扑结构图
网关(Gateway):具有两个以上的网络接口可以连接两个以上不同的网段的设备,IP路由器常见的网关设备,ADSL调制解调器严格意义来说不算,因为调制解调器通常视为在主机内的网卡设备,可以在PC上通过拨号,将调制解调器仿真为一张实体网卡(PPP)
因为各个节点距离不同,连接线缆与方式有所差异,线缆差异也会导致网络速度不同,网络的应用方向也不同,依据差异,网络大小范围定义为局域网和广域网
局域网络(Local Area Network,LAN)
节点之间传输距离较近,像办公室,写字楼,学校校区,可用较为昂贵的连接介质,光纤或者高质量网线(CAT 6)等,网络速度较快,连接质量好并且可靠,可应用于科学运算的集群式系统,分布式系统,云端负载均衡系统
广域网(Wide Area Network,WAN)
传输距离较远,城市与城市之间的距离,使用的连接介质的成本较为低廉,像电话线,由于使用的线缆质量较差,所以网络速度较慢,可靠性也较低,网络应用方面大多为类似E-mail,FTP,WWW浏览等功能
除这两种外还有城域网网络(Metropolitan Area Network,MAN)近来提及较少,了解LAN和WAN就足够了,这两个名次应用面广泛,生活中有很多的LAN,这些LAN连接在一起,就是一个WAN
各个节点之间通过标准的通信协议进行通信,沟通信息,整个网络连接的过程相当复杂,包括硬件,软件数据封装,应用程序互相连接等,如果开发一个将网络连接的全部功能都集中一起的程序,在某个小环节出现问题时,整个程序都需要改写,相当麻烦
将整个网络了;看姐的过程分为数个层数(layer),每个层级都有特定的独立功能,并且每个层级的程序可以独立撰写,每个层级之间的功能并不会互相干扰,当出现问题时,只需要将该层级的程序代码重新撰写就行,这样程序撰写也容易,网络概念也更清晰,这就是OSI七层协议(Open System Interconnection)的概念
**OSI七层协议个层级的相关性**
依据定义,越接近硬件的层级为底层(layer1),越接近应用程序的是高层(layer7),无论在接收端还是发送端,每一层级只认识对方的同一层级的数据,整个传送的过程通过应用程序将数据存放在第七层的包裹,将第七层的包裹放到第六层中,一次一直放到第一层的包裹中,然后传送出去到接收端,接收端主机从第一个包裹开始,依次将每个包裹拆开,然后一个一个交给对应负责的层级查看,这也是OSI七层协议在层级定义方面需要注意的地方
七层协议中,每一层都有自己独特的头部数据(header),告知对面里面是什么信息,真正的数据附在后面,每一层都有自己的名字,以及数据如何放置在每一层包裹中,上层包裹时放入下层数据中,数据前面是这个数据的报头,特殊的是第二层(数据链路层),位于软件包(packet)和硬件数据帧(frame)中间的层级,必须将软件包装的包裹放入硬件能够处理的包裹中,所以这个层级又分为两个子层处理相对应的数据,可以看到,的第二层数据格式不同,尾端出现了检查码
# 每一个层级所负责的任务
分层 负责内容
Layer1 网络传输介质只能传送0,1这种比特位,所以物理层
物理层 必须定义使用的传输设备的电压和信号等,
Physical Layer 还必须了解数据帧转成比特流的编码方式,
最后连解释及传输介质并发送/接收比特信号
Layer2 比较特殊的层级,下层是实体的定义,上层是软件封装的定义
数据链路层 所以又分两个子层进行数据转换操作,在偏硬件介质部分,
Data-Link Layer 主要负责的是MAC(Madia Access Control),
成这个数据包裹为MAC数据帧(frame),
MAC是网络接口设备能处理的主要数据包裹,
这也是最终被物理层编码成比特流的数据,
MAC必须经过通信协议取得网络介质的使用权,
最常用的是IEEE 802.3的以太网络协议,
偏向软件的部分由逻辑链接层(Logic Link Control,LLC)控制,
主要在多任务处理来自上层的数据包数据(packet)并转成MAC的格式,
负责信息交换,流量控制,失误问题处理等
Layer3 IP(Internet Protocol)在这一层定义,
网络层 也定义了计算机之间的连接建立,终止与维持等,
Network Layer 数据数据包的传输路径选择等,
该层级汇总最重要的除了IP,
就是数据包能否到达目的地的路由(Route)概念
Layer4 定义了发送端与接收端的连接技术(TCP,UDP),
传输层 包括该技术的数据包格式,数据包发送,流程控制,
transport Layer 传输过程的侦测检查与重新传送等,
确保数据包正确无误到达目的地
Layer5 定义了两个地址之间的连接信道的连接与中断,
会话层 也可建立应用程序之间的会话,提供其他加强型服务,
Session Layer 像网络管理,建立与断开,绘画控制等,
传输层是判断数据数据包是否可以正确到达目标,
会话层是确定网络服务建立连接的确认
Layer6 通过应用程序生成的数据格式不一定符合网络传输的标准编码格式,
表示层 该层级中主要操作是将来自本地端应用程序的数据格式转换(或者重新编码)
Presentation Layer 成为网络的标准格式,然后交给下面的传输层等协议进行处理,
主要定义了网络服务(或程序)之间的数据格式转换,
包括数据的加解密也是在该层级处理
Layer7 本身并不属于应用程序所有,而是定义应用程序如何进入该层级沟通借接口
应用层 将数据接收或发送给应用程序,最展示给用户
Application Layer
实际上OSI七层协议只是参考模型(mode),目前网络社会并没有知名操作系统使用OSI七层协议的链接程序代码,但是OSI七层协议在解释网络传输方面,能够非常简单易懂的解释清楚,所以使用OSI七层协议作为网络概念的理解,实际的联网程序代码,需要交给TCP/IP
因为OSI七层协议架构非常严谨,所以程序撰写不是很容易,TCP/IP也是使用OSI七层协议的观念,同样具有分层架构,只分为四层,所以撰写程序会相对简单
**OSI七层协议与TCP/IP的相关性**
TCP/IP将应用,表示,会话三层整合为一个应用层,在应用层工作的协议程序有HTTP,SMTP,DNS等,传输层不变,按照传送的可靠性将数据报格式分为面向连接的TCP和无连接的UDP包格式,网络层不变,主要提供IP数据包,并可选择最佳路由到达目标IP地址,数据链路层与物理层整合为网络接口层,定义硬件信号,数据帧转换为比特流的编码等,主要与硬件(无论局域网还是广域网)有关
TCP/IP的链接工作状态
**应用程序阶段**:打开浏览器在浏览器地址栏中输入网址站点,访问,网址信息与相关数据会被浏览器包成一个数据,下传给TCP/IP的应用层
**应用层**:提供HTTP通信协议,将来自浏览器的数据封装,给予应用层报头,向传输层发送
**传输层**:HTTP是可靠连接,将数据放入TCP封装内,给予一个TCP封装的报头,发送给网络层
**网络层**:将TCP数据封装到IP数据包内,给予一个IP报头(主要是源IP和目的IP),发送给网络接口层
**网络接口层**:如果使用以太网络,IP会根据CSMA/CD标准,封装到MAC数据帧中,给予MAC帧头,继续转成比特流,利用传输介质发送到远程主机上
服务器收到数据包后,以相反方向拆解,交给对应层级进行分析,最后服务器知道想要请求的数据,根据需求去的正确数据后,再次执行上述流程,一层一层封装,传送回客户端。
网络介质一次传输的数据量是有限的,如果要被传输的数据太大,在各层封装中,需要将数据先拆开放到不同的数据包中,再将数据包一个序号,让目的端的主机能利用序号重新将数据整合起来。
TCP/IP最底层的网络接口层主要与硬件关系密切
广域网使用设备价格较为低廉,同时广域网使用到的设备也非常多,普通用户接触到的主要是ADSL调制解调器或光纤接入,Cable Modem等
早期网络都只能通过调制解调器和电话线以及计算机的九针串行端口(接鼠标或游戏杆的插孔),通过 Point-to-Point Protocol(PPP协议)配合拨号程序取得网络IP参数,网络速度非常慢,当电话拨号连接建立后,不能使用电话,PPP协议支持 TCP/IP,NetBEUI,IPX/SPX等通信协议,所以使用广泛
利用现有的电话线路实现网络连接目的,连接的两端都需要有ISDN的调制解调器提供链接功能,ISDN的传输有多种信道提供实用,并可将多个信道整合应用,速度成倍增长,基本的B信道速度约64Kps,如果美国规格使用23个以上的信道实现连接,速度可达1.5Mps。
通过电话线拨号取得IP的方法,使用电话的高频部分,与一般语音电话频率不同,可以使用ADSL上网同时通过同一电话号码进行通话,由于上传/下载带宽不同,称为非对称环路,ADSL同样使用调制解调器,通过PPPoE(PPP over Ethernet)方法,将PPP仿真在以太网卡上,主机需要通过网卡连接到调制解调器,通过拨号程序取得新的接口(PPP0)
通过有线电视使用的线缆作为网络信号介质,需要具备调制解调器连接到ISP,取得网络参数上网,Cable modem带宽主要是共享型,通常具有区域性,不是想装就装的
局域网中最常使用的是以太网,在超高速网络应用的环境中,可能会用到光纤信道,以太网已经标准化,设备设置费用相对低廉,所以网线或者网络介质,几乎都使用以太网搭建环境,整个网络世界并非仅有以太网这一个硬件接口
以太网流行的主要原因是成为国际公认的标准,IEEE制定的以太网络标准802.3的IEEE 10BASE5
,主要定义,10代表传输速度为10Mbps,BASE表示采用基带信号进行传输,5代表每个网络节点之间最长可达500米
网络传输的信息就是0和1,所以,数据传输的单位为每秒多少bit,Mbits/second(Mbps)的意思
早期网线使用的是旧式同轴电缆线,取代他的是类似电话线的双绞线(Twisted Pair Ethernet),IEEE将这种线路的以太网络传输方式制定成 10BASE-T
标准,10BASE-T使用得到是10Mbps全速运行且采用非屏蔽双绞线(UTP)的网线,10BASE-T的UTP网线可以使用星型链接(star),以一个集线器为中心连接各网络设备的方式
不同于早期用一条同轴电缆线连接所有计算机的总线(bus)连接,通过星型连接,能很简单的添加或移除其他设备,对网络设备的扩充性与排错是一项非常棒的设计
IEEE制定的 802.3u 支持到100Mbps传输速度的 100BASE-T标准,与10BASE-T差异不大,只是双绞线的制作需要更加精良,同时支持使用四对双绞线的网线,就是常见的8芯网线,常称为五类(Catefory 5,CAT5)网线,这种传输速度的以太网络成为Fast Ethernet,还有 Gigabit 网络速度 1000Mbps,是Gigabit Ethernet,这种网络的网线制作需要更加精良
以太网速度与网线等级
名称 速度 网线等级
以太网(Ethernet) 10Mbps -
快速以太网(Fast Ethernet) 100Mbps CAT 5
G 比特以太网(Gigabit Ethernet) 1000Mbps CAT 5e / CAT6
当传输速度增加时,线材的电磁效应互相干扰会增强,在网线制作时需要特别注意线的材料以及内部线芯指尖缠绕情况配置等,将电子流之间的电磁干扰降到最小,才能将传输速度提升到Gigabit,当Fast Ethernet想升级为Gigabit Ethernet时,需要升级网卡,主机与主机之间的网线,连接主机线路的集线器/交换器,都必须升级到可支持Gigabit速度等级的设备
以太网最常见的接头是RJ-45,共八芯
RJ-45接头因为每条线缆对应顺序不同分为568A和568B
接头名称/线芯顺序 1 2 3 4 5 6 7 8
568A 白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
568B 白橙 橙 白绿 蓝 白蓝 绿 白棕 棕
以太网线8芯两两成对,实际使用的只有1,2,3,6四根芯,其他的在某些特定用途的场合才会使用到,主机与主机连接,主机与集线器连接时,使用的网线线序定义不同,将接头不同的网线又分为两种
交叉线:一边为568A一边为568B的接头,用在直接连接两台主机的网卡
直连线:两边接头同为568A或568B,用子啊连接主机网卡与集线器之间
以太网传输的主要是网卡与网卡之间的数据传递,每张网卡出厂时会赋予独一无二的MAC(Media Access Contorl)地址,理论上MAC地址不可修改,通过IEEE802.3标准 CSMA/CD(Carrier Sense Multiple Access with Collision Destection)链接传输
**CSMA/CD链接示意图(A发送数据给D)**
Hub为集线器,各个主机连接到集线器,通过集线器向所有主机发起链接
集线器时一种网络共享设备,,网络共享介质在单一时间点内,仅能被一台主机使用
,像上图连接环境,集线器处于一个十字路口的中心,路口同方向一次仅能通过一个数据,当其他方向数据同时走到路口会发生碰撞。
**CSMA/CD搭配上图环境,A发送数据给D为例的情况**
监听介质使用情况(Carrier Sense):A主机发送数据包之前,需要对网络介质进行监听,确定没人后使用,发送出数据帧
多点传输(Multiple Access):A主机发送的数据被集线器复制一份,发送给所有连接到集线器的主机,A发送出的数据,B,C,D 三台主机都能接收,目标是D主机,B,C主机会将数据帧丢弃,D主机抓取进行处理
冲突检测(Collision Detection):数据帧附有检测能力,若其他主机也刚好在同时间发送数据帧时,A与B发送出的数据帧会冲突,这些数据帧都会被损毁,A与B就需要各自随机等待一个时间,重新通过第一步进行传输数据帧
无论哪台主机发送出数据帧,集线器会复制一份该数据给所有主机,所以所有主机都会接收到,虽然只有一台主机在对外连接,但集线器所有主机的信号灯都会闪烁
只要在B主机上安装监听软件,就会将丢弃掉的数据帧抓下进行分析,进行重组,就能获取到原本其他主机发送出的数据,所以建议重要数据在Internet上需要加密后传输
标准数据帧在网卡与其他以太网媒体一次只能传输1500bytes,所以文件需要被拆成多个小数据报,一个一个进行传输,每个数据报传输需要经过CSMA/CD机制,集线器的使用权是抢着用的,仅有一台主机在使用网络媒体时,这台主机每发送一个数据报前也需要等待一段时间(96 bit time)
数据帧容量增大,小数据包数量就会减少,每个数据帧传送间的等待就可以减少,以太网络标准数据帧定义1500bytes,超高速以太网络媒体若支持 Jumbo frame(巨型数据帧),数据帧大小可以最大到9000bytes,不建议随便对此进行更改
CSMA/CD发送的数据帧是MAC数据帧(frame),有两个很重要的数据,目的与源网卡MAC地址,MAC数据帧是在网线上传递的包裹,包裹整个网络硬件上传送数据的最小单位,网线时一条一次仅可通过一人
的独木桥,MAC就是在独木桥上行走的人
MAC数据帧内容
前导码 目的地址 源地址 长度指示 LLC数据 帧校验序列
8 Bytes 6 Bytes 6 Bytes 2 Bytes 46-1500 Bytes 4 Bytes
目的地址与源地址指的是网卡卡号(MAC地址)(Hardware Adddress,硬件地址),MAC地址独一无二,MAC地址在数据帧的帧头数据中使用,硬件地址最小由00:00:00:00:00:00到 FF:FF:FF:FF:FF:FF(十六进制),这 6 Bytes 中,前 3 Bytes是厂商代码,后 3 Bytes 是该厂商自行定义的配置码
Linux中使用ifconfig或ip addr
查看MAC地址,在MAC传输中,仅在局域网络内生效,如要跨过不同子网,源地址和目的地址就会改变,变成了不同网卡之间的交流,MAC地址不能相同
**同一数据帧在不同子网的主机间传输时,数据帧头部变化**
数据从A通过B到达C,B有两块网卡,MAC-2与A通信,MAC3与C通信,MAC-1不能与MAC-3和MAC-4通信,因为MAC-1没有与MAC-3,MAC-4使用相同的Switch/Hub连接
数据传输过程
由MAC-1传送到MAC-2,源地址MAC-1,目的地址MAC-2
B接收后查看数据帧,目标是C,为与C通信,将数据帧内的来源MAC改为MAC-3,目的MAC改为MAC-4,即可与C进行通信
通过B(路由器),将数据包发送到另一个子网去的时候,数据帧内的硬件地址也会改变,然后才能在同个子网中进行数据帧的收发。
MAC地址是网卡特定的,不会因为重装系统改变,防火墙软件大多也能针对网卡进行策略定义,针对网卡限制只能在局域网内进行,MAC地址不能垮Route
CSMA/CD机制计算,数据帧数据容量最大1500 bytes,最小 46 bytes,在此机制上可算出要实现冲突检测,数据帧总数据量最小要有64 bytes,扣除目的地址,源地址,校验码(前导码不算),得到数据量最小46 bytes,如果要传输的数据小于46 bytes,系统会主动进行填充一些填充码,补齐最小的 46 bytes。
以太网数据真能传输的数据量最大1500 bytes,这个数值就是MTU(Maximum Transmission Unit,最大传输单元),每种网络接口的MTU不同,有 1492 bytes等不同与1500 bytes的数据,但是以太网上,标准的定义是1500 bytes
IP数据报最大可达 65535 bytes ,比MTU大,IP比MAC大,IP数据报进行拆解,然后放入MAC中,数据全部都传输到目的地,目的主机重组得到完整IP数据报,如果MTU足够大,IP数据报拆解情况就会降低,数据包与数据包之间传输的等待时间也会减少,增加网络带宽
为了支持上述情况,产生了Gigabit 以太网对 Jumbo frame 的支持,Jumbo frame 最大定义到 9000 bytes,MTU改为 9000 bytes可以减少数据包的拆解,增加网络使用率,可以在Linux上更改MTU,如果考虑整个网络,不建议更改,数据包是在Internet上进行传输,无法确定所有网络都支持 9000 bytes的 MTU 如果通过一个不支持 Jumbo frame 的网络设备,情况好的是该网络设备(Switch/Route)主动重组后进行传输,糟糕的情况是直接回报数据报无效而丢弃,设置MTU 9000 bytes时,最好是在内部网络环境,对外的网卡设置最好还是1500 bytes,无论自己的网络媒体支持多大的MTU,必须要考虑到数据包传输过程中,到达目的所需要经过的所有网络设备是否能够达到 MTU 配置。
当网络工作忙碌,集线器(Hub)网络共享设备会发生冲突,因为CSMA/CD的缘故,没法避免数据报冲突,避免这种冲突需要使用非共享的交换器(Switch)
交换器(Switch)等级非常多,大多数都工作在OSI第二层,交换器和交换机的差异在于交换器内有一个特别的内存,内存可以记录每个 Switch Port 与其连接的 PC 的 MAC 地址,当 Switch 两端的 PC 进行通信时,每个数据帧直接通过交换器的内存数据传输到目标主机上,Switch 不是共享设备,Switch 每个端口(port)都具有独立带宽。
10/100 Mbps带宽的集线器(Hub)链接五台主机,整个带宽是分给五台主机的,五台主机可使用的总带宽是 10/100 Mbps ,交换器每个端口(port)都是 10/100 Mbps,直链端口的主机都可使用 10/100 Mbps 的带宽
**交换器每个端口带宽的使用**
A 传输数据到 D 与 B 传送数据到 C 都单独有 10/100 Mbps的带宽,互不影响,如果 A 和 D 都传给 C ,因为 C port 仅有 10/100 Mbps,A 和 D 就需要抢 C 节点的 10/100Mbps 进行使用,Switch 克服了数据报冲突的问题,、因为 Switch port 有对应的 MAC 相关功能,Switch功能规格很多,最好选择支持全双工/半双工,Jumbo frame 的
8 芯的网线在实际使用时仅有两对被使用,一对用于发送,另一对用于接收,两端 PC 同时支持全双工,表示 Input/Output (数据传输与接收)都可达到 10/100 Mbps,总带宽达到 20/200 Mbps (是同时计算,Input/Output 分别为 10/100 Mbps,不是单一 Input/Output 为 20/200 Mbps)网络环境想要达到全双工,使用共享带宽设备 Hub 不能达到,使用网线线序的关系,无法使用共享带宽设备达到全双工,如果 Switch 支持全双工模式,Switch 两端的 PC 才能达到全双工
以太网卡可以向下兼容,Gigabit 网卡可以与 10/100 Mbps网卡连接不会出现问题,早期 Switch/Hub 需要手动切换,新的 Switch/Hub 支持 Auto-negotiation(N-Way)功能,可自动协调最高的传输速度进行通信,Gigabit 与 10/100 Mbps 在 Switch 上, N-Way 先使用最高速度(Gigabit)测试是否全部支持,不支持,下降速度等级(10/100 Mbps)进行工作
使用Switch时不需要注意分辨使用的线缆是交叉线还是直连线,Switch 若有 Auto MDI/MDIX 功能,会自动分辨网线接口调整链接
电子信号会衰减,网线过长导致电子信号衰减严重时,会导致连接质量较差,所以各个节点的网线长度有限制,一般来说,以太网络 CAT 5 等级的网线最长可支持 100 米。
如果网线折的较为严重(放在门边经常被门挤压,导致变形),自行压制的网线接头,接头处 8 芯芯线缠绕度不足导致电磁干扰严重,网线放在户外风吹日晒导致老化,都会导致电子信号传递不良造成连接质量较差,常常出现偶尔有链接,有时无法连接的问题,架设企业内部局域网时了,需要注意结构化布线
将各个网络的组建分别拆开,分别安装布置到企业内部,未来需要升级网络硬件等级或者移动某些网络设备只需要改变机柜的相关配线架,末端墙上的预留孔与主机设备的连接就能达到目的
墙内布线需要特别注意,布线后需要使用 5-10 年,需要注意仅有末端墙上的预留孔以及配线断部分,结构化布线所需要选择的网络设备,网线等级,机柜,机架,美化隐藏网线的材料挑选,实际施工需要注意的事项,所有硬件,施工需要注意的标准规范等
硬件部分最常见的网络硬件接口是以太网(网线,网卡,Hub/Switch 等),以太网传输使用网卡卡号是标准的 MAC 数据帧,配合 CSMA/CD 标准传输数据帧,软件部分,Internet 是 TCP/IP 通信协议的通称,Internet 由 Inter NIC 统一管理,仅负责分配 Internet 上的 IP 以及提供相关的 TCP/IP 技术文件,在 Internet 中最重要的就是 IP
目前 Internet 环境中 IP 有两种版本,一种是使用广泛的 IPv4 (Internet Protocol version 4,因特网协议第四版),一种是 IPv6,IPv4 记录的地址仅有 32 位,早晚会分配完毕,这样新兴的公司就会没有网络可以使用,所以诞生了 IPv6 ,位数可以达到 128 位,多出 2 的 96 次方倍的地址数量,几乎是用不完的,IPv6 具有前瞻性,但是主流媒体使用的还是 IPv4。
IP 数据包能够达到 65535 Bytes,比 MAC 大的情况下,操作系统会对 IP 进行拆解
数据包的包头信息
| 4 bits | 4 bits | 8 bits | 3 bits | 13 bits |
| version | IHL | Type of Service | Total Length |
Identification | Flags | Fragmentation Offset |
| Time To Live | Protocol | Header Checksum |
| Source Address |
| Destination Address |
| Options | Padding |
| Data |
**注意** 每一行占用的位数是 32 bits
报头各个字段内容
Version(版本)
声明 IP 数据包的版本,IPv4 或 IPv6
IHL(Internet Header Length,IP报头长度)
告知 IP 数据包的报头长度,每 4 个字节为一个单位记录 IP 、报头的长度
Type of Service(服务类型)
内容为 PPPDTRUU 表示 IP 数据包的服务类型
PPP:表示IP数据包的优先级
D:0 表示一般延迟(delay),1 表示低延迟
T:0 表示一般传输量(throughput),1 表示高传输量
R:0 表示一般可靠度(reliability),1 表示高可靠度
UU:保留尚未被使用
Gigabit 以太网的相关规定可以让 IP 数据包加速并将低延迟,某些特殊标志在此说明
Total Length(总长度)
IP 数据包总容量,包括报头与数据(Data)部分,最大 65535 Bytes
Identification(识别码)
IP 拆解重组时,每个拆解开的 IP 数据包需要标识符告知接收端这些数据包来自同一个 IP 数据包
Flags(特殊标志)
内容为 0DM
D:0 表示可以分段,1 表示不可分段
M:0 表示此 IP 为最后分段,1 表示非最后分段
Fragment Offset(分段偏移)
IP 在原始的 IP 数据包中所占的位置,有了这个序号才能将所有小 IP 分段组合成原本的 IP 数据包大小,通过 Total Length ,Identification , Flags ,Fragment Offset 将所有小 IP 分段在接收端组合
Time To Live(TTL,生存时间)
IP 数据包的生存时间,范围 0-255 ,当数据报通过路由器 TTL 会减 1 ,TTL 为 0 时,这个数据包将直接被丢弃。
Protocol Number(协议代码)
来自传输层与网络层本身的其他数据都存放在 IP 数据包中,可在 IP 数据包的头部记载 IP 数据包内的数据是什么,这个字段记载每种数据包内容
IP 协议代码与相关数据包协议名称
IP 内代码 数据包协议名称(全称)
1 ICMP(Internet Control Message Protocol)
2 IGMP(Internet Group Management Protocol)
3 GGP(Gataway-to-Gataway Protocol)
4 IP(IP in IP encapsulation)
6 TCP(Transmission Control Protocol)
8 EGP(Exterior Gataway Protocol)
17 UDP(User Datagram Protocol)
较为常见的是 TCP,UDP,ICMP
Header Checksum(报头校验码)
检查 IP 报头是否存在错误
Source Address(来源IP地址)
IP 地址是 32 位
Destination Address
目标 IP 地址
Options(其他参数
额外功能,提供安全处理机制,路由记录,时间戳,严格与宽松的来源路由等
Padding(补齐项目
Options内容不一定多大,每个 IP 数据包都必须是 32 bits ,当 Options 数据不足 32 bits ,Padding 主动补齐
IP 是一种网络数据包,数据包的报头最重要的是 32 位的源与目的地址,这 32 位 bits数值为 IP 网络地址,IP 类似于门牌号码
IP 组成是 32 bits 的数值,由 32 个 0 和 1 组成的一串数字,考虑有关 IP 的参数,应该将参数定为 32 位的数据,32 bits 的 IP 地址分为四小段,每段 8 bits,将 8 bits 换算成十进制,将每一段以小数点隔开,就是常见的 IP 地址书写模式
IP 的表示式
00000000.00000000.00000000.00000000 ==> 0.0.0.0
11111111.11111111.11111111.11111111 ==>255.255.255.255
IP 由 0.0.0.0 到 255.255.255.255 在这串数字中还可分为 Net_ID(网络号码)和Host_ID(主机号码)
C 类 IP 192.168.0.0~192.168.0.255 说明
11000000.10101000.000000000.00000000
11000000.10101000.000000000.11111111
----------Net_ID-----------|Host_ID
前三段位网络号码(192.168.0)
最后一段主机号码
同一个网络的定义
在同一个物理网段内,主机的 IP 具有相同的 Net_ID,不具有独特的Host_ID,这些 IP 群就属于同一个网络 IP 网段
所有主机都是用同一个网络设备连接在一起,这些主机在物理设备上就是连接在一起的,这些主机就在同一个物理网段内,同一物理网段内,可依据不同的 IP 设置,设置成多个 IP 网段
192.168.0.0 - 192.168.0.255(一共256个),这些 IP 是同一个网段内的 IP 群(同一网络也称同一网段),同一个 Net_ID 中,不能具有相同的 Host_ID,否则 IP 会发生冲突,可能造成两台主机都无法使用网络
Net_ID 与 Host_ID 的限制
同一网段内,Net_ID 不变,Host_ID不可重复,Host_ID 在二进制表示法中不可同为 0 或 1,全为 0 表示整个网络的地址(Network IP),全为 1 表示广播地址(Broadcast IP),192.168.0.0(Host_ID 全为 0)192.168.0.255(Host_ID 全为 1)不能用于网段内主机的 IP 值,这个网段内可用于使用的 IP 范围在 192.168.0.1 - 192.168.0.254
在局域网内通过 IP 广播传输数据
相同物理网段的主机如果使用相同的网络 IP 范围(不可重复),这些主机都可以通过 CSMA/CD 功能直接在局域网内用广播进行网络连接(直接网卡对网卡传输数据(通过MAC数据帧))
使用不同局域网在相同物理网段的情况
同一物理网段内,两台主机使用不同 IP 网段地址,由于广播地址不同,无法通过广播方式进行连接,需要通过路由器(Router)进行沟通才能将两个网络连接在一起
网络的大小
Host_ID占用的位越大(Host_ID 数量越多)时,表示同一网络内可以用于设定主机的 IP 数量越多
IP 类似于门牌号,比如 成都市锦江区春熙路339号 ,这个门牌的网络号码是 成都市锦江区 ,主机号码是 339号 ,整条春熙路上的只要开头是成都市锦江区春熙路的就是同一个网络,同时 339号 也只能存在一个,不存在第二个
Host_ID同为 0 或 1(二进制概念)时,代表整个春熙路的第一个与最后一个门牌,第一个代表整个春熙路(Network IP),就是整条路的标志性建筑,最后一个代表在春熙路广播时最后一个(Broadcast IP)
如果数据不是要传输给春熙路内,就需要找到快递公司(路由器),告知快递公司目的地,由快递将数据传输出去
商铺的多少取决于春熙路的大小,也关乎主机号码的数量
为了 IP 管理与发放注册的方便性,Inter NIC 将整个 IP 网段分为五种等级,每种等级范围主要与 IP 的 32 bits 数值的前几位有关
二进制说明 Network IP 第一个数字的定义
Class A:0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> Net_ID 的开头是 0
Class B: 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> Net_ID 的开头是 10
Class C: 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> Net_ID 的开头是 110
Class D: 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> Net_ID 的开头是 1110
Class E: 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> Net_ID 的开头是 1111
五种等级使用十进制表示
Class A:0.xx.xx.xx ~ 127.xx.xx.xx
Class B: 128.xx.xx.xx ~ 191.xx.xx.xx
Class C: 192.xx.xx.xx ~ 223.xx.xx.xx
Class D: 224.xx.xx.xx ~ 239.xx.xx.xx
Class E: 240.xx.xx.xx ~ 255.xx.xx.xx
知道 IP 的第一组十进制数就能知道 IP 属于哪个等级,网络 IP 数量有多少,等级只记住A,B,C 就行,D 用来进行组播(multicast)特殊功能的使用(常用在大批计算机网络还原),E 是被保留没有使用的网段,能够设置在一般系统的 IP 只有A,B,C三种等级的 IP
IPv4 的两种 IP 类别
**Public IP**:公共 IP ,经由 Inter NIC 统一规划的 IP,使用这种 IP 才能连接 Internet
**Private IP**:私有 IP 或保留 IP,不能直接连接 Internet 的 IP,主要用于局域网络内的主机连接规划
规划 IPv4 时担心 IP 存在不足的情况,为了应付企业内部的网络配置,就有了私有 IP(Private IP),私有 IP 分别在A,B,C 三个等级中各保留一段作为私有 IP 网段
Class A: 10.0.0.0 ~ 10.255.255.255
Class B: 172.16.0.0 ~ 172.31.255.255
Class C: 192.168.0.0 ~ 192.168.255.255
不能直接用于 Internet 的连接
私有 IP 的路由信息不能对外散播(只能存在内部网络)
私有 IP 作为源地址或目的地址的数据包,不能通过 Internet 发送(网络会混乱)
关于私有 IP 的参考记录(DNS),只能限于内部网络使用
由于私有路由不能对外直接提供信息,所以内部网络不会直接被 Internet 的 Cracker 攻击,也无法以私有 IP 直接上网,适合不具有 Public IP 的企业内部规划网络设置
在没有公开网络的情况下,联网进行工作或游戏,在局域网内进行工作和游戏,需要规范所有同学在同一段私有网络 IP 网段内,如果需要将私有 IP 连接 Internet ,设置简单的防火墙加上 NAT (Network Address Transfer)服务,通过 IP 伪装使用私有 IP也可以连接 Internet
lo 网络,存在于 Class A 网段内,被用于作为测试操作系统内部循环的网络,同时提供给系统内部原本需要使用网络接口的服务(daemon)使用
在主机未安装网卡,又希望测试主机上设置服务器环境是否可以顺利工作,使用内部环回网络,lo 网络在 127.0.0.1/8 Class A 网段中,默认主机(loaclhost)的 IP 是 127.0.0.1 ,当启动 WWW 服务器,在主机的浏览器执行 http://loaclhost(127.0.0.1)可直接查看主页,不需要安装网卡,方便测试,内部环回地址也可以发送 mail ,(主机系统发送给用户)测试 TCP/IP 数据包与状态是否正常也可使用
主机的 IP 与相关网络的设置方式
**直击手动配置(static)**
可以直接向网管询问可用的 IP 参数,直接编辑配置文件(或使用软件功能)设定网络,常见于校园网络环境中,以及向 ISP 申请固定 IP 的链接环境
**通过拨号取的**
向 ISP 申请注册,取得账号密码,直接拨号到 ISP ,ISP 通过申请的设置,操作系统获得正确的网络参数,不需要手动编辑配置相关网络参数,ISP 也提供不同的 IP 分配机制,包括 hinet,seednet 等都提供 ADSL 拨号后取得固定 IP 的方式
**自动取得网络参数(DHCP)**
局域网内会有一台主机负责管理所有计算机的网络参数,网络启动时会主动向该服务器要求 IP 参数,取得网络相关参数后,主机能够自行设定服务器发给的网络参数,常用于企业内部,IP 路由其后端,校园网络,宿舍环境,线缆宽带等连接方式
无论哪种方式取得 IP ,都只有 Public 和 Private 两种方式,想起他的浮动式,固定式,动态式,只是告知 IP 取得方式
IP 存在等级,配置在一般计算机系统上的是 Class A,Class B,Class C,如果定义局域网,使用 Class A,没有这么多的主机设定在同一个 Class A 网段内(256 x 256 x 256 -2 = 16777214),如果真有这么多主机,由于 CSMA/CD 网络会非常卡顿,需要接到一千多万的主机广播,这样的网络不能使用,影响效率,IP Class 等级设置为了管理考虑,不能将 Class A 划分为一个局域网,取得的 Public IP 是 172.xx.xx.xx网段,但是只有172.16.xx.xx,没有取得整个 172 网段,需要将网段变小,IP 32位数值分位网络号码和主机号码,Class C 的网络号码占了 24 位,还可以将这样的网络切得更细,第一个 Host_ID 作为 Net_ID
,整个 Net_ID 有 25 bits,Host_ID 减少 7 bits,这样原来的一个 Class C 网络被分为两个子网,每个子网有 256/2-2 = 126 个 IP 可用,将原本一个网络分为两个较小的网络,方便管理设计
Netmask(Subnet mask,子网掩码),用于实现子网划分,是用来定义网络的最重要参数
192.168.0.0 ~ 192.168.0.255 Class C 的 Netmask 说明
第一个 IP : 11000000.10101000.00000000.00000000
最后一个 IP : 11000000.10101000.00000000.11111111
|-----------Net_ID--------|Host_ID|
Netmask : 11111111.11111111.11111111.00000000 <=== Netmask 二进制
255 . 255 . 255 . 0 <=== Netmask 十进制
**注意** Netmask 也是 32 位,在数值上,位于 Net_ID 的为 1,Host_ID 为 0
Class A,B,C 三个等级的 Netmask 表示方法
Class A:11111111.00000000.00000000.00000000 ===> 255.0.0.0
Class B:11111111.11111111.00000000.00000000 ===> 255.255.0.0
Class C:11111111.11111111.11111111.00000000 ===> 255.255.255.0
192.168.0.0 ~ 192.168.0.255 IP 网段内的相关网络参数
Netmask: 255.255.255.0 <== 网络定义中,最重要参数
Network: 192.168.0.0 <== 第一个 IP
Broadcast: 192.168.0.255 <== 最后一个 IP
可用于设定主机的 IP 数
192.168.0.1 ~ 192.168.0.254
Class C 继续进行子网(Subnet)划分,细分为两个子网
原本的 Class C 的 Net_ID 与 Host_ID 的分别
11000000.10101000.00000000.00000000 Network: 192.168.0.0
11000000.10101000.00000000.11111111 Broadcast: 192.168.0.255
| Net_ID |Host_ID|
换分成两个子网后的 Net_ID 和 Host_ID
11000000.10101000.00000000.0 0000000 多了一个 Net_ID,为 0 (第一个字网)
11000000.10101000.00000000.1 0000000 多了一个 Net_ID,为 1 (第二个字网)
| Net_ID | Host_ID|
第一个子网
Network: 11000000.10101000.00000000.0 0000000 192.168.0.0
Broadcast: 11000000.10101000.00000000.0 1111111 192.168.0.127
| Net_ID | Host_ID|
Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128
第二个子网
Network: 11000000.10101000.00000000.1 0000000 192.168.0.128
Broadcast: 11000000.10101000.00000000.1 1111111 192.168.0.255
| Net_ID | Host_ID|
Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128
还可以继续进行细分(Net_ID 用掉 26 bits)
计算 172.16.0.0,当 Net_ID 占用 23 位,网络的 Netmask,Network,Broadcast 等参数
172.16.0.0 在 Class B 中,Net_ID 是 16 位,向 Host_ID 借用 (23 -16 = 7)7位
172 . 16 .0000000 0.00000000
| Net_ID |Host_ID|
Network: 172 . 16 .0000000 0.00000000 172.16.0.0
Broadcast: 172 . 16 .0000000 1.11111111 172.16.1.255
Netmask: 11111111.11111111.1111111 0.00000000 255.255.254.0
IP 是二进制,每一位是 2 次方数,由于 IP 数量平均分配到子网中,Net_ID 是 26 位时,192.168.0.0 ~ 192.168.0.255 网段要分四段 (26 -24 = 2) ,一共用掉两个位,得到 4 个网段(2 的 2 次方),将 256 个 IP 平均分配到 4 个网段中
192.168.0.0 ~192.168.0.63
192.168.0.63 ~ 192.168.0.127
192.168.0.127 ~ 192.168.0.191
192.168.0.192 ~ 192.168.0.255
得到 Network 和 Netmask 可以得到该网络内所有 IP,由 Netmask 可以推算出 Broadcast IP,会用 Network 以及 Netmask 表示一个网络
Network / Netmask
192.168.0.0/255.255.255.0
192.168.0.0/24 <== Net_ID 共有 24 位
Netmask 的 Net_ID 都是 1 ,Class C 共有 24 bits 的 Net_ID
刚计算的四个网段可以写为
192.168.0.0/26
192.168.0.63/26
192.168.0.128/26
192.168.0.192/26
由于网络细分严重,担心路由信息庞大导致网络效能不佳,特殊情况下,将 Net_ID 借用作为 Host_ID ,可以将多个网络写成一个,将 256 个 Class C 的私有 IP (192.168.0.0 ~ 192.168.255.255)写成一条路由信息,这个网段就可以写为 192.168.0.0/16,将 192 开头的 Class C 变成了 Class B,打破原本 IP 代表等级的方式(通过 Netmask 规范)称为无类别域间路由(CIDR)
Network / Netmask 的写法就是通常 CIDR 的写法,能够做到通过 Netmask 计算出 Network 和 Broadcast 可用的 IP 即可
同一局域网内,通过 IP 广播的方式实现数据传输目的,非同一局域网内,无法使用广播实现数据传递,需要使用路由器通过 IP 的路径选择功能(routing)进行传输
**简易路由示意图**
共有两个不同网段,Network A 和 Network B,两个网段通过路由器(Server A)进行数据传递,Network A(192.168.0.0/24)与 Network B(192.168.1.0/24)通过 Net_ID 得到,属于不同网段,PC 01 与 PC 11 不能直接传输数据,当主机发送数据是参考路由表(Route table),每台主机都有自己的路由表
默认情况 PC 01 传输数据到 PC 11
**查询 IP 数据包的目标 IP 地址**
当 PC 01 有数据包需要发送时,主机查阅 IP 数据包报头的目标 IP 地址
**查询是否位于本机所在的网络路由表中**
PC 01 主机分析自己的路由表,发现目标 IP 与本级 IP 的 Net_ID 相同时(同一网络),PC 01 会直接通过局域网功能,将数据直接传输给目标主机
**查询默认路由(Default Gataway)**
PC 01 和 PC 11 属于不同网络,PC 01 会分析路由表中是否有其他符合的路由设置值,直接将该 IP 数据包送到默认路由器(Default Gateway),也就是 Server A
**送出数据包到 Default Gateway 后,不理会数据包流向**
IP 由 PC 01 传输到 Server A 后,PC 01 不理会接下来的工作,Server A 接收到数据包后,依据上述流程,分析自己的路由信息,向后继续传输到正确目标上
Gateway / Router :网关 / 路由器的功能负责不同网络之间的数据包传递(IP Forwarding),路由器具有 IP Farwarding 功能,管理路由能力,可以将不同网络间的数据包进行出传输,主机与主机配置的 Gateway 一定要在同一个网段内
每台主机都有一个路由表,数据传递依据路由表进行传递,一旦数据包已经经由路由表的路由条目发送出去,主机就不理会数据包流向了,数据包的流向将是下一台主机(Router)进行传输,Router传输时也依据 Router 自己的路由表进行判断该数据包应该经由哪里传输出去
**路由的概念**
PC 01 将数据传输到 Server Bingo,依据自己路由表,将该数据包传输到 Server A,Server A 传输到 Server B,然后接力传输下去,最后到达 Server Bingo
Internet 的路由协议与变化相当复杂,上图案例相对简单,Internet 上的路由不是静态的,可以随时因为环境变化修改每个数据包的传送方向,在属于 Public 的 Internet 环境中,由于早期 IP 分配都配置妥当,各单位的路由一经设置的妥当后,上层路由无需担心
路由很重要,路由设置错误会造成某些数据包完全无法正确送出去,每一台主机都有自己的路由表,查看路由命令route
root@destin:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 eth0
172.19.0.0 0.0.0.0 255.255.192.0 U 0 0 0 eth0
_gateway 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
root@destin:~# route -n 将主机名以 IP 方式显示
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.19.63.253 0.0.0.0 UG 100 0 0 eth0
172.19.0.0 0.0.0.0 255.255.192.0 U 0 0 0 eth0
172.19.63.253 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
# 输出数据共八个字段
# Destination:Network
# Gateway :该接口的 Gateway 的 IP,0.0.0.0 表示不需要额外的 IP
# Genmask :Netmask,与 Destination 组合成为一台主机或网络
# Flags :共有多个标志表示该网络或主机代表的意义
U:路由可用
G:网络需要经由 Gateway 帮忙传输
H:该行路由为一台主机,非整个网络
# Iface :Interface(接口)
第一栏为目的地的网络,172.19.0.0 就是一个网络,最后一栏为要去到这个目的地需要使用哪个网络接口,eth0 是网卡设备的名称,如果要传输的数据包在路由规则里面第二栏 Gateway 为 * 会直接用后面的网络接口传输,不通过 Gateway
传输数据包目的地 IP 不在路由规则中,就将数据包传输到 default 的路由规则去,几乎每台主机都会有 Default Gateway 帮助负责所有非网络内的数据包传输
传输数据的是以太网,以太网要用到网卡卡号(MAC),查看 IP 属于那张以太网卡,主机会对整个局域网发送出 ARP 数据包,对方收到 ARP 数据包后会返回 MAC,主机会知道对方所在网卡,就可以传输数据,使用 ARP 协议取得目标 IP 与 MAC 后,会记录写入主机的 ARP table 中(内存内的数据),记录 20 分钟
查看本机 MAC 地址
Linux环境下
root@destin:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.19.8.189 netmask 255.255.192.0 broadcast 172.19.63.255
inet6 fe80::216:3eff:fe03:896f prefixlen 64 scopeid 0x20<link>
ether 00:16:3e:03:89:6f txqueuelen 1000 (Ethernet)
RX packets 505785 bytes 90502150 (90.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 375129 bytes 41194188 (41.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Windows环境下
ipconfig /all
查看本机 ARP 表内 IP/MAC 对应的数据
root@destin:~# arp -n 将主机名以 IP 形式显示
Address HWtype HWaddress Flags Mask Iface
172.19.63.253 ether ee:ff:ff:ff:ff:ff C eth0
root@destin:~# arp -s 172.16.67.34 00:11:22:33:44:55 设定某个 IP 或 hostname 的 MAC 到 ARP table 中
SIOCSARP: Network is unreachable
root@destin:~# arp -d 172.16.67.34 00:11:22:33:44:55 从 ARP table 中删除某个 IP 或 hostname 的 MAC
发送 ARP 数据报取得的 IP/MAC 对应,记录的 ARP table 是动态信息(一般保留 20 分钟),随时随着网络内主机 IP 变化而变化,经常更改主机 IP ,ARP table 也会自动重新对应 IP/MAC 表格内容,有特殊需要利用 arp -s
定义静态 ARP 对应
ICMP 是错误检测与报告的机制,可以确保网络的连接状态与连接正确性,ICMP 也是网络层中重要的数据报之一,数据包不是独立存在的,纳入 IP 数据包中,ICMP 同样是通过 IP 数据包进行数据传输,在 Internet 中具有传输能力的就是 IP 数据包,ICMP 有相当多的类别可以检测与报告
常见的 ICMP 类别
类别代码 类别名称与意义
0 Echo Reply (代表一个响应信息)
3 Destination Unreachable(目的地不可达)
4 Source Quench(当 Router 负载过高,可用来让发送端停止发送信息)
5 Redirect(重新构建路由的路径信息)
8 Echo Request(请求响应信息)
11 Time Exceeded for a Datagram(数据包在某些路由传输的过程中造成超时状态,告知来源设备该数据包被忽略的信息)
12 Parameter Problem on a Datagram(ICMP 数据包重复之前的错误时,回复来源主机关于参数错误的信息)
13 Timestamp Request(要求对方送出时间信息,计算路由时间差异,满足同步性协议需求)
14 Timestamo Reply(纯粹响应 Timestamp Request 使用)
15 Information Request(在 RARP 协议应用之前,用来在开机时取得网络信息)
16 Information Reply(响应 Information Request信息)
17 Address Mask Request(查询子网 mask 的配置信息)
18 Address Mask Reply(响应子网 mask 的查询信息)
利用 ICMP 检查网络状态命令 ping 和 teaceroute
,通过 ICMP 数据包辅助确认与回报网络主机状态,在设定防火墙比较容易忽略 ICMP 数据包,只会记住 TCP/UDP,实际 ICMP 数据包可以帮助连接报告状态,除了 8 可以关闭,ICMP数据包也不该全部进行过滤
网络层的 IP 数据包只负责将数据传输到正确的目标主机上,数据包是否被接收,是否正确接收,就不是 IP 的任务,是传输层的任务,传输层有两个重点,面向连接的 TCP 的数据包和面向无连接的 UDP的数据包
,数据能不能正确送达目的地,与这两个数据包关系很重要
在OSI七层模型中,网络层的 IP 上一层是传输层,传输层的数据打包成 TCP 数据包,TCP 数据报数据必须要能够放到 IP 数据包中。
**各数据包之间的相关性(MAC IP TCP)**
TCP 报头数据记录数据包的相关信息
| 4 bits | 6 bits | 6 bits | 8 bits | 8 bits |
| Source Port | Destination Port |
| Sequence Number |
| Acknowledge Number |
|Data Offset| Reserved | Code | Window |
| Checksum | Urgent Pointer |
| Options | Padding |
| Data |
**Source Port & Destination Port(源端口 & 目标端口)
IP 数据包传输主要利用 IP 地址链接两端,连接到 Port 上,网站开放 WWW 服务,表示主机必须启动可以让 Client 连接的端口(Port),Client 想要链接到 WWW 服务器,也必须开启端口,这样两台主机才能通过端口进行通信传递数据,是比较重要的参数
**Sequence Number(数据包序号)**
TCP 数据包必须要带入 IP 数据包,当 TCP 数据包过大(大于 IP 数据包容量),需要进行分段,用于记录每个数据包序号,方便接收端将 TCP 数据重新组合
**Acknowledge Number(回应序号)**
确认主机端确实收到 Client 发出的数据包,Client 收到这个确认码,确定之前传递的数据包被正确接收
**Data Offset(数据补偿)**
倒数第二行 Options 字段,该字段长度非固定,为了确认整个 TCP 数据包大小,需要这个标志说明说明整个数据包字段的起始位置
**Reserved(保留)**
未使用的保留字段
**Code(Control Flag,控制标志码)**
进行网络连接时,必须说明这个链接的状态,让接收端了解这个数据包的主要动作,是一个非常重要的句柄,该字段共有 6 个 bits,分别代表 6 个句柄,为 1 表示启动
·URG(Urgenbt):为 1 代表数据包为紧急数据包,接收端应紧急处理,Urgent Pointer 字段也会启用
·ACK(Acknowledge):为 1 代表数据包为响应数据包,与 Acknowledge Number 有关
·PSH(Push function):为 1 代表要求对方立即传输缓冲区内的其他对应数据包,无需等待缓冲区满了才发送
·RST(Reset):为 1 代表链接会马上结束,无需等待终止确认手续,强制结束的连接,且发送端已断线
·SYN(Synchronous):为 1 代表发送端希望双方建立同步处理,要求建立连接,带有 SYN 标志的数据包表示主动要连接到对方
·FIN(Finish):为 1 代表传输结束,通知对方数据传输完毕,是否同意断线,只是发送者还在等待对方响应
每个项目都很重要,相对而言 ACK/SYN 更加重要,在处理防火墙时,会更加清楚 TCP 数据包因为链接方向不同导致都有所谓的状态条件
**Windows(滑动窗口)**
控制数据包流量,告知对方目前本机的缓冲器(Receive Buffer)还可以接收数据包,为 0 时,代表缓冲器额满,要暂停传输数据,单位为 Byte
**Checksum(确认校验码)**
数据从发送端中送出前,会进行校验的动作,将该动作的校验值标注在该字段,接受者收到这个数据包后,再次对数据包进行验证,对比原发送的 Checksum 值是否相符,相符接受,不符假设该数据包损坏,要求对方重新发送数据包
**Urgent Pointer(紧急数据)**
该字段在 Code 字段 URG 为 1 时起作用,可告知紧急数据所在位置
**Options(任意数据)**
该字段仅应用于表示接受段可以接受的最大数据段容量,该字段不使用可以使用任意数据段的大小,该字段很少使用
**Padding(补足字段)**
同 IP 数据包需要有固定的 32 bits 报头,Options 字段为非固定,需要 Padding 字段补齐,同样是 32 bits 整数
TCP 报头数据最重要的是源端口和目的端口(16 bits),源端口和目的端口最大可达 65535 (2 的16 次方)网络是双向的,服务器和客户端进行连接,需要对应端口达成连接信道,数据通过信道进行通信
端口通过程序执行打开,启动 WWW 服务器软件会主动唤起 Port 80 等待客户端连接,查看网站数据需要通过浏览器,填入站点,浏览器会启动一个端口,将 TCP 数据包的报头填写目标端口 80 ,源端口是主机随机启动的,将 TCP 数据包封装到 IP ,传输到网络上,等待网站服务器收到数据包,依据数据包端口给予回应
IP 是门牌,端口就是这个门牌代表的建筑物,每个建筑物有 1 ~ 65535 层高,需要什么服务就去对应的楼层办理,能否办理需要看楼层有人处理,也就是是否有程序执行
**IP 是门牌,TCP 是楼层,提供服务的是在该层的工作人员(程序)**
一台服务器可能会有多种服务,与服务器连接时通过端口可以知道客户端需要获取的数据,每种 Client 软件所需要的数据不同,浏览器需要的数据是 WWW ,软件默认向服务器 80 端口请求数据,如果用 filezilla 进行服务器 FTP 数据请求时,filezilla 默认向服务器 FTP 相关端口(默认 Port 21)进行连接
一台主机比喻成一个政务大厅,每个窗口就是通信端口,去办理的人就是 Client 的数据包,进入大厅会有工作人员指示去哪个窗口办理,如果到了错误的窗口,服务人员也会告知这个窗口不办理这个业务,连接就无法成功
网络是双向的,一定会存在发起端,Internet 规范固定了很多端口(well-known port),通常小于 1024,提供给许多知名网络服务软件使用,Linux 下各网络服务对应的端口(port number)默认写在 /etc/service
文件。
端口 服务名称与内容
20 FTP-data,文件传输协议使用的主动数据端口
21 FTP,文件传输协议命令端口
22 SSH,安全的远程连接服务
23 Telnet,早期的远程连接服务
25 SMTP,简单邮件传输协议,Mail Server 端口
53 DNS,名称解析域名服务器
80 WWW,全球信息网服务器
110 POP3,邮件接收协议
443 HTTPS,安全加密机制的 WWW 服务器
小于 1024 以下的端口启动时,启动者身份必须是 ROOT (特权端口)
Client 是主动向 Server 请求数据,Client 的 port number 使用随机的,大于 1024 未在使用中的 port number 即可
网络是双向的,成功连接的话需要服务器和客户端同时提供 IP 和端口,这个成对的数据就是 Socket Pair
源 IP + 源端口(Source Address + Source Port)
目的 IP + 目的端口(Destination Address + Destination Port)
IP 与端口常连在一起说明,网络寻址常使用 IP :Port
进行说明,destin.love:8080
TCP 可靠的数据传输协议,通过很多机制实现,最重要的是三次握手功能,TCP 传输数据机制非常复杂
**三次握手数据包连接模式**
建立连接之前必须通过三个确认动作,称为三次握手(Three-way handshake)
A,B,C,D 四阶段说明
A:数据包发起
客户端与服务端连接时,必须发送一个要求连接的数据包,客户端必须随机取一个大于 1024 的端口作为程序沟通接口,在 TCP 报头中必须要带有 SYN 的主动连接(SYN = 1),记下传输数据包给服务器端的序号(Sequence number = 10001)
B:数据包接受与确认数据包传输
服务器收到数据包,确定要接收这个数据包后,开始制作同时带有 SYN = 1,ACK = 1 的数据包,其中 Acknowledge 的号码要给 Client 客户端确认使用,该数字比 A 阶段的 Sequence 号码多一号(ack = 10001 + 1 = 10002),服务器也必须确认客户端确实可以接收数据包,也会发送一个 Sequence(seq = 20001)给客户端,开始等待客户端给服务器的回应
C:回送确认数据包
客户端接收来自服务器的 ACK 数字后(10002)能够确认之前要求数据包被正确接收,如果客户端也同意与服务器建立连接时,会再次发送一个确认数据包(ACK = 1)给服务器(Acknowledge = 20001 + 1 = 20002)
D:取得最后确认
在服务器收到带有 ACK = 1 且 ack = 20002 序号的数据包后,就能建立连接
无论是服务器还是客户端都必须通过一次 SYN 和 ACK 建立连接,一共进行三次交谈,在配置防火墙或追踪网络连接时,网络是双向的概念容易被忽略,常导致无法成功连接的相关问题
UDP(User Datagram Protocol),用户数据报协议,UDP 与 TCP 不同,不提供可靠的传输模式,不是面向连接的机制,UDP 在传输过程中接收端在接收到数据包后不会回复相应的数据包(ACK)给发送端,数据包并没有像 TCP 数据包有严密的监察机制
UDP 数据包的报头信息
| 16 bites | 16 bits |
| Source Port | Destination Port |
| Messages Length | Checksum |
| Data |
TCP 数据包通过三次握手进行连接所以比较可靠,也因为三次握手,TCP 传输数据速度比较慢,UDP 数据包不需要确认对方是否正确接收数据,报头数据较少,UDP 可以在 Data 填入更多数据,比交适合需要实时反映的数据流,像影像实时传输可以使用 UDP 进行连接,UDP传输协议并不考虑链接需求,链接终止与流量控制等特性,使用的情况适当数据的正确性不是很重要的时候
很多软件同时提供 TCP 和 UDP 的传输协议,查询主机名的 DNS 服务同时提供 UDP/TCP 协议,UDP 比较快速,Client 可以先使用 UDP 与服务器进行连接,当使用 UDP 无法获取正确数据时,转换为较为可靠的 TCP 协议进行数据传输,可以同时兼顾快速与可靠的传输
数据传输时数据包的发出与接收动作,不同的数据包都有不一样的头部(Header)信息,数据包上通常会具有四个基本信息,Socket Pair 里提到的源 IP 和目的 IP ,源端口和目的端口,如果是 TCP 连接的数据包,还包含 Control Flag 里面的 SYN/ACK等重要信息
数据包过滤式的网络防火墙可以阻挡一些可能有问题的数据包,Linux 系统上利用防火墙机制与软件进行数据包报头的分析,设定分析规则,发现某些特定 IP ,特定端口,特定数据包信息(SYN/ACK等),将该数据包丢弃(防火墙原理)
Telnet 服务比较危险,使用 23 Port Number,使用软件分析要送进主机的数据包,发现数据包的目的地址是主机的 23 Port,就将该数据包丢弃
OSI 七层协议每一层可以泽当的数据
**第二层**:针对源 MAC 和目的 MAC 进行阻挡
**第三层**:针对源 IP 和目的 IP,以及 ICMP 类别(type)进行阻挡
**第四层**:针对 TCP/UDP 端口进行阻挡,针对 TCP 状态(code)处理
Internet 上使用的是 TCP/IP 通信协议,需要 Public IP 连接到 Internet
要连接到 Internet 就需要用到 TCP/IP,最重要的是 IP,IP 简化成十进制也不方便记忆,计算机有主机名称,将主机名称与 IP 对应起来,记忆文字类的主机名就方便多了,计算机也可以通过解析找到必须知道的 IP
主机名称(Host Name)对应 IP 的系统是 DNS(Domain Name System),最大功能是进行主机名称与该主机 IP 的解析
的一项协议,DNS 在网络中经常被使用,访问百度的网站只需要输入baidu.com
,不可能会记对应的 IP ,因为这样更方便,计算机主机只认识 IP,输入baidu.com
时,主机像 DNS 主机查询baidu.com
对应的 IP,将查询到的 IP 结果回应给浏览器,浏览器利用该 IP 连接主机
主机需要向 DNS 服务器查询 Host Name 对应的 IP 信息,DNS 主机的 IP 必须在计算机设置好,需要输入 IP,Linux 系统中,DNS 主机 IP 设置在/etc/reslov.conf
文件中
ISP 都会提供 DNS 服务器的 IP 给客户使用,设定客户主机的 DNS 查询主机,如果使用的环境中不提供 DNS 主机,设定 Hinet 最大的 DNS 服务器就行(IP 168.95.1.1),设定好 DNS 后上网浏览才能使用主机名,
主机能够使用网络,必须有 IP,IP 的设置中必须有 IP,Network,Broadcast,Netmask 等参数,还要考虑到路由的 Default Gateway 才能正确将非同网络的数据包传输出去,考虑主机名与 IP 独赢,还必须给系统一个 DNS 服务器的 IP
一组合理的网络设置需要的数据
IP
Netmask
Network
Broadcast
Gateway
DNS
Network 和 Broadcast 可以通过 IP/Netmask 计算获得,需要设定于 PC 的参数主要是 IP,Netmask,Default Gateway,DNS
如果使用 ADSL 拨号上网,这些数据由 ISP 直接给到主机,只需要使用拨号程序进行拨号到 ISP ,这些数据就自动在主机上设定完成,如果是静态 IP(学术网络),就需要自行使用上面的参数设定主机,缺一不可
192.168.1.0/24 需要在主机上设定好的参数
IP: 192.168.1.0 ~ 192.168.1.254
Netmask: 255.255.255.255.0
Network: 192.168.1.0
Broadcast: 192.168.1.255
Gateway: 环境不同自行询问网管人员
DNS: 设定为 168.95.1.1 或电信DNS
在小型企业或家庭的小型局域网规划,让所有主机可以直接利用以太网进行数据连接,内部局域网络都希望直接使用私有 IP 设定通信环境,以星型结构作为网络的主要类型,规划主机在星型结构中的状态
大型企业内部,需要将配线架,线路设计,墙上网络接口分别拆开施工的结构化布线会更妥当
局域网的狭义定义,将局域网定位在一个采用星型结构的实体网络中,在通过 IP 网段连接在一起
网络布线是数十年大计总最重要的环节,服务器主机能力不够可以换主机,Switch 交换力不足可以 换 Switch,布线不良不能拆掉房子将管线挖出来重新安装,最初规划的布线严谨度会影响未来网络的扩展
如果是大型布线,需要找专业人员进行规划,好的设计,独立的主机改变线路,换插孔都会很简单,主机到墙上插孔的距离也会变得很短,维护方便,线缆走线美观,这样线缆的材质就得高一些,网络布线经过折角区也要留意施工
在小型局域网内布线,利用以 Switch 为中心连接所有设备的星型结构(star topology)设计局域网,如果需要在局域网内搭建 Internet 环境,需要考虑 Linux 服务器放置的位置, Linux 是否具有 Public IP 对主机的维护与配置复杂度有很大影响
**Linux 服务器取得 Public IP 的连接方式(具有多个可用 IP 情况)**
这种连接模式中,Linux 与一般 PC 或打印机都是相同地位,如不急连接 Internet,每个设备都给予一个相同网络的私有 IP 地址就可以通过网络进行工作,很方便地使用打印机或网上邻居进行工作,Linux 服务器也可作为内部文件服务器或打印服务器使用
如需连接到 Internet ,每台主机(PC 和 Linux)都可直接拨号连接 Internet,由于拨号是在主机额外增加一个实体 ppp0 端口,系统内就会有两个可用 IP (Public 和 Private IP),拨号上网后每台主机还能继续使用原有局域网内的服务,无需变更原本设置的私有 IP ,就算 Linux 服务器宕机,其他 PC 也没有影响
这种简易环境对于家庭来说可以,对于小型企业不好管理,不能掌握员工实上网情况,是一个没有防火墙的环境,无法对员工进行实际网落控制,由于网络内外部(LAN 与外部环境)没有明确界限,网管人员对于进入客户端的数据包没有任何管理能力,是很难控制的环境,对于企业不建议使用这种环境
有多个可用 Public IP,Linux 服务器主要提供 Internet 的 WWW 服务或 mail 服务,不作为内部文件服务器使用,可将 Linux 与内部网络分开,Linux 具有 Public IP,配置与维护也很方便
**Linux 服务器取得 Public IP 的连接方式(具有多个可用 IP 情况)**
所有 LAN 内的主机与设备在同一个网络内,在 LAN 内传输速度没有问题,内部主机连接到 Internet,必须通过 IP 路由器,也可在 IP 路由器定义简单防火墙规则,也可将 IP 路由器更换为功能更全面的路由设备,可以定义更加完整的防火墙规则,完善内部主机管理,方便维护
直接利用 Linux 服务器管理网络,不使用 IP 路由器
**让 Linux 直接管理 LAN 的布线情况**
无论有多少 IP 都适用,如果只有一个 Public IP,只能使用这种方式,Linux 需要有两张网卡,对外与对内,Linux 具有 Public IP ,服务器配置与维护相对简单,Linux 服务器可作为内部网络对外的防火墙,Linux 防火墙的效率很高配置也很简单,可以实现完善的安全控制,Linux 服务器也比高级的硬件防火墙便宜
服务器提供的网络服务越简单越好,主机资源可以完全被某个程序使用,不会影响,主机被攻击时,也能立即发现哪个环节出现问题,内部的 LAN 通过 Linux 连接 Internet,当 Linux 宕机,对外的链接就断了,Linux 服务结构会变得复杂,造成维护上的困难,对于小型局域网落有一定的应用价值
大型企业会将服务器主机放置在机房,LAN 环境下通过防火墙代理,将来自 Internet 的数据包经过防火墙过滤进入服务器,可再防火墙端过滤一些探测和攻击,比较安全,依据防火墙多少分为非军事化隔离区(DMZ)配置
IP 路由器换为 Linux 主机架设防火墙也可以,主机经常升级,升级后的旧主机可以作为 Linux 防火墙使用,防火墙不需要大容量硬盘,高清显示和高计算功能的 CPU,只要有不错的网络接口就能达到较好的防火墙性能
Linux 服务器若让在 LAN 里(使用 Private IP),对 Internet 提供网络服务时,防火墙规则会变的相对复杂,需要进行数据包传递的任务,在麻烦的协议中,会造成配置方面的问题
每种连接有适用的用户群体,通过网络环境设定,连接以太网组成的局域网需要网卡,网线,网络连接设备(Hub / Switch),连接 Internet 的调制解调器
需要了解交叉线,直连线,RJ-45 网线,Hub / Switch 的性能,不在局域网的设备(调制解调器)需要向 ISP 询问,调制解调器是 ISP 提供给用户的,ISP 不同批次安装的调制解调器模块不同,会有不同接线与线缆处理方式(交叉线与直连线的差异),需要向 ISP 查询
使用刚替换下来的旧主机作为 Linux Server,也可购买省电的主机,CPU 有虚拟化能力,不但省电还可通过虚拟化技术仿真出多部系统同时运行
选择的配置按照运行的服务选择,防火墙系统与 DNCP 服务不需要高性能主机,Proxy , SQL 等服务需要高性能主机,甚至需要磁盘阵列辅助才能有良好性能,双核入门级主机能够胜任大多企业内部或外部轻松的服务,选择主机最好选择有伪指令集的 CPU
目前 Distribution 分为两类:多功能新鲜产品(Fedora),强调性能稳定软件功能较旧的企业用途产品(RHEL ,Centos ,SuSE ,B2D)
架设服务器建议使用性能稳定较高的企业版,功能新的版本(Fedora)强调新鲜,核心与软件变动频繁,造成维护麻烦,很多自行安装的软件不能在新的内核上运行,内核升级很多的软件需要重新编译
主机几乎都内置吉兆速度( Gigabit )的以太网卡,不需额外购买网卡,使用内置网卡需要注意是否是特殊的网络芯片,可能导致 Linux 内置网卡驱动程序无法顺利驱动网卡,需要安装网卡驱动程序
如需更快速的速度,可用 PCI - Express 网卡(传输带宽更高)
家用或学习使用,可以选购螃蟹卡(芯片 Real Tek 8139),Linux 本身支持 Real Tek 8139 芯片
Hub 是共享设备,Switch 设备具有独立带宽功能,从性能带宽角度选择 Switch 更好,一般家庭用户处理简单的上网功能使用 Hub 即可
局域网内传输大量数据,需要考虑网络整体速度,连接设备最好支持 GB 速度的 Switch,如果是 Cluster(集群式计算集群),Switch 需要支持 Jumbo frame 的硬件架构
网线等级,网线压折,信号衰减,自行压制的 RJ-45 接头测试,网线缠绕情况会影响网络传输的速度,通过主机与 Switch 的信号灯判断是否连接成功,但也会存在传输质量差的情况
等级高的网线不要自行压制,RJ-45 街头芯线裸露程度不同会影响电子屏蔽效应质量,Cat 5 等级线材可以自行压制,等级高于 Cat 5 建议购买
无线网络设备(AP 与在 CLient 端的无线网卡)搭建局域网可以省去网线施工费,最大问题在于无线网络的安全性,AP 如果未做好防护措施,会导致 LAN 内主机数据被窃取,无线网络 AP 设备需要有限制 MAC 功能,指定网卡使用 AP,较为安全
硬件防火墙,路由器,网桥等,按网络环境是否需要进行组建,网线转角处要注意线缆保护,平地使用压条固定网线,牵线施工尽量让线缆延墙角或墙面即有物品,保证美观增加工作场所安全性
主机上网速度不完全取决于网络带宽,3D 数据速度瓶颈在于 3D 显示,而非网络,网络仅传输数据给主机,主机在硬盘取出数据,显卡将画面绘制到屏幕上,显示速度或 CPU 性能差,会引发延迟
服务器本身负载(Loading)过大,主机相应会有延迟(Lag)
主机使用的数据是否具有快速传输接口也会影响速度,网络速度慢,不能只增加网络带宽,要找出问题根源
网络媒体需要考虑很多参数,没有固定设备,与使用环境,未来功能扩展有关,单纯为了硬件速度考虑网络速度可接受的最低速度,有能力再考虑环境需要多稳定的设备进行构建
**局域网环境,相关网络参数**
Linux 主机必须具有 Router 功能,需要两个接口,一个与 Internet 沟通,一个与内部 LAN 连接,一张网卡可以设置多个 IP,一个 IP 可视为一个网路接口,一张网卡两个网络接口即可进行 NAT (IP 地址转换)设置,建议使用两张网卡,将内外完整隔离,对于内部网络性能要好
内部 LAN 建议使用 Private IP 配置,必须配置 IP ,Network ,Netmask , Broadcast , Default Gateway , DNS 服务器 IP
图中网络参数配置
IP: 192.168.100.1 ~ 192.168.100.253 ,不可重复
Netmask: 255.255.255.0
Network: 192.168.100.0
Broadcast: 192.168.100.255
Default Gateway: 192.168.100.254(路由器 IP)
DNS: 168.95.1.1
连接 Internet ,操作系统需要支持 TCP/IP,局域网内可通过简单通信协议进行数据传输(NetBEUI)
Linux 中网络参数设定好,TCP/IP 就会启用,不需要额外安装其他通信协议,Linux 系统硬盘分享同网络的 Winows PC,需要额外安装 SAMBA
WIndows 配置复杂,大型企业需额外考虑 Windows Server 提供的服务,Winows Client 要响应启动通信协议,常见的通信协议是 TCP/IP 和 NetBEUI,Linux 和 Windows 通过网上邻居通信,开启 TCP/IP 即可(SAMBA 通过 NetBEUI over TCP/IP 传输数据)也可同时开启 NetBEUI
Windows 主机除了配置 IP ,Netmask ,DNS 外,需配置工作组(Workgroup),计算机名称(Netbios name)等,可以开启 NetBIOS(NetBEUI)通信协议,除非网络中有其他工作站,否则安装 TCP/IP 和 NetBEUI 两个协议即可
网络参数在网络连接中进行配置,工作组,计算机名称在系统设置中设置
Linux 中设备以文件名表示,/dev/hda 表示 IDE1 接口第一个 master 硬盘,网卡(Network Interface Card,NIC)以内核模块对应设备名称表示,默认网卡名称 eth0
修改APT更新源,挂载安装包的ISO镜像文件,修改/etc/apt/source.list
文件
mkdir /mnt/cdrom1
#创建目录
lsblk
#查看安装包镜像文件名
echo "/dev/sr0 /mnt/cdrom iso9660 defaults 0 0" >> /etc/fstab
#修改文件信息
mount -a
#全部挂载
nano /etc/apt/source.list
#进入文件修改
deb [trust=yes] file:/mnt/cdrom1 buster main contrib
#在文件内添加这段数据
apt update
#更新安装包
apt install gnome
#安装gnome图形化环境
上述的操作是按照业务需求进行的配置,如果在我们本地需要方便的利用网络进行软件包的更新可以使用网络站点进行APT软件包的更新
# Debian 10 buster
# 中科大源
deb http://mirrors.ustc.edu.cn/debian buster main contrib non-free
deb http://mirrors.ustc.edu.cn/debian buster-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian buster-backports main contrib non-free
deb http://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian buster main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian buster-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian buster-backports main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
# 官方源
# deb http://deb.debian.org/debian buster main contrib non-free
# deb http://deb.debian.org/debian buster-updates main contrib non-free
# deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
# deb-src http://deb.debian.org/debian buster main contrib non-free
# deb-src http://deb.debian.org/debian buster-updates main contrib non-free
# deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free
# 网易源
# deb http://mirrors.163.com/debian/ buster main non-free contrib
# deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
# deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
# deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
# deb-src http://mirrors.163.com/debian/ buster main non-free contrib
# deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
# deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
# deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
# 阿里云
# deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
# deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
# deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
# deb http://mirrors.aliyun.com/debian-security buster/updates main
# deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
# deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
# deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
# deb-src http://mirrors.aliyun.com/debian-security buster/updates main
#清华大学镜像源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
#kali更新源
#中科大
#deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#清华大学
#deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#浙大
#deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#东软大学
#deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#官方源
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib
#重庆大学
#deb http://http.kali.org/kali kali-rolling main non-free contrib
#deb-src http://http.kali.org/kali kali-rolling main non-free contrib
在图形界面下右键桌面,选择Setting—Devices-Display-Resolution-1280*768(16:10)
按照业务需求进行安装桌面环境,进行相关的桌面设置
设置用户名
nano /etc/hostname
#进入主机名文件下进行改写文件数据
#将原本数据改为业务需求的数据
hostname
#验证查看是否修改成功,如不成功,并且以成功修改文件数据,可以进行重启系统
#根据业务需求进行主机名的配置
根据业务需求添加网络适配器,按照业务需求分别进行IP配置
进入虚拟机设置界面添加新设备
修改IP地址
ip addr
#查看网卡信息,这里是用来查看网卡的名字
ens33 ens37 ens38
#这是debian系统下的三个网络适配器的名字
nano /etc/network/interfaces
#进入网考配置文件进入修改数据
#第一个The loopbak network interface是网络回环不需要修改
#只修改下面的The primary network interface就可以了
sytemctl restart networking
#重启网络
ifup 网卡名
#重启网卡,可选操作
ip addr
#验证是否设置成功
修改FQDN(全限定域名)
设置主机域名
nano /etc/hosts
#域名配置文件可直接添加,其他无冲突数据可以不做修改
设置Squid(透明代理)
apt install squid
#安装squid代理软件
开启路由转发功能
nano /etc/sysctl.conf
#在文件中将net.ipv4,ip_forward=1的注释取消
sysctl -p
#使其更改后的配置生效
查找squid的配置文件路径
nano /etc/squid/squid.conf
#在1907行下添加http_port 3128 transparent
#在1408行将http_access allow 后的参数改成all
systemctl restart squid
#重启squid
**添加NAT规则:**
iptables -t nat -I PREROUTING -i ens33 -s 10.10.100.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -I PREROUTING -i ens33 -s 0.0.0.0/0 -p tcp --dport 80 -j REDIRECT --to-port 3128
安装net-tools网络管理工具
apt install net-tools
#安装命令
route add -net 10.10.100.0 netmask 255.255.255.0 dev ens33
route add -net 172.16.100.128 netmask 255.255.255.128 dev ens37
route add -net 192.168.10.240 netmask 255.255.255.240 dev ens38
route add default gw 172.16.100.254
route add default gw 10.10.100.254
route add default gw 192.168.10.2
#设置路由
配置DHCP服务
apt install isc-dhcp-server
#安装DHCP服务
vim /etc/defaults/isc-dhcp-server
#设置监听网卡
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
#备份配置文件
配置格式:subnet ${10.10.100.0} netmask ${255.255.255.0}{
#子网,子网掩码
range ${10.10.100.1} ${10.10.100.50};
#IP地址范围
option subnet-mask ${255.255.255.0};
#掩码
option routers ${10.10.100.2};
option domain-name "${dhcp.com}";
option domain-name-servers ${114.114.114.114};
default-lease-time 3600;
max-lease-time 7200;
}
#修改配置文件
systemctl restart isc-dhcp-server
#重启DHCP服务
修改Client客户端网卡为DHCP自动获取IP地址,重启网卡(ifup 网卡名)
配置SSH服务
根据业务需求进行配置iptables,hosts配置文件
/etc/hosts.allow
#/etc/hosts.allow添加sshd:10.10.100.254:allow
/etc/hosts.deny
#hosts配置文件
#/etc/hosts.deny添加sshd:ALL
iptables -A INPUT -p tcp -d 10.10.100.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -d 0.0.0.0/24 --dport 22 -j REJECT
#仅允许Client客户端进行ssh访问
#其余所有主机的请求全部拒绝
普通用户增加root权限
apt install sudo*
#安装sudo工具
编辑sudoers配置文件
/etc/sudoers
#sudo工具配置文件
用户名 ALL:(ALL:ALL) NOPASSWD:ALL
#主要配置
#NOPASSWD的意思是使用sudo命令无需密码
修改服务器SSH配置文件
/etc/ssh/sshd_conf
PermiyRootLogin no
#关闭允许root用户登陆
PasswordAuthentication no
#关闭使用密码登陆
PubkeyAuthentication yes
#开启使用密钥登陆
Port 2222
#更改端口号2222
ListenAddress 10.10.100.254
#更改监听地址
测试连接
192.168.152.128
#客户端IP地址
192.168.152.135
#服务器IP地址
ssh-keygen -t rsa
#客户端生成公私钥
ssh IP地址 -p 端口号
#SSH链接目标服务器
ssh-copy-id {IP地址} -p {端口号}
#将公钥传输到服务器端
iptables -A INPUT -p tcp -d 0.0.0.0/24 -dport 2222 -j REJECT
iptables -A INPUT -p tcp -d 10.10.100.0/24 -dport 2222 -j ACCEPT
#服务端防火墙设置只允许客户端IP进行ssh访问
**自签发CA**
apt install openssl
#安装openssl
/etc/ssl/openssl.conf
#配置文件路径
basicConstraints=CA:TRUE
dir =/CA
#将第271行的basicCOnstarints参数FALUSE改为TRUE
#将第45行的dir=参数改为/CA
mkdir /CA
#创建CA目录
cd /CA
#进入CA目录
cp -rf -p /etc/ssl/* /CA
#拷贝配置文件到CA目录
touch index.txt
#创建索引文件
touch serial
#创建序列号文件
echo 01 > serial
#将01写入到序列号文件
mkdir newcerts
mkdir private
cp -p index.txt ./newcerts
cp -p serial ./newcerts
#创建newcerts目录,复制两个索引文件到该目录,创建private目录存放密钥
ls -alh
#查看是否创建成功
openssl genrsa -out ./private/cakey.pem 2048
#生成2048位根密钥 放在/CA/private目录下
#在CA目录下工作
openssl req -new -x509 -key ./private/cakey.pem -out cacert.pem
#利用根密钥生成一个根证书 (不放在private目录,此目录专门存放私钥)
#在CA目录下工作
#生成证书的引导程序
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
#在此处是需要进行输入的地方
Country Name (2 letter code) [AU]:CN
#国家名称(两个字母长度)
#CN(中国)
State or Province Name (full name) [Some-State]:CHINA
#州或省名称(全称)[某些州]:中国
Locality Name (eg,city) []:CHENGDU
#地点名称(例,城市)[]:成都
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skills
#组织名称(如,公司)[互联网Widgits私人有限公司]:skills
Organizational Unit Name (eg, section) []:Operations Departments
#组织单位名称(例,部门)[]:运营部门
Common Name (e.g. server FQDN or YOUR name) []:*.skills.com
#通用名称(例如服务器全限定域名或您的姓名)[]:*.skills.com
Email Address []:wf@sdskills.com
#电子邮件地址[]:wf@sdskills.com
openssl x509 -in cacert.pem -text -noout
#查看证书,在CA目录下工作
ls -alh
#查看目录下所有文件,包含隐藏文件
web服务器端
openssl genrsa -out server01.key 2048
#生成私钥
openssl req -new -key server01.key -out server01.csr
#生成证书请求
#还会进入引导程序,按照之前的步骤走下去就可以
scp -P {对方ssh服务端端口号} server01.csr {对方服务器IP}:/CA
#传送请求到CA服务端
注意:传输过程中两边文件夹权限要一致
CA服务器端
openssl x509 -req -in server01.csr -CA /CA/cacert.pem -CAkey /CA/private/cakey.pem -CAcreateserial -out server01.crt -days 365
#生成证书
**Shellscirpt**
#!/bin/bash
url={监听目的网址或IP}
for((i=1;i<4;i++))
do
status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
if [ $status_code -eq 200 ];then
echo "$time 第$i次检查$url网页访问成功"
break
else [ $i = 3 ];then
echo "httpd_accel_host 127.0.0.1" >> /etc/squid/squid.conf
systemctl restart squid
fi
done
时区:执行指令: timedatectl | grep 'Time zone'
本地登录提示信息:cat /etc/motd
远程登录提示信息:本地执行指令: ssh username@localhost -p 2021
timedatectl listtimezones
#查看可以更改的时区
timedatectl set-timezone Asia/Shanghai
#更改时区为 亚洲/上海
#两条命令执行后更改时区
timedatectl
#执行验证命令查看是否执行成功
/etc/profile
#在其文件夹下写一个脚本文件,进行执行登录信息的显示
使用另一个终端,通过命令进行测试 成功显示所需信息
将虚拟机进行reboot重启,后登录系统显示登录信息
**基础配置**
Server01: 全限定域名Server01.sdskills.com
在/etc/hosts配置文件内添加业务需求的IP地址和域名信息
修改主机名执行指令
hostnamectl set-hostname Server01
验证命令
hostname
**网络地址/掩码/网关**
验证命令
ip addr show | grep inet && ip route
进入/etc/network文件夹
修改interfaces文件
auto ens33
#网卡自动化
allow-photplug ens33
#
iface ens33 inet dhcp/static
#dhcp动态获取ip
#static静态IP
address
#设置ip地址
netmask
#设置子网掩码
gateway
#设置网关地址
systemctl restart networking
#重启网络服务
systemctl status networking
#查看服务运行状态
在虚拟机设置中添加四块1G大小的新硬盘
进入虚拟机项目目录添加新磁盘
添加了四块新硬盘,四块新硬盘容量都为1GB
mdadm用于创建、管理、监控RAID设备的工具
安装mdadm apt isnstall mdadm
lsblk
#查看存在哪些硬盘,列出硬盘文件
命令查到了新创建的四个新硬盘分别是sda,sdb,sdd,sde
sdc是这个虚拟机系统存放的位置,所以下面还有子文件
mdadm命令常用参数
**参数** **作用**
-a 检测设备名称
-n 制定设备数量
-l 制定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[a-b,d-e]
#创建/dev/md0阵列卡,显示过程,等级为5,磁盘数量三个,热备磁盘一个,硬盘设备是/dev/sda,sdb,sdd,sde
设置md0位LVM格式 逻辑卷管理器
安装LVM工具 apt install lvm*
*表示LVM所有安装包都进行安装
pvcreate /dev/md0
#将阵列卡/dev/md0设置为LVM格式
vgcreate vg01 /dev/md0
#将磁盘设备添加到vg01卷组
lvcreate -n lv1 -L 1G vg01
#切分逻辑卷设备,按照业务需求进行设置,这里仅是示例设置为1G
lvdisplay
#验证是否创建成功
mkfs.ext4 /dev/vg01/lv1
#将磁盘格式化为ext4格式
blkid
#查看分区UUID
#使用UUID更加稳定
mkdir /data
#创建data目录
echo 'UUID="5b2e4d0d-7346-47bc-929b-6daf455f1569" BLOCK_SIZE="4096"/data ext4 defaults 0 0' >> /etc/fstab
echo '/dev/vg01/lv1 /data ext4 defaults 0 0' >> /etc/fstab
#通常使用UUID进行磁盘启动设置
#正常linux重启,断电重启或直接重启,导致磁盘无法自动挂载,需配置磁盘到/etc/fstab文件中实现自动挂载磁盘
mount -a
#全部挂载入
df -Th
#检查是否挂载成功
mkdir /data/share
#创建/share文件
apt install nfs*
#安装nfs工具
echo "/data/share 172.16.100.128/25(rw.sync.root_squash)" >> /etc/exports
#修改/etc/exports文件
systemctl restart nfs——server
#重启nfs服务
apt install nfs-common
#安装nfs控制器
showmount -e 172.16.100.201
#查看挂载在网段下的共享目录
echo "172.16.100.201 :/data/share /data/web nfs defaults 0 0" >> /etc/fatab
#将服务挂载到网段上
因为我通过SSH链接在虚拟机外部链接了Server01,修改了静态IP并不是业务规定的IP地址,通过桥接模式共享主机IP地址,所以一直showmount也没用一直提示连接超时,修改IP地址重新进行挂载
showmount -e 172.16.67.15
#查看挂载在网段下的共享目录
echo "172.16.67.15:/data/share /data/web nfs defaults 0 0" >> /etc/fatab
#将服务挂载到网段上
cat /etc/fstab
#查看配置文件是否写入配置成功
可见最后两行写入了两行配置数据,一个是业务需求的IP地址,另一个是我修改过后的主机IP地址
参数 作用
ro 只读
rw 只写
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用任何用户访问,映射均为服务器匿名用户
sync 同时将数据写入内存和硬盘中,确保不会丢失数据
async 优先将数据保存到内存,然后卸乳硬盘中,效率更高,但可能会丢失数据
安装bind9 apt install bind*
重启网卡 ifup 网卡名称
在named.conf配置文件中添加正反向解析域,编写正反向内容
vim /etc/bind/named.conf
#改写DNS配置文件
新建两个配置文件db.10.168.192,db.skills.com
vim db.10.168.192
vim db.skills.com
#在文件内添加数据
nslookup 域名
#查看配置好的域名
配置Apache(首先也要将ssh配置好)
apt install apache2
#安装apache2服务
openssl genrsa -out server01.key 2048
#生成私钥
openssl req -new -key server01.key -out server01.csr
#生成证书请求
scp -P {对方ssh服务端端口号} server01.csr {对方服务器IP}:/CA
#传送请求到CA服务端
注意:传输过程中两边文件夹权限要一致!
CA服务器端
openssl x509 -req -in server01.csr -CA /CA/cacert.pem -CAkey /CA/private/cakey.pem -CAcreateserial -out server01.crt -days 365
#生成证书
web服务器端
mkdir /data/share/htdocs/skills
#创建web站点文件
echo “This is the front page of sdskills's website.” > /data/share/htdocs/skills/index.html
echo “Staff Information.” > /data/share/htdocs/skills/staff.html
#创建web页面
注意:对文件创建相应权限!
nano /etc/apache2/apache2.conf
#修改apache2主配置文件
#在第162行将Require all的参数改为granted
#在第174行添加web站点文件地址,配置数据同根目录
nano /etc/apache2/site-available/default-ssl-conf
#修改apache2的ssl配置文件
#先不添加ServerName参数,本机测试成功后进行添加
#在第4行添加ServerName 业务需求域名
#在第5行的文件目录改为web站点文件目录地址
#在第32,33行将SSL证书改为创建CA证书的地址目录
ln /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/ssl-default.conf
#添加文件软连接
systemctl restart apache2
#重启服务
a2enmod ssl
#激活ssl站点模块
systemctl restart apache2
#重启服务
在浏览器输入IP访问
nano /etc/apache2/site-available/default-ssl-conf
#修改apache2的ssl配置文件
#在第4行添加ServerName 业务需求域名
#使用域名进行访问
nano /etc/apache2/sites-enabled/000-default.conf
#配置虚拟主机文件
#修改80端口的信息
#在</VirtualHost>前添加443端口的信息
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://www.skills.com
#开启https重定向
创建.htaccess到web站点根目录,添加内容
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://www.sdskills.com
RewriteEngine on
RewriteCond %{SERVER_POST} !^443$
RewriteRule ^(.*?$) https://${SERVER_PORT}/$1 [L,R]
a2enmod rewrite
#启动rewrite模块
a2enmod ssl
#再启动ssl模块
systemctl restart apache2
#重启服务
useradd -G www-data webuser
#创建webuser用户,单独运行apache2
nano /etc/apache2/apache2.conf
#修改apache2.conf配置文件
#添加使用用户,用户组
#第117,118行添加数据
数据库服务
apt install mysql-server
apt install mysql-client
apt-get install lib mysql client-dev
#在线安装
#安装数据库
安装的过程中为“root”用户设置密码
成功安装后自动配置好环境变量,可直接使用mysql命令
1. groupadd mysql#添加mysql用户组
2. mkdir /home/mysql#创建mysql文件夹
3. useradd -g mysql -d /home/mysql mysql#添加使用mysql服务的用户
4. copy mysql离线安装包名字 /usr/local#将mysql离线安装包复制到制定目标目录下
5. tar zxvf mysql离线安装包名字#解压
6. ln -s mysql离线安装包 mysql#建立软连接
7. cd /usr/local/mysql#切换到目标工作路径下
8. chown -R mysql #给用户权限
9. chgrp -R mysql #给用户组权限
10. scripts/mysql_install_db --user=mysql #在mysql目录下执行,注意输出的文字,有修改root密码和启动mysql的命令
11../bin/mysqladmin -u root password 'password'#为root设置密码:
#下载离线压缩包进行安装
MySQL的配置和管理
cp support-files/my-medium.cnf ./my.cnf,vim my.cnf
#修改mysql最大连接数
#增加或修改max_connections=1024
启动mysql
/usr/local/mysql/bin/mysqld_safe --user=mysql &
#本地离线安装开启服务命令
mysqladmin -u root -p version
#查看mysql版本
/etc/init.d/mysql start|stop|restart
#在线安装或二进制安装使用命令
mysqladmin -uroot -ppassw0rd shutdown
#-u -p后不加空格
#停止mysql
启动命令加入/etc/rc.local
#设置mysql自启动
允许root远程登陆:
1)mysql -u root -p
#使用root用户本地登录mysql
改变数据库:use mysql
2)grant all privileges on *.* to root@"%" identified by "口令" with grant option
#所有主机
3)grant all privileges on *.* to root@"IP地址" identified by "口令" with grant option; flush privileges
#指定主机
4)use mysql; select* from user
# 查看host为%的数据是否添加
创建数据库,创建用户
1) create database 数据库名
#创建数据库
2) grant all privileges on 用户名.* to user_test@"%" identified by "口令" with grant option
#创建用户,赋予权限
3)drop database test1
#删除数据库
删除权限
1) revoke all privileges on 用户名.* fromtest1@"%"
2) use mysql
3) delete from user where user="root" and host="%"
4) flush privileges
show databases
#显示所有的数据库
show tables
#显示库中所有的表
远程登录mysql
mysql -h ip -u user -p
设置字符集(utf8为例)
1) show variables like 'character%'
#查看当前的编码
2) 修改my.cnf,在[client]下添加
default-character-set=utf8
3) 在[server]下添加
default-character-set=utf8,init_connect='SET NAMES utf8;'
4) 重启mysql。
修改/etc下的my.cnf,client才能起效,安装目录下只能使server有效。
进制安装的只修改/etc/mysql/my.cnf
旧数据升级到utf8(latin1为例)
1)mysqldump --default-character-set=latin1 -hlocalhost -uroot -B dbname --tables old_table >old.sql
# 导出旧数据
2) iconv -t utf-8 -f gb2312 -c old.sql > new.sql
#转换编码(Linux,UNIX)
#去掉-f,和-f后跟的字符集,让iconv自动判断原来的字符集。
3) mysql -hlocalhost -uroot -p dbname < new.sql
#导入数据:修改new.sql,在插入或修改语句前加"SET NAMES utf8;",并修改所有的gb2312为utf8,保存。
#报max_allowed_packet的错误,因为文件太大,mysql默认的这个参数是1M,修改my.cnf中的值,重启mysql。
支持utf8的客户端
**Mysql-Front**,**Navicat**,**PhpMyAdmin**,**Linux Shell**
(连接后执行`SET NAMES utf8;`可直接读写utf-8格式文件。)
备份和恢复
mysqldump -u root -p -B dbname > dbname.sql
#备份单个数据库
mysqldump -u root -p --all-databases > all.sql
#备份全部数据库
mysqldump -u root -p -B dbname --table tablename > tablename.sql
#备份表
mysql -u root -p < name.sql
#恢复数据库
mysql -u root -p dbname < name.sql (指定数据库)
#恢复表
复制
Mysql支持单向异步复制
#一个服务器做主服务器,其他一个或多个做从服务器。
#复制通过二进制日志实现,主服务器写入,从服务器读取。
#不建议使用多个主服务器。
1). grant replication slave on *.* to'用户名'@'IP地址'identified by '用于复制操作的用户名';
#主服务器上建立一个专门用来做复制的用户:
2). flush tables with read lock;
#刷新所有的表和块写入语句
SHOW MASTER STATUS;
#读取主服务器上的二进制文件名和分支
#将File和Position的值记录。记录后关闭主服务器:
mysqladmin -uroot -ppassw0rd shutdown
如输出为空,说明服务器没有启用二进制日志,在my.cnf文件中[mysqld]下添加log-bin=mysql-bin,重启mysql服务。
3). 为主服务器建立快照(snapshot)
需为主服务器上需要复制的数据库建立快照,Windows可使用zip格式,Linux和Unix使用tar命令。然后上传到从服务器mysql的数据目录,并解压。
cd mysql-data-dir
tar cvzf mysql-snapshot.tar ./mydb
注意:快照中不应包含任何日志文件或*.info文件,只应包含要复制的数据库的数据文件(*.frm和*.opt)文件。
用数据库备份(mysqldump)为从服务器做一次数据恢复,保证数据的一致性。
4). 确认主服务器上my.cnf文件的[mysqld]section包含log-bin选项和server-id,启动主服务器
[mysqld]
log-bin=mysql-bin
server-id=1
5). 停止从服务器,加入server-id,启动从服务器
[mysqld]
server-id=2
注:server-id是从服务器的id,必须与主服务器和其他从服务器不同。
可在从服务器的配置文件中加入read-only选项,从服务器只接受来自主服务器的SQL,确保数据不被其他途经修改。
6). 在从服务器上执行语句,用真值代替选项
change master to MASTER_HOST='主机名', MASTER_USER='主服务器用户名',MASTER_PASSWORD='口令',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=log_position;
7). 启动从线程
mysql> START SLAVE;
停止从线程
stop slave;
注意:主服务器的防火墙要允许3306端口通信
安装phpMyAdmin之前需已经安装了LAMP栈并提供web页面.
apt update && apt install phpmyadmin
#更新软件包列表,获得最新版本和依赖项
#安装phpmyadmin服务
根据设置,phpMyAdmin配置中以下屏幕的顺序可能不同。
提示选择web服务器,按SPACE键选择apache2,按TAB键选择OK按ENTER键,会出现命令行界面,继续安装服务
选择 Yes 并按 ENTER 来安装和配置数据库。
在这里需要设置密码,如果不设置密码将会随即设置一个密码
设置管理员用户密码
选择连接方式
测试phpMyAdmin
通过访问服务器域名或IP地址和 /phpMyAdmin访问phpMyAdmin web界面
http://example.com/phpmyadmin
http://192.168.1.10 phpmyadmin
service apache2 status
#找到需要的域名和IP
第一次安装MySQL时,需要设置root和密码。根用户可能禁用远程登录。 如果遇到访问被拒绝,创建MySQL 用户,如不能以 root 用户登录,为phpMyAdmin创建超级用户。 在终端,以 root 用户身份登录MySQL。可能在第一次安装MySQL时创建了根密码, 或者是无密码登录,这种情况下,可在输入密码时按 ENTER。
mysql -p -u root
#使用root用户进入mysql
CREATE USER '用户名'@'%' IDENTIFIED BY '口令';
#添加一个新MySQL用户。
# % 允许该用户从远程的任何地方登录。
#如果提高安全性,可用允许远程连接的IP地址来代替。
GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'%' WITH GRANT OPTION;
#授予新用户权限
exit
#退出MySQL
使用这个新用户访问phpMyAdmin。
phpMyAdmin设置额外安全性
模糊 phpMyAdmin URL
机器人和攻击者扫描web服务器,寻找默认phpMyAdmin登录页面,建议将URL更改为其他内容
example.com/phpmyadmin 改为 example.com/pmahidden
使用文本编辑器打开Apache的phpMyAdmin配置文件
(可视化文本编辑器 gedit )
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
/phpmyadmin 改为 /pmahidden
#可将其改为任何内容
#重启apache服务,使其生效
可以通过 example.com/pmahidden 访问 phpMyAdmin
使用 .htpasswd 进一步保护 phpMyAdmin 登录页面
增加抵御机器人和黑客的防线
设置.htpasswd,更改phpMyadmin Apache配置文件,允许.htaccess覆盖
vim /etc/apache2/conf-available/phpmyadmin.conf
#编辑配置文件
#在 DirectoryIndex index.php 下添加 AllowOverride All
#重启Apache服务
设置 .htpasswd
gedit /usr/share/phpmyadmin/.htaccess
#在 phpMyAdmin 安装目录中创建新的 .htaccess 文件
AuthType Basic AuthName "Restricted Access" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
#添加内容到 .htaccess
htpasswd -c /etc/phpmyadmin/.htpasswd 用户名
#使用 htpasswd 工具生成 .htpasswd 文件
#创建新用户
#将被要求输入新的密码两次(生成一个密码)。
apt install net-tools
route add default gw 192.168.10.240
#安装net-tools
#添加网关192.168.10.240
FTP(vsftpd)服务安装
apt install ftp*
apt install vsftpd
#安装ftp工具和vsftp服务
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
#备份配置文件
vim /etc/vsftpd.conf
#编辑配置文件
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/data/share/htdocs/skills
#在第31,114,122行更改参数
#在文件末尾添加最后两条配置数据
systemctl restart vsftpd
#重启服务
mkdir /data/share/htdocs/skills -p
#创建ftp根目录
chmod -R 777 /data/share/htdocs/skills
#更改目录权限
useradd -m ftpuser -d /home/ftpuser
#创建ftp用户
passwd ftpuser
#添加用户密码
邮件服务器
**postfix和dovecot**
apt-get install postfix
apt-get install dovecot-core
apt-get install dovecot-imapd dovecot-pop3d
#安装服务
#安装postfix,选择Internet Site
#根据业务需求输入系统邮箱名
postfix基本配置
启用ssl
设置hosts和resolv.conf文件,将域名和dns加入配置文件
172.16.100.201 sdskills.com //hosts
domain sdskills.com //resolv.conf
search sdskills.com
nameserver 172.16.100.201
首先使用scp 将CA证书传输过来 步骤和server01一样
编辑 /etc/postfix/main.cf 文件,做如下更改:
smtpd_tls_cert_file=/CA/mail.pem
smtpd_tls_key_file=/CA/mail.key
smtpd_use_tls=yes
mydestination = sdskills.com
侦听所有网口
inet_interfaces = all
使用 Maildir 格式存放数据 home_mailbox = Maildir/
配置邮箱和信件大小限制
mailbox_size_limit = 2000000000
message_size_limit = 20000000
创建99个用户
for i in $(seq 1 99) ; do useradd -m -s /sbin/nologin user#i; done
for i in $(seq 1 99) ; do echo user$i | passwd --stdin Chinaskill20!; done
重启服务
sudo systemctl restart postfix
dovecot
nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
#ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_cert = </CA/mail.pem
#ssl_key = </etc/dovecot/private/dovecot.key
ssl_key = </CA/mail.key
使用 maildir 格式(与 postfix 格式对应)
mail_location = maildir:~/Maildir
侦听所有默认端口 listen = *
设置安全的远程访问
disable_plaintext_auth = no
重启服务 sudo systemctl restart dovecot
问题 无法发送邮件无法测试 可能配置有问题
配置ssh 和其他服务器配置相同
chrony 时间服务
安装chrony工具 apt install -y chrony
修改配置
mv /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak
nano /etc/chrony/chrony.conf
sever 192.168.10.3 iburst
allow 0.0.0.0/0
local stratum 10
server 服务器ip
allow 允许连接的ip
local stratum 10 连接不到ntp服务器时,用本地时间同步时间
开启ntp同步 timedatectl set-ntp yes
添加定时任务 nano /etc/crontab
*/1 * * * * ntpdate 192.168.10.3
查看连接的chrony服务器 chronyc sources -v
openvpn
安装 apt install -y openvpn
配置教程 https://www.shusite.com/server/2705.html 未证实
默认规则修改为 DROP
执行指令:iptables -nL | grep DROP
放行必要流量
执行指令
iptables -nL INPUT
apt install iptables
#安装iptables命令管理工具
iptables -nL
#查看防火墙的配置信息
iptables -P INPUT/OUTPUT/FORWARD DROP
#设置出入口丢弃流量
iptables -nL | grep DROP
#查看是否配置成功
#注意:iptables不是一个服务而是一个防火墙的命令管理软件
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#放行22端口的tcp流量
#用于ssh链接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#放行80端口的tcp流量
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A INPUT -p udp --dport 67 -j ACCEPT
#放行端口53,123,67的udp流量
iptables -A INPUT -p icmp
#放行icmp流量
安装 isc-dhcp-server
apt install isc-dhcp-server
#安装dhcp服务命令
分配地址,地址池范围: 81.6.63.110-81.6.63.190/24
vim /etc/dhcp/dhcpd.conf
#在dhcp服务配置文件下进行添加地址信息
安装 bind9
apt install bind9
启用 chroot 功能,限制 bind9 在/var/named 下运行,没有运行在/var/named 目录下,本题全部不得分。
配置为 DNS 根域服务器
其他未知域名解析,统一解析为本机 IP
创建正向区域“chinaskills.cn”
类型为 Slave
主服务器为“AppSrv”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。