事先准备
zKing 2018-10-25 服务器部署
# 服务器
- 选了一台华南地区的服务器,然后按部就班,选择
ubuntu_14
的镜像进行安装 - 在购买页面的最底部,可以事先填写密码,注意,这个密码很重要,需要自己保存好
- 购买完成后,进入控制台,可以看到有个”公网 IP“和”私有 IP“,公网 IP 就是我们用来连接服务器的 ip 地址了
信息
初始用户:root 密码:root
# 域名以及备案
- 既然在阿里云上购买了服务器,那就在阿里云上购买域名好了,会省事许多,事实确实如此
- 阿里云的域名服务源于”万网“,找到适合的域名进行购买即可,域名最好是纯英文的
- 我在
08.14
购买,08.22
备案成功,历时9
天 ,这个速度确实很快了
备案注意点
- 阿里云有初审,初审有个承诺书,一定要打印出来手写后拍照上传
- 备案信息中有一个网站名称,这里很重要,要注意不能用的词汇,不然初审一直过不了,怎么写可以百度下,比如 ”...学习乐园 “这样
# 配置域名 DNS 解析
- 域名需要备案完才能进行 DNS 解析
- 因为使用的是阿里云的服务器,所以直接使用阿里云的云解析即可,或者可以使用 DNSPod
- 阿里云的云解析蛮方便的,直接选
新手引导
,然后直接把服务器的公网 ip 输入即可访问
# 软件配置
- 系统:windows 10 专业版
- ssh 工具:虽然有大名鼎鼎的 Xshell,但我还是选择了 用 SecureCRT
- ftp 工具:WinSCP,使用这个工具我们就可以偷下懒,不用 vim 去编辑文件了
个人
- 关于 SSH 无密码登录,因为是使用 SecureCRT 软件,可以在本地保存私钥,所以直接连接就可以了
- 如果无法连接的话,检查下 密码 和 ip地址 有没有问题 (注意,这里的 ip 地址是 公网 IP)
- 密码 和 ip地址 没有问题,但还是无法登录,就登录阿里云的云服务器控制台
- 在 ”更多 -> 网络与安全组 -> 安全组配置 -> 配置规则 “里添加 http(80) 和 ssh(22) 端口号的访问权限
- 在 允许 IP 访问上写0.0.0.0/0,即允许所有用户访问
# 安全配置
# 添加两个用户
- 我们默认使用 root 这个角色来进行控制的,直接用 root 进行操作很危险,所以要新建一个权限足够高的用户来进行控制
- 这里我创建了两个用户,用户A用来登录终端,用户B用来以 root 的身份登陆 winSCP
# 终端用户A
adduser A //添加用户,然后需要设置密码,这个密码使用来做平时的登录和切换用户操作的。
gpasswd -a A sudo //赋权,将 zking 加入 root 组中
- 使用 WinSCP,进入
/etc/sudoers.tmp
中,找到User privilege specification
,复制root ALL=(ALL:ALL) ALL
,将root
修改成A
,保存 - 在 SecureCRT 中新建一个标签页进行测试,若能登录,则成功
# winSCP用户B
adduser B
使用 WinSCP,进入 /etc/sudoers.tmp
中,找到 User privilege specification
,添加 B ALL=NOPASSWD:/usr/lib/openssh/sftp-server
sudo cat /etc/ssh/sshd_config | grep sftp
这里就需要用 A 的密码了,然后通过这行命令获取到 Subsystem sftp /usr/lib/openssh/sftp-server
- 打开winscp,填好关于 B 用户的信息,然后点击高级设置。
- 设置
sftp
为sudo /usr/lib/openssh/sftp-server
- 设置
shell
为sudu -i
# 修改服务器默认登录端口
- 默认通过ssh登录的端口是22,这个端口是默认的也就意味着这个端口对于所有人是透明的,如果你买台服务器,没有经过修改的话,那别人就等于已经猜到你的登录端口是22。出于基本的安全考虑,我们是需要修改一下这个端口的。
- 端口的范围是0-65536,由于0-1024最好不要使用,因为这些可能是被系统默认占用的端口,所以我们配置端口时为了避免和系统端口冲突,最好采用1024以后的端口。
# 操作步骤
- 在阿里云的安全组进行端口配置,这里选择配置 2222 这个端口
- 使用 WinSCP,进入 /etc/ssh/sshd_config
- 将 Port 22 改成
Port 2222
- UseDNS保证为no
UseDNS no
- 底部加一行允许登录的用户
AllowUsers A B
- 保存
- 将 Port 22 改成
- 重启ssh
sudo service ssh restart
完成这一系列操作后,以后 ssh 登录只能用 A 和 B 两个账户,并且只能通过 2222 端口
# iptables 设置
# 升级更新 ubuntu
sudo apt-get update && sudo apt-get upgrade
# 创建 iptables 配置文件
sudo su
iptables -F //清空当前iptables规则
mkdir /etc/iptables & vi /etc/iptables/iptables.up.rules
iptables.up.rules 的内容如下:
*filter
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许所有建立起来的连接
-A OUTPUT -j ACCEPT
#允许所有出去的流量
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
#允许http和https协议下请求的连接
-A INPUT -p tcp -m state --state NEW --dport 2222 -j ACCEPT
#只允许ssh通过2200端口号登陆
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#允许外网的服务器ping当前服务器
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied:" --log-level 7
#记录被拒绝的请求
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
-A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 150 -j DROP
#拦截可疑的访问信息(如果某个ip对我们的80端口在60s内发出了超过150次请求,我们就将其拦截)
-A INPUT -j REJECT
-A FORWARD -j REJECT
#拒绝所有其他进入服务器的流量
COMMIT
注意
这里不能使用 winSCP 编写iptables配置文件,会出现一些问题,直接用 vim 写,再去 winSCP 修改
# 告诉iptables这个配置文件的位置,使防火墙生效
iptables-restore < /etc/iptables/iptables.up.rules
# 使防火墙开机启动
sudo su
vi /etc/network/if-pre-up.d/iptables //创建文件
//进入 vim 编辑模式添加内容
#!/bin/sh
iptables-restore < /etc/iptables/iptables.up.rules
// 保存后退出 vim
sudo chmod +x /etc/network/if-up.d/iptables //给脚本添加执行权限
# 激活防火墙
sudo iptables -L -n //查看规则是否生效
sudo ufw status //查看防火墙有没有被激活
sudo ufw enable //激活ufw
- inactive , 意思是没有被激活或不起作用。
- 有了ufw,可以简化开启/禁用相应端口或服务等操作
个人遇过的问题
- sudo: unable to resolve host [hostname]
- 修改文件/etc/hosts
- 在第一行下方加入:127.0.0.1 [hostname]
- 如果觉得主机名字太奇怪可以修改主机名字,在/etc/hostname里面修改。
- winSCP 上编辑可能会无法成功运行规则,此时只能老老实实用 vim
# fail2ban 设置
fail2ban 是一个防御性的动作库,通过监控系统的日志文件,根据检测到的任何可疑的行为,触发不同的防御动作。如:对可疑行为的目标执行“ip锁定”。
# 安装fail2ban
sudo apt-get install fail2ban
# 修改配置文件
- 配置文件在 /etc/fail2ban/jail.conf
- 修改 destemail = xxxx@163.com# 邮件通知的目的邮箱
- 修改配置文件后 fail2ban 才能工作
修改配置文件后需要重启fail2ban
sudo service fail2ban restart
# 查看 fail2ban 状态
sudo service fail2ban status