#linux ssh 安全配置
Explore tagged Tumblr posts
Text
免费云服务器:全面指南与最佳选择

什么是免费云服务器?
免费云服务器是指云计算服务提供商为用户提供的无需付费即可使用的虚拟服务器资源。这些服务器通常具备基础的计算、存储和网络功能,适用于开发测试、学习或个人项目。与付费云服务器相比,免费云服务器在性能和资源上可能有所限制,但对于初学者和小型项目来说,仍然是一个极具吸引力的选择。
为什么选择免费云服务器?
零成本入门云计算
对于刚接触云计算的新手来说,免费云服务器提供了一个零成本的学习环境,无需担心初期投入。
适合开发和测试
开发者可以使用免费云服务器搭建测试环境,运行小型应用,验证代码的可行性。
个人项目托管
如果你有一个博客、小型网站或私人项目,免费云服务器可以满足基本托管需求。
体验不同云平台
许多云服务商提供免费试用,用户可以通过免费云服务器体验不同平台的功能和服务质量。
主流免费云服务器提供商
1. AWS Free Tier(亚马逊云免费套餐)
AWS(Amazon Web Services)提供12个月的免费云服务器(EC2),包括每月750小时的t2.micro实例使用时间。适合长期学习和轻度使用。
优点:
全球覆盖,稳定性高
丰富的云服务生态
缺点:
超出免费额度后可能产生费用
对新手来说管理界面较复杂
2. Google Cloud Free Tier(谷歌云免费套餐)
Google Cloud 提供$300的免费试用额度,可用于免费云服务器(Compute Engine),有效期为90天。
优点:
高性能计算资源
支持多种操作系统
缺点:
试用期较短
需要绑定信用卡
3. Microsoft Azure Free Account(微软云免费账户)
Azure 提供12个月的免费云服务器(B1S Burstable VM),以及$200的免费额度,适用于新用户。
优点:
适合Windows用户
与微软生态无缝集成
缺点:
免费资源较少
部分高级功能需付费
4. Oracle Cloud Free Tier(甲骨文云免费套餐)
Oracle Cloud 提供永久免费的免费云服务器(2个AMD实例 + 4个ARM核心),存储和带宽也有免费额度。
优点:
永久免费,无时间限制
性能较强,适合长期项目
缺点:
注册审核较严格
部分区域资源有限
5. Alibaba Cloud Free Trial(阿里云免费试用)
阿里云提供1个月的免费云服务器(ECS),适合国内用户使用。
优点:
国内访问速度快
中文支持友好
缺点:
试用期较短
国际用户可能受限
如何选择适合自己的免费云服务器?
根据使用时长选择
如果需要长期免费,Oracle Cloud 和 AWS Free Tier(12个月)是不错的选择。
如果只是短期测试,Google Cloud 或 Azure 的试用额度可能更合适。
根据地理位置选择
国内用户优先考虑阿里云或腾讯云(部分免费资源)。
国际用户可以选择AWS、Google Cloud或Oracle Cloud。
根据技术需求选择
如果需要运行Linux服务器,AWS EC2 或 Oracle Cloud 是理想选择。
如果需要Windows服务器,Azure 更合适。
免费云服务器的限制与注意事项
资源限制
免费云服务器通常只提供1核CPU、1GB内存或更低的配置,不适合高负载应用。
流量和存储限制
大多数免费套餐对带宽和存储有严格限制,超出后可能产生费用。
账户审核与信用卡绑定
部分云服务商(如Google Cloud、Oracle Cloud)要求绑定信用卡,需注意避免意外扣费。
数据安全
免费服务通常不提供高级备份和防护功能,重要数据建议自行备份。
如何最大化利用免费云服务器?
搭建个人网站或博客
使用WordPress、Hexo等工具在免费云服务器上搭建个人博客。
运行开发环境
部署Docker、Node.js、Python等开发环境,进行代码测试。
学习Linux和服务器管理
通过SSH连接免费云服务器,学习Linux命令和服务器运维。
搭建私有云存储
使用NextCloud或OwnCloud搭建私人云盘。
运行自动化脚本
利用免费云服务器运行Python爬虫、定时任务等自动化程序。
结论
免费云服务器是进入云计算世界的绝佳入口,无论是学习、开发还是托管小型项目,都能提供实用的资源。不同云服务商的免费套餐各有优劣,用户应根据自身需求选择最合适的方案。合理利用免费云服务器,不仅能节省成本,还能提升技术能力,为未来的云计算应用打下坚实基础。
1 note
·
View note
Text
免费云服务器:如何获取并充分利用

在当今数字化时代,云计算已成为企业和个人用户的重要工具。无论是搭建网站、运行应用程序,还是进行数据存储和分析,免费云服务器 提供了低成本甚至零成本的解决方案。本文将详细介绍如何获取 免费云服务器,并充分利用其功能。
1. 什么是免费云服务器?
免费云服务器 是指云服务提供商允许用户在一定期限内或特定条件下免费使用的虚拟服务器。这些服务器通常具备基础的计算、存储和网络资源,适合开发测试、学习或个人项目使用。
免费云服务器的特点
零成本:无需支付费用即可使用。
有限资源:通常提供较低的CPU、内存和存储配置。
时间限制:部分服务仅提供短期免费试用(如30天)。
适合场景:适用于个人开发者、学生、初创企业等。
2. 如何获取免费云服务器?
目前,多家知名云服务商提供 免费云服务器,以下是几种常见的获取方式:
(1)AWS Free Tier(亚马逊云免费套餐)
免费时长:12个月
资源限制:1核CPU、1GB内存、30GB存储
适用对象:开发者、初创企业
注册方式:访问AWS官网注册并验证信用卡(不会扣费)。
(2)Google Cloud Free Tier(谷歌云免费套餐)
免费额度:$300 免费试用金(90天内有效)
资源限制:1个f1-micro实例(1vCPU+0.6GB内存)
适用对象:需要高性能计算的企业用户
(3)Microsoft Azure Free Account(微软云免费账户)
免费额度:$200 试用金(30天有效)
长期免费服务:部分基础服务永久免费
适用对象:企业用户、开发者
(4)Oracle Cloud Free Tier(甲骨文云免费套餐)
永久免费资源:2个AMD实例(1核CPU+1GB内存)
额外福利:免费10TB每月出站流量
适用对象:个人开发者、小型项目
(5)国内云服务商免费试用
阿里云:提供1个月免费ECS试用
腾讯云:新用户可领取1个月免费云服务器
华为云:部分资源可免费使用
3. 免费云服务器的常见用途
(1)搭建个人网站或博客
使用 免费云服务器 可以轻松部署WordPress、Hexo等博客系统,无需购买独立主机。
(2)开发测试环境
开发者可以在 免费云服务器 上搭建测试环境,运行Python、Node.js、Java等应用程序。
(3)运行小型数据库
适用于MySQL、MongoDB等数据库的测试和学习。
(4)搭建VPN或代理服务器
部分用户利用 免费云服务器 搭建私人VPN,提高网络访问安全性。
(5)自动化脚本运行
可用于定时爬虫、数据备份、自动化任务等场景。
4. 免费云服务器的优缺点分析
优点
✅ 零成本:适合预算有限的用户。
✅ 弹性扩展:部分服务允许升级付费套餐。
✅ 全球部署:可选择不同地区的服务器,优化访问速度。
缺点
❌ 资源有限:不适合高流量或高性能需求的应用。
❌ 时间限制:部分免费服务仅短期有效。
❌ 可能需绑定信用卡:部分平台要求验证支付方式。
5. 如何优化免费云服务器的性能?
(1)选择轻量级操作系统
如Alpine Linux、Ubuntu Server等,减少资源占用。
(2)使用缓存技术
如Redis、Memcached,提高数据读取速度。
(3)优化代码和数据库
避免冗余查询,使用索引优化数据库性能。
(4)启用CDN加速
通过Cloudflare等免费CDN提升网站访问速度。
(5)定期监控资源使用
使用工具如Grafana、Prometheus监控服务器负载。
6. 免费云服务器的安全注意事项
(1)设置强密码和SSH密钥
避免使用默认密码,防止暴力破解。
(2)定期更新系统和软件
及时安装安全补丁,防止漏洞攻击。
(3)配置防火墙规则
仅开放必要的端口(如80、443)。
(4)备份重要数据
避免因服务器故障导致数据丢失。
7. 免费云服务器 vs. 付费云服务器:如何选择?
对比项免费云服务器付费云服务器成本完全免费按需付费性能低配置高配置,可扩展稳定性可能受限高可用性技术支持有限或社区支持专业客服支持
选择建议:
短期项目/学习 → 免费云服务器
企业级应用/高流量网站 → 付费云服务器
8. 结论
免费云服务器 为开发者、学生和小型企业提供了低成本的计算资源,是学习云计算和部署轻量级应用的理想选择。尽管存在资源限制,但通过合理优化和安全配置,仍能发挥重要作用。
如果你正在寻找 免费云服务器,建议从AWS、Google Cloud、Oracle Cloud等平台入手,并根据需求选择最适合的方案。希望本文能帮助你充分利用 免费云服务器,实现高效、低成本的云端部署!
1 note
·
View note
Text
免费云服务器:全面指南与实用推荐

