香港沙田BGP机房上线!

香港沙田BGP机房上线,该机房提供10M独享CN2带宽的服务器租用,主要配置有:

E3 1230 -16G

E3 1230 -32G

E5-2450L -16G

E5-2450L -32G

全国PING在40-50ms

更高的配置,更好的性能,更快更稳定的网络。

现正在进行促销活动

E5-2450L*2/32G/1T/5IP/10M独享 (原价1500元/月)
新品体验价(6折)900元/月 ,续费不提价! 限量50台 售完即止!

机房详情:https://www.homedt.cn/shatianbgp

联系QQ:28575315

美国100M带宽服务器租用多少钱一个月?

很多对带宽需求较大的客户都会选择美国服务器租用,主要原因在于美国服务器的带宽一般都是100M起,并且带宽价格相对其他地区要低得多。不需要进行备案,硬件配置等也都比较高。

那美国100M带宽的服务器租用需要多少钱?根据不同的配置,价格也是不一样的,下面联邦小项(QQ:28575315)给大家介绍一下美国服务器的租用价格。

E3-1230v6/16G/1T/5IP/100M  10G防护 800元月

更多配置:https://www.homedt.cn/usbt

这款机器是美国服务器中的主流配置,适合各类下载站、视频站、小说站、直播、CDN服务器、网站服务器等等。

租用联系 联邦小项 QQ:28575315

11月服务器促销活动-服务器特价配置价格表

1,香港PAC机房“双11”空前升级让利活动

(1)PAC机房 “企业区”,订购5M机型,免费升级至10M带宽 ,+400元/月可升级至20M
产品页面https://www.homedt.cn/hkpac

(2)10G防护区L5630/8G/500G/1IP/10G防护/5M国际带宽(原价1600元/月)现价900元/月,+400元/月可升级至10M

(3)香港沙田BGP机房 10M独享 新品体验

『32核 32G 经典代表』E5-2450L*2/32G/1T/5IP/10M独享 (原价1500元/月)
新品体验价(6折)900元/月 ,续费不提价! 限量50台 售完即止!

产品页面https://www.homedt.cn/shatianbgp
2,韩国机房,带宽加量不加价,防护产品特惠体验

(1)SK机房,订购即获得免费升级至20M带宽

产品页面https://www.homedt.cn/krsk

(2)升级为10G防护,仅需加300元/月(原价500元/月),全协议防护,续费不提价!
3,韩国KA机房,20G防护级产品,限量特惠

(1)L5520*2/16G/1T/20M带宽/20G防护 1400元/月

(2)E3-1230/8G/1T(or 240G SSD)/10M带宽/20G防护 1400元/月

产品页面:https://www.homedt.cn/krka
4,电信北美数据中心,GIA线路,高防服务器首月半价体验

(1)E3-1230v6/16G/1T/5IP/100M电信直连
特惠体验价:首月400元(续费800元/月) 剩余12台 11月20日之前,售完为止

(2)E3-1230v5/16G/1T/5IP/100M电信直连
特惠体验价:首月500元(续费1000元/月)限量50台,11月30日之前,售完为止

注意:前期用户滥用带宽严重导致我们不得不对长期跑满带宽的服务器进行限制(可选限为30M GIA,或100M普通国际带宽),请务必切记,不要滥用!

以上促销30日截止。

租用联系QQ:28575315

教程:使用SSH和VNC实现远程访问Linux桌面

虽然操作和管理服务器的主要手段是通过shell终端 – 它也是我们建议选择的方式 – 您可能还需要本地电脑通过GUI图形界面链接您的服务器。

通过X11转发运行单个命令ssh,将整个桌面转发到VNC,有很多方法可以完成此工作。在本教程中,我们将介绍如何进行这些操作,以便您可以选择最适合您需求的应用程序。

注意:我们不能保证这些操作速度将特别快 – 主要是由于您的机器和服务器之间的延迟 – 但它可能会在一段时间内派上用场。

要求:

服务器运行任何可用的操作系统。

非root用户帐户(需要升级的权限的命令将使用sudo)

运行Linux的本地机器,安装了XQuartz的OS X机器或安装了Xming的Windows机器 – 本教程取决于某种类型的X服务器是否在本地运行。

Windows用户应该安装Xming。
OS X用户应该安装XQuartz。
一旦安装了Xming / XQuartz,您可以启动一个xterm或其他终端到ssh进入VPS并启用X11隧道。
Windows / OS X用户可能会更喜欢VNC,但这些超出了本教程的范围。

转发单个X应用程序

要在服务器上运行X应用程序,应通过ssh使用-X启用X转发的-C选项以及启用数据压缩的选项进行连接。

$ ssh -XC user@IP-ADDRESS

一旦进入服务器,您应该首先安装该xauth软件包。

$ sudo apt install xauth # Debian/Ubuntu
$ sudo yum install xorg-x11-xauth # CentOS

然后,/etc/ssh/sshd_config使用您喜爱的编辑器打开并查找该X11Forwarding选项。该行应该被取消注释并被更改为X11Forwarding yes。

之后,您应该重新启动sshd。

$ sudo systemctl restart sshd

然后,您应该断开与服务器的连接并重新连接。此时,请确保确保启用了X11转发。如果工作正常,您应该看到以下输出:

$ echo $DISPLAY
localhost:10.0

让我们安装一些简单的测试方法 – 怎么样xclock?一旦安装,您可以从服务器运行它,它将显示在本地计算机的桌面上。

$ sudo apt install x11-apps # Debian/Ubuntu
$ sudo yum install x11-apps # CentOS
$ xclock

现在你可以运行任何X应用程序,从gedit到firefox。如果您需要在只有图形安装程序的服务器上安装某些东西,可能会特别有用。

转发整个桌面

运行单个X应用程序可能每时每刻都有用,但是完整的桌面呢?如果您需要使用服务器更多基于GUI的应用程序,这可能会有很长的路要走。

在本教程中,我们将快速安装XFCE桌面环境,这是一种用于此类用途的良好,低资源选择,然后通过SSH转发。

Debian / Ubuntu

$ sudo touch /dev/fuse
$ sudo apt install xfce4 xfce4-goodies gnome-icon-theme

