NoOps

Ops make no ops | Ops的目标是没有Ops,嗯!

2014 小米运维部校招笔试题 卷A

作者: |   6,840 浏览  | 

一、linux基础

1)linux系统中如何获取pid为100的进程所监听的tcp端口,请给出详细命令?

2)如何查找在/home/work/log/路径下,修改时间在3天以前的文件,并将这些文件mv到/home/work/log/backup下?

3)操作系统中,父进程需要传输一份1KB的数据给子进程,有几种方法可以实现?并请给出一种方法的代码实现(语言不限)?

4)需要抓取eth1网卡上从127.10.32.5发到本机8080端口的数据包,请列举你能想到的工具或者方法?并给出一个具体的方法的实现(详细命令或者代码)?

 

二、系统/网络

    给一台服务器安装linux操作系统,请回答在安装和使用过程中遇到的一些问题:

1)服务器有6块600G的SAS磁盘,通过阵列卡做RAID5,请问实际操作系统可使用的空间是多大?

2)网络管理员告诉我们这台服务器使用10.0.0.128/26段中的第一个地址,网关是这段地址中的最后一个地址。请列出机器的IP地址、子网掩码和网关。

3)服务器交付业务方使用后,使用netstat命令发现有大量的time_wait连接,请简述time_wait连接存在的原因。

4)简述TCP建立连接的过程;运维中经常nmap进行端口扫描,描述nmap进行TCP扫描的原理。

5)Zmap是一个号称44分钟可以扫遍全球公网机器端口。结合TCP三次握手原理和系统编程知识,简述类似产品的设计思想,并尝试描述你的实现。

 

三、开发/安全

1)http keep-alive的作用是什么,有什么优缺点?

2)简述cookie的作用,以及http cookie和session的区别和联系

3)对于cookie劫持攻击,给出至少两种防御方案

4)xss攻击中,给出一个窃取用户浏览器cookie的xss-payload

5)xss问题产生的本质是什么,并阐述防御方案

6)编码实现一个简单的http server,至少支持GET请求解析和响应,编程语言不限

Read More →

论怎么做好运维自动化 2

作者: |   6,514 浏览  | 

本篇文章未经允许,不得转载! 内容未分级,有可能会对部分读者造成不适,还请谅解。

继续标题党,分享经历过的案例.
未满十八岁请在监护人陪同下阅读~~~如感不适,请立即停止,用大量清水冲洗面部!

选择合适的工具

自动化的方向由你决定,而不是工具

近些年出现了很多运维或辅助运维工具,不胜枚举。
没有能力,也不愿意去归类和定义每一种运维工具,这里只是简单的罗列下:

有人说puppet、chef已经过时,是老一代的运维工具。saltstack和ansible才是自动化的未来。
只能说每种工具都有它自己的设计理念和适用场景。确定你的自动化运维方式,选择合适的工具。

puppet的强项在于配置状态的管理,灵活方便的DSL。
saltstack和ansible在实时批量操作方面都比较好,描述能力方面差与puppet
puppet,ansible我们都在用,puppet更多用在部署语义描述上,当然也有小范围的服务使用它进行配置状态维护;ansible更多是在偏临时类批量操作上,非常喜欢ansible的部署和使用方式,特别在批量操作方面很像度厂的lh系列工具。
Read More →

golang从MySQL中读取从库同步状态数据

作者: |   6,026 浏览  | 

用golang开发服务端程序,开发效率和程序运行效率都还蛮不错。但是有些功能实现起来,也还是挺蛋疼的。

最近,由于数据库中间层项目需要监测从库的同步状态,屏蔽同步故障和同步延迟较大的从库,因此需要监测从库的slave status。这个功能用其它语言实现起来非常简单,但是golang却把笔者卡住了半天时间。试来试去,最终总算解决(汗)。

大体过程如下:

查看从库状态,大家都知道用

,golang代码写起来也不难:

获取结果的时候问题来了,不同版本的MySQL返回的结果列数不一样,笔者用的MySQL是官方5.5版本,会返回40列数据,肯定不能用枚举的方式。OK,先试试字符串Slice。

程序运行报错:

Read More →

Ubuntu下连接Juniper Network Connect VPN

作者: |   1,882 浏览  | 

网上找了很多资料,都需要安装java环境,然后链接32bit so文件到firefox。
按照步骤折腾了好久,各种安装、卸载,果断放弃……

终于在网上找了一篇文章,可以不需要安装java。分别在ubuntu 12.04和kali 上验证通过。
地址:http://www.rz.uni-karlsruhe.de/~iwr91/juniper/

关键步骤说明:

  1. 先用浏览器登陆公司的sslvpn,输入账号密码后,在浏览器输入https://xxxxxx/dana-cached/nc/ncLinuxApp.jar下载这个jar文件(xxxxx是你公司的vpn地址)
  2. 证书文件获取,firefox->工具->页面信息->安全->查看证书->详细信息->导出
  3. 想使用jnc的图形界面,需要java环境
  4. 需要安装32bit lib: sudo apt-get install libc6-i386 lib32z1 lib32nss-mdns
  5. vpn.conf文件内容如下:
    Read More →

complete小试——linux下命令TAB补全

作者: |   2,476 浏览  | 

complete是bash buildin命令,可以实现命令的tab补全

最简单的使用方式:
complete -W "192.168.1.1 192.168.1.2" ssh
这样在输入ssh 后,按tab可以提示+补全IP地址

很多运维同学登陆线上服务器的ssh tab补全使用了complete -F 函数功能,读取known_hosts里面的机器名进行提示补全。
网上的中文资料很少,分享一个最简单的实例给大家:

例:
编写一个文件名为god的文件,放置在/etc/bash_completion.d/,内容如下:

重新登陆一下,然后输入god [TAB],就可以提示和补全xiaomi、noops、blog关键字了

shell语法帮助——explainshell

作者: |   1,591 浏览  | 

最下面的代码已经发布成gem包,gem install eshell
github: https://github.com/xiaomi-sa/eshell


张汉东推荐了一个比较好玩的网站,http://explainshell.com
输入shell命令,可以将命令功能、参数说明等内容展现出来,比较适合linux新手学习使用。

github上有一个ruby实现的客户端,安装gem install explain_shell
不过它的功能只是根据输入的参数打开浏览器,访问explainshell.com这个网站,所以自己重新写了一个命令行下展示的工具。

用ruby重新写了一个查询展现工具,截屏如下:

explain_shell
Read More →

使用zabbix监控交换机端口流量

作者: |   11,437 浏览  | 

        前一阵我们想用zabbix监控交换机网卡出口流量,下面和大家一并分享下实现方法。
         1)假设我们想获取交换机出口流量,则需要先找到该接口出口字节数所对应的OID。为什么不直接找交换机出口流量?因为我们找来找去实在是在不到直接表明出口流量的OID,只能找到该出口字节数所对应的OID。那么如何获取OID?通过MIB浏览器可以获取到相应交换机接口流量属性的OID。我们使用getif这个软件来获取交换机OID,下面是这个软件官网链接,有兴趣的朋友可以下载试用一下。
http://www.wtcs.org/snmp4tpc/getif.htm
        2)在填写好SNMP参数后,点击start,来完成对交换机OID的获取。在interface选项卡,可以查看到交换机接口。
clipboard
        3)选择你要监控的端口记下端口对应的int字段,然后点击MBrowser。OID成树状结构(TCP/IP详解卷一有详细介绍),依次选择iso->org->dod->internet->mgmt->mib-2->interface->ifTable->ifEntry->ifOutOctets。
clipboard1

LVS-ospf集群

作者: |   31,033 浏览  | 

LVS目前除了本身的NAT、DR和TUN模式,还有淘宝开源的fullnat模式,个人了解(待确认)LVS在各大公司的使用情况是:
百度 – BVS(现淘宝的 普空 之前在百度搞得类似fullnat项目,未开源) 结构是fullnat模式+ospf等价多路径
阿里 – LVS(fullnat模式,已开源)结构是fullnat模式+ospf等价多路径,通过交换机ospf的一直性hash来避免session不一致的情况
腾讯 – TWG(也是类似于fullnat的项目,未开源)结构是fullnat模式+ospf等价多路径,通过LVS集群定期同步来实现session一致

LVS在小米的业务前端已经使用几年时间,从最开始的DR模式,到现在部分使用fullnat模式,整体上还是不错的:

DR模式下:CPU E3-1230 V2 @ 3.30GHz + 32G + Intel 82580 Gb网卡 + sata盘:单台极限pps能跑到接近200W,应对电商的抢购活动完全没有压力

但最近也现一些问题:抢购时入站流量将Gb网卡跑满,导致丢包;在HA模式下,主机宕机之后需要advert_int 秒(keepalived 配置项)来切换至备机,也就是说在切换的过程中,服务是不可用的;而且现有结构下,无法线性横向扩展(一个VIP只能由一台服务来提供服务),只能通过提升机器配置来应对流量的上涨

为了解决上面这些问题,所以我们开始尝试LVS(DR)通过ospfd,做lvs集群,实现一个VIP,多台LVS同时工作提供服务,不存在热备机器,如图:

5
Read More →

Dionaea低交互式蜜罐部署详解

作者: |   1,129 浏览  | 

1. Dionaea 低交互式蜜罐简介

Dionaea(捕蝇草) 低交互式蜜罐(http://dionaea.carnivore.it) 是 Honeynet Project 的开源项目,起始于 Google Summer of Code 2009,是Nepenthes(猪笼草)项目的后继。Honeynet Project 是成立于 1999 年的国际性非盈利研究组织,致力于提高因特网的安全性,在蜜罐技术与互联网安全威胁研究领域具有较大的影响力。

Dionaea 蜜罐的设计目的是诱捕恶意攻击,获取恶意攻击会话与恶意代码程序样本。它通过模拟各种常见服务,捕获对服务的攻击数据,记录攻击源和目标IP、端口、协议类型等信息,以及完整的网络会话过程,自动分析其中可能包含的 shellcode 及其中的函数调用和下载文件,并获取恶意程序。

有别于高交互式蜜罐采用真实系统与服务诱捕恶意攻击,Dionaea 被设计成低交互式蜜罐,它为攻击者展示的所有攻击弱点和攻击对象都不是真正的产品系统,而是对各种系统及其提供的服务的模拟。这样设计的好处是安装和配置十分简单,蜜罐系统几乎没有安全风险,不足之处是不完善的模拟会降低数据捕获的能力,并容易被攻击者识别。

2. Dionaea 的整体结构和工作机制

Dionaea是运行于Linux上的一个应用程序,将程序运行于网络环境下,它开放Internet上常见服务的默认端口,当有外来连接时,模拟正常服务给予反馈,同时记录下出入网络数据流。网络数据流经由检测模块检测后按类别进行处理,如果有 shellcode 则进行仿真执行;程序会自动下载 shellcode 中指定下载或后续攻击命令指定下载的恶意文件。从捕获数据到下载恶意文件,整个流程的信息都被保存到数据库中,留待分析或提交到第三方分析机构。
Dionaea 整体结构和工作机制如图:

Dionaea 整体结构和工作机制
Read More →