转自:http://www.cnblogs.com/sixiweb/archive/2012/11/20/2778732.html

搭建过程参考这篇文章

先说我搭建过程中出现的问题吧:

按照 教程搭建好之后出现了619错误,查看日志:/var/log/messages:

Nov 20 09:46:20 localhost pptpd[7498]: GRE: read(fd=6,buffer=8059680,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs

Nov 20 09:46:20 localhost pptpd[7498]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)

网上搜索了下,是因为日志配置的原因。编辑/etc/pptpd.conf文件,注释掉logwtmp选项,重启pptpd服务。

后来还是不行,最后修改windows端的vpn拨号属性。:

安全:数据加密,选择:可选加密(没有加密也可以连接)

允许使用这些协议 :选择:除了“自动使用我的 windows 登录名称” 不选择之外,其他都选择。

经过这么一番折腾之后,我的vpn服务器就假设好了。qq重新登录 的那一刻,看到了本次登录  美国,爽啊。

为了防止该文章丢失,转载如下:

=================================

本文介绍在安装CentOS操作系统的Xen VPS上,如何搭建PPTP VPN服务。包括PPTP的安装、配置,以及相应的iptables规则。本文暂时不涉及PPTP流量控制的部分,等抽空学明白了FreeRADIUS,再来写续篇。2011年7月20日更新:在安全建议这一部分,增加了使用不同的IP地址,分别提供VPN服务和Web等其他常规服务,以及使用不同IP地址时如何书写iptables规则的内容。

写在前面

在Godaddy一美元COM域名的怂恿下,这几天先是拿到了这个gnailuy.com,然后觊觎了很久的VPS也就顺便到手了。所以说万事嘛,总是要有个开端。

按照之前的构想,下个月起这个VPS将由我和几个好朋友合租,配置虚拟主机,各自建立自己的小网站,还能合用VPS上的VPN服务。从成本上考虑,只要有些钻研技术的精神,加上几个志同道合的朋友,合租一台不太高端的VPS自建服务器,应该还是低于同时购买域名、Web托管以及VPN这几样的成本之和的。这是第一个月,我们会先熟悉熟悉技术,做做各种测试,多学习多发些技术文章,供有同样想法的朋友们借鉴。

正文

在Google苦海里游了两天两夜,终于完成了PPTP VPN还有这个Wordpress小站的基本配置,今天先写一下VPN。这些天因为嫌Google中文首页太丑,搜索资料的时候大都是用英文,本来也打算用英文写这篇文章,但考虑到下面两个原因,于是作罢:一是到自己这英语写作能力,实在不济;二是可能热衷于搭建VPN的个人或者团体,大概也许基本都是在中国大陆上网的吧,o(∩∩)o…

之所以选择PPTP VPN,是考虑到客户端连接起来会比较方便。我们几个人主要都是在Linux Desktop、Windows还有Android上使用VPN,这些终端原生都有连接PPTP的客户端。当然还有一个原因,就是我们购买的VPS是基于Xen PV技术的,可以搭建PPTP。这个原因本来其实是结果,当初要买基于Xen PV的而不是OpenVZ的,就是因为打算在上面搭建PPTP服务。BTW,Xen PV是种半虚拟化技术,不能跑Windows,但据说比全虚拟化的Xen HVM跑Linux效率高。

平台简介

  • “硬”件平台:Xen PV, 215M Memory, 512M Swap, 1T Transfer
  • 操作系统:CentOS release 5.6 (Final)
  • 内核:2.6.18-194.32.1.el5xen i686 i386 GNU/Linux
  • 网络:1 IP, 1 Network Adapter(eth0)

配置概览

PPTP的配置主要有下面五个步骤:

  • 验证内核是否加载了MPPE模块
  • 安装所需的软件包
  • 配置PPP和PPTP的配置文件
  • 打开内核的IP转发功能
  • 启动pptpd守护进程
  • 配置iptables防火墙放行和转发规则

详细步骤