CentOS的

$ sudo yum install epel-release -y
$ sudo yum groupinstall "X Window system"
$ sudo yum groupinstall xfce

一旦安装了XFCE,您可以将SSH插入服务器(如果您还没有)并开始新的会话:

$ xfce4-session

远程桌面将直接显示在您自己的桌面上。

通过X11转发在我的基于Fedora / Gnome的本地机器上运行(有点不快)的远程XFCE会话

VNC

想要连接到远程机器并使用完整桌面的用户,VNC是另一种选择。这有点更多地涉及到其他一些人,但是我们将以最快的方式逐步完成VNC服务器的运行。

在您进行VNC之前,您应该按照上述说明安装XFCE或其他桌面环境。

首先,您需要在服务器上安装VNC服务器。

$ sudo apt-get install tightvncserver # Debian/Ubuntu
$ sudo yum install tigervnc-server # CentOS

然后可以运行服务器本身。系统会首次提示您创建仅限VNC的密码。

$ vncserver :1 -geometry 800x600 -depth 24

You will require a password to access your desktops.

Password:
Verify:
xauth: file /home/user/.Xauthority does not exist

New 'user:1 (user)' desktop is hostname:1

Creating default startup script /home/user/.vnc/xstartup
Starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/hostname:1.log

最后,启动您最喜欢的VNC客户端。根据您的操作系统,存在一些选项:

Vinagre [Linux]
Real VNC [Windows / OS X / Linux / iOS / Android]
TightVNC [Windows / OS X / Linux]
TigerVNC [Linux / Windows / OS X]
通过附加:1到您的VPS的IP地址连接到您的VNC服务器。您将可以访问完整的桌面!

注意:默认的VNC服务器不是很安全,并创建另一个潜在的攻击漏洞。

服务器维护需要注意的9个方面

我们一直听到这个问题:“一旦运行,我该如何维护服务器?”

有些困难的答案是没有一个解决方案适用于每个人,但是从我们的经验来看,我们可以分享您在考虑服务器每周或每月维护计划时至少考虑的最重要的步骤。

这些提示虽然必须符合重要性,但将有助于保持您的服务器安全和更新,只要知道某些事情发生错误即可。

1.查看您的资源利用率

了解服务器如何执行的最佳方法之一是检查资源利用率。查看资源使用情况 – 这将有助于您了解服务器上发生的情况。

2.查看登录名和用户帐号

您希望确保用户帐户和尝试(无论是失败还是成功)都没有任何惊险的来访问您的服务器。

您可以确切地看出当前登录的用户w。该last命令将列出每个最近的登录,并且该lastlog命令将告诉您每个用户上次登录到服务器的时间。通常,这些命令将访问日志文件解析成更加人性化的格式。

您可以一起使用这些命令来精确地了解某人何时访问您的服务器。

3.设置备份系统并验证它是否正常工作

没有关于哪个备份系统最好的细节太多,无论是自定义rsync备份还是将服务器与另一个服务器镜像,这里重要的是建立一个系统,然后检查,以确保它按照您需要的方式工作。没有什么比发生灾难性故障只是意识到你的备份系统在六个星期前下降。

4.更新您的操作系统(特别是安全包)

大多数Linux发行版更为经常更新,特别是在基于安全性的修补程序时。Debian和CentOS比Ubuntu有点稳定,但它们都在不断变化。

过期的软件包可能包含可能允许黑客访问服务器或降低性能的漏洞。幸运的是,升级在这些系统上很容易!

Ubuntu的/ Debian的

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get clean

CentOS的

$ sudo clean all
$ sudo yum update

5.设置自动更新

如果您不用担心定期更新服务器,可以设置自动更新。该亲自动更新的是,这是一个不太件事给忘了,而骗子是你有点控制,如果更新出现问题,就更难追查违规的包。

有关启用自动更新的详细信息,请查看以下三个指南:

centos

debian

Ubuntu

6.更新您的应用程序(如Wordpress)

直接从您的发行版的存储库更新软件包将确保大量软件(如Nginx或Apache)保持最新,但这些存储库之外的任何内容都不会变化。这包括大多数CMS软件,如Wordpress,或几乎任何安装通过我们的教程。

您应该阅读每个这些服务的文档,并确保您定期更新它们。一些有更新的图形/仪表板界面提示,有些则需要shell。

这也适用于采用真实的软件到这些服务,如插件。这些天,Wordpress的核心是非常稳固的,安全的,但是如果你安装了十几个插件,那么所有来自不同技能的独立开发人员,如果不遵守这些要求,你可能会冒险冒险更新。

7.更改密码

关于是否强制密码更改是一个明智的安全决策,有很多争议。人们必须记住的密码越多,他们写的越多,或者使用不安全的密码。

但是,如果您自己使用服务器,那么更改密码的风险就更小,而且还有很大的收获。

在一定的天数之后强制更改密码是很容易的,或者每隔一段时间就会跳到那里,并发出passwd命令。

8.确保您的服务可以正常处理停机时间

这对于那些通过服务器运行任务关键型服务的人来说,这是一个更先进的一点,但是对于那些不想要长时间看不到的任何东西,这些都是重要的。

假设您的服务器托管在数据中心有意外的停机时间,并且您的节点被迫关闭。回来后,您的服务会自动启动,并恢复功能,还是手动执行?

每隔一段时间就可以从干净的平板电脑开始,尤其是如果您还可以验证您的服务在重新启动后知道该怎么办,或者断开连接功能,则不会受损。如果事件没有正确返回,请查看每个关键服务的日志,并查看为什么它们不会自动启动。

9.关闭/卸载未使用的服务

我们的很多客户使用他们的服务器作为教育平台,或作为新功能的测试平台,这意味着他们会留下一台运行他们关心的服务的服务器,以及已经废弃或移动的其他六个服务器。

如果您不再使用特定的服务或软件,通常最好卸载它 – 您在服务器上放置的所有内容都会增加潜在的攻击向量,而在这方面更少。

当通过发行版的包管理器卸载程序包,只是要小心,你不也卸载任何依赖于你其实服务也想继续运行。

更多资源

