虚拟机-Ubuntu-18.04-docker-CTFd-内网ip

尝试用docker搭建CTFd平台,阅读了多位博主的博客之后来做一个整合以记录,各个博文链接附上,感谢他们的总结
docker手册

详情:
(1)VMware 15 pro
(2)Ubuntu18.04
(3)docker docker-compose
(4)CTFd平台

博文链接:
docker及其工具的安装配置:
https://www.cnblogs.com/codingbit/p/install-docker-in-ubuntu.html
https://blog.csdn.net/valecalida/article/details/99697574
端口的开放以及持久化规则:
https://blog.csdn.net/hqbootstrap1/article/details/94123307
CTFd访问速度慢解决方法:
http://www.ngui.cc/51cto/show-27571.html
CTFd题目库:
https://github.com/susers/Writeups

目录

    • 1.安装Docker
    • 2.安装Docker CE
    • 3.安装Docker-compose
    • 4.使用非root用户管理运行Docker
    • 5.CTFd安装
    • 6.映射ip开放端口(只实现了内网访问)映射端口
    • 7.CTFd平台访问速度慢解决方法
    • 8.关于CTFd题目的上传(待学习更新)

1.安装Docker

1.首先刷新软件包

sudo apt-get update

2.安装必要的软件包

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

3.添加Docker官方GPG key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证指纹是否为9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88,可以通过搜索指纹的后八位来进行,

sudo apt-key fingerprint 0EBFCD88

result:
 pub   rsa4096 2017-02-22 [SCEA]
       9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
 uid           [ unknown] Docker Release (CE deb) .com>
 sub   rsa4096 2017-02-22 [S]

4.使用下面的命令来添加稳定版仓库

sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"

2.安装Docker CE

1.刷新软件包

sudo apt-get update

2.安装最新版的Docker CE和Container

sudo apt-get install docker-ce docker-ce-cli containerd.io

3.通过运行hello-world镜像来验证安装是否成功

sudo docker run hello-word

3.安装Docker-compose

在 Linux 系统,可以通过 Compose repository release page on GitHub 来下载 Docker Compose 二进制文件。

对于 alpine 系统,需要安装以下依赖包: py-pip, python-dev, libffi-dev, openssl-dev,
gcc, libc-dev make

1.运行下面的命令以安装最新稳定版的Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

下载不同的版本只需要更改括号中的版本号即可

2.给文件加上可执行权限

sudo chmod +x /usr/local/bin/docker-compose

注意: 如果安装后执行 docker-compose 失败,请检查 PATH 变量。亦可以建立软连接。

比如:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

1.(可选), 为 bash 和 zsh 安装 command completion 。
2.验证安装是否成功

$ docker-compose --version
docker-compose version 1.24.0, build 1110ad01

4.使用非root用户管理运行Docker

Docker 守护进程绑定在 Unix socket 而不是 TCP 端口。默认情况下 Unix socket 归属于 root 用户,其他用户只能通过 sudo 命令访问。所以 Docker 守护进程总是以 root 用户来运行。

如果你不希望每次运行 docker 命令时在前面加上 sudo,你可以创建一个 docker 用户组并把用户加进去。当 Docker 守护进程启动时,会创建一个 Unix socket 供 docker 用户组成员访问。

警告
docker 用户组成员和 root 用户有相同的权限,请查看 Docker Daemon Attack Surface
以了解更多关于系统安全的影响。

1.创建docker用户组并添加你的用户

sudo groupadd docker

2.添加你的用户到docker用户组

sudo usermod -aG docker $USER

3.重新登录以试权限生效
4.验证是否可以不用sudo命令来运行docker

docker run hello-world

这个命令会下载一个 test 镜像并在容器中运行。运行完成后,会显示欢迎信息并退出。

如果你在把用户加到 docker 用户组之前使用了 sudo 运行过 Docker 命令,可能会遇到下面的错误提示,是因为 ~/.docker/ 权限不对导致的。

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

解决这个问题,可以通过删除 ~/.docker/ 目录(自定义设置会丢失),或者用下面的命令来更改权限。

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

5.CTFd安装

git clone https://github.com/CTFd/CTFd.git && cd CTFd
docker-compose up -d

(ps:该命令的意思是定义和运行多个容器)

3.查看容器

docker-compose ps

结果

    Name                  Command               State            Ports         
-------------------------------------------------------------------------------
ctfd_cache_1   docker-entrypoint.sh redis ...   Up                             
ctfd_ctfd_1    /opt/CTFd/docker-entrypoint.sh   Up       0.0.0.0:8000->8000/tcp
ctfd_db_1      docker-entrypoint.sh mysql ...   Up                             
ctfd_nginx_1   nginx -g daemon off;             Exit 0   

(该命令要在CTFd目录下运行,注意docker和-compose之间没有空格)
这里我是端口映射之后再次运行命令的结果

6.映射ip开放端口(只实现了内网访问)映射端口

1.映射IP

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination IP地址:8000

ps:没有iptables的话按照下方操作安装,命令中的“IP地址”指的是你想访问的IP地址,请更改过后再运行

2.开放端口
根据上一行命令,这里开放8000端口。
没有iptables的话先安装
(1)安装

 $ sudo apt-get install iptables

(2)添加规则

 $ iptables -I INPUT -p tcp --dport 80 -j ACCEPT

其中“80”为想要开放的端口

(3)保存规则

$ iptables-save

完成上述命令我们就完成了开放指定的端口,但是如果此时服务器重启,上述规则就没有了,所以我们需要对规则进行一下持续化操作
(1) 安装iptables-persistent

$ sudo apt-get install iptables-persistent

(2)持久化规则

$ sudo netfilter-persistent save
$ sudo netfilter-persistent reload

进行到这里就可以永久打开我们所需的端口了

7.CTFd平台访问速度慢解决方法

搭建好CTFd平台之后在url框中输入IP地址:8000进行访问,发现速度极其慢,我通过搜索找到了该问题的原因:

CTFd中的代码中引用了国外网站的css,而网站可能是被墙了,不能访问,每次打开页面的时候,都要调用这个CSS,请求失败后,才会加载其它页面.

解决办法:

查看CTFd的源码,发现fonts.dev.css和fonts.min.css引用了此网站的all.css.

fonts.dev.css和fonts.min.css的第一行代码:

@import url(https://use.fontawesome.com/releases/v5.9.0/css/all.css);

先找到这两个文件所在位置

 [root@localhost ~]# find / -name fonts.min.css
[root@localhost ~]# find / -name fonts.dev.css

将文件中的

https://use.fontawesome.com/releases/v5.9.0/css/all.css

替换为

https://cdn.bootcss.com/font-awesome/5.13.0/css/all.css

重启dockers

 sudo systemctl restart docker

再次访问页面,毫秒级加载速度 ,体验爽了.

8.关于CTFd题目的上传(待学习更新)

首先思路是有的
你可以直接上传文件,比如CRYPTO类的题目让答题人下载解密,设定好flag值,这个好说
但是如果是上传需要容器的WEB题的话,那么就需要学会开启镜像,需要会写dockerfile,我现在的水平还是太低,待学习之后再将这一块内容补上

你可能感兴趣的:(搭建)