1.课程设计要求
使用eNSP,VMware搭建网络平台,Linux中通过Docker搭建应用管理系统,在eNSP中的主机里可以访问。
2.拓扑图
![](C:\Users\31223\Pictures\Screenshots\屏幕截图 2023-08-10 133154.png)
设备:云,主机(client机)
3.部署过程
实验1:docker搭建wordpress博客平台,实现用ensp的pc能访问。
实验环境:eNSP,vmware的kali linux,docker环境。
实验过程:
1)eNSP和vmware通信拓扑搭建
注意:1.因为我们要用eNSP的pc访问kali搭建的网站,这与应用层相关,故eNSP 的pc用client类型。
2.由于eNSP主机本来与vmware中的虚拟机是无通信的通道的,所以要实现他们之间通信,我们要做一个端口映射(即建立联系,让他们能够互相找到通信的端口来进行通信),所以我们需要一个叫cloud的设备来实现这个功能。
具体过程:
1.配置cloud:选择端口类型,增加一个udp端口,这是内网端口;然后再点 “增加” ,在 “绑定信息” 中选择以太网3(这里我kali子网用的是以太网3),选择端口类型,再增加一个外网端口,即public。好,我们内外网卡都加上去了,然后我们在下边的端口映射设置中,给入端口设置成1,出端口设置成2,勾选中 “双向通道。
2.client主机
这里主机ip设置和kali同一网段,网关一样。
然后http地址处填写kali搭建的网站的地址如ip:port的形式
然后发送包再进行获取
2)kali linux安装docker环境
一。准备:
安装docker要求内核版本kerner>=3.10为此,先检查当前Linux系统的内核版本
uname -a
进入sources.lis重新编辑apt源,
vim /etc/apt/sources.list
如中科大源
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
进行系统或工具的更新
apt-get update && apt-get upgrade && apt-get dist-upgrade
#礼貌性清除更新缓存
apt-get clean
2.apt命令安装docker
#为什么采用apt安装?因为之后采用apt源安装Docker的其他组件时,新组件与已安装的Docker容器最为匹配。
apt-get install docker docker-compose
#或
apt-get install docker.io
3.检验Docker成功安装
#启动docker服务
service docker start
4.docker其他配置
配置阿里云镜像加速
Docker建议配备一个镜像加速器来解决国内用户访问DockerHub缓慢的问题。
#新建daemon.jsp文件
touch /etc/docker/daemon.json
#写入内容
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
#退出daemon.jsp,并重启docker
ESC --> :wq!
systemctl restart docker
#其他公开Docker镜像加速源(不需注册)
https://docker.mirrors.ustc.edu.cn #中科大
http://hub-mirror.c.163.com/ #网易
5.docker开机自启
systemctl enable docker
二。拉取wordpress,mysql镜像,运行容器等
注意:这里wordpress要配置的数据库我们也用docker容器来提供
wordpress
#拉取前可以先查看有哪些相关镜像,选星最多的
docker search wordpress
#拉取
docker pull wordpress
#再查看镜像
docker images
#创建并运行容器
docker run -it --name mywordpress2 -p 9999:80 -d wordpress
解释参数:
-d作用:容器会在后台运行,并输出容器ID
-i作用:即使没有attached,也要保持STDIN打开状态(它的意思是把宿主机标准输入,输出和错误流附加到容器)
通常这么用:通过-i或者-t为-d提供一个伪”tty n“
docker run -i -d images:tags
--name: 容器名
-p: 把80端口映射到宿主机的9999端口
#检查容器运行状态
docker ps 正在运行的容器
docker ps -a 所用容器
mysql5.7
#拉取
docker pull mysql:5.7
#运行container
docker run -it --name=mysql5.7 -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1
解释参数:-e TZ 设置时区
--character-set-server等是数据库的相关配置参数
#检查容器运行状态
docker ps 正在运行的容器
docker ps -a 所用容器
注意细节
配置mysql容器 此时的mysql已经运行起来了,但是需要配置允许外部访问才可使用
#进入容器
docker exec -it mysql5.7 bash
#进入mysql数据库(password是123456)
mysql -u root -p
#设置mysql允许访问(下面是mysql语句,一共3句分开)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
create database wordpress;#创建wordpress数据库
效果如下:
易错(我卡了好久)
再次进入配置页面(http://ip:9999) ,这里数据库主机应当填虚拟主机ip地址:3305,3305为之前设置的数据库服务的端口。不能填localhost相关的,会出错!!!
实验2:docker搭建Hfish系统,。
Hfish(蜜罐系统)作用:用来监测攻击的,支持很多类型的协议。
#拉镜像
docker pull imdevops/hfish
#运行容器
docker run -d --name hfish -p 21:21 -p 22:22 -p 23:23 -p 69:69 -p 3306:3306 -p 5900:5900 -p 6379:6379 -p 8080:8080 -p 8081:8081 -p 8989:8989 -p 9000:9000 -p 9001:9001 -p 9200:9200 -p 11211:11211 --restart=always imdevops/hfish:latest
###参数说明
21 为 FTP 端口
22 为 SSH 端口
23 为 Telnet 端口
3306 为 Mysql 端口
6379 为 Redis 端口
8080 为 暗网 端口
8989 为 插件 端口
9000 为 Web 端口
9001 为 系统管理后台 端口
11211 为 Memcache 端口
69 为 TFTP 端口
5900 为 VNC 端口
8081 为 HTTP代理池 端口
9200 为Elasticsearch端口
注:
可能会遇到 端口占用的问题
运行容器报错
Error response from daemon: driver failed programming external connectivity on endpoint mysql (11c5baee97c46d1f911f0ab48f5ee59b918dd27954102d40177997cba255962f): Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use
解决方案:
1.首先查看机器所使用的端口情况
netstat -tanlp
2.然后杀掉相应的进程
kill PID
1
3.只到不报错,再重新映射就好
按照我的理解一次最好只跑一个web服务比较好 不然端口容易发生冲突。
效果:
总结
下面总结一些易错细节。
一。运行报错删改操作
1, 使用docker 出现Error response from daemon: Conflict. The container name “***” is already in use
解决方法:
way1 给容器换一个名字, 比如说 docker run -it --name=mycentos2 centos:7 /bin/bash, 可以解决问题.
way2 将原来的容器删除
查询当前容器:docker container ls -all
删除当前容器(删除前先停止运行docker stop ewrfdgfdfs(container id)):
再docker container rm mycentos(container ID也可)
如果想要再次使用,使用则docker restart 镜像名
2,run时,端口被占用
先netstat -tnalp 查看运行程序及端口
然后kill 进程号
如kill 2354
二。容器运行参数解析:
使用docker最简单的方式就是docker run了。想要运行什么服务,就run相应的镜像。
以下的内容基于Linux环境
docker run也支持简单的自定义参数,比如这个镜像以什么方式运行,要不要分配网络端口、存储空间之类的。如果要用好docker至少要熟练最简单的参数设置方法。
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用OPTIONS说明:
-d: 后台运行容器,并返回容器ID;
不加这一个默认直接进入容器,之后如果退出则会连着容器一起挂起(暂停运行)。
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
同时使用it之后,你就可以进入到这个容器里面,就像在一台新的Linux主机中了。
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
非常常用,从容器外访问容器内服务的主要方式。
--name="nginx-lb": 为容器指定一个名称;
-m :设置容器使用内存最大值;
-e username="ritchie": 设置环境变量;
--volume , -v: 绑定一个卷
格式为主机目录:容器目录,这条命令也是非常有用的,如果不绑定目录,那么在删除容器的时候,里面的所有数据也一起删除了。但如果使用了挂载卷的话,直接存在宿主机对应文件夹中,下次开启容器还能直接使用。通常用于存一些配置文件、数据什么的。
实例1.
docker run --name mynginx -p 8080:80 -v /data:/data -d nginx:latest
#解析
docker run:启动一个容器。
--name mynginx:将容器命名为mynginx。
-p 8080:80:将容器的 80 端口映射到主机的 8080 端口
-v /data:/data:将主机的目录 /data 映射到容器的 /data
-d:以后台模式启动。
nginx:latest:镜像来源:nginx:latest
实例2.
docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
#解释:
docker run:启动一个容器。
-it:以交互模式启动(进入容器中)
nginx:latest:镜像来源:nginx:latest
/bin/bash:进入容器后要执行的命令,这里是打开终端。
root@b8573233d675:/# :已经进入了容器里面的终端,用户名变化。
实例3.
docker run --name wordpress \
#解析
-e WORDPRESS_DB_HOST=47.97.69.160:3306 \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=a1b2c3 \
-e WORDPRESS_DB_NAME=wordpress \
-p 8080:80 \
-v /root/wordpress/config:/var/www/html \
-d wordpress\
三。Netstat命令详解
Netstat(network statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况
最常用:
netstat -tanlp 列出tcp以及进程名进程号
禁用反向域名解析,加快查询速度
##其他
默认情况下 netstat 会通过反向域名解析查找每个 IP 地址对应的主机名,会降低查找速度。
1. netstat -nat n选项可以禁用此行为,并且用户 ID 和端口号也优先使用数字显示
2. netstat -ntl 只列出监听中的连接 -l选项可以只列出正在监听的连接(不能和 a 选项同时使用)
3. netstat -ntlp 获取进程名、进程号以及用户 ID
-p 选项可以查看进程信息(此时 netstat 应尽量运行在 root 权限之下,否则不能得到运行在 root 权限下的进程名)
4. netstat -r 显示路由信息 使用 -r 选项打印内核路由信息,与 route 命令输出一样。
5 . netstat -i 网络接口信息 -i 选项可以输出网络接口设备的统计信息,结合上 -e 选项,等于 ifconfig 命令的输出
6. netstat -s 获取网络协议的统计信息 -s选项可以输出针对不同网络协议的统计信息,包括 Ip、Icmp、Tcp 和 Udp 等。
四。kali网络配置问题
问题:网址无法解析
解法:
way1:ifconfig后发现无ip等信息,可能为获取到ip,下面办法
dhclient eth0
dhclient命令功能:用于动态主机配置协议
dhclient eth0获取IP地址(在指定网络接口上发出DHCP请求)
way2:dns配置有问题
#编辑dns配置文件
vim /etc/resolv.conf
#解析不出地址说明原来的这个文件有问题修改为下面内容
#修改是即时生效的,下一次解析就会使用配置的dns服务器解析域名
nameserver 8.8.8.8
nameserver 114.114.114.114
##这里要注意!!!
#直接修改该文件的话,会在下一次重启时失效。简单的解决办法,锁定文件
chattr +i /etc/resolv.conf
#如果要修改的话,解锁即可
chattr -i /etc/resolv.conf
#再ping外网应该都可以了