断断续续也换过好几家服务器提供商了。由于服务器配置工作并不频繁,导致每次配置后过段时间就忘。每次拿到新服务器后,总是要重新搜索相关资料。因此在这里对服务器配置工作做一个总结,方便之后自己查阅。
用户相关工作
在拿到新的服务器运行时,一般不直接使用root用户进行登陆和操作,而是创建两个用户。一个用户拥有root权限,用来做服务器的管理工作。另一个用户只拥有少量权限且不可ssh登陆,用来安全地运行系统各项网络服务。具体步骤如下:
创建用户
ubuntu系统下使用adduser命令分别创建两个用户,并输入相应的用户名和密码等信息。对于其他系统,可使用通用的更为复杂的useradd命令并自行创建用户目录文件夹等。对于root权限用户,可将密码设置的更复杂以获得更好的安全性。
而对于低权限用户,可使用adduser –disabled-password –disabled-login {用户名}在创建时锁定其密码,来禁止其使用密码登陆。
下面将拥有root权限的用户称为“{用户A}”,少量权限的用户称为“{用户B}”。请根据自己实际情况进行替换
赋予用户A root权限
打开/etc/sudoers,找到root ALL=(ALL:ALL) ALL行并在它底下添加相似的一行,只不过把用户名改为要赋权的目标用户名:
|
|
随后,使用su {用户A}从root用户切换到用户A。执行sudo su,输入用户A的密码,看用户A是否能切换到root用户,以此来检查用户A是否已获得root权限。(重要!请务必检查此步正确,因为我们之后会关闭其他用户的root
权限,如果这步错误,除非rebuild你的服务器,否则再无方法拿到root权限,若系统无sudo,请使用系统自带的软件包管理器安装sudo)。
关闭root用户和用户B的登陆权限
为了进一步增加服务器的安全性,还可以通过编辑/etc/ssh/sshd_config文件来禁止root用户登陆、完全关闭用户B的ssh权限、修改ssh登陆端口。
-
在
/etc/ssh/sshd_config文件中,找到PermitRootLogin项,将后面的yes改为no即可禁止root用户登陆。 -
如果在创建用户B时未禁止其密码登陆,可通过
passwd -l {用户B}来锁定其密码。即使用户B密码被锁定,仍可使用ssh来与用户B通信。如果确定不会使用用户B的ssh功能,可在/etc/ssh/sshd_config文件最后新加一行DenyUsers {用户B},来彻底禁止使用ssh连接用户B。 -
在
/etc/ssh/sshd_config文件中,将Port 22修改为Port {任意非常用端口数字}即可将ssh登陆端口修改为其他端口
再执行完这些修改后,之后在登陆服务器时,将使用用户A以及相应ssh登陆端口来登陆:
|
|
当需要root权限执行命令时,使用sudo {命令}来执行。当需要切换到root用户时,使用sudo su。当需要切换到其他用户时,使用sudo su {其他用户名}。
用户B防火墙设置
(以下内容来自于这篇博客,源博客已找不到,只找到转载的)
新建一个叫SHADOWSOCKS的Chain。并加入防范最常见的垃圾邮件攻击的规则
|
|
最后,把SHADOWSOCKS这个Chain,打到OUTPUT上去
|
|
使用iptables-persistent工具来保存和自动加载规则
|
|
代理相关
主要通过v2ray解决。对于目前市面上出现的新的Xray以及更古老的shadowsocks,有兴趣可以自行查看。
首先切换到低权限用户B并通过cd进入其根目录,通过mkdir新建文件夹后进入此文件夹,下载v2ray最新的release。最新版本的发布页详见此Github页面,并在
最新版的Assets里寻找Linux 64位版本:v2ray-linux-64.zip的地址,随后下载并解压缩。下面以4.38版本为例:
|
|
随后,新建一个名为server.json的配置文件进行代理配置。具体可参考这个教程。一般基本配置即可使用,但大流量有被封风险。如果为了更高的安全性,可以参阅高级配置中的TLS配置章节进行配置。
下面仅对websocket+tls+web配置进行说明。
此项配置需要申请一个域名,如果想长期使用的话,可花钱在国外购买一个域名(不要购买国内的域名,因为需要备案才能使用)。如果仅是为了代理的话,推荐使用freenom不停地换一年免费的域名即可。获得域名后
还需将域名和你的服务器IP连接,在相应控制面板中使用A连接IPV4地址,AAAA连接IPV6地址即可。
随后,对server.json文件进行配置,一个典型的websocket+tls+web配置文件如下所示,请根据自己需要修改。
|
|
随后,使用nginx(推荐)或Apache等软件架设一个网页,随后就可使用域名来访问网页了。对于nginx,建设相对简单,详情可参考这篇XRay配置文档第五章,这里仅简单记录相关命令。 当然这篇文档内部也有其他很有用的信息,可自行查阅。而Apache,则可参阅底下的“网盘相关”章节。
首先,安装nginx,安装完成后进入http://{服务器IP}:80即可检查是否成功
|
|
之后,新建一个存放网页专属文件夹并新建一个index.html的placeholder(如果已有网站的话,也可直接把相关网站地址软链接过来,详情例子参考底下的博客相关章节)。nginx支持对配置文件进行修改把其网页目录放到低权用户B的管理下以提升安全
性(apache应该也可以,但我目前还不会)。因此,建议切换至低权用户B并将网页放至低权用户
|
|
一个典型的placeholder网址如下:
|
|
随后编辑nginx的控制文件/etc/nginx/nginx.conf,如果你现在还未有https证书,那么网址应该放到80端口下:
|
|
如果你已经有https证书了,那么网址应该放到443端口下并让80端口转发至443:
|
|
完成后之后重启nginx,访问配置文件中书写的{二级域名}.{你的域名}.{域名后缀},应该就可以看到具体网页了
|
|
有些情况网页会提示403 forbidden,这是由于nginx启动的用户无权访问此文件夹。这时候可以尝试直接将nginx的启动用户就改为用户B。编辑/etc/nginx/nginx.conf,寻找文件前面的user那行,将其改为用户B:
|
|
在成功建站后,还需对其申请SSL证书。一般为通过设置计划任务不断申请Let’s encrypt的90天免费证书。主要的工具有acme.sh,certbot等。acme.sh使用可参照这篇XRay配置文档第六章。而certbot则更为简便,只需要使用snap或pip安装certbot后,即可一站式完成SSL证书申请。
如果使用snap
|
|
如果使用pip
|
|
随后,即可使用certbot --nginx(nginx场合),certbot --apache(apache场合)来安装证书。
对于nginx,当开启SSL后,由于我们将网页放至低权用户B,为防之后证书更新时出现问题,我们还需修改/etc/nginx/sites-enabled/default文件中这两行:
|
|
在它们前面加上#来对它们进行注释,变为
|
|
安装完成后,还需对它们的配置文件进行修改来让v2ray使用申请到的SSL证书。对于nginx,在/etc/nginx/nginx.conf文件中找到listen 443 ssl;行,在其后面添加这些行
|
|
对于Apache则需首先启用一些模块:
|
|
随后编辑/etc/apache2/sites-available/000-default-le-ssl.conf文件(如果不是的话去对应目录用grep找找哪个文件包含了<VirtualHost *:443>),并在<VirtualHost *:443>的一栏中加入以下内容:
|
|
随后在客户端中进行相应改变,可直接参考上面的v2ray典型配置,也可参考此详细教程。
无论任何配置,在配置完成后,可使用./v2ray -c server.json后使用客户端连接进行测试来检验配置是否成功。
配置无问题后,为了能让v2ray在后台一直启用。使用守护进程supervisor来维持其启动状态。首先安装supervisor
|
|
然后通过编写/etc/supervisor/conf.d/v2ray.conf新建守护配置文件。在其中填写:
|
|
然后使用supervisorctl update更新配置列表,使用supervisorctl start v2ray开启v2ray,使用supervisorctl stop v2ray关闭v2ray,使用supervisorctl restart v2ray重启v2ray
既然已经为了代理花钱买下服务器并进行了繁琐的网站架设配置,那么不进一步物尽其用将架设的网站利用起来显然是个资源浪费的选择。一般把网页利用起来的方式有架设个人博客,搭建个人网盘等。
博客相关
搭建个人博客的方式主要有使用付费的WordPress框架搭建,或使用免费的hugo,jekyll,hexo托管软件来生成静态的网页。 本博客使用的是hugo。相关详细的安装流程可参照官网教程。以下只列出大致步骤。
首先,在服务器中安装hugo。由于ubuntu官方源中的hugo版本太低,因此选择使用github中的release包来安装。进入官方github发布地址,选择hugo_extended相关的ubuntu
安装deb文件,下载到服务器中并使用dpkg安装,这里仅以此文章写下时最新压缩包地址作为例子。
|
|
安装后,可使用hugo version查看安装版本。
切换到低权限用户B,创建博客文件夹
|
|
创建git工作区并将主题以git submodle的方式附加到博客中。主题可在https://themes.gohugo.io/中选一个自己喜欢的安装,这里使用的主题是hugo-theme-stack。
|
|
随后修改根目录中的config.toml应用主题,就可以使用了。当然hugo-theme-stack这个主题使用方式和其他主题不一样,稍微较复杂(漂亮的代价),它需要把原本的配置文件config.toml删除,
并把themes/hugo-theme-stack/exampleSite/中的相应文件复制到根目录来修改hugo的一些编译行为。
在配置完成后,使用hugo server即可查看网页是否正常。当然由于在服务器上的localServer所以没法直接看效果,只能用作测试一切正常。
使用hugo -D即可编译网页,编译后的网页存放在public目录。假设你的网页托管文件夹为/path/to/your/www/html,如果想让他出现在域名子目录,只需在网页托管文件夹中创建软链接将编译好的目录链接过去即可。
|
|
随后,进入https://{你的域名}/blog,就可看到生成的网页了。
如果想让它直接出现在域名中,我们只需删除原来的nginx或apache托管的网页文件夹,然后创建一个一模一样的名称的软链接将编译好的网页文件夹链接过去即可。。
|
|
随后,进入https://{你的域名},就可看到生成的网页了。
网盘相关
个人网盘搭建主要使用的是NextCloud。当然市面上也有ownCloud,seafile等产品,有兴趣可以自行查看。
前期环境准备工作:
为了方便,通过sudo su切换到root用户。安装Apache2,MariaDB和PHP:
|
|
安装完成后,进入http://{你的服务器IP}即可查看apache2是否安装成功。
MariaDB安装情况检查:mysql -V
PHP安装情况检查:php7.0 -v
启用Apache2 mod_rewrite模块:a2enmod rewrite
为NextCloud创建数据库。名为nextcloud,用户名为nextcloud,密码为{passwd}。请根据实际情况更改信息,尤其是密码。
|
|
在进入MariaDB后,执行:
|
|
一切完成后重启服务:service apache2 restart。并再次进入http://{你的服务器IP}查看一切是否正常
安装NextCloud
NextCloud压缩包地址请参照其官网。进入"Download for server"后获得最新的压缩包。这里仅以此文章写下时最新压缩包地址作为例子。
|
|
随后,进入http://{你的服务器IP}/nextcloud,应该就可以访问NextCloud了。在首次配置页面中创建管理员用户和密码,并在配置数据库一栏中填写之前创建的数据库名,用户名和密码。完成配置后就可以进入进行更详细的
模块配置和使用了。
其他可能设置
BBR
对于linux内核版本大于4.9的kvm服务器,可以开启BBR来加快传输速度。
检查内核
|
|
更改配置
|
|
使配置生效
|
|
检查BBR是否开启
|
|
检查这两条命令的输出是否含有bbr字样即可
让程序运行在小于1024的端口
通过setcap程序解决。对于ubuntu,命令如下,其他发行版类似。
|
|