什么是免费云服务器?
免费云服务器是指云服务提供商为用户提供的无需付费或在一定期限内免费的云计算资源。这些资源通常包括虚拟服务器(VPS)、存储空间、带宽和计算能力,适用于个人开发者、初创企业或学习用途。
免费云服务器的优势
零成本体验云计算:无需投入资金即可试用云服务,适合预算有限的用户。
学习与测试环境:开发者可以在免费云服务器上搭建网站、运行代码或测试应用程序。
短期项目支持:适用于短期项目或临时需求,避免长期租用服务器的成本。
灵活扩展:部分免费方案支持升级到付费套餐,满足业务增长需求。
主流免费云服务器推荐
1. AWS Free Tier(亚马逊云免费套餐)
亚马逊AWS提供12个月的免费云服务器资源,包括:
750小时/月的EC2(t2.micro实例)
5GB对象存储(S3)
数据库服务(RDS)免费试用
适用场景:企业级应用测试、长期项目开发。
2. Google Cloud Free Tier(谷歌云免费套餐)
Google Cloud提供$300的免费额度,90天内有效,适用于:
1个f1-micro实例(每月免费750小时)
5GB标准存储
无服务器计算资源
适用场景:AI/ML实验、大数据分析、短期项目部署。
3. Microsoft Azure Free Account(微软云免费账户)
Azure新用户可享受:
$200免费额度(30天有效)
12个月免费服务(包括750小时B1S虚拟机)
5GB Blob存储
适用场景:Windows应用开发、企业级云解决方案测试。
4. Oracle Cloud Free Tier(甲骨文云免费套餐)
Oracle提供永久免费的云资源:
2台AMD虚拟机(1GB内存)
4个ARM核心(24GB内存)
10GB对象存储
适用场景:高性能计算、数据库应用。
5. 腾讯云/阿里云免费试用
国内用户可选择:
腾讯云:新用户可免费试用1个月轻量服务器(2核4G)。
阿里云:提供1个月ECS免费试用(2核4G)。
适用场景:国内业务部署、小程序/网站托管。
如何选择适合的免费云服务器?
1. 根据需求匹配资源
个人学习:选择永久免费方案(如Oracle Cloud)。
短期项目:利用AWS或Google Cloud的免费额度。
国内业务:优先考虑腾讯云或阿里云。
2. 注意限制条件
时间限制:部分免费套餐仅限12个月或短期试用。
性能限制:免费实例通常配置较低(如1核1GB内存)。
流量限制:超出免费额度可能产生费用。
3. 安全性考量
确保服务商提供基础安全防护(如防火墙、DDoS防护)。
避免在免费云服务器上存储敏感数据。
免费云服务器的常见用途
1. 搭建个人网站或博客
使用WordPress、Hexo等工具在免费云服务器上部署网站,适合技术爱好者练手。
2. 运行开发测试环境
开发者可搭建MySQL、Redis、Docker等环境,测试代码兼容性。
3. 学习Linux与运维技能
通过SSH连接免费VPS,练习Linux命令、Shell脚本和服务器管理。
4. 部署小型应用或API
运行Python Flask、Node.js等轻量级应用,作为后端服务测试。
免费云服务器的潜在风险
1. 服务突然终止
部分免费方案可能随时调整政策,导致服务中断。
2. 性能不足
免费实例通常配置较低,高负载应用可能出现卡顿。
3. 隐藏费用
超出免费额度后可能自动扣费,需密切关注用量。
结论
免费云服务器是入门云计算的高效途径,适合开发者、学生和小型企业。合理利用AWS、Google Cloud、Oracle等免费资源,可降低学习与实验成本。但需注意限制条件,避免意外收费。对于长期需求,建议在免费试用后升级到付费方案以获得更稳定的服务。
1 note
·
View note
Text
蜘蛛池搭建需要哪些服务器配置?
在互联网技术领域,蜘蛛池(Spider Pool)是一种用于提高网站收录和优化搜索引擎排名的技术手段。它通过模拟大量用户访问来提升网站的活跃度,从而吸引搜索引擎蜘蛛更频繁地抓取页面内容。那么,要搭建一个有效的蜘蛛池,我们需要哪些服务器配置呢?下面将详细介绍。
1. 服务器类型选择
首先,你需要选择合适的服务器类型。对于蜘蛛池来说,云服务器是一个不错的选择,因为它可以根据需求灵活调整资源,同时具备较高的稳定性和安全性。此外,考虑到蜘蛛池可能需要处理大量的并发请求,建议选择高配的云服务器,以确保性能。
2. CPU与内存配置
CPU和内存是服务器性能的关键因素。蜘蛛池运行时会消耗大量的计算资源,因此建议至少选择4核8G的配置。如果预算允许,可以考虑更高的配置,如8核16G,以应对更大的流量和更复杂的任务。
3. 网络带宽
网络带宽直接影响到蜘蛛池的响应速度和稳定性。建议选择较高带宽的服务器,例如10M或更高,以保证数据传输的顺畅。同时,为了降低延迟,可以选择靠近目标网站数据中心的服务器位置。
4. 存储空间
存储空间主要用于存放程序文件、日志文件等。虽然蜘蛛池本身对存储空间的需求不大,但考虑到日志文件可能会占用一定空间,建议至少选择50GB以上的硬盘空间。
5. 操作系统
操作系统的选择也非常重要。通常情况下,Linux系统因其良好的稳定性和开源特性而被广泛使用。你可以选择Ubuntu、CentOS等常见的Linux发行版。
6. 安全性
最后,不要忽视服务器的安全性。建议安装防火墙、定期更新系统补丁,并使用安全的登录方式(如SSH密钥认证)。此外,备份数据也是一个重要的环节,以防万一。
结语
以上就是搭建蜘蛛池所需的主要服务器配置。当然,具体配置还需要根据你的实际需求进行调整。希望这篇文章能对你有所帮助。你是否已经准备好开始搭建自己的蜘蛛池了呢?欢迎在评论区分享你的想法和经验!
加飞机@yuantou2048
ETPU Machine
币圈推广
0 notes
Text
CentOS 7 - SSH 安全性設定 (Secure Shell protocol) (內容更新 - 2020/03/02)
CentOS 7 – SSH 安全性設定 (Secure Shell protocol) (內容更新 – 2020/03/02)
心得:
安裝好 CentOS 7,可以先行修改 SSH 設定,達到系統安全的第一步
個人認為比較重要且通用的設定
禁止 root 遠端登入
演算法限定
限制使用帳號與來源 IP
關於 CentOS 7 安裝的步驟可以參考:
安裝CentOS 7
設定:
編輯位於/etc/ssh下的檔案,sshd_config
# vim /etc/ssh/sshd_config
Port 22 說明:SSH 使用的 Port number,預設使用 22 Protocol 2 說明:強制使用 SSH Version 2 LoginGraceTime 1m 說明:連線未動作斷線時間 PermitRootLogin no 說明:root 是否可以遠端 ssh 登入,建議關閉 MaxAuthTries 2 說明:ssh…
View On WordPress
0 notes
Text
在阿里云服务器上该如何搭建网站
如果您需要在在云服务器上搭建网站,该如何操作呢?众所周知,阿里云服务器不仅高效稳定而且灵活扩展,所以,现在越来越多眼光独到寻求效率的企业或站长选择用阿里云服务器搭建网站。

在部署网站的时候您需要注意的是,防火墙是否有做一些限制,如80端口是否开启;服务器是否做了一些阻止外部访问网站的安全策略;域名解析正确,是否绑定了相应域名;相关网站环境是否配置正确等。这些问题,小编在这里将为您一一解答。
一)域名的注册
首先,我们来说下作为网站的标识的域名,这是必不可少且极其重要的,我们要注册域名可以到西部数码网站找到“域名注册”页面进行注册,如果需要指导具体的注册流程,在网站上就能查看,在注册时仔细看并且跟着操作就可以了。
二)服务器和备案
如果您已经有阿里云服务器,那么,现在要做的工作就是开始进行备案了,如果还没有的话,可以在西部数码购买。在西部数码的用户可根据自身不同的需求,自由选择云主机内存、数据盘、CPU、带宽等配置,升级方便。
工信部规定,在我们使用国内的服务器建设网站是必须要需要备案的,这个是和其他外贸网站比较不一样的一点。而且需要备案成功后才能开通使用网站。很多着手建设网站的会担心审核不通过,或者时间过长,一般情况下,合理合法的网站都能给予审核通过,而网站备案审核时间大概半个月,相对来说,时间不算短,需要的话,建议提前进行,避免影响网站上线。
三)创建站点,上传程序
这一步说起来也不困难,只要按照步骤操作就可以了。
Windows系统可使用mstsc进行远程连接管理服务器;Linux系统可登陆wdcp面板远程管理服务器;也可以使用ssh工具进行远程管理。
Windows主机可使用西部数码的网站管理助手创建站点。Linux服务器可使用西部数码预装的wdcp系统创建站点。通过FTP上传软件连接服务器,将网站页面文件上传。
四)域名绑定解析
这是离网站正式上线的最后一步-域名绑定解析。如果想要让别人进入你的网站页面访问你的网站,需要进行域名绑定解析,把域名解析到阿里云主机。这一步相对直观简单,只需要在域名管理面板,添加域名解析记录。或根据添加白名单时的提示解析就可以了。解析完成后,记得要检查网站是否能访问,如果不行,可能是当中有操作错误��地方,重新绑定解析就可以了。

