如何在Ubuntu上搭建一台安全的Apache Web服务器

如何在Ubuntu上搭建一台安全的Apache Web服务器,第1张

本教程假设你已有一台在运行的Ubuntu服务器,网络方面已设置好,而且可以通过SSH进行访问。

Apache2是许多安装的Linux发行版使用的默认Web服务器。它不是对所有环境来说唯一可用的Web服务器,也不是最佳的Web服务器,但是它适合许多使用场景。在安装过程中,系统可能会询问你哪个Web服务器要自动重新配置。选择“apache2”即可。

安装Apache2

使用下面这个命令,安装Apache2及其他库。

$ sudo apt-get -y install apt-get install apache2 apache22-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt libapache2-mod-suphp libopenssl-ruby libapache2-mod-ruby

更新时区(TimeZone)和检查正确时间

为了减小共享数据或镜像数据方面的混淆,所有服务器在运行时都应该尽可能接近同步状态。一些加密密钥管理系统需要准确的时间。最后,就企业服务器而言,《萨班斯-奥克斯利法案》(Sarbanes-Oxley)和《健康保险可携性及责任性法案》(HIPAA)的安全规则要求正确的时间戳机制。

$ sudo apt-get -y install openntpd tzdata

$ sudo dpkg-reconfigure tzdata

$ sudo service openntpd restart

禁止AppArmor冲突

虽然AppArmor这个套件的确提供了一层额外的安全,但在我看来,需要为每个系统创建自定义配置文件。这不是本教程所探讨的内容。所以眼下,我们会禁用AppArmor,防止与任何默认的配置发生冲突。

$ sudo /etc/initd/apparmor stop

$ sudo update-rcd -f apparmor remove

$ sudo apt-get remove apparmor apparmor-utils