最终,您的VPS维护计划的确切配置取决于您,我们根本无法推荐任何适用于所有人和所有应用程序的计划/清单。

一般来说,我们建议每周或每半年一次执行一些操作(如系统更新)和其他操作(如更改密码)。

你甚至可能想要使用特殊的安全审计软件,如Lynis。

有什么其他关键的VPS维护技巧您认为我们应该注意吗?我们很高兴与他人分享 – 只需在下面添加评论,我们将其添加到列表中!

教程:提高MySQL性能

我们最近有一个用户问我们一个相对简单的问题:如何加快我的MySQL查询性能,而不用依靠提升CPU来达到目的?

对于那些运行依赖MySQL数据库的网站或应用程序的人来说,这是一个非常重要的问题,因为它可能意味着平滑的体验与导致您和您的用户沮丧的体验之间的区别。

在本教程中,我们将介绍三种改进MySQL数据库性能的方法,或者首先建立减少查询数据库需求的方法。

要求

一个运行MySQL数据库的服务器(任何操作系统都可以工作)

选项1.Percona的向导

Percona为MySQL 提供了一个免费的配置向导,可以轻松建立基准配置,更好地适应您将要在数据库中抛出的问题。有了坚实的基础工作,您可以快速获得您的服务,然后进一步调整目标,以提高性能。

注意:Percona建议此配置向导仅用于新的服务器/数据库,而不是已经运行并包含数据的服务器/数据库。主要原因是如果将旧配置替换为由此向导创建的配置,则数据库可能无法访问。如果您已经有一个活动的数据库,最好跳到第二个选项。

这个服务器托管在哪里? 其他

你使用虚拟化吗? 其他

你使用什么类型的存储? SSD /闪存

您的系统有多少CPU? 4(除非你是我们最小的计划)

你的操作系统是什么? Linux的

其余的完全依赖于您的特定应用程序,尽管在大多数情况下选择默认值将会为您提供一个良好的启动配置,您将来可以构建它。在完成向导的七个步骤之后,您将得到一个配置,您可以将其放在您或相关服务器上的文件中。 my.cnf my.ini

选项2. mysqltuner.pl

这个流行的脚本扫描您的MySQL数据库,并提供有关漏洞或弱密码的警告,并提供有关哪些配置调整将提高性能的逻辑建议。

要下载脚本,您有两个选项:克隆整个存储库,或者只需要更多的“最小化”安装所需的内容。

克隆:

$ git clone https://github.com/major/MySQLTuner-perl.git
$ cd MySQLTuner-perl

之后,您可以开始脚本了。更多的一点。

最小:

$ mkdir MySQLTuner-perl && cd MySQLTuner-perl
$ wget http://mysqltuner.pl/ -O mysqltuner.pl
$ wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
$ wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv

在这种情况下,您正在为这些文件创建一个新目录,然后使用下载相关文件,包括脚本本身,易受攻击密码的文本文件以及漏洞列表。 wget mysqltuner.pl

无论您选择哪种方法,现在都可以运行脚本了。

$ perl mysqltuner.pl

您还可以通过以下方式启用CVE漏洞:

$ perl mysqltuner.pl --cvefile=vulnerabilities.csv

什么时候完成运行,它将提供关于如何改进MySQL配置的任何建议,无论是基于安全性,基于卓越的性能。也就是说,重要的一点是,调谐器的开发人员已经包括在项目中。 mysqltuner.pl README

完全了解您对MySQL数据库服务器所做的每项更改都非常重要。如果您不了解脚本输出的部分内容,或者您​​不了解建议,请咨询您信任的知识渊博的DBA或系统管理员。始终测试您的分期环境的变化,并始终记住,一个领域的改进可能会对其他领域的MySQL产生负面影响。

也可以在Docker容器中运行的数据库上运行,如果您遵循我们以前关注WordPress的Docker教程,也许很有用。例如,以下是我在测试服务器上的一个Wordpress数据库中进行的快速扫描的结果。 mysqltuner.pl

$ perl mysqltuner.pl --host 127.0.0.1 --forcemem 8000 --user root --pass ███████████
 >> MySQLTuner 1.7.2 - Major Hayden <major@mhtx.net>
 >> Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >> Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
[--] Performing tests on 127.0.0.1:3306
[OK] Logged in using credentials passed on the command line
[--] Assuming 8000 MB of physical memory
[!!] Assuming 0 MB of swap space (use --forceswap to specify)
[OK] Currently running supported MySQL version 5.7.18
[OK] Operating on 64-bit architecture

-------- Log file Recommendations ------------------------------------------------------------------
[--] Log file: stderr(0B)
[!!] Log file stderr doesn't exist
[!!] Log file stderr isn't readable.

-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in InnoDB tables: 16K (Tables: 1)
[OK] Total fragmented tables: 0

-------- Security Recommendations ------------------------------------------------------------------
[OK] There are no anonymous accounts for any database users
[OK] All database users have passwords assigned
[!!] User 'wordpress@%' has user name as password.
[!!] User 'root@%' hasn't specific host restriction.
[!!] User 'wordpress@%' hasn't specific host restriction.
[--] There are 612 basic passwords in the list.

-------- CVE Security Recommendations --------------------------------------------------------------
[OK] NO SECURITY CVE FOUND FOR YOUR VERSION

-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 32s (19 q [0.594 qps], 12 conn, TX: 43K, RX: 1K)
[--] Reads / Writes: 100% / 0%
[--] Binary logging is disabled
[--] Physical Memory : 7.8G
[--] Max MySQL memory : 338.9M
[--] Other process memory: 202.5M
[--] Total buffers: 169.0M global + 1.1M per thread (151 max threads)
[--] P_S Max memory usage: 72B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 170.1M (2.13% of installed RAM)
[OK] Maximum possible memory usage: 338.9M (4.24% of installed RAM)
[OK] Overall possible memory usage with other process is compatible with memory available
[OK] Slow queries: 0% (0/19)
[OK] Highest usage of available connections: 0% (1/151)
[!!] Aborted connections: 8.33% (1/12)
[!!] Query cache may be disabled by default due to mutex contention.
[!!] Query cache efficiency: 0.0% (0 cached / 8 selects)
[OK] Query cache prunes per day: 0
[OK] No Sort requiring temporary tables
[OK] No joins without indexes
[OK] Temporary tables created on disk: 15% (10 on disk / 66 total)
[OK] Thread cache hit rate: 91% (1 created / 12 connections)
[OK] Table cache hit rate: 93% (102 open / 109 opened)
[OK] Open file limit used: 0% (14/65K)
[OK] Table locks acquired immediately: 100% (102 immediate / 102 locks)

