x1184的小站
x1184的小站
DreamTree-Linux服务器从零部署及概念梳理
DreamTree-Linux服务器从零部署及概念梳理

阅读说明

本文适合于有一定Linux操作基础的爱好者阅读,包括但不限于常用命令, HTTP协议 等知识点,同时若具有数据库相关知识阅读体验更佳。

1.连接服务器

通过ssh协议来连接,连接客户端我使用mRemoteNG,引用一下官网介绍,总体来说开源的,窗口不限制,支持多种协议。

mRemoteNG is a fork of mRemote: an open source, tabbed, multi-protocol, remote connections manager. mRemoteNG adds bug fixes and new features to mRemote.

It allows you to view all of your remote connections in a simple yet powerful tabbed interface.
mRemoteNG supports the following protocols:
RDP (Remote Desktop/Terminal Server)
VNC (Virtual Network Computing)
ICA (Citrix Independent Computing Architecture)
SSH (Secure Shell)
Telnet (TELecommunication NETwork)
HTTP/HTTPS (Hypertext Transfer Protocol)
rlogin
Raw Socket Connections

然后可以用shell里的ssh命令直接去连接,windows10下有WSL模拟shell环境,Unix系统下原生有shell,区别就是在密码配置上(可以通过公私钥登录避免)和服务器批量管理上麻烦一些。

# 通过密码方式登录
ssh user@host -p port
# 或者
ssh host -l user -p port
# 若是第一次登陆该主机,会显示目标主机的公钥指纹,提示无法确认主机的身份,并询问是否继续;用户需要自行确认主机的其实性,这是为了防止ssh的中间人攻击。
# p是ssh协议使用的端口默认22,不填写就是默认值22。l是loginname指定登录的用户名

补充:安全问题

  • 连接成功后会提示上一次登录IP地址,Debian系会有,RedHat系貌似只会显示MOTD里的固定内容, Debian系就麻烦些是这里显示的/etc/update-motd.d,可以自定义每次登录成功后的提示信息。
  • ssh的安全性方面上推荐设置公钥登录的方式甚至结合跳板机网关控制。
# 在客户端生成密钥
ssh-keygen -t rsa
# 把公钥拷贝至服务器
ssh-copy-id -i .ssh/id_rsa.pub server
# 也可以手动将.shh/id_rsa.pub拷贝至服务器用户目录的.ssh中,记得修改访问权限

# 在服务器中
cd ./.ssh/
mv id_rsa.pub authorized_keys
chmod 400 authorized_keys
vim /etc/ssh/sshd_config

#修改如下设置
RSAAuthentication yes #RSA认证
PubkeyAuthentication yes #开启公钥验证
AuthorizedKeysFile .ssh/authorized_keys #验证文件路径
PasswordAuthentication no #禁止密码认证
PermitEmptyPasswords no #禁止空密码
UsePAM no #禁用PAM
 

sudo /etc/init.d/ssh restart  # 重启ssh服务以应用 
  • 对于初学者可能更习惯直接账号密码登录。
    • 但要注意从安全角度考虑推荐修改下默认端口,防止恶意服务器批量扫段穷举密码,操作 /etc/ssh/sshd_config 文件更改Port字段的值并restart服务即可(注意这里可能触发云服务器的安全组拦截规则或是自带防火墙规则)所以推荐最开始就做该操作并确保能连接上VNC环境方便救援。(以前曾经因为没注意防火墙拦截多次重装服务器系统还把最大次数用完了的尴尬情况)。
    • ssh端口改了后把用户和用户组也设置一下吧 。
sudo groupadd [选项] 组名   #添加新的组
sudo useradd [选项] 用户名   #创建新用户
usermod -l 原名 新名 #修改登录名 注意要有权限
或
vim /etc/passwd /etc/shadow  #vim中直接更改root :bn :bp文件切换
su 用户名 #不同用户间切换
sudo -i #提升权限
passwd 用户名 #更改服务器商家默认生成密码
  • 因为主流控制方式都是shell操作并且Linux对多用户的支持非常好,导致linux平台下一些安全问题发生时更隐蔽。其中就从登录来说,推荐多看日志或者甚至是有实时的监控界面最好,比如所有尝试登录的日志想要查看 sudo cat /var/log/auth.log。这里也推荐py写的fail2ban动态的封禁可疑ip来减少弱口令攻击影响。
# 查看所有非法root登录
sudo grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# 查看所有错误登录
grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq -c | sort -nr

#安装fail2ban
sudo apt install fail2ban
sudo yum install fail2ban

#主配置文件conf不要动 local可以自定义修改
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

vim /etc/fail2ban/jail.local # bantime:主机被禁止的秒数 还有enabled选项启用不同过滤规则

#重启服务以应用
service fail2ban restart
systemctl restart fail2ban.service

#查看效果
iptables -L #查看是否在防火墙中生效新的规则
fail2ban-client status filterrule #filterrule参数可不填 则显示所有
#解禁IP fail2ban-client set filterrule unbanip IP 
fail2ban-client set ssh unbanip 111.23.111.23
  • 连接上云服务器默认都是不带桌面环境的,推荐让自己逐渐习惯纯shell操作,如果是本机虚拟机或本地网络主机上有图形界面的系统,ssh时带上X参数可以使用 图形界面 。

补充: 问题收集

  • 有时候虚拟机安装某些minimal系统时或是手机或是路由(openwrt)等终端里的linux环境ssh环境本身就没装好,比如曾经在虚拟机安装Ubuntu16这种旧一点系统就有依赖版本不匹配的情况。
# 有时报错 依赖openssh-client版本不匹配
openssh-server : 
Depends: openssh-client (= 1:6.6p1-2ubuntu1) but 1:6.6p1-2ubuntu2 is to be installed 
Recommends: ncurses-term but it is not going to be installed 
Recommends: ssh-import-id but it is not going to be installed 
E: Unable to correct problems, you have held broken packages.     

# 解决
sudo apt-get install aptitude
sudo aptitude install openssh-client=1:6.6p1-2ubuntu1
或是直接apt-get
sudo apt-get install openssh-client=1:6.6p1-2ubuntu1

sudo apt-get install openssh-server

2.安装Nginx

上面一段详细说了连接过程中的种种,这里我们从连上服务器(练习的话用本地的虚拟机也都一样)后的操作开始继续。然后我们使用的是一台境外(北美洛杉矶)且系统为Debian8(jessie)的服务器做操作,项目也暂定在这台机器上部署运行(配置不高,后期可能还会转移),所以这里就不对其他Linux发行版以及国内机器可能网络比较慢导致要设置镜像的问题多做赘述了。

https://img.ocasis.cn/image/5e0dada854a41
基本信息如图
清理残余的旧版本,关于apt-get之后补充
sudo apt-get remove nginx nginx-common nginx-full

#这里的GPG签名添加和后面的镜像源地址不改就是用默认Jessie的包 其实也可以装好

#安装nginx GPG签名文件,关于GPG之后补充
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
#设置镜像源地址  (若想切换版本或找不到包或国内速度慢想换源时得更改)
sudo vim /etc/apt/source.list

在文件末追加以下:
deb http://nginx.org/packages/mainline/debian/ [codename] nginx
deb-src http://nginx.org/packages/mainline/debian/ [codename] nginx
eg:
deb http://nginx.org/packages/mainline/debian/ jessie nginx
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx

更新软件源并安装nginx
sudo apt-get update
sudo apt-get install nginx

查看nginx版本号
sudo nginx -v

安装好了后,可以打开浏览器地址栏输入服务器域名或ip查看默认页面。(也可curl your_server_ip)

https://img.ocasis.cn/image/5e0dae2b9cd34
Nginx刚装好默认页面

之后让我们理清一下配置文件的关联关系。

/etc/nginx/nginx.conf #全局配置文件 vim后发现include了下面的
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

ls -l /etc/nginx/sites-enabled #查看得知
default -> /etc/nginx/sites-available #这里是软链接指向另一种路径

所以当需要修改配置时一定记住理清他们之间的关系,相当于我们只用改多层指向里最终的那个文件,如果你不在那里改,可能就会各种冲突而出错。这时我们开始修改配置。

listen 80 default_server;
listen [::]:80 default_server; #可以改v4和v6的监听端口
listen 443 ssl http2; #后期设定ssl
root /var/dev/yourpath #可以修改网页根目录

# Add index.php to the list if you are using PHP 设置网站默认文件
index index.php index.html index.htm index.nginx-debian.html;

#也可支持流程控制 比如下面是HTTP强转HTTPS的设置
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
    rewrite ^(/.*)$ https://$host$1 permanent;
}

#为了安全禁止访问部分文件和目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
    return 404;
}

error_page 404(502) 设置HTTP状态码对应错误页 access_log error_log设置访问和错误日志路径

改完配置后,重启下nginx服务应用生效。 systemctl restart nginx or service nginx restart 如果前面说的内容没认真看可能这里就会出错了提示无法启动。

https://img.ocasis.cn/image/5e0dadc510042
这里就是备份时备份到相同目录下结果端口冲突


此时应用status指令去看报错的详细状态来排查,修改至正确配置这里Nginx就初步配置完成了,服务器已经能作为网站服务器发送和响应公网上的HTTP请求了。

补充:一些基础概念

  • APT的基本使用

APT-Advanced Package Tool, or APT, is a free-software user interface that works with core libraries to handle the installation and removal of software on Debian, Ubuntu, and related Linux distributions.是一个增强的包管理工具运行在Deb Ubuntu等发行版上

Command:

  • apt-get (第一代)
  • apt (第二代)
apt search [keyword] #搜索包 yum search [keyword]  yum provides [keyword]列出软件包提供哪些文件
apt show [pkg] #详细信息 yum info [pkg]
apt install #加f参数自动补全依赖
apt remove #一般卸载
sudo apt update #更新软件源列表 就像手机里的应用商店 你点击了检查更新
sudo apt upgrade #在不移除pkg的情况下寻求升级 就像检查更新后你点击了全部安装
sudo apt full-upgrade #不管移不移除强制升级 不推荐使用 之前有次出去打比赛手贱打了下后来内核也升级进不去后来还是救援模式下抢救
sudo apt-get dist-upgrade #上面命令的apt-get版本
sudo apt install --reinstall [pkg] 重装软件包来解决问题
---total uninstall #完全卸载 部分想清理配置的使用 
1 sudo apt-get --purge remove nginx
2 sudo apt-get autoremove
3 dpkg --get-selections|grep nginx # then 1 again

详细区别的引用

apt-get remove packagename
will remove the binaries, but not the configuration or data files of the package packagename. It will also leave dependencies installed with it on installation time untouched.

apt-get purge packagename or apt-get remove --purge packagename
will remove about everything regarding the package packagename, but not the dependencies installed with it on installation. Both commands are equivalent.
Particularly useful when you want to ‘start all over’ with an application because you messed up the configuration. However, it does not remove configuration or data files residing in users home directories, usually in hidden folders there. There is no easy way to get those removed as well.

apt-get autoremove
removes orphaned packages, i.e. installed packages that used to be installed as an dependency, but aren’t any longer. Use this after removing a package which had installed dependencies you’re no longer interested in.

aptitude remove packagename or aptitude purge packagename (likewise)
will also attempt to remove other packages which were required by packagename on but are not required by any remaining packages. Note that aptitude only remembers dependency information for packages that it has installed.
  • 关于GPG
  1. 其实就是apt的一种安全机制secure apt在安装时通过两种方式来验证以提高安全性
    • 在release file上提供checksum校验,确认没有篡改行为
    • 在release file上使用gpg签署,利用公私钥机制来证明release file本身正确性
  2. GPG是GNU Privacy Guard 这个机制就是给软件作者做发布签名用的,作者写好软件后生成公钥私钥
  3. 私钥签名在软件的发行文件里,然后公钥上传至key server,之后用户下载时可以比对
  4. 所以我们apt-key 命令里url一般是key server地址 一长串字符串 一般就是指纹(算作公钥的简版,代表你要找的公钥)
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 
wget -qO - https://deb.opera.com/archive.key | sudo apt-key add - # 下载key文件后管道给add
apt-key list #查看本机添加上的公钥
sudo apt-key del 30C18A2B #移除公钥

# 直接用 gpg 工具
# 下载公钥
gpg --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys xxxxxxxxxxxxxxxx
# 公钥管道运算给 APT
gpg --armor --export xxxxxxxxxxxxxxxx | apt-key add -

# 最后别忘了update更新软件源列表
sudo apt update

补充:问题解决

https://img.ocasis.cn/image/5e0daddb72c7e
apt-get出错
https://img.ocasis.cn/image/5e0dae154c2cd
apt-get update查看到已解决

3.安装PHP并配置PHP-FPM

安装PHP主要两种方式,直接下载源代码编译后安装,要修改配置的东西少,对系统的影响小,但对服务器性能有要求,根据性能不同编译时间不同甚至可能因内存报错。另一种便是设定好源和GPG后,直接获取软件包执行。这里我们分别简单贴下相关代码。

  • 编译式安装
#进入PHP官方页面下载
http://php.net/downloads.php
tar -xvzf php-7.0.5.tar.gz
cd php-7.0.5

yum -y install libxml2 # 配置前如果没有libxml2和libxml2-devel会报错,所以应该更新libxml2并安装libxml2-devel
yum -y install libxml2-devel

yum -y install openssl
yum -y install openssl-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install pcre
yum -y install pcre-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel

#执行配置:

./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip

#--enable-gd-native-ttf参数不存在,并且建议使用参数--with-libzip系统库,并且版本需要>=1.11

./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip --with-libzip=/usr/local/libzip

#上面这些参数是针对最新的php版本配置的.

#然后执行编译:
make # 编译时间可能会有点长,编译完成之后,执行安装:

make install #php的默认安装位置上面已经指定为/usr/local/php,接下来配置相应的文件:

cp php.ini-development /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

#此时首先应该创建web用户:
groupadd www-data
useradd -g www-data www-data

到这里安装和创建用户的准备工作应该都ok了,这时候开始修改配置来实现nginx能反向代理php文件交给后台的php-fpm去解析。要注意如同nginx一样,也是会有include几个文件情况,最好去里层文件修改配置而非其他层,然后最终nginx那边主要改server大括号里的值,设定好代理路径和相关用户(多版本共存也在这里)。

vim /usr/local/php/lib/php.ini 打开php配置文件(这里暂不考虑include)找到cgi.fix_pathinfo配置项 此项应该去掉注释并设置为0

vim /usr/local/php/etc/php-fpm.conf 不要添加用户组 报错因为不是在include的这个文件里添加

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
vim /usr/local/php/etc/php-fpm.d/www.conf

#修改完成之后,保存并退出,然后执行以下命令启动php-fpm服务:
/usr/local/bin/php-fpm
netstat -tln | grep 9000

#修改完上面的,回到nginx.conf配置这边(按照实际配置文件来编辑),默认是#user nobody;  
#这里要去掉注释改为user www-data;或者user www-data www-data;表示nginx服务器的权限为www-data

#接着配置nginx转发php文件给php-fpm处理
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
#修改完这些保存并退出,然后重启nginx
  • 使用第三方包形式安装

安装现有软件包的做法,确实省事一些,都是很通用的步骤,涉及到配置部分其实也和上面差不多。

# For Ubuntu 14 16 18
# 选装 第三方的PPA储存库需要python-software-properties 和 software-properties-common apt-transport-https(确保APT可以在HTTPS中執行)、lsb-release(识别系統的Linux具体哪个发行版)及ca-certificates(CA凭证工具)
apt -y install software-properties-common apt-transport-https lsb-release ca-certificates
add-apt-repository ppa:ondrej/php  
# 添加个人开发者(Ondřej Surý)的PHP PPA 源 
# Personal Package Archives(个人软件包档案),是Ubuntu Launchpad网站提供的一项服务,允许个人用户上传软件源代码,通过Launchpad进行编译并发布为二进制软件包,作为apt/新立得源供其他用户下载和更新

apt update #更新源列表

#安裝php7.3-fpm 这里的7.3 就是版本号 可换成7.2 7.1等(下面的套件每个也要换)
sudo apt-get install php7.3-fpm -y
#其他php7.3套件,例如:
sudo apt-get install php7.3-common php7.3-json php7.3-gd php7.3-cli php7.3-mbstring php7.3-xml php7.3-opcache php7.3-mysql -y
#查看是否安裝好你所需要的PHP版本
php -v

# For Debian9 Stretch Debian8 Jessie
sudo apt-get install apt-transport-https lsb-release ca-certificates -y #参考Ubuntu的 总之就这几个包 没自带就装上

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://mirror.xtom.com.hk/sury/php/apt.gpg #参考前面GPG的详解 也是添加gpg到信任列表里
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg #备用 上面是XTOM香港的BGP源 这个估计慢些

sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' #根据上面的源选择用哪条
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list #不要两个都加了!

apt-get update #更新源列表

# 做好准备工作后开始安装php-fpm

# 安裝php7.3-fpm
sudo apt-get install php7.3-fpm -y
# 以及其他附带的软件包
sudo apt-get install php7.3-common php7.3-json php7.3-gd php7.3-cli php7.3-mbstring php7.3-xml php7.3-opcache php7.3-mysql -y
#查看是否安裝好你所需要的PHP版本
php -v

# 编辑 /etc/php/7.2/fpm/php.ini 替换换 ;cgi.fix_pathinfo=1 为 cgi.fix_pathinfo=0 快捷命令
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini

# 管理
systemctl restart php7.2-fpm #重启
systemctl start php7.2-fpm #启动
systemctl stop php7.2-fpm #关闭
systemctl status php7.2-fpm #检查状态

# 更新
apt update
apt upgrade -y

# apt-cache search phpx.x or apt search phpx.x  即可

#接着去nginx这边改配置,包管理器安装的这种方式nginx会自动把www-data用户设置好,我们只需改下转发配置就好
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • 补充:聊聊两种监听方式

软件源安装的 PHP 默认以 Unix Socket 的状态运行在 /run/php/php7.2-fpm.sock,比使用 TCP 以 localhost:9000 的方式性能更好。这两种都可在/etc/nginx/sites-enabled/default中通过vim编辑listen行来设置,但是实际部署时打开服务器出现502错误,这时status命令查看nginx状态正常配置文件无错误,重启php-fpm也发现无错误,想测试下php解释器执行的情况。使用php -s 0.0.0.0:8080 /var/www/test启动下自带服务器测试。

https://ae01.alicdn.com/kf/U0e6bab8a70e0402482296f2f370a41827.png
自带服务器,这里ServerAPI是内置HTTPServer

这时候就感觉php这边应该没问题,php-fpm本身也只是个调度php进程的管理器,可是nginx也是在运行状态,配置也没问题,于是测试了下静态文件显示没问题。初步判断问题在location规定转发那一块,错误导致php指向了一个未知程序所以无法处理,后来就发现了/run/php/php7.2-fpm.sock 这种unix下的网络协议写法,貌似和我nginx配置的fastcgi_pass不对应。然后就尝试全部换成sock写法和url写法,然后还是没用,这时候改了一下权限。chmod -777 /run/php/php7.2-fpm.sock 再度打开浏览器发现提示信息变了,no input file specified。到这里应该是排除了那个位置应用程序的问题了,因为服务器在处理过程中没出错,只是告诉你没合适文件。在确定了文件路径下文件正常后,后来发现原来是我照着教程复制粘贴时把root html也给复制了过来,导致把上面的nginx的root /var/www/test的路径给覆盖成错了,最终修改完成后,restart了nginx和php-fpm服务终于正常了。

https://ae01.alicdn.com/kf/Ubc35e6e9c0524a79b7444156a22a8f0cm.png
加权限测试,虽然最终还是换成url写法了
https://img.ocasis.cn/image/5e0dadbb0f5f1
来回更改配置文件过程
https://i.loli.net/2020/01/02/9vgiAQHh5WdDZfy.png
最终nginx配置
  • PHP-FPM-FastCGI SAPI详解
    • 这个坑之后填
  • pathinfo安全性问题

避免出现因为 php.ini 开启了 cgi.fix_pathinfo=1 导致任意后缀文件都能通过 PHP 解释器解析产生的可能引发的安全问题,虽然这个漏洞在高版本 PHP (>=5.3.9) 已经被补上,最好还是注意一下 。

许多著名的 PHP 程序、框架如 WordPress、Typecho、Moodle、ThinkPHP 等,会支持形如 /xxxx.php/archives/2333 的 request-URI,比如说,Moodle许多文件的路径就是 http://xxx.com/lib/javascript.php/1512059879/lib/requirejs/jquery-private.js 这种类型。这样的URL看起来比较神奇,仿佛 php 文件就是一个文件夹一样,看起来也更加友好一些。

# 我们在location中也得添加配置使其支持
 location ~ \.php(/|$) {
 try_files $fastcgi_script_name =404;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 }

4.Mysql8 Redis

5.版本控制Git

6.CDN与BBR

7.配置负载均衡 伪静态 防盗链

8.修改安全策略及补充

引用列表

Openwrt-SSH-Server https://oldwiki.archive.openwrt.org/inbox/replacingdropbearbyopensshserverhttps://oldwiki.archive.openwrt.org/inbox/replacingdropbearbyopensshserver
Fail2ban https://www.2daygeek.com/how-to-install-setup-configure-fail2ban-on-linux/
防止ssh弱口令扫描 https://www.lovelucy.info/vps-anti-ssh-login-attempts-attack.html
一个神奇的IP https://www.v2ex.com/t/451945
ssh和scp的基本命令 https://www.jianshu.com/p/cc3df9978874
Funny motd config https://github.com/abcfy2/motd
Nginx Org package install https://nginx.org/en/linux_packages.html#sourcepackages
Nginx 新手配置 https://www.cnblogs.com/geons/p/install_nginx.html
the-correct-way-to-completely-remove-an-application https://askubuntu.com/questions/187888/what-is-the-correct-way-to-completely-remove-an-application
APT介绍和GPG基本操作 https://blog.burn-i.com/20180616/advanced-package-tool/
CentOS编译安装php https://www.cnblogs.com/freeweb/p/5425554.html
deb系软件包安装php https://www.mf8.biz/debian-install-php7-2/
聊聊nginx配置php https://blog.izgq.net/archives/895/
赞赏
欢迎留言交流讨论,留言必回。

admin

文章作者

一个平凡的追梦人

发表评论

textsms
account_circle
email

x1184的小站

DreamTree-Linux服务器从零部署及概念梳理
从零部署及概念梳理
扫描二维码继续阅读
2019-12-01