开机以后,首先是登录VPS。我平时用Linux,就直接ssh命令登录上去。如果是在Winodws下,推荐使用PuTTY,有一点需要注意,就是连接之前最好把字符集设置成UTF-8,因为Linux默认的locale都是UTF-8了,如果出现非ASCII字符,不设置字符集就会出现乱码,具体的设置方法Google知道。

下面的所有配置操作都需要root权限,如无特别说明,所有命令都在root的家目录下执行。顺便,最好在VPS上禁用root直接登录,尽量建立一个普通用户然后su到root,具体细节偏题了,也请自行Google。

1、验证内核是否加载了MPPE模块:

内核的MPPE模块用于支持Microsoft Point-to-Point Encryption。Windows自带的VPN客户端就是使用这种加密方式,主流的Linux Desktop也都有MPPE支持。其实到了我们这个内核版本,默认就已经加载了MPPE,只需要使用下面命令验证一下,显示MPPE ok即可:

modprobe ppp-compress-18 && echo MPPE is ok

2、安装所需的软件包:

–ppp–

PPTP使用PPP协议对用户数据进行封装,然后将PPP数据帧封装在IP数据报里,经由IP网络传播。因此首先需要支持PPP协议,我们使用的完整版CentOS已经自带了ppp这个软件包,如果你安装的是Minial CentOS之类的精简系统,则可能需要下面命令安装ppp:

yum install ppp

作为一个懒人,如果没有特殊的自定义要求,我一般尽量用yum安装软件。只要软件源里有,yum比较方便一些,还能自动解决依赖关系。

–pptpd-

有了PPP协议支持,接下来安装pptpd。首先到这里找到最新版适合你的平台的pptpd。CentOS与RHEL通用,Fedora系统则可以使用后缀含fc字样的包,然后还需要根据内核选择32位或者64位的包。找到正确的软件包以后,复制其URL,然后用wget下载到root的家目录(或者rpm -ivh URL直接安装也行)。譬如我的32位内核CentOS 5,使用下面命令下载:

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm

这篇文章默认不考虑”wget: command not found”此类初级的错误。如果看到类似错误,一是检查命令有没有拼错,二是yum install it,三是Google it。其实,这篇文章里总共也用不到几条容易Not Found的命令。

下载完成后,安装:

rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm
–iptables–

同样,如果不是Minial的系统,应该不会没有安装iptables。这是Linux下最流行的防火墙,默认应该就能找到,如果没有,则:

yum install iptables

然后像是iptables这样的软件,对服务器非常重要。虽然还没有配置防火墙的规则,装完就打开吧(只要默认放行ssh的22端口就没问题),打开以后还需要设置一下,在主要的运行级别自动启动:

 iptables on

3、配置PPP和PPTP的配置文件:

接下来需要对ppp和pptpd进行配置,编辑它们的几个配置文件。如果有Linux基础的话,当然推荐使用vi/vim来编辑配置文件。如果不熟悉也不想熟悉vi,那么可以用更容易上手的nano替换下面我将要使用的vi命令。本文不涉及文本编辑器的基础知识,只需要知道如何打开文件、编辑文件、保存文件和退出文本编辑器就可以了。

这些配置文件中,#号开头的行均为注释,对配置不起作用。我们不必关心注释,所以下面我将使用类似