买云服务器的话,推荐阿里云服务器,性价比高,比较稳定。购买前,先领取一下阿里云代金券。那么,购买了阿里云服务器后,怎么管理呢?阿里云服务器管理很简单,在云服务器管理后台,就可以直接管理了。
阿里云服务器推出阿里云独享虚拟主机经济版,这是一款便宜好用的虚拟主机,而且简单易用,一年只需要298元(和共享型虚拟主机价格一样,类似配置云服务器ECS价格为700元左右)。该型虚拟主机(也叫轻云服务器)由阿里云官方专家预设站点运行环境,独享服务器资源,独占IP地址;不存在资源争抢导致的运行不稳定的情况。
如果还需要了解更多有关阿里云服务器的相关咨询,可以浏览https://www.aliyun.net.cn/
1 note
·
View note
Text
如何通过SSH远程登录VPS服务器
我们知道VPS服务器就相当于一台电脑,不过这台电脑不在你身边。要想使用VPS主机,就需要建立远程连接登录。最常用的还是SSH协议。
SSH是一种网络协议,用于计算机之间的加密登录。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
简单步骤如下:
获取VPS登录信息:通常包括IP地址、用户名、密码和SSH端口
下载SSH登录软件:最常用的是Xshell软件
在XShell上面输入登录信息,连接即可。
以上就是通过Xhell客户端,远程连接登录VPS服务器的教程。
0 notes
Text
【V2Ray多用户管理一键脚本】V2Ray-UI多用户��板的搭建图文教程
随着近期SS/SSR等协议越来越容易被识别,不少人都转战到了v2ray和Trojan等协议进行科学上网,关于这两者的安装使用教程在前面都有提过,这里再来个适合管理多用户的v2ray-ui面板一键脚本,支持多用户多协议,浏览器可视化操作,无需敲命令。
本篇文章为v2ray服务端搭建教程,需在VPS或服务器上部署(没有VPS服务器可以在本站找一款适合的服务器使用),基于centos7系统,脚本支持centos7+、Ubuntu 16+、Debian 8+等Linux系统。
1、通过SSH工具连接上服务器后,执行下列命令��
bash <(curl -Ls https://blog.sprov.xyz/v2-ui.sh)
2、安装好后在本地电脑的浏览器输入:你的服务器IP:65432,打开面板,默认账户密码:admin (注意:防火墙需开放65432端口,Linux防火墙使用看前面教程)
3、打开面板后,有很多功能,面板的作者也提供了不少教程,可以自行体验,这里我们新增个用户账号,选择账号列表,点击+号新增;
4、点击后可以看到多条设置,备注昵称随意,协议根据自己需求可选5种,我们这里默认即可,监听IP本地默认即可,端口自定义建议10000-60000之间,传输协议配置可选5种,默认TCP可根据自己需求设置,其它根据自己需求设置如无必要默认即可,然后添加;(注意:服务器的安全组和防火墙需放行相应端口,否则会导致无网络连接)
5、最后使用v2ray客户端连接就可以愉快的科学上网了,面板支持添加不同用户,可启用禁用账户,功能自行体验即可,似乎不能限制用户的下载速度和总流量,只能重置流量,颇有点鸡肋,不过因为可视化的面板和可监控系统使用情况这点可以给个好评!
6、总的来说v2ray-ui面板适合个人单服务器新增添加不同端口多用户使用,且脚本集成秋水大神的BBR加速一键脚本,命令行输入v2-ui可进入到管理菜单,
0 notes
Text
# Gallery
Raphael’s Ticket of A Big Hug
# 南航大的信息化进度喜人
南京航空航天大学的信息化进度好快!我之前做的两个小工具都已经给更新得deprecated 了。[Facepalm]
補充:南航大網盤也上線了,Try!!
https://pan.nuaa.edu.cn
# 树莓派日记
我喜欢玩耍树莓派。
2019年12月16日
回顾了一下Python 和SPI编程(不相干)。我想用SPI 协议,启动我的微雪电子墨水屏幕,可惜失败了(协议很复杂)。重新找出来了树莓派,发现什么东西都很好。I/O的文档齐全,一看就懂的感觉真棒!
Python (派松)的module与module之间耦合太严重啦,调了半天都没有调出来。
2019年12月19日
我今天早上学习了一下Docker,这是一种集装箱式的程序配置方式。我在树莓派上安装了Docker,运行了最常见的Alpine Linux Shell。
5 things about Docker on Raspberry Pi https://blog.alexellis.io/5-things-docker-rpi/
Get Started with Docker 1.12 on Raspberry Pi https://blog.alexellis.io/getting-started-with-docker-on-raspberry-pi/
但是配置起来并不简单,Docker 的文档很复杂,而且商用的比较多。我想要的只是一个ssserver,得要自己摸石头过河。我主要遇到的困难是不熟悉Docker的配置参数,也不了解别人封装好的Docker里是什么东西。要克服这些困难,只要不断摸索就可以了;但是我觉得投入这些时间去做摩擦自己不值得。仔细想了一下,其实去布置这些设备的创新性是有限的,不值得去投入。
但是我并不甘心自己的小网络工程就此夭折。我回想起初中时候在Google App Engine 上布置GoAgent 的玩儿法,检索GoAgent 的时候忽然想起,平时用来访问终端的SSH,其实就是一个很好的代理通道。当年,在国家防火墙羽翼未满的时候,也是经典的Tunnel建立方式!现在人迹罕至,主要是因为它是有状态的链接,且它的特性是显著的,很容易被阻断。但是对于我的内网环境,没有中间的国家机器工商局作梗,用SSH来实现简单可行。
像这样:
ssh -N -D 127.0.0.1:8388 [email protected] -v
就可以了;127.0.0.1:8388是在本地创建的SOCKS5代理接口; [email protected] 是树莓派的用户名和地址。“-v”是让SSH 处于啰嗦模式,调试结束后就可以去掉。
https://mpharrigan.com/2016/05/17/background-ssh.html
图1 网路的结构;RPi: 树莓派,PC: 个人计算机
图1就是最终实现的网络结构。它的创新型主要在于使用了Zerotier One做了一个基于软件定义的局域网。这个局域网以广域网的链接为底层,创建了一个包括了在校园网内的树莓派和在校园网外的作为客户端的个人计算机的局域网。Zerotier One在每台计算机上都创建了一个TAP,来模拟一组连接在一起的局域网。其次,这个项目还使用了SSH来做数据的通道,实现起来很简单。
这个项目的创新性非常微不足道,主要的优势在于实用性,工程方面摸索的工作量太大;建议到此为止。
# 今天遇到了恼人的事情
现在的我焦躁得很。
我遇到了让人不愉快的沟通障碍。我在和同僚分享美食的时候,发现我朋友的行动电话上对我的昵称标记弄错了;本来是“致敬”的“致”字,被常规性地错误写成了“志向”的“志”。
这种对我名字的错误标识并不少见,因为考虑到姓名总出于美好的祝愿,里面的“致”被当成“志向”或者“智慧”,“之”被当做“知识”的“知”的情况实在太正常了。对于这种小小的错误,我总是提醒,毕竟我并不想让别人误会其中的含义,也不想让别人觉得,“啊,这个人的爹地妈咪怎么这么土,哈哈”。
但当我提醒这个小小错误的时候,我的同僚,出乎我预料地置若罔闻。
“只是对我来说好记住一些,”我的朋友说。
# 规避Windows 系统的长路径限制
受到Windows 系统限制���MATLAB 在读取名称太长的路径下的文件时候(超过260个字符),会出无法读取错误。
这时候可以用subst 命令把这个很长的文件夹映射成一个盘符来规避这个问题。
例如:
subst K: f:\Source_Folder
就是将“f:\Source_Folder”映射成驱动器K,这样就可以直接在盘符K下面直接访问你需要的文件了。
#我深恶痛绝的“图书蛀虫”
我对在图书馆图书上做标记的做法深恶痛绝。这么做的读者,我叫他们叫作图书蛀虫。
最近,我从图书馆借阅了《古今数学思想》;这一套书有许多册,介绍了数学Mathematics的来龙去脉,从史前的美索不达米亚(Mesopotamia),一直讲到了现代。而作者Morris Kline教授是一位物理学背景的数学史学家,他著有其他许多有名的著作,譬如《西方文化中的数学》(Mathematics in Western Culture)、《数学简史:确定性的消失》(Mathematics: The Loss of Certainty),都是些不容错过的书本。
一切都是那么赏心悦目——直到我翻到就介绍几何原本的这一页,也就是如下图所示的位置。不知道是哪一位朋友,用朱色笔在“公设”和“公理”两个位置打上了红钩。这两个符号下笔是如此肆意妄为而又漫不经心!介于南航大还未向社会开放图书馆(像南大计划的那样),那么在图书上做这些标记的南航大同僚,Shame on You!
# 今天的音乐
愛你也愛她 by Namewee
youtube
0 notes
Text
為什麼我從 Mac 換到了 Linux

我在個人電腦上的首次 Linux 體驗
我記得,我抬頭看著投影機,而它和我面面相覷。我們倆都不明白為什麼它不顯示。 VGA 線完全接好了,針腳也沒有彎折。我按了我所有想到的可能的按鍵組合,以向我的筆記本電腦發出信號,想讓它克服“舞台恐懼症”。
我在大學裡運行 Linux 只是作為實驗。而我在 IT 部門的經理是多種口味的倡導者,隨著我對桌面支持和編寫腳本的信心增強,我想了解更多 Linux 的信息。對我來說,IT 比我的計算機科學學位課程有趣得多,課程的感覺是如此抽象和理論化:“二叉樹有啥用?”,我如是想—— 而我們的系統管理員團隊的工作卻是如此的真真切切。
這個故事的結尾是,我登錄到 Windows 工作站完成了我的課堂演講,這標誌著我將 Linux 作為我的日常操作系統的第一次嘗試的終結。我很欣賞 Linux 的靈活性,但是它缺乏兼容性。我偶爾會寫個腳本,腳本通過 SSH 連接到一個機器中以運行另一個腳本,但是我對 Linux 的日常使用僅止於此。
對 Linux 兼容性的全新印象
幾個月前,當我決定再試一次 Linux 時,我曾覺得我遇到更多的兼容性噩夢,但我錯了。
安裝過程完成後,我立即插入了 USB-C 集線器以了解兼容性到底如何。一切立即工作。連接 HDMI 的超寬顯示器作為鏡像顯示器彈出到我的筆記本電腦屏幕上,我輕鬆地將其調整為第二台顯示器。 USB 連接的網絡攝像頭對我的在家工作方式[1]至關重要,它可以毫無問題地顯示視頻。甚至自從我使用 Mac 以來就一直插在集線器的 Mac 充電器可以為我的非常不 Mac 的硬件充電。
我的正面體驗可能與 USB-C 的一些更新有關,它在 2018 年得到一些所需的關注,因此才能與其他操作系統的體驗相媲美。正如 Phoronix 解釋的那樣[2]:
“USB Type-C 接口為非USB 信號提供了'替代模式'擴展,在規範中該替代模式的最大使用場景是支持DisplayPort。除此之外,另一個替代模式是支持Thunderbolt 3。DisplayPort 替代模式支持 4K 甚至 8Kx4K 的視頻輸出,包括多聲道音頻。
“雖然 USB-C 替代模式和 DisplayPort 已經存在了一段時間,並且在 Windows 上很常見,但是主線 Linux 內核不支持此功能。所幸的是,多虧英特爾,這種情況正在改變。 ”
而在端口之外,快速瀏覽一下 筆記本電腦 Linux[3] 的硬件選擇,列出了比我 2000 年代初期所經歷的更加完整的選擇集。
與我第一次嘗試採用 Linux 相比,這已經天差地別,這是我張開雙臂歡迎的。
突破 Apple 的樊籬
使用 Linux 給我的日常工作流程增加了一些新的麻煩,而我喜歡這種麻煩。
我的 Mac 工作流程是無縫的:早上打開 iPad,寫下關於我今天想要做什麼的想法,然後開始在 Safari 中閱讀一些文章;移到我的 iPhone 上可以繼續閱讀;然後登錄我的 MacBook,這些地方我進行了多年的微調,已經弄清楚了所有這些部分之間的連接方式。鍵盤快捷鍵已內置在我的大腦中;用戶體驗一如既往。簡直不要太舒服了。
這種舒適需要付出代價。我基本上忘記了我的環境如何運作的,也無法解答我想解答的問題。我是否自��義了一些 PLIST 文件[4]以獲得快捷方式,是不是記得將其簽入我的 dotfiles[5] 當中?當 Firefox 的功能更好時,我為何還如此依賴 Safari 和 Chrome?為什麼我不使用基於 Android 的手機代替我的 i-系列產品呢?
關於這一點,我經常考慮改用基於 Android 的手機,但是我會失去在所有這些設備之間的連接性以及為這種生態系統設計的一些便利。例如,我將無法在 iPhone 上為 Apple TV 輸入搜索內容,也無法與其他用 Apple 的朋友用 AirDrop 共享密碼。這些功能是同類設備環境的巨大好處,並且是一項了不起的工程。也就是說,這些便利是被生態系統所困的代價。
我喜歡了解設備的工作方式。我希望能夠解釋使我的系統變得有趣或容易使用的環境配置,但我也想看看增加一些麻煩對我的觀點有什麼影響。用 Marcel Proust[6] 的話來說,“真正的發現之旅不在於尋找新的土地,而在於用新的眼光來看待。”技術的使用是如此的方便,以至於我不再對它的工作原理感到好奇,而Linux 使我有機會再次有了新的眼光。
受你的啟發
以上所有內容足以成為探索 Linux 的理由,但我也受到了你的啟發。儘管所有操作系統都受到開源社區的歡迎,但 Opensource.com 的作者和讀者對 Linux 的喜悅是充滿感染力的。它激發了我重新潛入的樂趣,我享受這段旅途的樂趣。
via: https://opensource.com/article/19/10/why-switch-mac-linux
作者:Matthew Broberg[7] 選題:lujun9972[8] 譯者:wxy[9] 校對:wxy[10]
本文由 LCTT[11] 原創編譯,Linux中國[12] 榮譽推出
[1]: https://ift.tt/2UevCUo
[2]: https://ift.tt/2z1MVRH
[3]: https://ift.tt/2QwrlvK
[4]: https://ift.tt/2OuB4zQ
[5]: https://ift.tt/2TLP4ej
[6]: https://ift.tt/35dxHEd
[7]: https://ift.tt/2r0Rjg5
[8]: https://ift.tt/2k6WTKh
[9]: https://github.com/wxy
[10]: https://github.com/wxy
[11]: https://ift.tt/KJTGsF
[12]: https://ift.tt/2qlNLFe
.
from 為什麼我從 Mac 換到了 Linux via KKNEWS
0 notes
Text
闇の深い AMI を Packer で Infra as Code する
from https://qiita.com/sasasin/items/83d91b635e04dd206b5a?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
闇が深いとは
このくらいを指すものとします。
AMIの出所がわからない
EC2インスタンスのAMI IDが、自前AMIになってる
Linuxディストリはわかるが、起点にしたバージョンはわからない
AMIがどうやってできたのかわからない
sudo vi /etc/hoge.conf してるっぽい
sudo yum install -y hoge してるっぽい
wget https://~~~~/hoge.tar.gz から make install してるっぽい
AMI更新手順がわからない
変更したい人々と、変更できる人々が違っている
実施できるのは、本番環境にSSHできる極少人数
簡単なはずのconfの変更も尻込みして進まない
Dockerize & k8s移行とか盛り上がるけど、遠すぎて動きが鈍い
AWS使っててもこれよりヤバい現場や、オンプレでさらにヤバい現場はいくらでもあるでしょうけど、一旦このくらいで。
闇に光を当てる情報収集
現状の変更の作業手順を各方面に聞き出したり、諸々の参照権限をもらったりして、文書化します。「してくださいお願いしますね」ではなく、私が文書化します。「してください」で文書化されるなら、もうされてます。みんな忙しい。
AWS 利用状況、インフラ構成調査
AWS以外にもSaaSは使ってそうでしたが、聞いた範囲ではAWSにほぼ収まっているので、AWSに絞って調査します。AWSで使っているものは、AWSの月次の請求書を見ればわかります。AWSの請求書はたいへん親切で、
をひとつの文書にまとめてくれています。しかも、無料枠で収まっていても、利用料金ゼロドルで、無料枠の範囲でこれだけ利用しましたを記載してくれるのが大変良い。
これをもとに、推定と聞き込みとを織り交ぜ、実際の姿を明らかにしていきます。
AMI 内部構成調査
ここまで明らかになると、どのEC2 AMIをInfra as Codeでカバーしたら効果高いかわかります(わかるよな?)。
アプリケーションコードのデプロイが頻繁で、バグや障害などの問題が、ユーザーから見たダウンタイムに結びつきやすいところからです。つまりはウェブサーバーですね。優先順位を決めて、EC2の内部構成調査のためSSHしてガサガサします。手法は以下のような。
AMI 更新手順
EC2に、SSHしてオラオラして、AMIを作成して、AutoScaling Groupに入れていました。
方向性を考える
ここからDocker & k8sに行くには、ジャンプが大きすぎるなあという所感でした。簡単なはずのconfの設置とかも、モジモジして入れられてない。とはいえ、いまさら滅茶苦茶に工数ぶちこんで解決を目指すのももったいない。遠からず捨てる前提で、重厚長大にせず、安全にAMIを変更できることに専念したワークフローを構築したい。
そこで、現状に接ぎ木して、乗っ取って、乗り換えられるような、AMIビルドのパイプラインを考えてみることにしました。
AMIビルドのパイプラインを妄想する
ちょっと前にCodeBuildの使い方を調べてたので、CodeBuildを使って、仕事の流れを組み立てます。CircleCIもありましたが、AMIにSSHさせるのに難儀しそうだなという直感があり、VPCで動かせるCodeBuildを選びました。
CodeBuild + Packer + Ansible を組み入れることで、このような仕事の流れにできそうだよねというのを、まずは妄想します。Ansibleでカバーの追いついてないconfの類は、SSHしてオラつけるよう仕事の流れにも遊びを残しておきます。
AMIビルドのパイプラインを作り始める
ようやく作り始めます。CodeBuildでジョブを組むのは慣れたものです。Docker Hubを漁ると hashicorp/packer があるのでこれを使います。Ansibleもチョットデキルので心配してない。
ぶっちゃけると Packer イジるの初めてなので、まず目標地点を
闇のAMIを入力に、Packerを通して、EC2内に sudo echo hello-packer >> /tmp/hogehoge.txt したAMIを作る
くらいにしました。しかしここから3営業日くらい、PackerからEC2にSSHできないという症状を解決できず、憂鬱な日々でした。
その過程で、闇のAMIを Packer で Infra as Code する掟を見いだせたので、以下列挙します。
掟1. デフォルト VPC は使わない
本件に着手する少し前に AWS環境のセキュリティ監査サービス insightwatch(インサイトウォッチ)by クラスメソッド の指摘を受けてデフォルトVPCを削除しまくっていました。しかもEC2-ClassicなAWSアカウントなので、サポート問い合わせしないとデフォルトVPCを作れない。めんどくせええ。。。
マニュアルを読むと、嬉しいことに、VPC IDなどを明示して動かすことができるとわかるので、 packer.json に盛り込んでいきます。
振り返ると、デフォルトVPCで動かしてたらより一層進まなくなってたので、まあ、結果オーライでした。
掟2. CodeBuild は、本番環境SSH踏台サーバーと同一のサブネット、セキュリティグループで起動させる
今回どうにかしたいAMIは、SSH踏み台サーバーのセキュリティグループがついたところからのみ、SSHを受付けるよう設定されていました。
スパゲッティなセキュリティグループを無理にほぐそうとすると、何が起きるか見極めきれていなかったので、表題のように起動するよう、CodeBuildジョブを設定しました。
掟3. AMIは、本番環境のVPC,サブネット,などなど利用時と同一の諸々で起動させる
Packerは、元のAMIから、作業用EC2インスタンスを起動し、AMIを作成します。この作業用EC2インスタンスを、どのような設定で起動させるか。チュートリアルではPackerが、デフォルトVPCで何もかも良しなに仕上げてAMIを作ってくれます。
しかし私がどうにかしたいのは、デフォルトとはおよそ程遠い構成となっているAMIです。
Pakcerから出来上がったAMIを起動させるときのEC2インスタンスと、同一になるように、Packerに起動させます。具体的には、同一のIAMロール、VPC、サブネット、セキュリティグループ、同一のグレードのEC2、SSHキーペア、などとなるよう、packer.json に事細かに明記していきます。
今回は、チュートリアルの packer.json をベースに、つながらないな、これか?これか?これも必要か?などと試していきましたが、闇のAMIをどうにかするというシナリオでは、
ここで列挙されているオプションをまずは全て明記して、これ削っても動くかな?大丈夫かな?ってやったほうが、早く進んだのではないかと思います。
Ansibleで何かイジる
PackerからSSHさえできれば、ひたすら楽です。
ふとCodeBuildを眺めると、hashicorp/packer を使い続けるのか問題がありました。
Ansibleのロール、プレイブックなどは、 packer.json を置いたのと同一ディレクトリに、 Best Practices — Ansible Documentation の体系で置きます。
クレデンシャルは、SSMパラメータストアにKMS暗号化保管したものを、CodeBuildの環境変数に持ってきて、Ansibleではlookupで引き込みます。
このように。
手法はいくつかありそうでしたが、この記事で理解を整理してlookupだなと。
SSMパラメータストアのクレデンシャルを、CodeBuildまで持ってくるには
闇の深い AMI に光を当てる packer.json
そんなこんなで以下できあがりの packer.json です。variablesのenvは、CodeBuildジョブの環境変数として定義してあります���今回はこの程度で済みましたが、闇の深さによっては、他にも記載すべき項目が増えるのではないかと思います。
SECURITY_GROUP_ID_BASE には、出来上がりのEC2インスタンスに付けるべきセキュリティグループIDを指定します。今回はひとつだけでしたが、もし複数指定が必要なら、よしなに書き換えてください。
SECURITY_GROUP_ID_PACKER には、Packer用にSSHポートを開放したセキュリティグループを作成しておき、そのセキュリティグループIDを指定します。
SSH_XXXX には、ec2-userで22から変更していれば、そのように指定してください。
Ansibleのsftp_commandは、Amazon Linux前提なのでこう書いてますが、sftp-serverコマンドのパスを指定してください。
Ansibleを使うことにしてますが、私が超慣れてるからなだけで、ItamaeでもChefでも好きにしてください。
{ "variables" : { "instance_type": "", "source_ami_name": "", "source_ami_owner": "", "dest_ami_name": "", "region": "", "vpc_id": "", "subnet_id": "", "ssh_interface": "", "security_group_id_base": "", "security_group_id_packer": "", "ssh_username": "", "ssh_port": "", "ssh_timeout": "" }, "builders" : [ { "type": "amazon-ebs", "region": "", "source_ami_filter": { "filters": { "name": "" }, "owners": [""], "most_recent": true }, "instance_type": "", "ssh_username": "", "ssh_port": "", "ssh_pty": true, "ssh_timeout": "", "vpc_id": "", "subnet_id": "", "ssh_interface": "", "user_data_file": "./ec2-user-data", "security_group_ids" : [ "", "" ], "ami_name": "-", "tags": { "Name": "-", "Base_AMI_ID": "", "Base_AMI_name": "" } } ], "provisioners": [{ "type": "shell", "inline": [ "sudo echo hello world > /tmp/helloworld.txt", "ls -alF /tmp/helloworld.txt", "cat /tmp/helloworld.txt" ] }, { "type" : "ansible", "user" : "ec2-user", "sftp_command" : "/usr/libexec/openssh/sftp-server -e", "playbook_file" : "site.yml" }, { "type": "shell", "inline": [ "sudo echo hello world" ] } ] }
user dataも入れて起動できるので、こんな感じに使ってます。
#!/bin/bash # ここで入れたEC2ユーザーデータは、packerビルド時のみ投入される。 # AutoScaling起動設定のもので上書きされる。
# SourceAMIの起動時にねじ込んで実行させるシェルスクリプト # このファイルが存在してるとPacker生成のSSHキーの設置に失敗する rm -f /home/ec2-user/.ssh/authorized_keys
# packerしてる最中に動かれると、果てしなく面倒なものは止めておく chkconfig app-server off || true
CodeBuildの buildspec.yml はこのくらいで。DockerイメージはAnsible全部入りの ansible/ansible-runner です。
version: 0.2
phases: install: commands: - yum install -y -q wget which unzip - (cd /usr/local/bin && wget -q https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip && unzip ./packer_${PACKER_VERSION}_linux_amd64.zip) - pip install --upgrade pip - pip install awscli - ansible --version - packer version pre_build: commands: - ansible-galaxy install -p ./roles -r ./requirements.yml - packer validate packer.json build: commands: - packer build -machine-readable packer.json
未来展望
CodeBuild + Packer + Ansibleで、誰でも安全に変更を反映できる環境を整備できました。この先は、
変更したそうな /etc/hoge.conf をAnsible管理下に置くようにする
実際に変更していく
サーバーロール間の結合を疎にするような変更を随時入れていく
サーバーロール単位でのDockerizeと足回りのk8s移行
みたいな流れを組んでいきたいなあと妄想しています。
0 notes
Text
Linux SSH 透過 Key 認證登入 (內容更新 - 2020/03/03)
Linux SSH 透過 Key 認證登入 (內容更新 – 2020/03/03)
心得:
SSH 全名��� Secure SHell protocol
簡單認知就是一個比較安全的連線方式,算是 Linux 入門一定會遇到東西
這邊主要介紹,如何透過 Key 建立 SSH 連線,讓未來的佈署管理更加快速的方法
但安全跟便利是相衝突,建議 Key 的部份可以搭配 SSH 設定強化安全性
並且定時更換 Key ,或是多帳號共用的情形,增加其安全性
對於管理上百台 Server 或使用 Shell Script ,是非常重要的功能
設定: 輸入指令
$ ssh-keygen
開始建立金鑰的過程,詢問一些問題,例如 Key 擺放位置、是否指定密碼等
當然也可以加高演算法等級、演算法方式等等
如下圖:
這時候進入到你家目錄的.ssh底下看會發現幾個檔案
大多版本預設都為 家目錄/.ssh 底下
$ cd ~/.ssh $ ls -la
id_rsa.pub 為公開金鑰
示範內容如…
View On WordPress
0 notes
Link
コンテナイメージのレジストリでは、脆弱性検査の実装が当たり前になっている。企業でKubernetesなどコンテナを使用するにあたって脆弱性対策がどれほど重要なものか理解するために、脆弱性検査や、関連する国際的な標準について整理した。 脆弱性(ぜいじゃくせい)とは 脆弱性とは、プログラムの動作の不備を悪用される情報セキュリティ上の弱点である。つまり、ソフトウェア上の問題が原因となって生じた欠陥であり、セキュリティホールとも呼ばれる。当然、ソフトウェア開発者は、脆弱性を産まないように細心の注意を払ってコード開発を進めるが、開発者が利用するオペレーティングシステムのライブラリやパッケージに含まれることもある。そのような事情から、開発者の責任範囲外に原因がある場合も多くある。 潜在的な脆弱性を突いた新たなクラッキングの手口が、時間の経過ともに発見される。そのことから、開発当初はコードに脆弱性は無いとされていても、時間経過とともに、新たな手口が発見され、継続的に対策が必要となる。 脆弱性が残されたソフトウェアを稼働させ続けると、脆弱性を突いた不正アクセスによって、データ漏洩やサービス停止などのリスクが高まる。例え��、知的財産の流出、お金の財産の不法取得、情報の改ざんなどが発生して、取引上の信用を失うなど、企業が大きな損害を被る結果となる。 例えば、インターネットとサーバーを接続する部分のファイアウォールなどで、不要なTCPポートの通信を遮断しているからといって、安心と考えてはいけない。アプリケーションのサービス提供用に外部に公開したポートへのアクセスを悪用して攻撃するためである。別の言い方をすると、ファイアウォールで通信を許可したポートを悪用して不正アクセスを実施するため、ソフトウェアの脆弱性対策は避けることができない。 脆弱性が発見されると、ソフトウェアの開発メーカー、オープンソースプロジェクトのコミュニティ、そして、OSSディストリビューターが、対策済みコードやパッケージを準備して配布する。その様なコードやパッケージが、リリースされたら、出来るだけ早い時期に適用して、脆弱性を取り除くことが望ましい。 近年はゼロデイ攻撃と呼ばれる脅威が増加する傾向にある。これは、対策済みプログラムを配布するまでの間に攻撃を展開するもので、脆弱性が公開されてから、メーカーやOSSコミュニティが修正プログラムを開発する事も多いため、公表された脆弱性の内容を確認して、対策が完了するまで監視などを強化するなど、注意が必要である。 コンテナは、OSのライブラリやパッケージなどから構成されるため、これまで通り脆弱性対策を実施するべきである。 脆弱性に関する国際的な標準 脆弱性が生じる原因は、様々であり、コードを開発するコミュニティや開発会社が、連携して対策する時に、問題の対象を区別して、問題の重大度、分類などを一致させるために、CVE、CVSS、CWEといった標準が利用される。ここではそれらについて整理する。 CVEとは CVEは、Common Vulnerabilities and Exposures の略で、日本では、「独立行政法人 情報処理推進機構 セキュリティセンター」によって「共通脆弱性識別子CVE」として扱われている組織のセキュリティを改善するために、ソフトウェアまたはファームウェアの脆弱性の特定とカタログした無料の辞書である。これは 1999年に、連邦政府が後援する研究開発センターが運営するMITREによって開始された、非営利プログラムである。辞書の目的は、既に摘発された脆弱性の識別を標準化することである。つまり、CVE-IDを利用して、複数の技術的な情報源の間で、問題とする脆弱性を識別できる様にすることである。 CVSSとは CVSSは、脆弱性に対するオープンで汎用的な評価手法であり、ベンダーに依存しない共通の評価方法を提供する。CVSSを用いると、脆弱性の深刻度を同一の基準で定量的に比較できる。また、ベンダー、セキュリティ専門家、管理者、ユーザ等の間で、共通の言葉で議論できる。 CWEとは CWEは多種多様な脆弱性の種類を脆弱性���イプとして分類、それぞれCWE識別子(CWE-ID)を付与して階層を体系化する。上位層に近いほど抽象的な脆弱性タイプを表す。反対に、下位層にいくほど具体的な脆弱性タイプや個々の脆弱性を表す。 脆弱性タイプは、ビュー(View)、カテゴリー(Category)、脆弱性(Weakness)、複合要因(Compound Element)の4種類に分類される。 参考資料 イメージに脆弱性が発見された時の対策 コンテナ・イメージに含まれるモジュールには、脆弱性を減らす努力が絶え間なく続けられ、改善されている。一度ビルドしたコンテナ・イメージも時間が経つごとに、脆弱性をもつモジュールが発見される。脆弱性に対する対策は、対策済みモジュールにアップデートしてコンテナ・イメージを再ビルドする事である。 信頼の置けるイメージの選択 コンテナに含まれるコードは、セキュリティにとって重要である。コンテナのイメージの大部分は、Linux OS、Webサーバー、SQLデータベース、プログラミング言語などのオープン・ソースのパッケージであり、それら各OSSプロジェクトはコンテナのイメージでも配布するため、利用者自身でイメージをビルドする必要も無い。しかし、外部の情報源からコードをダウンロードする際と同様に、コンテナ・イメージの提供元、作成者、そして、内部に悪質なコードが含まれないか確認しなければならない。 ベースイメージ、OSパッケージ、プログラム言語のパッケージ、アプリケーションのコードは、コンテナの実行環境にセキュリティの脅威を持ち込まないか? アプリケーションが利用しているライブラリやモジュールなどは、最新であり、脆弱性は無いか? OSなどのベースイメージ、ミドルウェアは最新を使用しており、脆弱性は無いか? コンテナ・イメージの更新頻度は把握しているか、更新されたことを知る方法はあるか? 過去発見された攻撃の例 コンテナに含まれる脆弱性には、どのようなものがあるか理解しておく事は、重要性を理解して対策する上で大切な事である。そこで、過去発見された脆弱性の問題について挙げる。 DROWNと名付けられた脆弱性を悪用すると、攻撃者はTLS暗号化を解除し、パスワード、クレジットカード番号、企業秘密、財務データなどの機密通信を読み取ったり盗んだりできる、2016年3月の公開時に、ある測定では、すべてのHTTPSサーバーの33%が攻撃に対して脆弱であった。その後、修正プログラムの適用が進み、2019年現在、SSL LabsはHTTPSサーバーの1.2%が脆弱であると推定されている。 Dirty COWの脆弱性は、2007年9月からLinuxカーネルに存在し、2016年10月に発見および悪用され。この脆弱性は、Androidを含むすべてのLinuxベースのオペレーティングシステムに影響し非常に深刻。攻撃者はこの脆弱性を悪用してルート権限を取得できる。この脆弱性は、Linuxカーネル内のコピーオンライトのコードに存在する。コピーオンライト(Copy-On-Write)とは、最適化戦略の一つで、大きなデータの複製を要求されても、読み取り(Read)の間は、実際に何もせず複製元のデータを参照する。そして、データの書き換え(Write)が発生した時にコピーして書き換える。もし、複製しても書き換えが発生せずに解放してしまえば、メモリ領域の確保とメモリ上のデータのコピーの処理コストが無駄になってしまう。そこで、前述の様な戦略的な処理によって、処理速度を向上させ、CPU時間を抑えることができる。詳しくは、以下のリンクを参照されたい。 glibcは、「GNU Project」による標準ライブラリlibcの実装である。libcはC言語の標準ライブラリ名であり、システムコールを始めとする基本的な部品を集めたライブラリである。C言語で書かれたプログラムの殆どがlibcを利用している。 そして、glibcは、libcを基に大幅に機能を追加したもので、UNIXが持つ特徴を継承したLinuxでは、glibcはLinuxシステムの根幹をなす。glibcはISO C、POSIX、Unix98の各標準にほぼ完全に準拠し、国際化APIも整っている。 この様な、過去からの経緯を持った glibc には、これまで数多くの脆弱性が発見されており、次のリンクから、脆弱性のリスト、CVE-ID, CWE-ID, Scoreなどを参照できる。2019年において発見されたものも少なくない事に注目しなければならない。 脆弱性データベース 脆弱性が発見されると、SE製品を開発や流通する各組織の脆弱性データベースに登録される。さらにMITREでは、CERT/CCやHP、IBM、OSVDB、Red Hat、Symantecなど80を超える主要な脆弱性情報サイトと連携して、脆弱性情報の収集と、重複のない採番に努めている。 CVEにはCVE互換認定の制度があり、脆弱性検査ツールや脆弱性対策情報提供サービス等がCVE識別番号の正確な表示などと、他の機能要件を満たし、MITREへ申請するとCVE互換認定が受けられる。認定を受けると、CVEのロゴが使用でき、認定サイトのリストに掲載される。 日本では、JVN、JVN iPedia、MyJVNがCVE互換認定を受けている。 Red Hat の脆弱性データベースは、Red Hat Product Errataにあり、XMLなどのメタ情報として提供される。このデータの分類としてアドバイザリータイプ RHSA に脆弱性対応が含まれる。タイプ RHSA、RHBA、および RHEA アドバイザリーの説明がある。 脆弱性スキャン 脆弱性スキャナによって、既知の脆弱性を含むパッケージがコンテナ・イメージに含まれるか検査できる。しかし、この様なツールで全ての脆弱性が見つかるわけではないから過信は禁物である。一方、検査の結果で問題がリポートされても、必ずしもただちに対応しなければならない問題ではない。例えば、次の様な理由が考えられる。 報告された脆弱性の有する機能を利用していないケース コンテナ化している場合、必要最小のプロセスだけ動かすため、実用上問題が無い脆弱性であるケース Linuxディストリビューター(Red Hatなど)が、バックポートして修正プログラムを提供しているケース 誤検知も検知されない事もあり得るので、脆弱性スキャナーを過信せず、依存するパッケージを減らすなど、コンパクトなイメージを作るのが望ましい。そうする事で、脆弱性を含む可能性を減らし、誤検知に時間を費やす時間を減らせる。 脆弱性スキャナー 様々なオープンソースのスキャナーや商用サービスが有るので、代表的と思われるものについて、以下にまとめる。 Docker Bench for Security Docker Bench for Securityは、Dockerコンテナを本番環境にデプロイするために適切な一般的ベストプラクティスをチェックするスクリプト、検査はすべて自動化され、その内容は CIS Docker Benchmark v1.2.0の影響を受けている。これはコンテナ・イメージで提供されるので、誰でも簡単にdockerコンテナを評価でる。 このツールは、Dockerホストで実行して、Dockerホストの構成と稼働中のコンテナなどを検査するもので、次は、Kubernetesのマスターノードで実行した例である。分野ごとにシェルスクリプトが検査して、結果が表示される。 docker/docker-bench-security # ------------------------------------------------------------------------------ # Docker Bench for Security v1.3.4 # # Docker, Inc. (c) 2015- # # Checks for dozens of common best-practices around deploying Docker containers in production. # Inspired by the CIS Docker Community Edition Benchmark v1.1.0. # ------------------------------------------------------------------------------ Initializing Tue Oct 8 00:25:51 UTC 2019 [INFO] 1 - Host Configuration [WARN] 1.1 - Ensure a separate partition for containers has been created [NOTE] 1.2 - Ensure the container host has been Hardened [INFO] 1.3 - Ensure Docker is up to date [INFO] * Using 18.06.1, verify is it up to date as deemed necessary [INFO] * Your operating system vendor may provide support and security maintenance for Docker ## ここから、コンテナに実行状態が検査され、5.6では ssh が動いていないことが検査されている [INFO] 5 - Container Runtime [PASS] 5.1 - Ensure AppArmor Profile is Enabled [PASS] 5.2 - Ensure SELinux security options are set, if applicable [WARN] 5.3 - Ensure Linux Kernel Capabilities are restricted within containers [WARN] * Capabilities added: CapAdd=[NET_ADMIN] to k8s_kube-flannel_kube-flannel-ds-amd64-jg7jv_kube-system_13b64578-419d-49c6-a8e4-9f75be3e51de_0 [WARN] 5.4 - Ensure privileged containers are not used [WARN] * Container running in Privileged mode: k8s_kube-proxy_kube-proxy-f9xlx_kube-system_19248345-58a8-48f1-b0f5-b9e67e2a1219_0 [PASS] 5.5 - Ensure sensitive host system directories are not mounted on containers [PASS] 5.6 - Ensure ssh is not run within containers [INFO] 6 - Docker Security Operations [INFO] 6.1 - Avoid image sprawl [INFO] * There are currently: 9 images [INFO] 6.2 - Avoid container sprawl [INFO] * There are currently a total of 19 containers, with 17 of them currently running [INFO] Checks: 105 [INFO] Score: 9 参考リンク GitHub docker/docker-bench-security, https://github.com/docker/docker-bench-security Clair (クレア/フランス語読みではクレール) CoreOS (現 Red Hat) によって開発された Clair は、コンテナの脆弱性を静的に検査する。Clair は CNCFのプロジェクトの一つとして活動している。 Clair 主要な機能は以下2つである。 参考資料に書かれた記事から、Clairは何ができ���いのかを紹介する。 ソフトウェアそのものは解析しない: Clair は ソフトウェアを管理している dpkg や rpm 等のパッケージ管理システムのファイルを解析 パッケージ管理されていないソフトウェアの脆弱性を検出しない: Clair が脆弱性を検出するのは、dpkg や rpm 等のパッケージマネージャーでインストールされたものに限られる。例えば、tarファイルをダウンロードして展開してソフトウェアは、スキャン対象にならず脆弱性も検出され無い。 未知の脆弱性を検出しない: Clair が検出できるのは、CVE等で公開されている既知の脆弱性のみ。 GUIを提供しない: Clair は コマンドで起動、設定ファイルはエディタで編集、操作は REST API で実行 脆弱性を修正しない: Clair は、脆弱性の修正されたバージョンを教えるが、更新はしない。 Docker Hub に似た パブリックコンテナ・レジストリ Quay.io にも使用されている。 また、GitLabで、コンテナの脆弱性検査にも利用でき、設定例 https://docs.gitlab.com/ee/ci/examples/container_scanning.html が公開されている。 Clair の クライアントツールとして、clairctl, klar, reg, clair-scannerがあり、VMwareのHarborもClairクライアント として動作する。 参考リンク Anchore (アンカー) CVEデータとユーザー定義のポリシーを使用してコンテナーのセキュリティを検査するためのツールである。 アンカーエンジンは、オープンソースプロジェクトである。アンカーエンジンは、コンテナイメージの監査、分析、認定などの集中サービスを提供する。アンカーエンジンは、Dockerコンテナイメージとして提供され、単独、または Kubernetes や Doccker Swarm などのオーケストレーション環境で、実行できる。そして、ユーザーはRESTful API あるいは アンカーCLI を利用して、アンカーエンジンを操作できる。 ユーザーの環境でアンカーエンジンをデプロイすると、コンテナレジストリからイメージがダウンロードされ、ユーザーがカスタマイズ可能なポリシーによって、分析、評価され、セキュリティ、コンプライアンス、およびベストプラクティスの実施がチェックされる。 アンカーエンタープライズとアンカーエンジンの違い アンカーエンタープライズは、オープンソースのアンカーエンジンに加えて以下のサポートする。 可視化、ポリシー編集、レポート生成、ユーザー管理、プログラミング言語 Python, Ruby, Nodejs, Java のライブラリやパッケージの脆弱性データのフィード APIのRBACサポート 脆弱性とパッケージ・メタ情報の全てを供給するサービス レッドハット、Debianなど情報源から脆弱性データの全てを、分析エンジンへ与える インターネットと接続しない構築 商用サポート 24時間/7日間 または 8時間x週5日 特に、企業向けのLinux利用で、レッドハットを利用する場合に、アンカーエンタープライズは有用と思う。 アンカーエンジンのユースケース ユーザーの環境にアンカー・エンジンをデプロイすると、コンテナイメージは、レジストリからダウンロードされ、分析される。ユーザーがカスタマイズ可能なポリシーを評価して、セキュリティ、コンプライアンス、およびベストプラクティスの実施チェックを実行する。 CI/CDツールから、アンカーエンジンを RESTful API または、anchor-cli を実行して、コンテナビルド後に、自動的に脆弱性を検査することで、問題の早期発見が可能となる。これは必須のワークフローになると思う。 アンカーエンジンによる脆弱性検査の例 Kubernetesで試すより、Docker-Composeは簡単なので、簡易的な手法として実施する。筆者の環境では、アンカーエンジンを1時間くらい動かすとmacOSのDockerエンジンが応答を返さなくなり、Dockerの再起動が必要となる不安定な状態となった。単にメモリの割り当てが足りないと思うけど、本格的に利用するには、Kubernetesクラスタ上で、CICDと一緒に利用するのが望ましいと思われる。 まず最初に、Docker-Compose の YAML をコピーするためのディレクトリを作成して、アンカーエンジンのコンテナを実行して、コンテナの内部から、ローカルに Docker-Compose のYAMLファイルをコピーする。そして、使用済みのコンテナを削除する。 Status: Downloaded newer image for anchore/anchore-engine:latest docker.io/anchore/anchore-engine:latest $ docker create --name ae docker.io/anchore/anchore-engine:latest 47b152d2427862c5ad9c7853b0e32a58e0ae5040224531af7de2e086182cdf65 $ docker cp ae:/docker-compose.yaml ~/work3/anchor/docker-compose.yaml $ docker rm ae ae docker-composeコマンドでアンカーエンジンのシステムを起動する。 $ ls docker-compose.yaml $ docker-compose pull Pulling anchore-db ... done Pulling engine-catalog ... done Pulling engine-analyzer ... done Pulling engine-policy-engine ... done Pulling engine-simpleq ... done Pulling engine-api ... done $ docker-compose up -d Creating network "anchor_default" with the default driver Creating volume "anchor_anchore-db-volume" with default driver Creating volume "anchor_anchore-scratch" with default driver Creating anchor_anchore-db_1 ... done Creating anchor_engine-catalog_1 ... done Creating anchor_engine-simpleq_1 ... done Creating anchor_engine-api_1 ... done Creating anchor_engine-analyzer_1 ... done Creating anchor_engine-policy-engine_1 ... done 起動を確認しておく。 8228/tcp anchor_engine-catalog_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp anchor_engine-policy-engine_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp anchor_engine-simpleq_1 /docker-entrypoint.sh anch ... Up (health: starting) 8228/tcp imac:anchor maho$ docker-compose exec engine-api anchore-cli system status Service analyzer (anchore-quickstart, http://engine-analyzer:8228): up Service policy_engine (anchore-quickstart, http://engine-policy-engine:8228): up Service simplequeue (anchore-quickstart, http://engine-simpleq:8228): up Service apiext (anchore-quickstart, http://engine-api:8228): up Service catalog (anchore-quickstart, http://engine-catalog:8228): up Engine DB Version: 0.0.11 Engine Code Version: 0.5.0 アンカーエンジン起動直後は、脆弱性データを持っていないので、ダウンロードが始まる。今回は簡単に試すために、docker-composeで立ち上げたコンテナから、anchore-cliコマンドを実行する簡易的な手段を選ぶ。 $ docker-compose exec engine-api anchore-cli system feeds list Feed Group LastSync RecordCount nvdv2 nvdv2:cves None 0 vulnerabilities alpine:3.10 2019-10-08T14:48:49.756530 1485 vulnerabilities alpine:3.3 None 0 vulnerabilities alpine:3.4 None 0 vulnerabilities alpine:3.5 None 0 vulnerabilities alpine:3.6 None 0 筆者の環境で、約1時間で脆弱性データのダウンロードが完了した。このアンカーエンジンは無料版なので、RHELなど、サポートにサブスクリプション契約が必要なものが含まれない。CentOS, Debian, Ubuntu などに限られることが解る。 imac:anchor maho$ docker-compose exec engine-api anchore-cli system feeds list Feed Group LastSync RecordCount nvdv2 nvdv2:cves None 0 vulnerabilities alpine:3.10 2019-10-08T14:48:49.756530 1485 vulnerabilities alpine:3.3 2019-10-08T14:48:55.240451 457 vulnerabilities alpine:3.4 2019-10-08T14:49:02.902517 681 vulnerabilities alpine:3.5 2019-10-08T14:49:12.996332 875 vulnerabilities alpine:3.6 2019-10-08T14:49:25.639193 1051 vulnerabilities alpine:3.7 2019-10-08T14:49:40.640122 1253 vulnerabilities alpine:3.8 2019-10-08T14:49:56.309720 1335 vulnerabilities alpine:3.9 2019-10-08T14:50:14.736434 1428 vulnerabilities amzn:2 2019-10-08T14:50:25.915568 224 vulnerabilities centos:5 2019-10-08T14:50:59.159077 1325 vulnerabilities centos:6 2019-10-08T14:51:37.040844 1355 vulnerabilities centos:7 2019-10-08T14:52:13.030123 898 vulnerabilities centos:8 2019-10-08T14:52:18.913897 76 vulnerabilities debian:10 2019-10-08T14:56:14.448113 21268 vulnerabilities debian:11 2019-10-08T14:59:53.728597 17984 vulnerabilities debian:7 2019-10-08T15:03:29.329481 20455 vulnerabilities debian:8 2019-10-08T15:07:37.040421 22575 vulnerabilities debian:9 2019-10-08T15:11:44.730702 21438 vulnerabilities debian:unstable 2019-10-08T15:16:01.736180 22314 vulnerabilities ol:5 2019-10-08T15:16:44.124014 1239 vulnerabilities ol:6 2019-10-08T15:17:39.418314 1456 vulnerabilities ol:7 2019-10-08T15:18:28.390050 1038 vulnerabilities ol:8 2019-10-08T15:18:32.804512 68 vulnerabilities ubuntu:12.04 2019-10-08T15:21:09.029691 14948 vulnerabilities ubuntu:12.10 2019-10-08T15:22:05.408912 5652 vulnerabilities ubuntu:13.04 2019-10-08T15:22:39.667026 4127 vulnerabilities ubuntu:14.04 2019-10-08T15:25:51.886441 19685 vulnerabilities ubuntu:14.10 2019-10-08T15:26:41.300071 4456 vulnerabilities ubuntu:15.04 2019-10-08T15:27:41.424339 5831 vulnerabilities ubuntu:15.10 2019-10-08T15:28:49.917239 6513 vulnerabilities ubuntu:16.04 2019-10-08T15:32:06.318408 16802 vulnerabilities ubuntu:16.10 2019-10-08T15:33:23.158525 8647 vulnerabilities ubuntu:17.04 2019-10-08T15:34:40.605672 9157 vulnerabilities ubuntu:17.10 2019-10-08T15:35:45.769257 7935 vulnerabilities ubuntu:18.04 2019-10-08T15:37:20.472998 11054 vulnerabilities ubuntu:18.10 2019-10-08T15:38:27.803139 8392 vulnerabilities ubuntu:19.04 2019-10-08T15:39:24.065979 7593 アンカーエンジンによる脆弱性検査 脆弱性検査したいイメージを、レジストリから追加する。これも簡易的にコンテナ内で anchor-cli を実行する。 $ docker-compose exec engine-api anchore-cli image add docker.io/maho/web-nginx:11 Image Digest: sha256:e393398ce2cb232ee15104079dc5fe91cbd985ca013a4898816b628fbce7d9b8 Parent Digest: sha256:e393398ce2cb232ee15104079dc5fe91cbd985ca013a4898816b628fbce7d9b8 Analysis Status: not_analyzed Image Type: docker Analyzed At: None Image ID: 359128981386754efdc61ed716b4f69544725e0554388d8046f1ceac2ae27062 Dockerfile Mode: None Distro: None Distro Version: None Size: None Architecture: None Layer Count: None Full Tag: docker.io/maho/web-nginx:11 Tag Detected At: 2019-10-08T22:21:27Z イメージのリストを表示する。事前に、debian:7とdebian:8も追加していたので3つ表示された。analyzedと表示され、脆弱性検査が完了していることが読み取れる。 $ docker-compose exec engine-api anchore-cli image list Full Tag Image Digest Analysis Status docker.io/library/debian:7 sha256:81e88820a7759038ffa61cff59dfcc12d3772c3a2e75b7cfe963c952da2ad264 analyzed docker.io/library/debian:8 sha256:9bdad8283833c08697a4de37c6eb0e281598c0e47d09d8b3e1113b7137e27e38 analyzed docker.io/maho/web-nginx:11 sha256:e393398ce2cb232ee15104079dc5fe91cbd985ca013a4898816b628fbce7d9b8 analyzed 筆者が数ヶ月前にビルドしたNGINXのコンテナイメージの脆弱性検査のレポートをリストしてみる。脆弱性IDと詳細を説明したURLが表示されている。これは確かに有用なツールだ。コマンドとして脆弱性レポートを取れるのと、anchore-cli image wait とすることで、イメージの登録後、脆弱性検査が完了するまで、待機させることができるので、Jenkins の設定に追加することも簡単だ。 $ docker-compose exec engine-api anchore-cli image vuln docker.io/maho/web-nginx:11 all Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL CVE-2018-20843 libexpat1-2.2.0-2+deb9u1 High 2.2.0-2+deb9u2 https://security-tracker.debian.org/tracker/CVE-2018-20843 CVE-2019-11068 libxslt1.1-1.1.29-2.1 High 1.1.29-2.1+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-11068 CVE-2019-1547 libssl1.1-1.1.0j-1~deb9u1 Low 1.1.0l-1~deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-1547 CVE-2019-11038 libgd3-2.2.4-2+deb9u4 Medium 2.2.4-2+deb9u5 https://security-tracker.debian.org/tracker/CVE-2019-11038 CVE-2019-13117 libxslt1.1-1.1.29-2.1 Medium 1.1.29-2.1+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-13117 CVE-2019-13118 libxslt1.1-1.1.29-2.1 Medium 1.1.29-2.1+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-13118 CVE-2019-13627 libgcrypt20-1.7.6-2+deb9u3 Medium None https://security-tracker.debian.org/tracker/CVE-2019-13627 CVE-2019-1543 libssl1.1-1.1.0j-1~deb9u1 Medium 1.1.0k-1~deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-1543 CVE-2019-1563 libssl1.1-1.1.0j-1~deb9u1 Medium 1.1.0l-1~deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-1563 CVE-2019-15903 libexpat1-2.2.0-2+deb9u1 Medium 2.2.0-2+deb9u3 https://security-tracker.debian.org/tracker/CVE-2019-15903 CVE-2019-5094 e2fslibs-1.43.4-2 Medium 1.43.4-2+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-5094 CVE-2019-5094 e2fsprogs-1.43.4-2 Medium 1.43.4-2+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-5094 CVE-2019-5094 libcomerr2-1.43.4-2 Medium 1.43.4-2+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-5094 CVE-2019-5094 libss2-1.43.4-2 Medium 1.43.4-2+deb9u1 https://security-tracker.debian.org/tracker/CVE-2019-5094 CVE-2005-2541 tar-1.29b-1.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541 CVE-2007-5686 login-1:4.4-4.1 Negligible None https://security-tracker.debian.org/tracker/CVE-2007-5686 参考資料 OpenSCAP 最初に、OpenSCAPの背景となるSCAPを簡単に説明する。米国政府省庁の情報セキュリティ対策への要求として、情報システムのセキュリティを強化することを義務付けた法律FISMA(Federal Information Security Management Act:連邦情報セキュリティマネジメント法)が2002年に施行された。これを含め関連の法遵守のため、OSなどの設定作業を手作業で行うと、設定ミスや設定者のセキュリティ知識の程度、判断の相違などからセキュリティが損なわれる可能性がある事などから、作業を自動化する事が効率牲・有効性の観点から求められた。このようなことから、NIST(National Institute of Standards and Technology)において、情報セキュリティ対策の自動化と標準化を目指したSCAP(Security Content Automation Protocol:セキュリティ設定共通化手順)の開発が行われた。 現在、SCAPは次の6つの標準仕様から構成される。 OpenSCAPとは、システム管理者と監査者がセキュリティベースラインの評価、測定、および実施を支援する複数のツールである。このツールは、上記の標準仕様に基づくように開発された。 SCAP関連のツールは、(RHEL7では)以下4種が提供され、OpenSCAPもその一つであある。Dockerコンテナを検査するツールoscap-dockerは、oscapの機能を使用している。 SCAP Workbench : scap-workbench GUIツールは、システム上で、構成スキャンと脆弱性スキャン、そして、セキュリティーレポートの生成を実行できる。 OpenSCAP : oscap コマンドは、ローカルシステムの構成スキャンと脆弱性スキャンを実行、セキュリティーコンプライアンスを検証、評価に基づいてレポートとガイドを生成する。 Script Check Engine (SCE) : SCE は SCAPプロトコルの拡張機能であり、管理者がこれを使用して Bash、Python、Ruby などのプログラム言語を使って、セキュリティーチェックのコードを記述できる。SCEは、openscap-engine-sce パッケージで提供される。 SCAP Security Guide (SSG) : The scap-security-guide パッケージは、Linux システム向けの最新のセキュリティ・ポリシーコレクションを提供する。このガイダンスは、セキュリティ強化に関する実践的なアドバイスのカタログで、該当する場合は、法規制要件に関連付けられる。 oscap-dockerの使用例 最初に、Security compliance of RHEL7 Docker containersの手順に沿って、環境をセットアップする。 ローカルに保存されたコンテナイメージのリストを表示する。 [root@rhel7 vagrant]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/rhel7 latest bd0240457182 5 weeks ago 205 MB docker.io/hello-world latest fce289e99eb9 9 months ago 1.84 kB イメージ名を指定して、脆弱性レポートを作成する。 結果は --report cve-report.html にHTML形式で出力される。 [root@rhel7 vagrant]# oscap-docker image-cve registry.access.redhat.com/rhel7 --results cve-results.xml --report cve-report.html 次のスクリーンショットは、--report cve-report.htmlの指定により出力されたHTMLファイルをブラウザで表示したものである。 こちらのオプションでは、セキュリティ評価を記述したOVALに従ってイメージを検査する。ここで指定したOVALでは、United States Government Configuration Baseline (USGCB / STIG) などのセキュリティ設定が遵守されていることをチェックする。 [root@rhel7 vagrant]# oscap-docker image registry.access.redhat.com/rhel7 oval eval --results oval-results.xml --report report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-oval.xml ベースイメージにRHELを使用してない場合は、検査することができない。RHELのコンテナのベースイメージには、OpenSCAPに検査に必要なメタ情報が含まれるためと思われる。 docker.io/maho/web-nginx:11 is not based on RHEL 参考資料 Dagda 既知の脆弱性、トロイの木馬、ウイルス、マルウェア、その他のDockerイメージ/コンテナ内の脅威の静的分析を実行し、異常なアクティビティを検出するためにDockerデーモンと実行中のDockerコンテナを監視するツールである。 Dagdaの内容を読むと、静的な脆弱性検査と、実行中コンテナの不審な動作にも対応する、大変優れたツールと思われる。しかし、出力はJSON形式で、Pythonのコードをコマンドラインから実行する。Dagdaは、ツールと呼ぶよりも、ソフトウェア部品と考えた方が良さそうだ。その後、Dagdaは、実行中のDockerコンテナの不審な振る舞いを監視するためにSysdig Falco に統合されている。さらに、CNCFの Sand Box プロジェクト Falco として登録された。 このDagdaは、脆弱性データとして、CVE(Common Vulnerabilities and Exposures)、BID(Bugtraq ID)、RHSA(Red Hat Security Advisories)、RHBA(Red Hat Bug Advisories)、そして、攻撃的セキュリティデータベース Exploit Database を MongoDBにインポートする。攻撃的セキュリティとは、攻撃者がどのような脆弱性を突いて攻撃をしかけてくるかを想定し、未然の策を講じておく、積極的な対策のことである。 次に、Dagdaは、OSパッケージやプログラミング言語の依存関係など、Dockerイメージにインストールされたソフトウェアに関する情報を取得し、MongoDBに保存された脆弱性情報と照合して、各製品とそのバージョンがないかどうかを確認する。Dagdaは、ClamAVをウイルス対策エンジンとして使用して、トロイの木馬(trojans)、ウイルス、マルウェア、およびDockerイメージとコンテナに含まれるその他の悪意のある脅威を検出する。 Dagdaは複数のコンテナベースイメージをサポート Red Hat/CentOS/Fedora Debian/Ubuntu OpenSUSE Alpine Dagdaは、複数の依存関係を分析するために、OWASP依存関係チェック+ Retire.jsに依存する。 java python nodejs js ruby php さらなる発展として、Falco Operator として、Kubernetesの実行中のアプリケーションの不審な振る舞いを検知するためのリアリタイム監視 オペレータ として開発が進んでいる。 参考資料 * Dagda, https://github.com/eliasgranderubio/dagda * Falco, https://falco.org/ * Falco operator, https://github.com/falcosecurity/falco-operator * Kubernetes に Falco を展開してアプリケーションの挙動をモニタリングする,https://medium.com/@makocchi/falco-with-kubernetes-ja-1e2c045b3840 Microscanner と Trivy Microscannerはインターネット越しに利用できるサービスなので、インストールしたり環境を作らなくても即に利用できる、TrivyはOSSで、どちらもAquaが提供する。 MicroScannerは、開発者向けの無料の画像脆弱性スキャナであり、Aquaのクラス最高の商用スキャナーと同じ脆弱性データベースを使用して最高の結果が得られるとのこと。 MicroScannerとAquaの商用製品との主な違いは、Dockerfile内で指定されたビルドステップ中に実行されること。 ADD https://get.aquasec.com/microscanner / RUN chmod +x microscanner RUN MicroScannerが重大度の高い脆弱性を検出すると、ゼロ以外の終了コードを返し、イメージのビルドを失敗停止させる。そのため、CICD��パイプラインに組み込み安く、脆弱性検査結果もビルドログに出力される。 そして、同じAquaのGitHubリポジトリから、コンテナー用のシンプルで包括的な脆弱性スキャナ Trivyがある。この開発者は日本人。 このソフトウェアは、OSパッケージ(Alpine、RHEL、CentOSなど)およびアプリケーションの依存関係(Bundler、Composer、npm、yarnなど)の脆弱性を検出。バイナリをインストールして、コンテナのイメージ名を指定してスキャンするだけで、簡単に利用できる。以下の例は、コンテナイメージ python:3.4-alpineをスキャンする例である。 $ trivy python:3.4-alpine 参考資料 Twistlock Twistlockはインターネット越しに利用できる商用サービス。各社クラウドサービスと連携した利用が想定され、AWS,Azure,GCPに加えて、IBM Cloud のサービスとも連携して利用可能。もちろん、Kubernetes と Docker、OpenShiftにも対応する優れたセキュリティ対策サービス。 デプロイからランタイムの範囲をカーバーするとのこと。そして、IBM Cloud セキュリティ・アドバイザーと連携して、問題を未然に防ぐ役割を果たす。 今年、Twistlockは、パロアルトネットワークスに買収された。 2019年7月9日 -パロアルトネットワークス(NYSE:PANW)、世界的なサイバーセキュリティのリーダー、それはツイストロックの買収を完了したことを発表しました、コンテナ・セキュリティのリーダー、そのプリズマ™クラウドのセキュリティを拡張します戦略。この買収により、ライフサイクル全体を通じて今日の最新のアプリケーションを保護する同社の能力がさらに向上し、組織は安全で信頼性が高くスケーラブルなイノベーションを提供できます。 参考資料 その他 Notary Notaryは、Dockerイメージの署名フレームワークのデファクトスタンダードで、Dockerはオープンソース化して CNCF へ寄贈(2017) Grafaes(ギリシャ語でスクライブ) Grafaesは、IBMとGoogleによって開発された。ソフトウェアサプライチェーンを監査および管理するための統一された方法を提供するOSSのアーティファクトメタデータAPIであり、IBM Vulnerability Advisor に採用されている。 Banyanops Collector Banyanopsコレクタは、コンテナイメージの内容を見るためのフレームワーク Cilium (スゥリウム)) Ciliumは、BPFとLinuxカーネル技術によって、アプリケーションコードやコンテナ構成を変更せずにセキュリティポリシーを適用および更新できる。CoreOS(現 Red Hat)によって開発された。 コンテナビルド時に、脆弱性スキャンを実施 CICDパイプラインの中に、脆弱性スキャンを組み込むことで、問題を早期に発見して、対策することができる。ビルドステップが完了したら、脆弱性スキャンを実行して、レポートする。重大な脆弱性が発見された場合は、次のテストステップに進めることなく、脆弱性対策を実施する。前述のスキャナーの中にも、CLIから脆弱性検査を実行できて、重大な脆弱性が発見されると終了コードによってステップを異常終了できるものがある。 参考資料 上記の参考資料と重複もあるが、記事を書くにあたり参考にした資料なので、残しておきたいので以下に列挙する。 Container Scanning, https://kubedex.com/container-scanning/ Detecting and blocking vulnerable containers in Kubernetes (deployments), https://banzaicloud.com/blog/anchore-image-validation/ Clair によるコンテナ・イメージの脆弱性検出, https://www.ogis-ri.co.jp/otc/hiroba/technical/clair/part1.html コンテナの脆弱性をスキャンするCoreOSの「Clair」, https://japan.zdnet.com/article/35080056/ Clairで、Dockerイメージの脆弱性スキャンを試す,https://kazuhira-r.hatenablog.com/entry/2019/01/12/224956 Dockerコンテナに対する脆弱性スキャン機能をRed Hatが提供。サードパーティ製品によるスキャンも可能,https://www.publickey1.jp/blog/16/dockerred_hat.html 気軽に使えるContainerの脆弱性スキャンツール Trivy を試してみた,https://tech.recruit-mp.co.jp/infrastructure/continuous-integration-vulnerability-detection-tool-trivy/ 最近話題のコンテナ脆弱性ツール「Trivy」を試してみた, https://dev.classmethod.jp/etc/trivy_poc/ CIで使えるコンテナの脆弱性スキャナ,https://qiita.com/knqyf263/items/dc179f9223fc31b5a51c Container Registry の脆弱性スキャンで安全な CI/CD パイプラインを、https://cloud.google.com/blog/ja/products/gcp/guard-against-security-vulnerabilities-with-container-registry-vulnerability-scanning Red Hat、新しいスキャニング機能でよりセキュアなコンテナを実現、https://www.redhat.com/ja/about/press-releases/rhjapan-red-hat-delivers-more-secure-containers-new-scanning-capability パッチおよび脆弱性管理プログラムの策定、https://www.ipa.go.jp/files/000025330.pdf Top 7 Kubernetes security tools to harden your container stack,http://techgenix.com/kubernetes-security-tools/ Kubernetesのセキュリティについて整理してみた件,https://qiita.com/mamomamo/items/1651b8f9e44938c0de15 エンジニアなら脆弱性情報を読めるようになろう,https://adtech.cyberagent.io/techblog/archives/4025 コンテナ・セキュリティの 10 大要素,https://www.redhat.com/cms/managed-files/cl-container-security-openshift-cloud-devops-tech-detail-f7530kc-201705-a4-ja.pdf コンテナによるレガシーシステムのモダナイゼーション,http://www.projectatomic.io/blog/ Configure a Security Context for a Pod or Container,https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ Kubernetesに深刻な脆弱性,https://japan.zdnet.com/article/35129584/ Kubernetesを監視, https://www.elastic.co/jp/what-is/kubernetes-monitoring OpenShift4と新しいKubernetesエコシステム, http://people.redhat.com/kfujii/cc2019/R305S2_RHC_2019_OpenShift%204%E3%81%A8%E6%96%B0%E3%81%97%E3%81%84Kubernetes%E3%82%A8%E3%82%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0.pdf?fbclid=IwAR3qpeC1h4M9wP_326RFd2yPWN2F4dRTHfpdr9TTW7xwDgihfThbpczePAA Falco Operator, https://operatorhub.io/operator/falco Kubernetes に Falco を展開してアプリケーションの挙動をモニタリングする,https://medium.com/@makocchi/falco-with-kubernetes-ja-1e2c045b3840 10+ top open-source tools for Docker security, https://techbeacon.com/security/10-top-open-source-tools-docker-security
0 notes
Text
2019/06/24-30
*AWS、言語やプロトコルに依存しないインターフェイス定義言語(IDL)「Smithy」をオープンソースで公開 https://www.publickey1.jp/blog/19/awsidlsmithy.html >AWSは、このAPIを定義する言語、およびその定義からAPIを実装する >コードを生成するツールからなる「Smithy」ベータ版をオープン >ソースとして公開しました。
>つまりSmithyを用いてAPIを定義すると、そこからさまざまなプログラ >ミング言語に対応したAPIのソースコードとドキュメントが生成される >わけです。
*なるべく切れない回線のつくりかた(物理) https://qiita.com/norisionori/items/01784500e9f4a6d0474b >共同溝化されているエリアは圧倒的に障害率が低いです。最近整備さ >れたということもあるのでしょうが、第一に優先する条件です。
>古い雑居ビル街はおすすめしませんが、巨大ビル(六本木のアレみた >いなもの)もまたおすすめできません。キャリアだけでなくビル内 >専用の光ファイバ業者をはさむため、復旧が遅くなる傾向があります。
>テナントを探すときは、シャフト(縦貫)を必ず見せてもらってくだ >さい。ケーブル配管がテナントごとに分離され、綺麗に配線されてい >るビル���らば最高です。
>建物そのものと同じくらい重要なのがビル管です。24/7で即応でき、 >機器室に入室できることを確認しましょう。
>残念ながら故障のほとんどはこれらの自前設備が原因です。
>さんざん建物や環境ばかりを書いたのは、アクセス回線光ケーブルを >冗長するのは非常に困難だからです。この国ではごく一部を除いて、 >アクセス回線の光ファイバを持っているのはNTTと電力系事業者だけ >です。つまりキャリアっぽい会社に依頼しても結局NTTのダーク >ファイバを利用することになります。
>東京ならばNTTとKDDIの冗長、またはNTTデュアルアクセス、KDDIデュ >アルアクセス等を選択するくらいしかありません。
>しかし小規模な集団では逆にバックアップにモバイル回線を利用する >という選択肢が生まれます。最近は法人向けの設置型4G端末もあり、 >緊急時のバックアップとしては非常に優秀なので持っておくことを >おすすめします。
>最も重要なのは、自分の設備が悪いのか、キャリアやSIerの機器が >悪いのかを把握できることです。
>冒頭で「こと物理に関して、気を付けるべきことというのを見たこと >がありません」と書きましたが、こうして考えてみると、気を付けた >ところでどうしようもないから誰も書かないんじゃないか、というのが >正直なところです。
>結局のところ、オフィスの物理回線に依存する部分をなくし、社内閉域 >など構築せず、インターネット回線さえあれば世界中どこからでも業務 >ができる状態にしておくことが、回線障害と業務継続という目線だけで >見れば最も安全だと思います(ただしこれはセキュリティ対策との >トレードオフとなるでしょう)
>災害時に運用/情報システム部門がすべきことは「通信の復旧」ではなく >「情報力を活かして自社の状況を整理し支援すること」だと信じています。
*EC2のSSHアクセスをIAMで制御できるEC2 Instance Connectが発表されました https://dev.classmethod.jp/cloud/aws/ec2-instance-connect/ >EC2 Instance Connectでは基本的にパブリックIPとネットワークの >接続性が必要となります。しかしSession ManagerではPrivateLinkを >経由することでプライベートサブネットにも接続可能です。
>EC2 Instance Connectでは以下のディストリビューションがサポート >されています。また、Amazon Linux 2のバージョン2.0.20190618以降 >ではEC2 Instance Connectが設定済みです。 > > - Amazon Linux 2 (任意のバージョン) > - Ubuntu 16.04 以降
*AWSコスト最適化入門 ─ クラウドで「こんなにかかるはずじゃなかった!」を避けるツールと計測 https://employment.en-japan.com/engineerhub/entry/2019/06/28/103000 >これに対しクラウドの場合、データセンターのラック代や電気代と >いったファシリティ関連のコストはかからず、サービスの利用料を >払えばよいだけです。クラウドのサービスにかかるコストは、大きく >3つに分類できます。コンピューティングとストレージとネットワークです。
>もう1つは「TCO計算ツール」です。AWS Simple Monthly Calculator >よりもシンプルなツールで、「今、データセンターにサーバがどのく >らいあるか」を入力すると、それらをAWSに移行した場合の料金を >計算してくれます。 > ... >うまくエラーを出さないように使うことが難しいため、私はほとんど >使っていません。
>計測に使えるツールもいくつかありますが、まずは請求書をしっかり >チェックすることです。一通り目を通してみて「自分が使った記憶の >ないサービス」や「使わないはずのリージョン」での費用が発生して >いないかを確認すべきでしょう。
>毎月の請求書チェックに加え、「利用額が○○ドル以上になったら通知 >します」というアラームを設定しています。
>さらにAWS Trusted Advisorを有効にすれば、アカウントのリソース利用 >状況を調査し、パフォーマンス、セキュリティに加え、コスト、耐障害性、 >サービス数の上限という5つの観点から「こうした方がいいですよ」という >アドバイスを表示してくれます。 > >ただし、標準で利用できる項目はサービス数の上限とセキュリティの >2つだけで、コストも含む残り3つの要素を調査するにはAWSとの >有償サポート契約が必要になります。
>まずクラウド利用時の大前提ですが、「余計なもの」「オーバー >スペックのもの」は用意すべきではありません。適切なサイズの >ものを適切な数だけ用意し、必要になったときにはじめて拡張する、 >それが大原則です。
>コンピューティングについてはこのようにリザーブドインスタンスの >購入がお勧めです。
>Glacierという激安のストレージがありますから、データの性質や重要度 >に応じて、使うストレージを適切に設定するのがいいでしょう。
>むしろ、アプリケーションやWebサーバ側で、テキストデータには >圧縮をかけたり、スタイルシートやJavaScriptといった要素につい >てはきちんとminify(軽量化)して転送データ量を削るといった >具合に、基本に忠実かつ丁寧に作ることによって、クラウドの >ネットワーク利用料を減らせますし、ユーザーにとってもやさしい >作りになると思います。
>あくまで1つの例ですが、1日に20万ページビューくらいある読み物系 >のサイトを、EC2の仮想サーバ上に立てたWebサーバとELB(ロードバラ >ンサ)で処理し、データベースにはマネージドサービスのRDSを利用 >する構成を考えた場合、何も最適化を考えずにAWS上でホストすると、 >月額で25-30万という額になってしまうケースもあります。
0 notes
Text
Linux 端口转发 端口映射
Linux 端口转发 端口映射
可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口。在之前的 本地端口转发中,首先要满足的是c5防火墙上必须打开22端口,但是在现实生活中,企业处于安全考虑,一般是不会打开防火墙,只允许出不允许进。命令中的 和 必须是同一台机器么? SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。如果你的PC无法直接访问到ssh服务器上,但是只有http代理可以访问,那么我们要建立这个socks5的动态端口转发只能为他加上一个代理了。
我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。其他机器发起的连接只会得到“ connection refused. ”。反复检查路由器端口映射是否准确,设置转发规则,将80端口指向到内网哪里一个IP。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。 LdapClientHost 是应用的客户端,但却是 SSH Server ;而 LdapServertHost 是 LDAP 的服务端,但却是 SSH Client 。
本文将介绍的是如何在服务器上部署 Jupyter notebook 并通过更加安全的 SSH 通道访问。 Requests ssh to go to background just before command execution. N Do not execute a remote command.这个时候,我们的名为 ubuntu 的文件夹里面会多几个文件,其中 Vagrantfile 是 Vagrant 虚拟机的配置文件,这个先不用管,以后再说。花生壳是一个动态域名解析软件。例如, Telnet, SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
端口映射功能还可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等协议。如果是局域网内或作为服务器,需要共享上网,可以把 本地端口接受来自其它主机的连接(Local ports accept connections from other hosts)钩上(也就是监听 0.0.0.0 端口,若非公网IP主机,是没法与非同一局域网的她/他共享的!公共 IP 地址:选择“新建”并在字段中键入“MyPublicIP”。使用网络安全组 (NSG) 规则创建虚拟网络和 VM。如果 Client 要对 Server 的多个端口进行扫描 ( 或是多个 Server 的多个端口 ) ,逐个配置转发规则很不现实。还有在配置规则时,不能将127.0.0.1作为连接地址。
0 notes
Text
Linux 端口转发 端口映射
Linux 端口转发 端口映射
可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口。在之前的 本地端口转发中,首先要满足的是c5防火墙上必须打开22端口,但是在现实生活中,企业处于安全考虑,一般是不会打开防火墙,只允许出不允许进。命令中的 和 必须是同一台机器么? SSH 端口转发是通过 SSH 连接建立起来的,我们必须保持这个 SSH 连接以使端口转发保持生效。如果你的PC无法直接访问到ssh服务器上,但是只有http代理可以访问,那么我们要建立这个socks5的动态端口转发只能为他加上一个代理了。
我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。其他机器发起的连接只会得到“ connection refused. ”。反复检查路由器端口映射是否准确,设置转发规则,将80端口指向到内网哪里一个IP。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。 LdapClientHost 是应用的客户端,但却是 SSH Server ;而 LdapServertHost 是 LDAP 的服务端,但却是 SSH Client 。
本文将介绍的是如何在服务器上部署 Jupyter notebook 并通过更加安全的 SSH 通道访问。 Requests ssh to go to background just before command execution. N Do not execute a remote command.这个时候,我们的名为 ubuntu 的文件夹里面会多几个文件,其中 Vagrantfile 是 Vagrant 虚拟机的配置文件,这个先不用管,以后再说。花生壳是一个动态域名解析软件。例如, Telnet, SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
端口映射功能还可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等协议。如果是局域网内或作为服务器,需要共享上网,可以把 本地端口接受来自其它主机的连接(Local ports accept connections from other hosts)钩上(也就是监听 0.0.0.0 端口,若非公网IP主机,是没法与非同一局域网的她/他共享的!公共 IP 地址:选择“新建”并在字段中键入“MyPublicIP”。使用网络安全组 (NSG) 规则创建虚拟网络和 VM。如果 Client 要对 Server 的多个端口进行扫描 ( 或是多个 Server 的多个端口 ) ,逐个配置转发规则很不现实。还有在配置规则时,不能将127.0.0.1作为连接地址。
0 notes