-------- Performance schema ------------------------------------------------------------------------
[--] Memory used by P_S: 72B
[--] Sys schema is installed.

-------- ThreadPool Metrics ------------------------------------------------------------------------
[--] ThreadPool stat is disabled.

-------- MyISAM Metrics ----------------------------------------------------------------------------
[!!] Key buffer used: 18.3% (1M used / 8M cache)
[OK] Key buffer size / total MyISAM indexes: 8.0M/43.0K
[!!] Read Key buffer hit rate: 50.0% (6 cached / 3 reads)

-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 0
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 128.0M/16.0K
[!!] Ratio InnoDB log file size / InnoDB Buffer pool size (75 %): 48.0M * 2/128.0M should be equal 25%
[OK] InnoDB buffer pool instances: 1
[--] Number of InnoDB Buffer Pool Chunk : 1 for 1 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[!!] InnoDB Read buffer efficiency: 82.53% (1176 hits/ 1425 total)
[!!] InnoDB Write Log efficiency: 0% (2 hits/ 0 total)
[OK] InnoDB log waits: 0.00% (0 waits / 2 writes)

-------- AriaDB Metrics ----------------------------------------------------------------------------
[--] AriaDB is disabled.

-------- TokuDB Metrics ----------------------------------------------------------------------------
[--] TokuDB is disabled.

-------- XtraDB Metrics ----------------------------------------------------------------------------
[--] XtraDB is disabled.

-------- RocksDB Metrics ---------------------------------------------------------------------------
[--] RocksDB is disabled.

-------- Spider Metrics ----------------------------------------------------------------------------
[--] Spider is disabled.

-------- Connect Metrics ---------------------------------------------------------------------------
[--] Connect is disabled.

-------- Galera Metrics ----------------------------------------------------------------------------
[--] Galera is disabled.

-------- Replication Metrics -----------------------------------------------------------------------
[--] Galera Synchronous replication: NO
[--] No replication slave(s) for this server.
[--] This is a standalone server.

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
 Set up a Secure Password for user@host ( SET PASSWORD FOR 'user'@'SpecificDNSorIp' = PASSWORD('secure_password'); )
 Restrict Host for user@% to user@SpecificDNSorIp
 MySQL started within last 24 hours - recommendations may be inaccurate
 Reduce or eliminate unclosed connections and network issues
Variables to adjust:
 query_cache_size (=0)
 query_cache_type (=0)
 query_cache_limit (> 1M, or use smaller result sets)
 innodb_log_file_size * innodb_log_files_in_group should be equal to 1/4 of buffer pool size (=64M) if possible.

正如你所看到的,我有一些安全性改进可以跟进,我可以改变一些变量来提高性能。

选项3. 使用CDN

以前的两个建议一直是提高MySQL查询的性能,但是首先减少查询呢?许多网站,如个人博客或投资组合,实际上并没有经常改变。这意味着应该可以提供站点的静态HTML版本,而不是让每个访问者在每个加载的页面上查询数据库。

CDN是在您的用户和数据库之间放置缓存层的最流行的解决方案。它的全球内容传送网络(CDN)是速度最快的网站之一,这意味着您的网站不仅会加载速度更快,而且还将依赖于您的数据库。另外,如果您的网站发生故障,CDN将尝试提供其缓存的版本,而不是显示错误。

对于WordPress用户,甚至还有一个插件,使这个过程比以往任何时候都更容易。简单地复制CDN在自己的支持页面上组合的过程是没有意义的,所以我们建议您使用WordPress的“ 使用CDN”页面了解更多信息。

对于其他应用程序,还可以使用CDN的免费层作为缓存层。在这种情况下,您需要将您的域名指向CDN的名称服务器,然后将CDN的DNS指向服务器的IP。

附加选项和资源

服务器本身存在其他缓存层(如memcached),而不是像Cloudflare这样的CDN,但是将这些缓存层超出了本教程的范围。

memcached

Redis

mysql5.7调试安装

教程:使用Redis作为WordPress缓存

Redis是一个可供选择的人谁想把他们的缓存提升到一个新的水平。现在,一个关于安装Redis并配置Wordpress与Redis进行通信的快速教程作为缓存层。

Redis 是一个开源数据结构存储,它在Wordpress用户中很流行,其简单性和高度优化的缓存方法,可以帮助页面加载速度更快。

为什么要缓存?在正常的Wordpress安装中,当用户浏览索引页(index.php)时,将查询MySQL数据库中循环中的帖子。这通常很快,但是如果您有多个循环或许多并发用户,那么数据库查询的庞大数量可能会让您的VPS变得压倒一切。像Redis这样的缓存层将会查询数据库一次,并创建一个纯HTML文件,而不是正常的文件,这将提高页面加载量并大大减少数据库查询。 index.php

先决条件

linux系统

已安装wordpress程序

步骤1.安装Redis

Redis可用于我们所有操作系统选项的默认软件包存储库,因此安装很轻松。

$ sudo add-apt-repository ppa:chris-lea/redis-server
 $ sudo apt-get update
 $ sudo apt-get install redis-server php-redis

现在,我们将通过运行快速验证Redis是否正确安装。如果您看到提示更改,您将开始一个良好的开始,如果您运行该命令,您应该看到响应。 redis-cli 127.0.0.1:6379> ping PONG

$ redis-cli
 127.0.0.1:6379> ping
 PONG

步骤2.配置Redis

接下来,我们需要设置一些配置,使PHP和Redis协同工作,并将Redis用作缓存。在您选择的编辑器中打开文件,并将以下行添加到文件的末尾。 /etc/redis/redis.conf

maxmemory 256mb
 maxmemory-policy allkeys-lru

可以根据您的需要增加在线中分配的RAM 。 maxmemory 256mb

最后,我们将重新启动Redis服务器。

$ sudo service redis-server restart

步骤3.将Wordpress连接到Redis

将Wordpress连接到Redis的最简单的方法是使用一个名为Redis Object Cache的流行插件。只需通过Wordpress仪表板安装插件,然后导航到设置。您应该会看到如下所示的屏幕。

该插件立即识别我们的Redis安装,所有您需要做的是单击启用对象缓存按钮开始使用Redis作为Wordpress缓存层。

 

如果是使用宝塔面板的用户可以直接在软件管理选项卡,打开你网站对应的PHP版本,然后进入设置-安装扩展-Redis扩展,直接安装即可!

教程:安全手册(第二部分)

关于教程的注意事项:我们鼓励用户尝试教程,但是我们的团队并不完全支持我们 – 当出现问题时,我们不能总是提供支持。在继续之前,请务必检查其测试的操作系统和版本。如果您遇到问题,请发表评论,我们会尽力帮助。

如果您想要一个完全管理的体验,专门支持您可能想要运行的任何应用程序,请联系我们获取更多信息。

上次,我们开始构建一个更为复杂的可复制的安全手册。我们通过一些简单但合乎逻辑的编辑,使SSH变得更加强硬/etc/ssh/sshd_config,但是我们还可以做更多的工作来改进剧本的即时功能。

如果您还没有看到本教程系列的第一部分,请先跳过该手册,以了解有关Playbook功能的基本结构:教程:安全手册(第二部分)

总而言之,让我们开始吧。

步骤6.创建iptables / tasks / main.yml

使用Ansible 2.0,有一个内置的iptables模块,可以让我们创建规则,而不必依靠运行plain bash命令。这真的很方便,但不是很好的记录,可悲的是。但在我们达成这些规则之前,让我们在铺设基础上进行实地考察。

- name: Install the `iptables` package
 package:
 name: iptables
 state: latest

使用该package模块是现在熟悉的领域 – 我们只是iptables安装的双重检查。

下面开始:

- name: Flush existing firewall rules
 iptables:
 flush: true

我们使用iptables Ansible模块的第一个例子,只是为了刷新可能存在的任何现有规则。

现在,创建规则:

- name: Firewall rule - allow all loopback traffic
 iptables:
 action: append
 chain: INPUT
 in_interface: lo
 jump: ACCEPT

我们首先要允许现在或将来可能在VPS上运行的各种应用程序和服务之间可能存在的任何环回流量。我们现在可以看到我们如何指定chain,可以设置为任何内置的链iptables:“INPUT”,“FORWARD”,“OUTPUT”,“PREROUTING”,“POSTROUTING”,“SECMARK”,“CONNSECMARK ”。该jump参数是我们指定了我们希望与希望的链和我们接口匹配的流量做ACCEPT这个业务,但我们也可以REJECT和DROP它。

为方便起见,我们也希望允许建立连接。

- name: Firewall rule - allow established connections
 iptables:
 chain: INPUT
 ctstate: ESTABLISHED,RELATED
 jump: ACCEPT

这是我们的第一个(也是唯一)的ctstate参数的味道,可以用来创建一些更复杂的规则。

现在,让我们来看看多汁的位 – 允许在某些端口上的特定类型的通信,通常是VPS上想要的。

- name: Firewall rule - allow port ping traffic
 iptables:
 chain: INPUT
 jump: ACCEPT
 protocol: icmp

- name: Firewall rule - allow port 22/SSH traffic
 iptables:
 chain: INPUT
 destination_port: 22
 jump: ACCEPT
 protocol: tcp

- name: Firewall rule - allow port 80/HTTP traffic
 iptables:
 chain: INPUT
 destination_port: 80
 jump: ACCEPT
 protocol: tcp

- name: Firewall rule - allow port 443/HTTPS traffic
 iptables:
 chain: INPUT
 destination_port: 443
 jump: ACCEPT
 protocol: tcp

使用icmp协议的第一个示例允许您ping像往常一样运行您的服务器 – 如果您不允许icmp流量,您的ping将被丢弃或拒绝。

对于其他三个项目,我们只是允许某些目标端口基于人们通常希望在其VPS:端口22上启用的流行服务,用于SSH流量; 端口80,用于HTTP流量; 端口433,用于HTTPS流量。没有这些例外,您会发现许多VPS应用程序将无法正常工作。

现在您已经知道如何根据需要打开端口,您可以根据需要对您的手册进行自定义。

最后,让防火墙有能力做最好的事情:阻止流量。

- name: Firewall rule - drop any traffic without rule
 iptables:
 chain: INPUT
 jump: DROP

与此规则的唯一区别在于使用jump参数DROP,我们只是阻止到达任何端口的流量,并通过任何使用上述规则未打开的协议。您还可以设置jump到REJECT,这将返回关于端口不可达消息。

最后,我们希望在服务器重新启动之间保持这些新规则。这是在Ubuntu和基于Debian的VPS上执行此操作的方法。

- name: Install `netfilter-persistent` && `iptables-persistent` packages
 package:
 name: "{{item}}"
 state: present
 with_items:
 - iptables-persistent
 - netfilter-persistent
 when: ansible_os_family == "Debian"

我们使用相同的旧package模块在这里,结合一个with_items列表,同时安装iptables-persistent和netfilter-persistent。这似乎是在Ubuntu上做的伎俩,因此使用when: ansible_os_family == “Ubuntu”。

步骤7.创建fail2ban / tasks / main.yml

接下来,我们想要快速设置,fail2ban以帮助阻止对我们的服务器的暴力攻击。

- name: Install the `fail2ban` package
 package:
 name: fail2ban
 state: latest

- name: Override some basic fail2ban configurations
 copy:
 src: ../templates/jail.local.j2
 dest: /etc/fail2ban/jail.local
 owner: root
 group: root
 mode: 0644

在这里,我们正在使用该package模块进行安装fail2ban。完成该操作后,我们要为运行建立一些自定义配置fail2ban。为了达到这个目的,我们要复制一个保留在playbook结构内的文件/etc/fail2ban/jail.local。copy除了建立正确的所有权和权限之外,该模块还允许我们做到这一点。