grep ^[^#] /etc/ppp/options.pptpd

这样的命令,过滤出配置文件中有效的行显示在本文正文中。你在编辑的时候,只需要添加或修改这些有效的行,把不需要的行前面加上#号注释掉即可。

–ppp–

配置ppp需要编辑它的两个配置文件,一个是option(选项)文件,一个是用户账户文件。首先编辑option文件:

vi /etc/ppp/options.pptpd

我编辑这个文件时,它已经是存在的,并且其中的内容也几乎不需要编辑,如果这个文件不存在,自行创建它并填入下面的有效配置就行了。下面是这个文件中有效的行:

  1. name pptpd
  2. refuse-pap
  3. refuse-chap
  4. refuse-mschap
  5. require-mschap-v2
  6. require-mppe-128
  7. ms-dns 8.8.8.8
  8. ms-dns 8.8.4.4
  9. proxyarp
  10. lock
  11. nobsdcomp
  12. novj
  13. novjccomp
  14. nologfd

其中name后面的pptpd是服务名称,可以任意修改成你喜欢的名字,在后面的配置中将对应的pptpd替换为你在这里修改的名字即可。

接下来的几行以refuse或者require开头的指令,是配置拒绝和接受的加密方式,这里接受的mschap-v2和mppe-128都是较新的比较安全的加密方式,其中mppe-128需要第一步中验证的内核模块支持。

另外两个比较重要的行就是ms-dns了,它们指定VPN使用的DNS服务器。毕竟VPS位于国外,所以推荐使用上面通用的Google Public DNS,当然也可以修改为你的VPS所在ISP提供的DNS。

剩下后面几个选项,就不在这里叙述了,需要知道其含义的童鞋可以参考这个范例文件中的注释。

接下来修改另一个,存储着用户账户的文件:

vi /etc/ppp/chap-secrets

这个文件非常简单,其中用明文存储VPN客户的用户名、服务名称、密码和IP地址范围,每行一个账户:

  1. username1    pptpd    passwd1    *
  2. username2    pptpd    passwd2    *

其中第一第三列分别是用户名和密码;第二列应该和上面的文件/etc/ppp/options.pptpd中name后指定的服务名称一致;最后一列限制客户端IP地址,星号表示没有限制。

–pptpd–

下面编辑pptpd的配置文件:

vi /etc/pptpd.conf

这个文件中有效的行也很少:

  1. option /etc/ppp/options.pptpd
  2. logwtmp
  3. localip 192.168.0.1
  4. remoteip 192.168.0.207-217

其中option选项指定使用/etc/ppp/options.pptpd中的配置;logwtmp表示使用WTMP日志。

后面两行是比较重要的两行。VPN可以这样理解,Linux客户端使用一个虚拟网络设备ppp0(Windows客户端也可以理解成VPN虚拟网卡),连接到服务器的虚拟网络设备ppp0上,这样客户端就加入了服务器端ppp0所在的网络。localip就是可以分配给服务器端ppp0的IP地址,remoteip则是将要分配给客户端ppp0(或者虚拟网卡)的。

这两项都可以是多个IP,一般localip设置一个IP就行了,remoteip则视客户端数目,分配一段IP。其中remoteip的IP段需要和localip的IP段一致。

localip和remoteip所处的IP段可以随意些指定,但其范围内不要包含实际网卡eth0的IP地址。一般情况下,使用上面配置文件中的配置就好使了,你需要做的只是把192.168.0.207-217这个IP区间修改成你喜欢的192.168.0.a-b,其中1<a<b<255。

4、打开内核的IP转发功能:

要使VPN服务器可以作为网络请求的中转代理,能够使客户端通过VPN访问Internet,还需要开启内核的IP转发功能。可以编辑配置文件:

vi /etc/sysctl.conf

找到其中的行:

net.ipv4.ip_forward = 0

修改为:

net.ipv4.ip_forward = 1

然后执行下面命令使上述修改生效:

sysctl -p

5、启动pptpd守护进程:

上面配置完成后,就可以启动pptpd进程并设置自动启动了,和上面iptables的例子类似:

 pptpd on

6、配置iptables防火墙放行和转发规则:

最后,还需要配置防火墙。这里配置防火墙有三个目的:一是设置默认丢弃规则,保护服务器的安全;二是放行我们允许的数据包,提供服务;三是通过配置nat表的POSTROUTING链,增加NAT使得VPN客户端可以通过服务器访问互联网。总之我们的原则就是,只放行我们需要的服务,其他统统拒绝。

首先介绍跟PPTP VPN相关的几项:

  • 允许GRE(Generic Route Encapsulation)协议,PPTP使用GRE协议封装PPP数据包,然后封装成IP报文
  • 放行1723端口的PPTP服务
  • 放行状态为RELATED,ESTABLISHED的入站数据包(正常提供服务的机器上防火墙应该都已经配置了这一项)
  • 放行VPN虚拟网络设备所在的192.168.0.0/24网段与服务器网卡eth0之间的数据包转发
  • 为从VPN网段192.168.0.0/24转往网卡eth0的出站数据包做NAT

如果你其他的防火墙规则已经配置好无需改动,只需要增加上述相关VPN相关的规则,那么执行下面几条命令即可(第三条一般不用执行,除非你原来的防火墙连这个规则都没允许,但是多执行一遍也无妨):

  1. iptables -A INPUT -p gre -j ACCEPT
  2. iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
  3. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  4. iptables -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT
  5. iptables -A FORWARD -d 192.168.0.0/24 -i eth0 -j ACCEPT
  6. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

上述的IP段192.168.0.1/24可能需要修改成/etc/pptp.conf中你配置的localip和remoteip所在地IP段。

在我们这台服务器上,还需要一些其他的服务:

  • 22端口的SSH(非常重要!如果不小心连这个都忘了,基本就只能给VPS服务商发Ticket了)
  • 21端口的FTP控制
  • 80端口的Web服务
  • 允许响应各种icmp请求

根据上述需求,加上服务器的基本要求,我写了下面的shell脚本。这个脚本默认DROP掉没有明确允许的规则,然后允许包括上面VPN相关的规则和上述几项其他服务所需的规则。可以根据你的实际需求,修改这个脚本,然后执行这个脚本快速部署iptables规则。

  1. #!/bin/bash
  2. ### Clear Old Rules
  3. iptables -F
  4. iptables -X
  5. iptables -Z
  6. iptables -t nat -F
  7. iptables -t nat -X
  8. iptables -t nat -Z
  9. ### * filter
  10. # Default DROP
  11. iptables -P INPUT DROP
  12. iptables -P FORWARD DROP
  13. iptables -P OUTPUT DROP
  14. # INPUT Chain
  15. iptables -A INPUT -p gre -j ACCEPT
  16. iptables -A INPUT -i lo -p all -j ACCEPT
  17. iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
  18. iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
  19. iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  20. iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
  21. iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
  22. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  23. # OUTPUT Chain
  24. iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
  25. # FORWARD Chain
  26. iptables -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT
  27. iptables -A FORWARD -d 192.168.0.0/24 -i eth0 -j ACCEPT
  28. ### * nat
  29. # POSTROUTING Chain
  30. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

需要注意的是,这个脚本开头首先清除掉了所有iptables规则,然后才部署新的规则,如果你需要保留你机器上现有的规则,请千万不要执行前面的清除语句,或者做好旧规则的备份再做实验:

iptables-save > iptables.backup

如果想恢复使用上面命令做好的备份,可以:

iptables-resotre iptables.backup

最后,如果确定所有的iptables规则已经合乎你的心意,就可以执行下面命令,将iptables规则保存下来。

/etc/init.d/iptables save

安全建议

在Twitter上得到了@alexwwang @helijohnny的指点,知道VPN与这个网站放在一起,可能不安全。他们建议我为VPS增加一个IP,可以让VPN服务和Web走不同的IP,这样就不会因为Web网站发表的内容轻易暴露VPN服务器的IP了。之前我只是在测试机上测试过,今天终于新购得一个IP地址,得以把这一部分补全。

单网卡配置多个IP地址

CentOS下单网卡配置多个IP很容易。例如,假设现在网卡eth0已经有一个IP地址是123.123.123.123/24,想要增加一个IP是123.123.123.124/24,可以在/etc/sysconfig/network-scripts/目录下增加一个新的虚拟网卡配置文件ifcfg-eth0:0。想省事的话可以直接把ifcfg-eth0复制成ifcfg-eth0:0。然后编辑其内容,例如:

  1. DEVICE=eth0:0
  2. BOOTPROTO=static
  3. ONBOOT=yes
  4. IPADDR=123.123.123.124
  5. NETMASK=255.255.255.0

虚拟网卡eth0:0配置的信息看起来有些少,其实它会共享实际设备eth0的配置信息,因此如上简单的配置就够了。另外如果在这张网卡上还需要添加更多的IP地址,照此例增加eth0:1、eth0:2等等虚拟设备既可。

多IP的iptables配置

然后关于iptables配置,思路就是在INPUT链上使用-d区别目的IP,只在Web等服务使用的IP上放行22和80等几个端口,VPN服务的IP上只放行1723端口。

如果喜欢的话也可以为新增加的IP绑定一个不同的域名,只要防火墙配置好了,然后VPN使用的IP域名都不公开,理论上是挺难找到VPN服务地址的,这也是自建VPN的一个好处。这里再提供一个iptables规则的配置脚本,与上面的脚本类似,只是做了少量的修改,适用于多IP的情况:

  1. #!/bin/bash
  2.  
  3. # Clear Old Rules
  4. iptables -F
  5. iptables -X
  6. iptables -Z
  7. iptables -t nat -F
  8. iptables -t nat -X
  9. iptables -t nat -Z
  10.  
  11. ### * filter
  12.  
  13. # Default DROP and ACCEPT
  14. iptables -P INPUT DROP
  15. iptables -P FORWARD DROP
  16. iptables -P OUTPUT DROP
  17.  
  18. # INPUT Chain
  19. iptables -A INPUT -p gre -j ACCEPT
  20. iptables -A INPUT -i lo -p all -j ACCEPT
  21. iptables -A INPUT -p tcp -m tcp -d 123.123.123.123 --dport 21 -j ACCEPT
  22. iptables -A INPUT -p tcp -m tcp -d 123.123.123.123 --dport 22 -j ACCEPT
  23. iptables -A INPUT -p tcp -m tcp -d 123.123.123.123 --dport 80 -j ACCEPT
  24. iptables -A INPUT -p tcp -m tcp -d 123.123.123.123 --dport 443 -j ACCEPT
  25. iptables -A INPUT -p tcp -m tcp -d 123.123.123.124 --dport 1723 -j ACCEPT
  26. iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
  27. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  28.  
  29. # OUTPUT Chain
  30. iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
  31.  
  32. # FORWARD Chain
  33. iptables -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT
  34. iptables -A FORWARD -d 192.168.0.0/24 -i eth0 -j ACCEPT
  35.  
  36. ### * nat
  37.  
  38. # POSTROUTING Chain
  39. iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

这样配置完成后,对公开的Web域名进行端口扫描,就只能扫描到80等端口,而VPN服务使用的域名IP不公开,就保证了安全性。我手欠扫描了一下我们的服务器,结果就成了这样:

  1. [root@sheldon ~]# nmap -sS gnailuy.com
  2.  
  3. Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-20 20:46 CST
  4. Nmap scan report for gnailuy.com (One of our IP address)
  5. Host is up (0.31s latency).
  6. Not shown: 996 filtered ports
  7. PORT STATE SERVICE
  8. 21/tcp open ftp
  9. 22/tcp open ssh
  10. 80/tcp open http
  11. 443/tcp open https
  12.  
  13. Nmap done: 1 IP address (1 host up) scanned in 17.44 seconds
  14. [root@sheldon ~]# nmap -sS vpnservers.domain.name
  15.  
  16. Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-20 20:53 CST
  17. Nmap scan report for vpnservers.domain.name (Our another IP address)
  18. Host is up (0.32s latency).
  19. Not shown: 999 filtered ports
  20. PORT STATE SERVICE
  21. 1723/tcp open pptp
  22.  
  23. Nmap done: 1 IP address (1 host up) scanned in 24.52 seconds

后记

这篇文章是边爬搜索引擎边学习边实验写成的,在摸索的过程中学习,确实学到了不少东西。学习和配置服务器的过程中,我不断的Google到相关的文章,中文的英文的已经有一大把,于是我就在想,我写这篇文章,应该完成哪些现有的资料尚不完善的地方。技术上我只是个初学者,除了搜索、思考、组织之外,暂时没有可能创造出新的技术来,于是只好从语言组织、信息翔实程度和对配置细节的解释上尽量提高本文的含金量,希望成为中文文章中比较有用的一篇,能够为其他有这方面想法的朋友提供一些小小指引。

非常感谢在Twitter上为我出主意的@alexwwang 和 @helijohnny,他们的宝贵意见促成了本文目前的样子。如果本文中还有哪些不足甚至纰漏,请千万不吝赐教;或者如果你想要和我探讨这方面的技术,都欢迎与我联系。可以@gnailuy on Twitter,或者也可以在我的About Me页面找到更多其他联系方式。

© 2011, Yuliang Jin. All rights reserved. 
This post is under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

转载-Linux下搭建VPN服务器(CentOS、pptp)的更多相关文章

  1. Linux下搭建VPN服务器(CentOS、pptp)转

    先说我搭建过程中出现的问题吧: 按照 教程搭建好之后出现了619错误,查看日志:/var/log/messages: Nov 20 09:46:20 localhost pptpd[7498]: GR ...

  2. suse linux 10 下配置vpn服务器(pptp)

     一.安装所需的软件包:      pptpd-*.rpm      ppp-*.rpm      pptp-*.rpm     一般情况下系统已经将pptp和ppp包安装好了,所以只需安装pptpd ...

  3. 【转】在Linux下搭建Git服务器

    在 Linux 下搭建 Git 服务器 环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows. ...

  4. 在 Linux 下搭建 Git 服务器

    环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows.1) ① 安装 Git Linux 做为 ...

  5. Linux 下搭建流媒体服务器

    http://blog.csdn.net/huangtaishuai/article/details/9836581 ----------------------------------------- ...

  6. Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

    首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion   ...

  7. LINUX下搭建VPN

    一.准备 需要 dkms-2.0.17.5-1.noarch.rpm.ppp-2.4.5-33.0.rhel6.x86_64.rpm.pptpd-1.4.0-1.el6.x86_64.rpm,并依次安 ...

  8. 在Linux下搭建Git服务器的方法是什么样?

    第一步 安装git:可以通过命令的方式快速安装,不同的linux的安装方法可能不一样,我的是采用的yum方法.ubuntu可以用apt-get命令.sudo yum install git 第二步 添 ...

  9. Linux下搭建BT服务器

    P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能.在这种网络中所有的节 ...

