我搭建了一套企业级私有 Git 服务,抗住了每天上万次攻击!
写在前面
事情是这样的,今年疫情期间,我在某云购买了一套服务器,做什么呢?不是用来部署项目,也不是用来搭建网站,而是用来做代码备份和管理。没错,都是我个人的代码,也许你会说,你个人能有多少代码啊?确实不多,备份的都是我在 GitHub 上开源的个人作品。为何做这个备份管理?原因就是谁 TM 能保证某国哪天不会限制我们使用 GitHub 呢?
>
小伙伴们可以关注【冰河技术】微信公众号,回复【Git】领取 Git 安装包。
部署私有 Git 服务
说干就干,下单,付款一气呵成,接下来就是搭建企业级的私有 Git 服务。搭建完成后,没想到搭建完成后的几天,就被攻击了。额,MD 这个云不安全啊,那换一个云服务?对于我这个有一定渗透经验的人来说,还真不想换,我就想看看能不能抵御这些攻击。于是乎,我仔细分析了这些攻击的套路和规律,一步步完善了自己搭建的私有 Git 服务。目前,每天已经能够抗住上万次攻击了!
在正式介绍如何搭建企业级私有 Git 服务之前,我们先来看看 Git 的四种通信协议。
Git 四种通信协议
简单来说 Git 的四种通信协议分别为:Local、SSH、HTTP、Git,如下所示。
Local(本地协议)
基于本地文件系统或共享(NFS)文件系统进行访问,
优点 : 简单,直接使用了现有的文件权限和网络访问权限,小团队小项目建立一个这样的版本管理系统是非常轻松的一件事。
缺点: 这种协议缺陷就是本身共享文件系统的局限,只能在局域网,而且速度也慢。
适应场景: 小团队,小项目临时搭建版本服务。
本地协议使用方式
(1)从本地 f/git/atals 目录克隆项目
即使是 bare 仓库也可以正常下载
(2)基于 file 协议克隆本地项目
如果在 URL 开头明确的指定 file://,那么 Git 的行为会略有不同。 如果仅是指定路径,Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。 如果指定 file://,Git 会触发平时用于网路传输资料的进程,传输过来的是打包好的文件,更节约硬盘空间。
SSH 协议
Git 支持支持利用 ssh 协议进行通信,这是绝大部分 linux、uninx 系统都支持的,所以利用该协议架设 GIT 版本服务是非常方便的。
优点: 首先 SSH 架设相对简单、其次通过 SSH 访问是安全的、另外 SSH 协议很高效,在传输前也会尽量压缩数据。
缺点: 权限体系不灵活,必须提供操作系统的帐户密码,哪怕是只需要读取版本。
适应场景: 小团队、小项目、临时项目
SSH 协议使用方式
这里我们把 Git 服务先安装到 Linux 系统上,然后才能使用 SSH 协议跟 Git 服务进行通信。
linux 安装 git 服务
(1)安装依赖环境
(2)下载并解压源码
如果大家觉得 GitHub 网速太慢的话,可以关注【冰河技术】微信公众号,回复【Git】领取 Git 安装包。
(3)编译 安装(如果没有权限就加上 sudo)
(4)添加环境变量
如果成功显示版本号表示添加成功
(5)创建一个祼项目
(6)本地基于远程克隆仓库
(7)添加文件
(8)本地添加、提交、并推送至远程
可能的错误:
原因是 ssh 协议下只能访问/usr/bin 下的目录,解决办法如下:
HTTP 协议
Git http 协议实现是依懒 WEB 容器(apache、nginx)及 cgi 组件进行通信交互,并利用 WEB 容器本身权限体系进行授权验证。在 Git 1.6.6 前只支持 http Dumb 协议,该协议只能下载不能提交,通常会配合 ssh 协议一起使用,ssh 分配提交帐号,http dumb 提供只读帐号。1.6.6 之后 git 提供了 git-http-backend 的 CGI 用于实现接收远程推送等功能。
优点: 解决了 local 与 ssh 权限验证单一的问题、可基于 http url 提供匿名服务,从而可以放到公网上去。而 local 与 ssh 是很难做到这一点,必如实现一个类似 github 这样的网站。
缺点: 架设复杂一些需要部署 WEB 服务器,和 https 证书之类的配置
场景: 大型团队、需要对权限精准控制、需要把服务部署到公网上去
HTTP Dumb 配置与使用
(1)创建服务端版本仓库
(2)版本更新钩子,当有版本提交的时候会执行更新
Nginx 静态访问配置
(3)重命名钩子
(4)本地克隆远程服务
注: http Smart 协议 是基于 CGI 配合 GIT git-http-backend 脚本进行使用,配置较复杂,现在一般不会这么去做,而是采用 gitlab 、gogs 之类的 web 管理进行代替。
Git 协议
Git 协议是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。
优点: 目前,Git 协议是 Git 使用的网络传输协议里最快的。 如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。 它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。
缺点: Git 协议缺点是缺乏授权机制。 而且 9418 是一个非标准端口,一般防火墙不会开放。
Git 协议的使用
(1)创建一个空文件,表示开放该项目
(2)启动守护进程
(3)本地克隆远程项目
看到这里,小伙伴们有点累了,来给大家看个妹子,稍后我们继续今天的重点:搭建企业级私有 Git 服务。
、
搭建企业级私有 Git 服务
这里,我们是基于 gogs 搭建的企业级 GIt 服务。
gogs 服务安装
Gogs 是一款开源的轻量级 Git web 服务,其特点是简单易用完档齐全、国际化做的相当不错。其主要功能如下:
提供 Http 与 ssh 两种协议访问源码服务
提供可 WEB 界面可查看修改源码代码
提供较完善的权限管理功能、其中包括组织、团队、个人等仓库权限
提供简单的项目 wiki 功能
提供工单管理与里程碑管理。
下载安装
下载:https://gogs.io/docs/installation 选择 linx amd64 下载安装
文档:https://gogs.io/docs/installation/installfrombinary
安装
解压之后目录:
运行
(1)前台运行
(2)后台运行
默认端口:3000
初次访问 http://<host>:3000 会进到初始化页,进行引导配置。
可选择 mysql 或 sqlite 等数据。这里选的是 sqllite
注:mysql 索引长度的问题没有安装成功,需要用 mysql5.7 以上版本
gogs 基础配置
邮件配置说明:
邮件配置是用于注册时邮件确认,和找回密码时候的验证邮件发送。其配置分为两步:
(1)创建一个开通了 smtp 服务的邮箱帐号,一般用公司管理员邮箱。我这里用的是 QQ 邮箱。
(2)在{gogs_home/custom/conf/app.ini 文件中配置。
QQ 邮箱开通 smtp 服务
(1)点击设置
(2)开启 smtp
邮件设置
设置文件:{gogs_home}/custom/conf/app.ini
可以看到,我们配置的主要信息如下所示。
ENABLED :是否启用邮件服务,true 表示启用邮件服务。
host 为 smtp 服务器地址,(需要对应邮箱开通 smtp 服务 且必须为 ssl 的形式访问)
from 发送人名称地址
user 发送帐号
passwd 开通 smtp 帐户时会有对应的授权码
重启后可直接测试,小伙伴们可以按照如下顺序进行测试。
管理员登录==》控制面版==》应用配置管理==》邮件配置==》发送测试邮件 gogs 定时备份与恢复
备份与恢复:
(1)查看备份相关参数
(2)默认备份,备份在当前目录
(3)参数化备份 --target 输出目录 --database-only 只备份 db
(4)恢复。执行该命令前要先删除 custom.bak
(5)自动备份脚本
(6)执行备份命令
(7)查找并删除 7 天前的备份
(8)添加定时任务 每天 4:00 执行备份
打开任务编辑器
输入如下命令 00 04 * 每天凌晨 4 点执行 do-backup.sh 并输出日志至 #backup.log
配置与添加客户端公钥
Git 配置
Git 安装完之后,需做最后一步配置。打开 git bash,分别执行以下两句命令
Git 自动记住用户和密码操作
SSH 公钥创建
(1)打开 git bash
(2)执行生成公钥和私钥的命令:ssh-keygen -t rsa 并按回车 3 下
(3)执行查看公钥的命令:cat ~/.ssh/id_rsa.pub
(4)拷贝 idrsa.pub 内容至服务器~/.ssh/authorizedkeys 中
重磅福利
微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核 PDF 技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
另外,我开源的各个 PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!!
写在最后
如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!
版权声明: 本文为 InfoQ 作者【冰河】的原创文章。
原文链接:【http://xie.infoq.cn/article/50c79b88474e673e4bf918d66】。文章转载请联系作者。
评论 (4 条评论)