注意:如果是生产环境下的Web服务器,不建议禁用AppArmor。如果有些人想创建自定义的AppArmor配置文件,请参阅官方说明文档(http://wikiapparmornet/indexphp/Documentation)。

阻止分布式拒绝服务(DDoS)攻击

DDoS攻击是一种分布式拒绝服务攻击。有一个Apache模块可以阻止这类攻击。

$ sudo apt-get -y install libapache2-mod-evasive

$ sudo mkdir -p /var/log/apache2/evasive

$ sudo chown -R www-data:root /var/log/apache2/evasive

把下面这个命令添加到mod-evasiveload的末尾处。

$ sudo nano /etc/apache2/mods-available/mod-evasiveload DOSHashTableSize 2048

DOSPageCount 20 # 请求同一页面的最大数量

DOSSiteCount 300 # 同一侦听器上同一客户端IP请求任何对象的总数量

DOSPageInterval 10 # 页面数量阈值的间隔

DOSSiteInterval 10 # 站点数量阈值的间隔

DOSBlockingPeriod 100 # 客户机IP被阻止的时间段

DOSLogDir “/var/log/apache2/evasive”

DOSEmailNotify admin@domaincom

阻止Slowloris攻击

还有一个Apache模块可以阻止Slowloris攻击,不过模块名称取决于你使用的Ubuntu的具体版本。如果是Ubuntu 1210或以后版本:

$ sudo apt-get -y install libapache2-mod-qos

然后,检查qosconf中的配置:

$ sudo nano /etc/apache2/mods-available/qosconf

## 服务质量方面的设置

# 处理来自多达100000个不同IP的连接

QS_ClientEntries 100000

# 只允许每个IP仅50条连接

QS_SrvMaxConnPerIP 50

# 活动TCP连接的最大数量限制在256条

MaxClients 256

# 当70%的TCP连接被占用时,禁用保持活动连接状态

QS_SrvMaxConnClose 180

# 最小请求/响应速度(拒绝阻塞服务器的慢速客户端,即slowloris保持连接开启,不提出任何请求):

QS_SrvMinDataRate 150 1200

# 并限制请求标题和主体(注意,这还限制了上传和发帖请求):

# LimitRequestFields 30

# QS_LimitRequestBody 102400

注意:如果你运行1204之前的Ubuntu版本,改而使用下面这个命令:

$ sudo apt-get -y install libapache2-mod-antiloris

检查antilorisconf中的配置

$ sudo nano /etc/apache2/mods-available/antilorisconf

# 每个IP地址处于READ状态的最大并行连接数量

IPReadLimit 5

阻止DNS注入攻击

Spamhaus这个模块使用域名系统黑名单(DNSBL),目的是为了阻止通过Web表单实现的垃圾邮件转发,防止URL注入攻击,阻止来自机器人程序的http DDoS攻击,通常保护服务器,远离已知的恶意IP地址。

$ sudo apt-get -y install libapache2-mod-spamhaus

$ sudo touch /etc/spamhauswl Append the config to apache2conf

$ sudo nano /etc/apache2/apache2conf

MS_METHODS POST,PUT,OPTIONS,CONNECT

MS_WhiteList /etc/spamhauswl

MS_CacheSize 256

重启Apache装入新模块

$ sudo service apache2 restart

现在Web服务器已安装完毕,并在正常运行。将Web浏览器指向你的域,即可看到证明你一切正常的默认消息。作为最后的检查机制,运行下面这个命令,看看你的服务器有没有任何错误信息。要是有错误信息,你需要上谷歌搜索一下,立马解决这些错误。

$ sudo tail -200 /var/log/syslog

mac自带继承php环境的apache php 系统默认已经装好,需要把他启动

下载mysql官网有mac版本重新按linux的方法安装了一遍

mac系统安装php的方法(http://houdunwangcom/lessonhtml):

  安装PHP扩展要求Mac系统已经安装了Xcode环境和命令行开发工具,如果还没安装,可以使用Shell安装。

  xcode-select --install

  为了扩展管理方便,首先来安装pecl扩展管理器。

  cd /usr/lib/php

  sudo php install-pear-nozlibphar

  安装Redis、Memcache、Mongo等扩展。

  sudo pecl install redis

  sudo pecl install memcache

  sudo pecl install mongo

  sudo pecl install xdebug

  将扩展配置添加的phpini文件中:

  extension=memcacheso

  extension=mongoso

  extension=redisso

  zend_extension=xdebugso

  安装xcache,从官网下载http://xcachelighttpdnet/wiki/Release-320

  解压缩并安装

  tar xvf xcache-320tar

  cd xcache-320

  phpize

  。/configure

  make

  sudo make install

  配置XCache(参考文献:http://bbshoudunwangcom/)

  [xcache]

  xcachesize = 128M

  xcachevar_size = 8M

  xcachevar_count = 1

  xcachevar_slots = 8K

  xcachevar_ttl = 0

  xcachevar_maxttl = 0

  xcachevar_gc_interval = 300

  xcacheoptimizer = Off

  由于Mac自带的PHP环境是不包括mcrypt扩展的,所以需要下载同版本的php源码包,单独编译这个模块加载。从官网的归档里面找到php5514的源码包,下载:http://phpnet/releases/

  tar zxvf php-5514targz

  cd php-5514/ext/mcrypt/

  phpize。/configure

  make

  sudo make install

  配置ext-mcrypt

  extension=mcryptso

  为了加速,还需要打开opcache。

  zend_extension=opcacheso

  [opcache]

  ; Determines if Zend OPCache is enabled

  opcacheenable=0

  ; Determines if Zend OPCache is enabled for the CLI version of PHP

  opcacheenable_cli=0

  以上就是在MAC OS X系统中安装PHP扩展的方法。

在架设前,你需要准备:

·一台有公网IP的服务器

·一个Steam账号(无任何的VAC记录,没有社区违规记录)

我这里使用的是idc02的i9-9900K 50M 100G的服务器配置,CPU超强处理速度,架设Steam游戏更专业,如果是你也想使用i9服务器,可以到idc02官网咨询飞飞了解

Linux搭建方法

Steamcmd下载

首先,你需要下载Steamcmd,这是一个Steam的官方软件,关于它的详细信息,你可以在这里找到(V社官方WIKI,无需梯子)

自动安装

如果你的服务器是64位的Linux系统,你需要运行以下命令安装32位的运行库

$ sudo add-apt-repository multiverse

$ sudo dpkg --add-architecture i386

$ sudo apt update

$ sudo apt install lib32gcc1 steamcmd

然后就可以直接使用

$ apt install steamcmd # Ubuntu用户

或者

$ yum install steamcmd # CentOS用户

来安装Steamcmd,如果你更新了yum库或者apt库仍然提示未找到steamcmd包,那么你可以使用手动安装的方法

手动安装

手动安装就是自己从V社的官方服务器中获取可执行文件,当然在这之前,你还是需要安装32位的运行环境

·Ubuntu

$ sudo apt-get install lib32gcc1

·CentOS X86

$ yum install glibc libstdc++

·CentOS X64

$ yum install glibci686 libstdc++i686

安装完运行库后,我们需要下载steam官方的软件包

$ curl -sqL "https://steamcdn-aakamaihdnet/client/installer/steamcmd_linuxtargz" | tar zxvf

使用上面这一条命令下载软件包,解压后应该有个steamcmdsh和一个文件夹,我们直接运行steamcmdsh

$ bash steamcmdsh

目前FastDFS支持类Unix系统 ,在Linux和FreeBSD下测试过,本文使用的是Ubuntu104,建议安装之前先简单了解一下FastDFS的原理 ,这对后继的配置部分会有很好的理解。

一、准备工作-安装libevent

FastDFS 内部绑定了 libevent 作为 http 服务器 ,在V2X版本必须安装 libevent ,本文安装的是V22版本,因此必须安装libevent。(官方也推荐使用 http 方式下载 文件 )

如果已经安装了 libevent,请确认安装路径是 /usr , 因为 FastDFS 在编译源程序时,需要到此目录下查找一些依赖文件,否则编译 FastDFS 会出错 。如果不是,建议首先卸载 libevent ,然后安装到 /usr 下。Ubuntu104默认是安装了libevent,可以到软件中心卸载掉然后按照下面介绍的方式安装。

安装步骤:

解压 libevent ,然后进入解压后的目录分别执行:

Shell代码

/configure --prefix=/usr

make clean;

make

make install

安装libevent完成。

二、安装 FastDFS

1、下载 FastDFS 源程序

2、在 FastDFS_v405targz 所在文件夹下执行:

Shell代码

sudo tar vxzf FastDFS_v405targz /home/soar/FastDFS

注: /home/soar/FastDFS 也可以是其他目录,记住这是解压目录,以后用 %FastDFS% 表示)

3、由于要使用内置的 http 服务,因此编辑 %FastDFS%/makesh 文件,找到

#WITH_HTTPD=1

修改成

WITH_HTTPD=1

以支持 http

4、进入 %FastDFS% 目录,执行:

Shell代码

sudo /makesh

5、在 %FastDFS% 目录下,执行:

Shell代码

sudo /makesh install

如果运行如上命令后,在命令行信息最后看到类似

Shell代码

#ln -fs /usr/local/lib/libfastcommonso1 /usr/local/lib/libfastcommonso

#ln -fs /usr/local/lib/libfdfsclientso1 /usr/local/lib/libfdfsclientso

sh /fdfs_link_librarysh

恭喜你,已经安装成功了!

FastDFS的配置文件在%FastDFS%/conf目录下,其中包括

Clientconf 客户端上传配置文件

Storageconf 文件存储服务器配置文件

Trackerconf 负责均衡调度服务器配置文件

httpconf http服务器配置文件

配置文件需要根据服务器环境的不同,进行不同的配置,具体可以参考FastDFS官方的安装配置文档http://codegooglecom/p/fastdfs/wiki/Setup,以及FastDFS原理介绍文档http://codegooglecom/p/fastdfs/wiki/Overview

在本例中,Tracker Server,Storage Server都安装在一台服务器上,IP:100215

1、配置及启动Tracker Server

A、修改%FastDFS%/conf/trackerconf文件,修改如下

#可以自己指定目录位置,但目录必须存在,用于存储日志及storage server等信息,否则tracker server无法启动

Txt代码

base_path=/home/yuqing/fastdfs -> base_path=/home/soar/fastdfs_tracker

#改成你想要的http端口,将来http下载文件的端口就是他了

Txt代码

httpserver_port=8080 -> httpserver_port=8090

#http支持

Txt代码

##include httpconf -> #include httpconf

#默认4GB,如果空间不足,建议调小,否则会报no free space的异常,无法正常启动

Txt代码

reserved_storage_space = 4GB -> reserved_storage_space = 1GB

#tracker server对storage server供服务的端口,使用默认的即可,也可以自定义

Txt代码

port=22122

B、将httpconf文件拷贝到/etc/fdfs目录下,执行

Shell代码

sudo cp %FastDFS%/conf/httpconf /etc/fdfs/

注:为了支持http,必须将这个文件拷贝到此目录,否则无法启动,报param httpXXX not exist or is empty类似的错误

C、进入/usr/local/bin/目录,启动tracker服务器,执行

Shell代码

sudo fdfs_trackerd %FastDFS%/conf/trackerconf

D、进入/home/soar/fastdfs_tracker/logs/trackerdlog查看tracker的启动日志,如果看到类似

Shell代码

[2010-11-04 16:21:25] INFO - FastDFS v202, base_path=/home/soar/fastdfs_tracker, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, work_threads=4, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=4MB, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s

[2010-11-04 16:21:25] INFO - HTTP supported: server_port=8090, default_content_type=application/octet-stream, anti_steal_token=0, token_ttl=0s, anti_steal_secret_key length=0, token_check_fail content_type=, token_check_fail buff length=0, check_active_interval=30, check_active_type=tcp, check_active_uri=/statushtml

恭喜你,tracker server已经启动成功!

2、配置及启动Storage Server

A、修改%FastDFS%/conf/storageconf文件,修改如下:

#可以自定义,但必须存在此目录,用于存储storage相关的log、group内的相关信息

Txt代码

base_path=/home/yuqing/fastdfs -> /home/soar/fastdfs_storge

#文件的存储位置,在一台storage server上可以指定多个存储位置

Txt代码

store_path0=/home/yuqing/fastdfs -> store_path0=/home/soar/fastdfs_storge

#必须指定

Txt代码

group_name=group1

#修改成tracker server的IP和端口信息

Txt代码

tracker_server=192168209121:22122 -> tracker_server=100215:22122

#http支持

Txt代码

##include httpconf ->#include httpconf

B、进入/usr/local/bin/目录,启动storage服务器,执行

Shell代码

sudo fdfs_storaged %FastDFS%/conf/storageconf

C、进入/home/soar/fastdfs_tracker/logs/storagelog查看storage服务器启动日志,如果看到类似

Shell代码

[2010-11-04 16:37:16] INFO - FastDFS v202, base_path=/home/soar/fastdfs_storge, store_path_count=1, subdir_count_per_path=256, group_name=group1, connect_timeout=30s, network_timeout=60s, port=23000, bind_addr=, client_bind=1, max_connections=256, work_threads=4, disk_rw_separated=1, disk_reader_threads=1, disk_writer_threads=1, buff_size=256KB, heart_beat_interval=30s, stat_report_interval=60s, tracker_server_count=1, sync_wait_msec=200ms, sync_interval=0ms, sync_start_time=00:00, sync_end_time=23:59, write_mark_file_freq=500, allow_ip_count=-1, file_distribute_path_mode=0, file_distribute_rotate_count=100, fsync_after_written_bytes=0, sync_log_buff_interval=10s, sync_binlog_buff_interval=60s, sync_stat_file_interval=300s, thread_stack_size=512 KB, upload_priority=10, if_alias_prefix=, check_file_duplicate=0, FDHT group count=0, FDHT server count=0, FDHT key_namespace=, FDHT keep_alive=0, HTTP server port=8888, domain name=

[2010-11-04 16:37:16] INFO - HTTP supported: server_port=8888, http_trunk_size=262144, default_content_type=application/octet-stream, anti_steal_token=0, token_ttl=0s, anti_steal_secret_key length=0, token_check_fail content_type=, token_check_fail buff length=0

[2010-11-04 16:37:16] INFO - file: storage_param_getterc, line: 48, storage_ip_changed_auto_adjust=1

[2010-11-04 16:37:19] INFO - file: tracker_client_threadc, line: 274, successfully connect to tracker server 100215:22122, as a tracker client, my ip is 100215

恭喜你,storage server已经启动成功!

经过前面的安装、配置、启动,马上就可以看到FastDFS的效果了,我们先上传一个文件,然后再通过http下载。

一、上传文件

FastDFS安装包中,自带了客户端程序,通过程序可以进行文件上传。在使用这个客户端程序之前,首先需要配置clientconf,然后再进行文件上传及下载。

1、修改%FastDFS%/conf/clientconf文件,修改如下:

#可自定义,但此目录必须存在,用于存放文件上传log

Txt代码

base_path=/home/yuqing/fastdfs-> base_path=/home/soar/fastdfs_tracker

Txt代码

tracker_server=192168209121:22122 -> tracker_server=100215:22122

Txt代码

httptracker_server_port=8080 ->httptracker_server_port=8090

#支持http

Txt代码

##include httpconf ->#include httpconf

2、进入/usr/local/bin/目录,上传文件,执行

Txt代码

sudo fdfs_test %FastDFS%/conf/clientconf upload atxt

注:atxt可以在/usr/local/bin/目录下自己创建一个

如果命令行反馈类似如下:

则说明上传文件成功。

关于fastdfs集群和备份配置

1、修改trackerconf文件中store_lookup=2 平衡负载

2、修改trackerconf文件中store_server=0 采用轮询方式。

如果希望只使用一台文件存储服务器,其他二台做备份,则修改文件tracker_server为某台主机的IP,只启动文件存储服务器的tracker,其他二台备份服务器不需要启动tracker。

如果希望三台服务器集群使用,互相备份,比如:使用A机器存储文件,这时候A机器会将文件同步到B机器和C机器,同理使用B机器存储文件,则会同时将文件同步到A机器和C机器。这时候需要将所有的机器IP和端口号

都配置在storageconf中,如下所示:

tracker_server=1020716127:22122

tracker_server=1020716129:22122

方法:

下载并将一个目录中的文件(s) WikiEditor在你的 extensions/文件夹中。

添加以下代码底部LocalSettingsphp:

wfLoadExtension('WikiEditor');

1、WikiEditor是MediaWiki集成的一款增强型编辑器。MediaWiki全球最著名的开源wiki程序,运行于PHP+MySQL环境。MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例。MediaWiki的开发得到维基媒体基金会的支持。

MediaWiki是建立wiki网站的后台程序,目前国内的灰狐维客等站点在采用这套系统。

MediaWiki一直保值着持续更新,当前最新版本为1300(2017-05-09)  测试版本。MediaWiki原作者为德国的Magnus Manske。

2、功能特性

Mediawiki 14 使用gzip 来压缩储存的文字,使得在储存文字时,可节省大约15%的空间。而这版本亦同时使用"block-compressed revisions"作为进一步的压缩,使得存取效率大为提升。

3、优点

经受过重量级应用的考验,功能丰富却架设简单

全世界最大的wiki项目维基百科是使用mediawiki的成功范例,数据量、访问量都超级庞大

mediawiki的功能非常丰富,支持多语言版本,充分满足知识站点的需要

运行环境要求很低,架设过程简洁,即使新手也可以迅速建立自己的站点

最大的wiki程序社区

mediawiki是目前应用最广的wiki程序,数以万计的网站在使用它,很容易找到范例站点

有大量的热心参与人员参与研究,资料多,容易找到互相交流的朋友

持续开发,程序特性功能不断完善,保证未来的支持

可以。

gitlab上可以上传文本材料,上传文本材料把文件复制到要上传的本地git目录中,进入本地git文件所在目录,将要上传文件加入索引中,将要上传的文件提交到本地仓库,文件同步到GitLab服务器上就上传好了。

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab是被广泛使用的基于git的开源代码管理平台,基于RubyonRails构建,主要针对软件开发过程中产生的代码和文档进行管理。

方法/步骤

安装jenkins

参照官网wiki,如下图:

安装后的jenkin在/var/lib/jenkins启动关闭jenkins:

sudo /etc/initd/jenkins startsudo /etc/initd/jenkins stop

Jenkins安装完毕后,可以通过浏览器,例如19216816183:8080,此处IP地址为Jenkins所在机器的IP地址。

配置jenkins

Jenkins安装好之后,需要为其安装gitlab插件:在主面板上点击Manage Jenkins -> Manage Plugins,选择安装Gitlab Plugin和Gitlab Hook Plugin。

搭建gitlab源码服务器

参照官网wiki,如下图:

安装完之后默认是只能本机通过localhost访问的,修改/etc/gitlab/gitlabrb中的对应配置项如下:external_url ‘http://your ip:8080’nginx[‘listen_addresses’] = [‘your ip’]nginx[‘listen_port’] = 8080

配置SSH key

由于jenkins需要从gitlab上拉取代码,通过ssh方式。所以需要在jenkins机器上安装git,并且将jenkins机器上生成的ssh密钥的公钥(id_rsapub中的内容)添加到gitlab的ssh keys中:

在jenkins安装机器上安装git

sudo apt-get install git

配置username和Email,生成ssh密钥

git config –global username “your name”git config –global useremail “your email”ssh-keygen -t rsa -C “10010@gmailcom”

拷贝公钥内容填到gitlab服务器

配置GitLab connections连接到gitlab拉取代码使用,配置证书,使用gitlab api token。token从gitlab中获取,在个人设置中有Access Token一栏,创建一个token,填入jenkins的系统管理 -> 系统设置 -> gitlab配置中。

Test Connection,显示success则表示配置成功。

测试集成环境

新建一个项目,源码管理选git,填入对应的仓库URL,配置 Credentials,这里可以选择用ssh username with private key(其他的我也没试成功过。。),输入用户名和对应的私钥即可

接下来构建触发器选择Build when a change is pushed to GitLab GitLab CI Service URL: …

添加hook

由于我们的jenkins任务由webhook事件来通知,所以需要将上面的CIservice URL添加到gitlab对应项目的Integrations配置中。

RUN

配置完之后apply,保存。jenkins任务就新建完成了此时我们在本地push代码到gitlab服务器,可以看到:成功地触发一次jenkins构建,效果如下:

至此jenkins+gitlab持续集成环境搭建完成!

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在Ubuntu上搭建一台安全的Apache Web服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情