随机推荐

  1. php 需熟练掌握的几个函数

    class Test { } $obj = new Test; 一.__construct() {}  构造函数 二.__destroy() {} 析构函数 三.__get() {} 试图读取一个并不 ...

  2. sql server 与C#数据类型对应表

  3. Makefile与shell脚本的区别

    引用博客:Makefile与shell脚本区别 在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着归纳一下Makefile和shell脚本的不同. 1.s ...

  4. E8.ITSM IT运维服务管理系统

      一.     IT运维面临问题 随着企业信息化项目若干年以来的建设积累,IT资产日趋庞大,以及内外部监管部门对IT运维的要求也越来越严格规范,业务部门对企业的IT运维管理也提出了更高的要求. IT ...

  5. ▲历史回眸--abbr和acronym的渊源

    网景和微软的浏览器之战早已淡去多年,最终以微软的IE浏览器胜出,特别是IE6的出现,一度成为世界浏览器的霸主,至今无人能敌.去年IE6荣获“终身成就奖”,真是实至名归.本文涉及的两个标签abbr和ac ...

  6. BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排

    Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...

  7. Web 安全之内容安全策略 (CSP)

    内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击. 这些攻击可用于实现从 ...

  8. 【HDU 5456】 Matches Puzzle Game (数位DP)

    Matches Puzzle Game Problem Description As an exciting puzzle game for kids and girlfriends, the Mat ...

  9. 利用CMake生成动态或静态链接库工程

    install解释: TARGETS版本的install命令 install(TARGETS targets... [EXPORT <export-name>] [[ARCHIVE|LIB ...

  10. android使用tabhost实现导航

    参考 http://blog.csdn.net/xixinyan/article/details/6771341 http://blog.sina.com.cn/s/blog_6b04c8eb0101 ...