Interview
关闭防火墙和selinux:
selinux:
getenforce 查看当前selinux的模式
setenforce 0 将selinux模式变为permissive
vim /etc/selinux/config 永久关闭(重启系统后生效)
防火墙:
CentOS6中:
service iptables status
service iptables stop
chkconfig iptables off
CentOS7中:
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
centos6中软件安装三部曲:
1、查看软件包
yum list | grep telnet* xinetd*
2、安装软件包
yum -y install telnet-server xinetd -----安装的是服务端
yum install -y telnet.* --------安装客户端
3、查看软件包的文件列表
rpm -ql xinetd
rpm -ql telnet-server
系统的启动流程:
MBR一共占有512个字节,主要分为三部分:前446个字节是groub1阶段-BootLoader程序即引导程序;中间64个字节是分区表;55AA
grub引导程序将其分为了两段,第一段是就在BootLoader中,而第二段程序在磁盘上,因此,对于grub而言,BootLoader中的程序是grub程序的第一阶段,grub的第一阶段是用来加载grub的第二阶段,grub的第二阶段位于/boot/grub目录下,由第二阶段的程序再去加载内核。
1、加电自检(post):用户按下电源键的同时,在ROM芯片上BIOS程序开始启动
2、BIOS对硬件进行检查,并启动磁盘设备
3、BIOS程序读取磁盘中的MBR的groub1阶段的程序,让groub1阶段能够识别到groub2所在的分区,即boot分区
4、内核空间的初始化:
(1)加载内核文件:
读取到groub2阶段之后,groub2开始加载kernel文件(vmliuz开头文件)
(2)借助initramf虚拟文件系统驱动将内核进行挂载:
由于内核中没有驱动根文件系统所在分区的驱动,因此需要借助lnitramfs(虚拟文件系统),将虚拟文件系统挂载到内核成为根文件系统
(也是就是需要借助虚拟文件系统中的驱动来使得内核找到需要挂载的根分区)
(3)boot分区的驱动会识别虚拟文件系统,使得内核通过只读的方式挂住到boot分区
(4)内核挂载完成,卸载虚拟文件系统
5、启动/sbin/init初始化程序(内核和用户)
6、读取bashell脚本文件,启动登入终端让用户登入
OpenSSL传输过程的加密解密:
加密:
客户端请求了服务端`实现数据的完整、保密、可用` 获得数据的特征码(用来保证数据的完整性)【单向加密】-> 将特征码进行加密(获得特征码很容易进行反解)【私钥加密】(此时数据是裸露的)-> 将数据和加密后的特征码进行加密【对称加密】(此时生成了密码,密码裸露)-> 将密码和对称加密后的全部进行加密【公钥加密】(此时获得客户端的公钥)
解密:
【私钥解密 】(公钥加密存在相应的私钥)->【 对称解密 】(密码)客户端获得密码->【 公钥解密 】-> 【比对特征码】 (md5算法计算出特征码进行比对)-> 获得数据进行浏览器的渲染
DNS解析过程: 递归查询 -> 迭代查询
递归查询:客户端面向本地DNS服务器的一种查询方式
1、网络客户端向本地的DNS服务器发送请求:用户在浏览器上输入域名(www.163.com)
迭代查询:本地DNS服务器代理用户的DNS请求,面向全球的DNS服务器进行的查询
2、在本地的 /host 文件进行查找 3、在主机所在区域的服务器进行查询(缓存区)=>本地的DNS缓存 4、本地的DNS服务器向全球DNS根服务器发送请求 5、根域名服务器返回给本地的host文件一个所查询域的主域名服务器(.com区域) 6、本地的DNS服务器向一级域服务器(.com域服务器)发送请求 7、一级域服务器将查询的结果返回给本地服务器(163.com) 8、本地的DNS服务器向二级域服务器(163.com域服务器)发送请求 9、二级域服务器将查询的IP返回给本地服务器 10、本地服务器将返回的IP返回给客户端同时在本地进行缓存
TCP三次握手与四次断开(重点)
tcp、utp(传输层协议)三次握手和四次断开
TCP-IP协议的卷宗
TCP三次握手:
三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
SYN(synchronous)是TCP/IP建立连接时使用的握手信号。ACK (Acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接受无误。
第一次握手:客户端发送一个TCP的握手信号、确认包(ACK)的请求。【SYN=1,ACK=0】 第二次握手:服务端应答客户端发送的请求。【SYN=1,ACK=1】 第三次握手:客户端再次发送确认包(ACK)。【SYN=0,ACK=1】
TCP的四次断开:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
第一次断开:客户端A发送一个FIN信号,关闭客户端A与服务端B之间的数据传输【FIN=1,ACK=0】 第二次断开:服务端B接收到客户端A的FIN信号,想客户端发送一个ACK的确定信号【FIN=0,ACK=1】 第三次断开:服务端B关闭与客户端A之间的数据传输,发送一个FIN信号给客户端A【FIN=1,ACK=0】 第四次断开:客户端A接收到服务端B发送的FIN信号,向服务端B发送ACK报文确认【FIN=0,ACK=1】
一次完整的httpd的请求:
DNS域名解析+TCP的三次握手
DNS域名解析:
客户端发送请求
递归查询:客户端请求->本地host文件->本地DNS缓存服务器
1、服务端现在本地的host文件中查询是否有该访问需要的IP 2、发现本地的host文件中没有时,查看本地的DNS服务器中是否存在该缓存
迭代查询:
3、第一次迭代: 1)本地的DNS服务器向全球13台中任意一台DNS根服务器发送请求 2)DNS根服务器返回一个一级域 4、第二次迭代: 1)本地的DNS服务器向DNS根服务器返回的一级域服务器发送请求 2)一级域服务器返回一个二级域 5、第三次迭代: 1)本地的DNS服务器向一级域服务器返回的二级域服务器发送请求 2)二级域服务器返回一个三级域 . . . . . . . . . . 直到域服务器能够返回客户端所需要的IP为止 6、将返回的IP在本地的DNS服务器上进行缓存后再返回给客户端
TCP的三次握手:建立TCP/IP虚连接
实现内网主机和外网主机互通(在防火墙基础上):
注意:首先配置中心主机的网络,保证 -> 外网主机的网卡是中心主机的第一张网卡,内网主机的网卡是中心主机的第二张网卡
各主机的ip: 防火墙主机:桥接网卡:172.16.19.128 host-only:192.168.101.10/24 内网主机:host-only:192.168.101.11/24 外网主机:桥接网卡:172.16.19.128
一、配置三台主机的ip:
中心主机(防火墙):
两张网卡:1、桥接网卡enp0s3:172.16.19.128
2、host-only网卡enp0s8:192.168.101.10/24
注意:
(1)保证全局设定中dhcp服务没有开启,且和ipv4的地址一样
(2)在配置ip地址的时候不需要配置getway
(3)设置配置文件(更改名字,没有uuid,没有dns)
内网主机:
一张网卡:host-only网卡enp0s3:192.168.101.11/24
外网主机:
一张网卡:桥接网卡enp0s3:172.16.19.128
二、添加路由,打开核心转发机制
内网主机可以ping同中心主机的两张网卡,外网主机可以ping同中心主机的两张网卡。但是内网主机和外网主机之间不能进行互通。
查看中心主机的核心转发机制 cat /proc/sys/net/ipv4/ip_forward 核心转发 echo 1 > /proc/sys/net/ipv4/ip_forward tcpdump -i enp0s8 抓包工具
在外网主机添加路由:
route add -net 192.168.101.0/24 gateway 172.16.19.128 route -n
实现内网主机和外网主机的互通
搭建网络防火墙:
1、关闭中心主机的forward,中断两个主机之间的联系:
iptables -P FORWARD DROP
2、开启外网主机与内网主机的连通:
iptables -A FORWARD -d 192.168.101.11 -p icmp --icmp-type 8 -j ACCEPT
iptables -A FORWARD -s 192.168.101.11 -p icmp --icmp-type 0 -j ACCEPT
3、开启内网主机与外网主机的连通:
iptables -A FORWARD -d 172.16.19.158 -p icmp --icmp-type 8 -j ACCEPT
iptables -A FORWARD -s 172.16.19.158 -p icmp --icmp-type 0 -j ACCEPT
由于按照以上方法写出来的规则过于繁琐,容易出现冗余,所以使用:
state模块进行优化
-m state --state-ESTABLISHED
1、采用连接追踪机制进行响应报文的优化
**由于报文匹配的最多,因此写在第一个**
iptables -A FORWARD -m state --state-ESTABLISHED -j ACCEPT
2、请求外网主机:
iptables -A FORWARD -d 172.16.19.158 -p icmp --icmp-type 8 -j ACCEPT
响应报文采用连接追踪机制
3、请求内网主机:
iptables -A FORWARD -d 192.168.101.11 -p icmp --icmp-type 8 -j ACCEPT
正向代理(SNAT)和反向代理(DNAT)
实验前提:三台主机可以相互联网
抓包:tcpdump -i enp0s3 -nn icmp
-nn 不让其访问我的服务名
http://z00w00.blog.51cto.com/515114/1031287
正向代理(SNAT)–原地址转换
(一)NAT规则【帮助我们访问互联网】: 1、应用场景:正向代理服务器(有电信、互联网等网络提供商-有公网IP) 2、用于转换原地址 3、使得内网主机可以在公网上路由,原地址IP变成公网IP (二)正向代理的用途: 1、访问原来无法访问的资源 2、帮助用户加速访问服务器 3、可以做缓存,加速访问资源 4、对客户端访问授权,上网进行认证 5、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
1、内网主机ping通外网主机:
ping 172.16.19.158
2、外网主机依靠抓包工具进行分析:
tcpdump -i enp0s3 -nn icmp(用于指明协议)
15:34:23.766261 IP 192.168.101.11 >172.16.19.158: ICMP echo request, id 11532, seq 33, length 15:34:23.766310 IP 172.16.19.158 > 192.168.101.11: ICMP echo reply, id 11532, seq 33, length
3、内网主机访问外网主机(百度或者淘宝的外网服务)
iptables -t nat -A PROSTROUNTING -s 192.168.101.11 -j SNAT --to-source 172.16.19.128
让请求报文经过正向代理服务器之后原地址IP都变成该网段的公网IP,响应报文不需要管,因为SNAT表会自动帮我们进行维护
4、再次进行1、2,此时:
15:52:19.083022 IP 172.16.19.128> 172.16.19.158: ICMP echo request, id 11536, seq 6, length 64 15:52:19.083077 IP 172.16.19.158>172.16.19.128: ICMP echo reply, id 11536, seq 6, length 64
总结:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。(客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。)
反向代理(DNAT)– 目标地址转换
DNAT规则【屏蔽后端的服务器集群】: 1、用于转换目标地址 2、作用于反向代理服务器 3、通过外网请求负载均衡服务器
原理:
1、内网主机相当于百度服务器的集群,日常访问的浏览器只是访问前段的反向代理的服务器(没有httpd服务)。 2、通过访问中心主机(反向代理服务器)进而访问我们内置服务器(含有我们请求的信息)
1、在内网主机上启动httpd的服务器
vi /var/www/html/index.html
2、内网主机被前端的反向代理服务器阻挡,内网IP不可见,因此只能请求公网的IP
iptables -t nat -A PREROUNTNG -d 172.16.19.128 -j DNAT --to-destination 192.168.101.11
3、端口映射:
一般的http的默认端口是80,为了防止黑客的攻击,进行端口更改进而映射: 1、更改web的端口,更改配置文件: /etc/httpd/conf/httpd.conf Listen 8080 2、只能看到前端负载均衡器的IP: iptables -t nat -A PREROUNTING -d 172.16.19.128 -p tcp --dport 80 DNAT --to-destination 192.168.101.11:8080
4、反向代理服务器的功能:
1、保护和隐藏原始资源服务器
2、负载均衡
总结:对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
透明代理(了解)
事例:为了工作效率或者安全,A公司屏蔽了QQ软件的使用。A公司的员工接上了网络,但发现无法使用qq。这就是透明代理捣的鬼。公司在内网和外网的中间插入一个透明代理,这个代理会根据规则抓取请求内容,遇到qq的请求我就把这个请求给屏蔽掉,这样就完成了透明屏蔽。当然了,如果你明白原理,就可以自己搞个正向代理来绕过公司的屏蔽。
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,
加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。