什么是jail.local文件?那么,fail2ban/templates/jail.local.j2在下面创建一个新文件并粘贴到以下内容中:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true
maxretry = 3

所有这些配置都是确保fail2ban使用iptables,并启用该工具sshd。您可以使用这些设置进行更多操作,您可以通过官方文档进行探索。

第八步奖金!启用无人值守升级

我们快速回到我们的roles/packages/tasks/main.yml文件中配置无人参与的升级,这将有助于使服务器更安全一些。

以下是我们添加到packages角色的内容:

- name: Install the `unattended-upgrades` package
 package:
 name: unattended-upgrades
 state: installed
 when: ansible_os_family == "Debian"

- name: Copy the `20auto-upgrades` configuration file
 copy:
 src: ../templates/20auto-upgrades.j2
 dest: /etc/apt/apt.conf.d/20auto-upgrades
 owner: root
 group: root
 mode: 0644
 when: ansible_os_family == "Debian"

首先,我们正在安装unattended-upgrades,然后复制一个配置文件tasks/packages/templates/20auto-upgrades.j2。那个文件里面有什么?

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

只需要启用该过程所需的准系统选项。同样,此配置可实现自动安全升级,但在这些更新需要时,不会自动重新启动服务器。如果您想要进一步了解其他一些选项,则/etc/apt/apt.conf.d/50unattended-upgrades您的VPS有详细的记录,可以根据您的具体需求进行重新配置。

向前!

该剧本现在是“完成”!自然地,还有更多的可以做到这一点,以改进这个手册的功能,包括更好地支持更多的操作系统选项。在接下来的几个星期里,我将会更新这两个文章,当内置这些支持时,我会根据需要更新这两篇文章。另外还有就是自动安装Docker,记录软件等等。

我把完整的手册放在GitHub上,这样你就可以轻松地看到整个结构,以防万一你一直困惑着。或者,您可以简单地克隆资源库并拥有它。

$ git clone https://github.com/joelhans/ssdnodes-ansible-provision.git

如果您想查看添加的任何功能,或者有关如何将此手册放在一起的问题,请随时通过评论或电子邮件通知我。很高兴在GitHub上采取问题和/或提出请求!

教程:安全手册(第一部分)

关于教程的注意事项:我们鼓励用户尝试教程,但是我们的团队并不完全支持我们 – 当出现问题时,我们不能总是提供支持。在继续之前,请务必检查其测试的操作系统和版本。如果您遇到问题,请发表评论,我们会尽力帮助。

如果您想要一个完全管理的体验,专门支持您可能想要运行的任何应用程序,请联系我们获取更多信息。

在我们最后的可以安全的教程中,我们介绍了Ansible的配置管理方法的基础知识,可以帮助您更快地设置新的服务器并提供更高的可靠性。我们在那里创建的可靠的手册是相当基本的,所以我认为是时候建立一个更复杂的手册,支持更多的安全性,而不是牺牲通过通常的方式访问服务器。

这个“安全”课程的目标是:

使用sudo访问设置非root用户。
升级所有安装的软件包
安装几个基本软件包,使初始管理更容易,如nano。这些可以根据您的需要轻松定制。
将您的SSH密钥复制到VPS以启用无密码登录。
硬化SSH具有一些基本的安全措施,例如禁用root和基于密码的登录。
iptables如果需要安装,并设置一些基本限制,以提高安全性。
安装fail2ban以防止暴力攻击。
最后两个步骤将在下周在本Ansys教程的第二部分中概述。

这个剧本不是全面的,当涉及到便利性或安全性 – 一旦你使用这个手册提供服务器,你应该可以研究一些额外的步骤,你可以采取,如使用Lynis审计您的安全。

这里的目标不仅仅是让您在此处复制代码并重新创建自己的手册 – 而是逐步介绍各种组件,以便您可以使用本手册作为自己的自定义设置的基础。

要求:

运行我们的任何操作系统选项的新配置或重建服务器 – CentOS,Debian或Ubuntu。
可以安装在本地机器上 – 有关详细信息,请参阅这些说明
使用您的服务器的IP设置的可安装主机文件 – 请参阅我们上一个教程的步骤2
步骤1.设置playbook结构

可以通过多种不同的方式构建可读的剧本,但是开发者们也有其建议。这个Anisble脚本与系统的可能性相比还是比较简单的,所以我们的结构也会变得简单得多。

以下是我们的一般结构:

provision.yml

roles
 common/
 tasks/
 main.yml
 ssh
 tasks/
 main.yml
 packages
 tasks/
 main.yml
 iptables
 tasks/
 main.yml

如果你愿意,你可以继续创建目录,只是为了让你更好地了解如何将其逻辑分为不同的区域。

步骤2.创建provisioning.yml

该provision.yml文件是我们的Playbook的核心 – 它是我们定义哪些服务器,我们将要使用的几个全局变量,并告诉可以在哪里查找其任务。

---
- name: Provision a new server with hardened SSH and basic iptables.

# Specify the hosts you want to target
 hosts: <b>HOST</b>

# Specify the user you want to connect to the server.
 # With a new installation, you will connect with `root`. If you want to
 # re-run this playbook at a later date, you should change `remote_user` to
 # the user you specified under `vars/username` below and uncomment the
 # `become: true` line. You should then run the playbook using the
 # `--ask-become-pass` flag, like so:
 # `ansible-playbook -k provision.yml --ask-become-pass`.
 remote_user: root
 # become: true

vars:
 username: <b>USER</b>
 # Before first using the playbook, run the below command to create a hashed
 # password that Ansible will assign to your new user.
 # python -c 'import crypt; print crypt.crypt("<b>password</b>", "$1$<b>SALT</b>$")'
 password: <b>PASSWORD GOES HERE</b>
 public_key: ~/.ssh/id_rsa.pub

roles:
 - user
 - packages
 - ssh
 - iptables

您需要根据需要更改许多变量。

步骤3.创建用户/任务/ main.yml

我们的第一个主要步骤是为新的非root用户设置正确的环境,然后创建该用户。这是第一个组件:

- name: Ensure wheel group is present
 group:
 name: wheel
 state: present

这个可执行的任务是一个简单的任务:它检查wheel您的服务器上是否存在该组。如果它不是由于某种原因 – 它应该在我们的所有操作系统选项上 – 剧本将失败,然后您可以用groupadd命令修复它。

下一步是关键的一步,所以让我们来看看:

- name: Ensure wheel group has sudo privileges
 lineinfile:
 dest: /etc/sudoers
 state: present
 regexp: "^%wheel"
 line: "%wheel ALL=(ALL:ALL) ALL"
 validate: "/usr/sbin/visudo -cf %s"

这是使用正则表达式替换文本中的一行与不同文本字符串的示例。我们正在查看/etc/sudoers文件内部,并请求开始(^)的行%wheel。当找到该行时,我们将整个行替换为%wheel ALL=(ALL:ALL) ALL允许wheel组中的用户执行命令sudo。在编辑方面/etc/sudoers,最后validate一行是至关重要的,因为您不喜欢由于不正确的文件而导致剧本失败而不是破坏管理员功能。

我们也想确保sudo软件包安装好了。

- name: Install the `sudo` package
 package:
 name: sudo
 state: latest

安装任何软件包,无论是CentOS,Ubuntu还是Debian,都以完全相同的方式运行。这就是Ansible的美丽 – 你可以创建一个任务,因为内置的逻辑工作。

最后,我们创建在其中的变量中指定的非root用户帐户provision.yml。

- name: Create the non-root user account
 user:
 name: ""
 password: ""
 shell: /bin/bash
 update_password: on_create
 groups: wheel
 append: yes

append: yes

此任务将使用您创建的散列密码设置用户,并将shell设置为/bin/bash。因为我们把这个用户放在wheel组里,我们可以直接使用sudo。

步骤4.创建packages / tasks / main.yml

该packages任务非常简单:我们只想更新所有软件包,以便我们拥有最新的安全修复程序,然后根据我们的具体需求安装多个额外的软件包。

- name: Upgrading all packages (Ubuntu/Debian)
 apt:
 upgrade: dist
 when: ansible_os_family == "Debian" or ansible_os_family == "Ubuntu"

- name: Upgrading all packages (CentOS)
 yum:
 name: '*'
 state: latest
 when: ansible_os_family == "RedHat"

这两个任务的关键是when选项 – 这允许您指定何时根据您选择的操作系统运行某些命令。这是必要的,因为yum在Ubuntu上不起作用,apt不能在CentOS上工作。在这两种情况下,我们只是要求相应的软件包管理器更新每个安装的软件包。

我们还可以安装其他软件包:

- name: Install a few more packages
 package:
 name: "{{item}}"
 state: installed
 with_items:
 - vim
 - htop

本质上,我们要求package任务查看下面的项目列表with_items,然后依次安装它们。如果您想要一些自己的软件包,只需将该列表自定义为您的内容。

步骤5.创建ssh / tasks / main.yml

接下来,我们要启用使用SSH密钥登录到新创建的用户,而不是密码 – 这是简单而有效的安全措施。除此之外,我们希望使用Ansible对SSH守护进程进行一些配置更改,这将使其不会受到一些基本攻击。这不是万无一失的,但它肯定是高于默认值的一大步。

- name: Add local public key for key-based SSH authentication
 authorized_key:
 user: ""
 state: present
 key: ""

此命令在本地机器上在该vars部分中指定的位置查找SSH密钥provision.yml,然后将其复制到服务器。比使用更容易ssh-copy-id吗?

接下来,让我们使SSH更安全一些。

- name: Harden sshd configuration
 lineinfile:
 dest: /etc/ssh/sshd_config
 regexp: "{{item.regexp}}"
 line: "{{item.line}}"
 state: present
 with_items:
 - regexp: "^#?PermitRootLogin"
 line: "PermitRootLogin no"
 - regexp: "^^#?PasswordAuthentication"
 line: "PasswordAuthentication no"
 - regexp: "^#?AllowAgentForwarding"
 line: "AllowAgentForwarding no"
 - regexp: "^#?AllowTcpForwarding"
 line: "AllowTcpForwarding no"
 - regexp: "^#?MaxAuthTries"
 line: "MaxAuthTries 2"
 - regexp: "^#?MaxSessions"
 line: "MaxSessions 2"
 - regexp: "^#?TCPKeepAlive"
 line: "TCPKeepAlive no"
 - regexp: "^#?UseDNS"
 line: "UseDNS no"
 - regexp: "^#?AllowAgentForwarding"
 line: "AllowAgentForwarding no"

在lineinfile和regexp应该熟悉你在这一点上,与在修改/etc/sudoers,我们正在寻找/etc/ssh/sshd_config和更换一批以新的现有生产线的。如果这些行当前不存在,则Ansible将在包含我们的修订版本的文件的底部创建新行。在^#?正则表达式使我们能够取代线是否他们注释掉,从而与一个开始#。

最后,让我们拥有SSD守护进程,以确保我们的更改已被应用。

- name: Restart sshd
 systemd:
 state: restarted
 daemon_reload: yes
 name: sshd

这个systemd任务允许我们运行相当于systemd restart sshd。

最后的想法

如上所述,我们在这里暂停一会儿,并将从本教程的下半部分返回一个星期,这将通过一个基本的iptables配置和安装fail2ban。

但是,在此期间,你现在可以运行这个剧本和更高版本。这是一个正确配置的可疑剧本的好东西 – 它们是幂等的,这意味着它们可以一次又一次地运行,而不会改变超出初始安装的结果。你可以运行一下这个playbook,做一个小小的变化,比如添加另外一个package来安装这个packages角色,然后再运行一下这个playbook,没有错误。

一旦你把所有的东西都运行起来,你如何实际运行这个剧本?这很简单

生成一个散列密码。您首先需要将非root用户所需的密码转换为散列密码。该命令应该在Linux和OS X上工作,并确保password用您选择的密码替换:python -c ‘import crypt; print crypt.crypt(“password”, “$1$AnsibleSalt$”)’。

复制你的新哈希provision.yml。

