Linux 网络基础
一、知识回顾
网络地址:互联网协议地址(IP地址)为互联网上每一个网络或主机分配一个逻辑地址,IP地址工作在网络层。
IP的分类:IPV4 IPV6
物理地址:物理地址(MAC地址)为每一个设备设置一个固定的地址,MAC地址工作在链路层。
MAC地址:00-23-5A-15-99-42
协议分类:
应用层协议: FTP、HTTP、SMTP、Telnet、DNS等
传输层协议: TCP、UDP等
网络层协议: IP、ICMP、ARP等
数据链路层协议: PPP协议等
物理层协议: 不常用
常见端口:/etc/services #端口配置文件
20/21 ftp服务 文件共享
22 ssh服务 安全远程管理
23 telnet服务 不安全远程管理
25 smtp:简单邮件传输协议 发信
465 smtp(ssl) 发信
110 pop3:邮局协议 收信
143 imap4 收信
993 imap4(ssl) 收信
80 www服务(http://) 网页访问
443 www服务(https://) 加密网页访问
3306 mysql端口 数据库连接端口
53 DNS端口 域名解析端口
67 DHCP(UDP) 服务器端端口
68 DHCP(UDP) 客户端端口
二、常见网络配置
临时配置: 使用命令调整网络参数简单、快速,可直接修改运行中的网络参数一般只适合在调试网络的过程中使用,系统重启以后所做的修改将会失效
固定配置: 通过配置文件修改网络参数修改各项网络参数的配置文件适合对服务器设置固定参数时使用需要重载网络服务或者重启以后才会生效
注意:CentOS 7.x 很多操作都可以通过命令实现永久生效了,减少了手动修改配置文件出现错误的几率。
2.1 iP地址配置
ifconfig:网卡临时配置命令
示例:
ifconfig eth0 192.168.12.150 netmask 255.255.255.0
ifconfig eth0 192.168.12.150/24
ifconfig eth0:0 192.168.12.251/24
#设置永久的子接口(ifcfg-eth0:0)
网卡配置文件:
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #设备名称
NAME=eth0 #网卡名称
BOOTPROTO=static #连接方式(dhcp/static)
ONBOOT=yes #是否开机加载
IPADDR=192.168.12.150 #IP地址
NETMASK=255.255.255.0 #子网掩码(PREFIX=24)
GATEWAY=192.168.12.1 #网关
DNS1=8.8.8.8 #DNS
重启网络服务:
service network restart
启动关闭网卡:
ifup 网卡名
ifdown 网卡名
(ifdown ethN;ifup ethN)
#推荐使用,只针对某一张网卡,而不是整个网络服务
2.2 主机名配置
临时生效:
hostname 主机名
永久生效:
vim /etc/sysconfig/network
注: 区别 /etc/rc.d/rc.sysinit 和 /etc/sysconfig/network
2.3 网关配置
route -n:查看系统中的路由表信息
临时:
网关(常用频次次于配置文件):
添加:route add default gw ip
删除:route del default gw ip
路由记录(静态路由):了解即可,很少使用
添加:route add -net ip_range/netmask gw ip
删除:route del -net ip_range/netmask gw ip
特殊:route add -host ip dev ens33 #通过指定设备;当目标主机是填的这个ip时,使用ens33这个设备
route del -host ip dev ens33
#其中ip_range是网段,比如192.168.42.0,netmask是24,如下图,如果使用此命令添加路由记录是静态路由,因为只能通过192.168.42.2网关去到达192.168.40.0网段(指定网段),不能到达其他网段。并不是一个单纯的网关的概念,而是静态路由
永久(最常用):
网关:/etc/sysconfig/network-scripts/ifcfg-eth0
2.4 DNS配置
配置文件:在相应的配置文件中填写DNS服务器地址
局部(只配置给指定网卡,只针对该网卡生效):
vim /etc/sysconfig/network-scripts/ifcfg-eth0
写入:
DNS1=ip #首选
DNS2=ip #备用
全局:
vim /etc/resolv.conf
写入:nameserver ip #DNS的ip,比如8.8.8.8、114.114.114.114
#nameserver ip 写几个都可以(有几个DNS服务器就可以写几个)
#nameserver叫名称服务器
#在重启服务的时候,会默认自动的将某网卡里配置的首选DNS同步到/etc/resolv.conf里,如果某天想换网卡配置文件里的DNS,或者删除掉的话,要将/etc/resolv.conf文件一起进行操作,否则对于某网卡的配置文件进行的操作不生效;但是这个同步的过程只会出现在第一次配置网卡文件的时候,就是网卡配置文件和/etc/resolv.conf文件都是空的,没有DNS的时候会进行一次,此后的任何操作都不会同步。所以以后要同时检查两个文件是否有DNS
其他配置文件:/etc/hosts #也可以做域名解析,但是只在本机内生效,如果A有某网站的域名解析,但是B没有,如果想让B访问某网站,先让A和B同步,让A把它的hosts文件同步给B
#优先级最高,这里写入了域名解析的话这里先生效,而不是DNS
#作用:提高固定域名ip绑定关系的解析效率,如果该域名固定解析成一个ip,并且上网环境不变的话,可以把该域名的解析ip地址写入该文件,会很快;
测试命令:
nslookup & dig
nslookup www.kernel.com
主机映射文件:/etc/hosts
#用于保存主机名和IP地址的映射记录,但这种映射只是本机的映射,也就是说其映射关系是仅自己可见
主机映射文件和DNS服务器的比较:
默认情况下,系统首先从hosts文件查找解析记录
hosts文件只对当前的主机有效
hosts文件可减少DNS查询过程,提高解析效率
三、网络常用命令
3.1 网络信息查看命令
netstat:查看系统的网络连接状态、路由信息、接口等
常用选项:
-a:显示所有活动连接
-n:以数字形式显示
-t:查看TCP协议相关信息
-u:查看UDP协议相关信息
-p:显示PID和进程名
-l:监听
3.2 网络节点测试命令
Linux中:traceroute:测试从当前主机到目的主机之间经过的网络节点数,用于追踪数据包在网络上传输时的全部路径,它默认发送的数据包大小是40字节,默认使用ICMP协议
WIndows中该命令叫:tracert(用法为:tracert 域名)
常用选项:
-p 使用UDP端口进行测试,默认端口为33434
-q 3 指定测试时发送的数据包个数(即测试次数)
-n 以IP的方式进行连接测试,避开DNS的解析
注意:该命令在使用NAT模式时无法实现效果,测试请切换桥接模式(官方回复BUG)
3.3 网络连通性测试命令
ping:ping使用的也是ICMP协议,所以探测不到相当于ping不到,探测不通相当于ping不通
-i 指定间隔时间
-c 指定ping的次数
-s 指定数据包的大小
3.4 地址解析命令
arp 地址解析协议,将ip地址解析成MAC地址
-a 查看所有
-d ip地址,删除某条ARP记录
3.5 网络探测扫描命令
nmap:网络探测扫描命令 #此命令默认未安装
-sP 探测某网段内有哪些主机是存活的(能ping通)
格式:nmap -sP ip/24(子网掩码)
-sT 探测某主机上开启了哪些TCP端口
格式:nmap -sT ip
-O 探测某主机的操作系统可能性(随着系统安全已无法测试)(9版本的系统中nmap版本为7.9左右,在此高nmap版本中关闭防火墙后可以探测到,也就是说低版本大概率探测不到,高版本才行)(-O选项包含-sT选项的功能)
-sT选项展示:
-O选项展示:
四、远程管理工具
Windows —> Linux: Xshell、SecureCRT等
Linux —> Windwos: rdesktop命令(图形界面)
Linux —> Linux: ssh命令
五、ssh安全远程管理
5.1 不安全的远程连接管理工具:
注意先关闭两边防火墙,Linux和WIndows都要关闭
telnet
安装telnet服务:
yum -y install telnet-server.x86_64
启动telnet服务:
systemctl start telnet.socket
systemctl status telnet.socket
netstat -anpt | grep :23 #查看端口,因为telnet属xinetd.d,而xinetd.d被合并到了systemd里
转到WIndows:
win+r输入cmd
telnet 要连接的机器的ip #没有telnet命令的话去安装,和IIS安装一样
连接成功之后就可以登录,但是不能直接登录root用户,因为telnet不安全,所以不让直接登录root,如果实在想登录root,可以先登录普通用户,然后用su - root 命令登录root用户
两种服务级别:
*.services #启动管理脚本
#绝大多数服务用的都是services,该服务的状态是只要启动,就会一直运行进程,没人用也在跑,只不过进程状态会变成睡眠状态。支持随时都可以连接的,而且连接频率较高的服务,比如apache,所以必须让服务处于长期运行的状态
*.socket #套接字文件,保存了服务的IP和port(端口)
#小部分服务会使用socket,使用socket名称启动的软件或服务,有一个特征,就是只有在有用户连接请求时才工作的模式,只有有用户连接到时候才会创建一个新的进程来处理用户对请求(称这种进程为lazy process,懒进程)
#.socket属于监听进程,根据是否有连接决定是否创建工作进程;正常情况下不工作,工作进程也不创建不产生,有一个监听进程在等待,什么时候接收到请求了,再去创建工作进程,然后去处理请求,处理完了就销毁,那么工作进程中所占用的资源就会被释放,有一些不经常工作的进程就会用这种方式来做。
抓包命令:
tcpdump -i ens33 -nn -X -vv tcp port 23 and ip host 来源ip
5.2 什么是ssh
ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效防止远程管理过程中的信息泄露问题。
ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
5.3 ssh的登录验证模式
ssh 提供了基于账户密码(口令)和密钥对两种登录验证方式,这两者都是通过密文传输数据的。
账户密码验证:
账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。
Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录
格式:
ssh 用户名@IP地址
ssh root@192.168.88.20
windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具
注意:同一台客户端面向多台服务器时加密的方式可能不同,取决于客户端和服务器端进行ssh远程连接时二者都支持的ssh加密协议版本
使用Xshell连接Linux主机,查看加密密码:
cd进入/etc/ssh/目录→ll列出所有子文件子目录→在多个密码文件里找
在Xshell上方点工具→主机秘钥管理者→找到登录的ip→点击查看
密钥对验证:
密钥对:
对称密钥对:
公钥密钥内容相同
非对称密钥对:先生成密钥文件,然后根据密钥文件去生成对应的公钥,二者内容不相同
公钥:锁
密钥:钥匙
5.4 配置ssh服务
5.4.1 环境准备
准备好两台Linux操作系统的主机,配置好相关网络参数,实现可以正常通信,并将主机名修改为不同的名字
临时关闭防护功能:
iptables -F #清空防火墙规则
setenforce 0 #临时关闭SELinux
永久关闭防护功能:
chkconfig iptables off #设置防火墙开机不自启动
sed -i '7s/enforcing/disabled/' /etc/selinux/config #永久关闭SELinux
注意:以上两条永久关闭命令执行后,需要重启服务器才能生效,切记!
5.4.2 用户密码验证
Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录
格式:
ssh 用户名@IP地址
ssh root@192.168.42.137(Linux中可以省略root@)
WIndows远程登录Linux主机一般使用第三方工具,比如Xshell等工具
格式:
ssh root@192.168.88.20(WIndows中必须带上root@)
5.4.3 密钥对验证
Linux主机之间的密钥对登录验证
!
1.客户端生成密钥对文件
ssh-keygen -t rsa -b 2048
-t 指定加密类型(rsa/dsa等)
-b 指定密钥对加密长度
询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下
询问2:是否对密钥文件进行加密
加密:若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件
不加密:若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录
2.将公钥文件上传至服务器端
ssh-copy-id 用户名@服务器IP地址
-i 指定上传的公钥文件位置和名字{不指定时是:id_rsa.pub}
#该用户名和要用来登录服务器的用户名一致
- 客户端尝试登录服务器
ssh 用户名@服务器IP地址
#密钥对验证优先级大于账户密码验证
计算机A:
计算机B:
计算机A:
注意:
1. /etc/ssh/目录下有两个文件很像,/etc/ssh/ssh_config和/etc/ssh/sshd_config,其中sshd_config是服务配置文件,ssh_config是客户端配置文件;也就是说,我连接别人用ssh_config文件,别人连接我,我被连接,用sshd_config文件。
2. known_hosts文件是我要连接别人,别人强制发给我的,在我的本机上保存,而authorized_keys文件是别人要连接我,给我发过来的文件,也在我的本机上保存。其中authorized_keys文件是ssh服务的配置文件,vim /etc/ssh/sshd_config文件查看如下
总结:客户端使用ssh-keygen命令生成id_rsa密钥和id_rsa.pub公钥文件,然后使用ssh-copy-id命令传给服务器,服务器上就会产生一个authorized.key文件,里面存放的是客户端的id_rsa.pub公钥文件,同时客户端本身也会产生一个known.hosts文件,存放的是服务器的公钥文件(该公钥文件的源文件是服务器端的/etc/ssh/ssh_host_ecdsa_key.pub),此时客户端可以免密登录服务器了!如果想让服务器也免密登录客户端,那么就需要在服务器上做同样的操作!
可以只在一台机器A上执行ssh-keygen命令生成密钥对,然后把authorized_keys文件分别传给其余的机器(B、C、D),那么A就可以免密登录B、C、D,可以简化多台主机实现两两免密登录的实验
Windows使用密钥对登录Linux
1.使用Xshell自带的密钥对生成向导生成密钥对(点工具→新建密钥生成向导→按步骤操作即可)
2.将公钥导入Linux主机的指定用户下的指定公钥配置文件内
后面用哪个用户登录就放在谁家里,这里我们先用root用户做实验
在root家目录下,找到 .ssh 目录,没有就创建,然后在里面创建authorized_keys 文件,并且将公钥写入进去
#并且要注意.ssh目录的权限是:700;root和普通用户的.ssh目录 700 和authorized_keys 文件是600权限即可。
然后ctrl + d退出登录,再次登录就可以选择用密钥进行免密登录
使用案例:
先实现终端管理机对后台服务器的免密登录
然后写一个包含所有要管理的ip地址的文件
vim /root/ip.txt
192.168.88.20
192.168.88.30
...
再然后写一个管理脚本
vim tiaoban.sh
for i in $(cat /root/ip.txt)
do
ssh $i '连接到其他主机后要执行的命令'
done
5.4.4 禁止使用密码登录
当我们学会了使用密钥对进行验证后,不建议生产环境下将账户密码登录功能关掉
配置文件:
/etc/ssh/sshd_config
选项:
PasswordAuthentication no
注意:ssh的配置文件中,并不是注释掉的就是不生效的,有些是默认生效,需要修改时一定要取消注释再修改。
5.4.5 禁止使用root远程登录
root在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到root用户,这样可以最大限度的避免因为误操作而对系统造成破坏,同时也可以避免黑客在暴力破解后直接使用root用户登录系统,一般在远程登录管理上我们会禁止直接使用root用户登录
配置文件:
/etc/ssh/sshd_config
选项:
PermitRootLogin no
systemctl restart sshd
注意:做这个实验之前要先创建普通用户并且给普通用户设置密码,否则再也无法登陆!!
5.4.6 修改默认监听端口、监听IP
**修改默认端口:**ssh 作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用TCP的22端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口(范围1-65535)
配置文件:
/etc/ssh/sshd_config
选项:
Port 22222 #将ssh端口改为22222
systemctl restart sshd #重启sshd服务
ssh -p(小) 端口(改后的) 用户名@服务器IP #用改后的端口才能成功远程连接(在Linux中,登录另一台Linux虚拟机)
**修改ssh监听IP:**有些服务器则安全级别更高一些,不允许使用外网直接登录,只有通过局域网才能登录,我们可以在机房里设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可
配置文件:
/etc/ssh/sshd_config
选项:
ListenAddress 192.168.42.131
从WIndows连接实验: