本文最后更新于 1111 天前,其中的信息可能已经有所发展或是发生改变。
0. ftp 设置
推荐 ftp 使用独立的用户,不允许 root 用户访问。具体设置见linux 安装 ftp
1. ssh安全设置
1.1 修改ssh端口
ssh端口范围0-65535,但是0-1024是知名端口,最好别用此范围
1.1.1 在服务器上开放新端口
阿里云服务器开放新端口见阿里云ubuntu16.04搭建wordpress
1.1.2 配置ssh端口
sudo vim /etc/ssh/sshd_config
# 在此文件中寻找 Port 22 将22改为你的新端口
1.1.3 配置生效
每次修改完ssh配置文件后都需要重启ssh服务才能使其生效
sudo service ssh restart
1.2 配置ip白名单
白名单优先级高于黑名单,所以在deny所有,允许自己的ip,即可实现登陆ip白名单
- 将允许的名单加入到
/etc/hosts.allow
# 例如允许10.10.10.10 sshd:10.10.10.10:allow # 注意此处ip为你的公网ip
/etc/hosts.deny
# 禁止全部 sshd:All
- 重启ssh服务
sudo service ssh restart
1.3 ssh脚本 — DenyHosts
1.3.1 安装依赖及下载源码
apt-get update && apt-get upgrade
# 安装配置启动项工具
sudo apt-get install sysv-rc-conf
# denyhosts里依赖ipaddr包
sudo apt-get install python-ipaddr
# 下载denyhosts
git clone https://github.com/denyhosts/denyhosts.git
1.3.2 安装denyhosts并设置开机自启
# 克隆好进入目录,本人家目录/root
cd denyhosts
# 真正安装,1秒装完
sudo python setup.py install
# 将配置文件复制到/etc
sudo cp denyhosts.conf /etc
# 启动脚本,复制一份,并对新的daemon-control进行简单配置
cp daemon-control-dist daemon-control
# 查看一下主程序位置,本人是/usr/local/bin/denyhosts.py
whereis denyhosts.py
# 配置启动脚本,核对DENYHOSTS_BIN路径,即/usr/local/bin/denyhosts.py
# 并看一下DENYHOSTS_CFG是不是指向/etc/denyhosts.conf
vim daemon-control
# 将启动脚本链接到系统启动目录
cd /etc/init.d/
sudo ln -s /root/denyhosts/daemon-control denyhosts
# 配置启动项,找到denyhosts,并按空格选择,一般给2345选上x即可
sudo sysv-rc-conf
# 启动
sudo /etc/init.d/denyhosts start
1.3.3 配置
sudo vim /etc/denyhosts.conf
# 一般自定义下面三项,其他默认
DENY_THRESHOLD_INVALID = 3 #允许无效用户登录失败的次数
DENY_THRESHOLD_VALID = 3 #允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 3 #允许root登录失败的次数
2. 数据库安全设置
数据库最好修改端口号或者关闭外网访问。
数据库管理软件 phpmyadmin 我仅仅对自己的 ip 开放,设置方法如下:
配置文件在 /etc/apache2/conf-enabled/phpmyadmin.conf
下,
其结构为:
# phpMyAdmin default Apache configuration
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_php.c>
<IfModule mod_mime.c>
...
在 Options FollowSymLinks
后加入下面内容:
Deny from all
Allow from your_ip1
Allow from your_ip2
3. wordpress安全设置
修改 wordpress 后台地址,其他设置再推荐两个插件
3.1 修改后台地址
修改 wordpress 后台地址,给其加请求参数,如果参数验证正确就会进入登录页,如果不正确那就会跳转自己设置的网址。具体如下(参考wordpress 后台登录增加访问效验):
修改根目录下的 wp-login.php
,搜索 loginform,找到登陆表单(大约 1367 行),修改表单的 action,并添加一个隐藏的 input:
<form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ).'?k=v'; ?>" method="post">
<input type="hidden" readonly="readonly" value="pv" name="pk">
在 wp-includes/functions.php
下第一个函数声明前加入以下内容:
// 增加登录key,没有key跳转到首页
add_action('login_enqueue_scripts','login_protection');
function login_protection(){
if($_GET['k'] != 'v'){
header('Location:https://www.brothereye.cn/');
}
if((isset( $_POST['log'] ) || isset( $_POST['pwd'] )) && $_POST['pk'] != 'pv'){
header('Location:https://www.brothereye.cn/');
}
}
这样在进入登录页面以及提交表单时需要加上参数 k=v
,另外提交表单时要额外加入表单 name=pk,value=pv
。
3.2 WP Cerber
主界面样图
简单设置
- 载入默认设置
- 将
Load security engine
设置为Standard mode
- 打开提醒功能
3.3 Wordfence Security
主界面样图
关于设置
此插件设置较多,正常使用默认设置即可