运行Ansible。通过一个简单的命令,运行本书本身就是直截了当的:$ ansible-playbook -k provision.yml

如果您需要在第一次运行后重新运行该手册,您需要对provision.yml上述代码(以及您创建的版本)进行一些更改,以获取一些基本说明。

请继续关注后期的教程,以及您需要在自己的服务器上运行此剧本的完整代码,并使之更快地工作。

教程:服务器的入门和可配置管理

在本教程中,我们将介绍如何使用Ansible作为CM工具来设置一个基本的访问和服务器硬件工具和设置的CentOS,Debian和Ubuntu服务器。

我们的目标:

  1. 设置非root用户
  2. 给新用户sudo访问
  3. 禁用基于密码的登录
  4. 禁用

要求:

运行我们的任何操作系统选项的新配置或重建服务器 – CentOS,Debian或Ubuntu。

步骤1:在本地机器上安装可执行文件

在开始编写可执行的手册之前,您需要将其安装在本地机器上。有各种平台的安装说明,包括各种* nix发行版和OS X.

步骤2:编辑可安装的主机文件

为了使Ansible连接到VPS,您需要在Ansible的hosts文件中指定其IP地址。在Linux和OS X机器上可以找到/etc/ansible/hosts。文件的开头应该是这样的。

# This is the default ansible 'hosts' file.
 #
 # It should live in /etc/ansible/hosts
 #
 # - Comments begin with the '#' character
 # - Blank lines are ignored
 # - Groups of hosts are delimited by [header] elements
 # - You can enter hostnames or ip addresses
 # - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

green.example.com
 ## blue.example.com
 ## 192.168.100.1
 ## 192.168.100.10

要启用您的服务器,只需将IP地址添加到此文件中的任何位置,即[ssdnodes]分组。应该没有其他符号,如#评论一样。

[ssdnodes]
 123.45.67.89

现在,通过ping你的服务器测试你的配置。现在,您必须使用它-u root来确保您尝试通过root帐户进行连接。

$ ansible all -m ping -u root

如果成功,您将看到以下输出:

123.45.67.89 | SUCCESS => {
 "changed": false,
 "ping": "pong"
 }

步骤3:创建一个基本的可复制的剧本

为了使上述任何一个目标成为现实,我们需要创建一个可靠的手册来定义我们需要完成的任务。The Ansible playbook是一种通用.yaml语言。

$ mkdir ansible && cd ansible
 $ touch create_user.yaml
 $ nano create_user.yaml

这是一个完成我们目标的基本手册。注意:本手册旨在在裸机CentOS 7服务器上运行。如果要在Ubuntu / Debian服务器上运行,只需更改yum行apt。

---
 - hosts: ssdnodes
 remote_user: root

vars_prompt:

- name: "user_name"
 prompt: "Enter a name for the new user"
 private: no
 confirm: yes

- name: "user_password"
 prompt: "Enter a password for the new user"
 private: yes
 encrypt: "sha512_crypt"
 confirm: yes
 salt_size: 7

tasks:

- name: Check to make sure we have a 'wheel' group
 group:
 name: wheel
 state: present

- name: Install the 'sudo' package
 yum:
 name: sudo
 state: latest

- name: Create the non-root user
 user:
 name: ""
 password: ""
 shell: "/bin/bash"
 groups: "wheel"

- name: Add local public key for key-based SSH authentication
 authorized_key:
 user: ""
 key: "{{item}}"
 with_file:
 - ~/.ssh/id_rsa.pub

- name: Restrict root SSH logins
 lineinfile:
 dest: /etc/ssh/sshd_config
 state: present
 regexp: '^#PermitRootLogin'
 line: 'PermitRootLogin no'

- name: Restrict SSH logins to keys only
 lineinfile:
 dest: /etc/ssh/sshd_config
 state: present
 regexp: '^#PasswordAuthentication'
 line: 'PasswordAuthentication no'

- name: Restart sshd
 systemd:
 state: restarted
 daemon_reload: yes
 name: sshd

在我们介绍你如何运行这个命令之前,让我们来看一下这些行在实践中所做的一切。

- hosts: ssdnodes
 remote_user: root

这两行决定了我们将要使用的主机组 – 在这种情况下,ssdnodes我们之前创建的组,并指定我们正在使用根登录(只需一次)来完成我们的步骤。

vars_prompt:

- name: "user_name"
 prompt: "Enter a name for the new user"
 private: no
 confirm: yes

- name: "user_password"
 prompt: "Enter a password for the new user"
 private: yes
 encrypt: "sha512_crypt"
 confirm: yes
 salt_size: 7

这两个vars_prompt命令将要求用户输入来定义他们想要与新创建的帐户相关联的用户名和密码。

除此之外,开始的每个嵌套的脚本块都- name:定义了一个新任务,一旦先前的任务成功完成,Ansys将按顺序完成。失败的任务将导致整个剧本停止运行。如果您遵循每项任务,您可以看到我们正在安装sudo,创建新用户,将SSH公钥添加到服务器,并sshd在重新启动之前对其进行了一些基本限制。

步骤4:运行可执行的剧本
运行这本剧本是相当简单的。这是我们将要使用的命令:

ansible-playbook create_user.yaml --ask-pass

我们需要包括,–ask-pass以便Ansible使用密码登录服务器,而不是尝试使用不在那里的SSH密钥。

一旦你运行命令,你将被要求输入SSH password:。这是您的服务器的根登录名,该密码可以在会在您的服务器交付时发给您。

输入root密码后,系统将提示您指定并确认用户名和密码。一旦完成,Ansible将会工作!

Ansible如果运行顺利,您的终端中看到以下内容:

 ____________
 < PLAY RECAP >
 ------------
 \ ^__^
 \ (oo)\_______
 (__)\ )\/\
 ||----w |
 || ||

123.45.67.89 : ok=8 changed=6 unreachable=0 failed=0

这里不能发太多空格,效果如下图。

此时,您可以使用SSH密钥登录到新用户帐户。恭喜!您现在可以轻松开始配置新服务器,并着眼于安全。有关如何深入了解可自动化服务器强化的更多信息,请查看以下这些资源:

ansible-OS

ansible-SSH

ansible-角色的安全性