如何在Ubuntu上搭建一台安全的Apache Web服务器
本教程假设你已有一台在运行的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持续集成环境搭建完成!
0条评论