BandwagonHost VPS 配置实践

为了科学上网,特意买了 BandwagonHost 的VPS玩玩。顺便学习使用 shell

2017-06-25 补充:
BandwagonHost 俗称搬瓦工,用了半年左右就放弃了,效果不理想,非常不稳定,经常无法访问,体验相当糟心。改用 Google 的 GCP 后,才体验到科学上网的快感。

重新整理,此篇用于纪念我第一次接触 ShadowsocksVPS 吧,这也是入门的开端。

安装系统·

KiwiVMInstall new OScentos-6-x86_64-minimal

更新系统软件:

1
2
$ su root
# yum update -y

配置 ssh

目的:避免被别人暴力破解ssh,增强安全性。设置完成之后,无需密码即可登录,方便。

从早上开始弄这个,到现在23:09:10,终于搞定了。
刚开始什么都不懂,就按照完善别人的教程弄。但是说的都很模糊,最初的那篇教程,没说要创建普通账户,我就以为我那里参数没设置好,按照教程又调了好几次,一早上就浪费了。实在没没办法查google,发现另一篇文章说ssh对权限的要求很严格,必须要普通账户,权限要设置好,但这篇文章权限赋值说的又很模糊,我又查啊查。
参数和权限都搞定了,ssh反复提示我这两个错误connection closed by xxxx、Permission denied (publickey,gssapi-keyex,gssapi-with-mic)晚上就耗在了这了。google和百度,查不到有用的资料,一次偶尔间,我重新用ssh-keygen生成公钥和私钥居然成功了。
我前面用ssh-keygen -t rsa -f band -C “VPS”就不行,这是为什么?明天在研究下

1
2
3
4
5
6
7
8
9
10
11
12
// 本地主机操作
// 创建ssh配置文件,方便登陆
$ mkdir .ssh
$ cd .ssh
$ vim config
// 语法如下
Host testhost
HostName 8.8.8.8
Port 2222
User foo
// 创建ssh公钥和私钥
$ ssh-kenygen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 以 root 账户登录远程服务器
$ ssh testhost_root
// 创建普通帐号
# useradd -m test
# passwd test
// 备份sshd_config
# cd /etc/ssh/
# cp sshd_config sshd_config_backup
// 修改sshd_config
# vi sshd_config
// 去掉这几项的
HostKey /etc/ssh/ssh_host_rsa_key
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
// 重启sshd
# service sshd restart
// 切换到test账户
# su test
$ cd ~
$ mkdir .ssh
// 退出远程服务器
$ exit
// 上传公钥(本地操作)
$ cd ~/.ssh
$ scp id_rsa.pub testhost:~/.ssh/authorized_keys
1
2
3
4
5
6
7
8
// 以 test 帐号(新建的普通账户)登录VPS
$ ssh testhost_test
// 权限配置
$ sudo chown -R test:test /home/test
$ sudo chmod 700 /home/test
$ sudo chmod 700 /home/test/.ssh
$ sudo chmod 644 /home/test/.ssh/authorized_keys

问题:系统语言环境导致警告提示

ssh连接上去以后,一直提示以下警告:

1
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

google得到的答案是由于没有找到对应的语言环境导致的.参考日语设置方法

1
2
3
4
5
6
7
# vi /etc/sysconfig/i18n
// 添加LC_CTYPE
LC_CTYPE="en_US.UTF-8"
// 更改立即生效
# source /etc/sysconfig/i18n
// 查看是否更改了
# echo #LC_CTYPEE

SSH安全配置

执行 sudo vi /etc/ssh/sshd_config 打开 ssh 的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 禁止ROOT用户登陆
PermitRootLogin no
// 禁止空密码登陆
PermitEmptyPasswords no
// 禁用用户的 .rhosts 文件
IgnoreRhosts yes
// 禁用基于主机的身份验证
HostbasedAuthentication no
// 设置自动掉线(600代表600秒,即10分钟无操作自动掉线)
ClientAliveInterval 600
ClientAliveCountMax 0
// 禁止使用密码登陆
PasswordAuthentication no
// 检查登录日志
LogLevel DEBUG

安装 fail2ban

用于防御 ssh 服务器遭受暴力破解攻击。

我是从 github 下载源码编译安装的,所以需要 git,没有的话,可以使用 yum install git 来安装。

1
2
3
4
5
6
7
8
9
10
// git下载fail2ban
# git clone https://github.com/fail2ban/fail2ban.git
// 安装fail2ban
# cd fail2ban
# python serup.py install
# cp files/redhat-initd /etc/init.d/fail2ban
# chmod 755 /etc/init.d/fail2ban
# chkconfig --add fail2ban
# chkconfig --level 35 fail2ban on

vi /etc/fail2ban/jail.conf 打开 fail2ban 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure
maxretry = 2
[ssh-ddos]
enabled = true
filter = sshd-ddos
action = iptables[name=ssh-ddos, port=ssh,sftp protocol=tcp,udp]
logpath = /var/log/messages
maxretry = 2

重启服务 service fail2ban restart
查看服务状态 service fail2ban status

防火墙配置

常用命令

1
2
3
4
5
6
7
iptables -A #向规则链中添加一条规则,默认被添加到末尾
iptables -L #列出iptables规则
iptables -F #清除iptables内置规则
iptables -X #清除iptables自定义规则
iptables -Z #将所有的chain的计数和流量统计归零
// 可以加入-n查看
netstat -tunlp #检测又哪些端口开放着

防火墙iptables规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 清空iptables中的所有规则
# iptables -F
// 1.屏蔽最常见的攻击
// NONE 包(所有标识bit都没有设置)主要是扫描类的数据包
# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
//防止sync-flood 攻击
# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
//ALL包(所有的标注bit都被设置了)也是网络扫描的数据包
# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
// 2.为相应的服务开发对应的端口
// 接受本机localhost的任何请求,否则,数据库连接等将无法工作
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p tcp --dport xxx -j ACCEPT # SSH xxx为端口号
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
// 3.通用规则
// 允许所有从服务器端发起的连接,由此返回的响应数据应该是允许的
# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
// 设置缺省的策略:屏蔽任何进入的数据请求,允许所有从Server发出的请求
# iptables -P OUTPUT ACCEPT
# iptables -P INPUT DROP
// 保存
# service iptables save
// 重新启动iptables防火墙
# service iptables restart
  • 对于Web服务来说,需要开放80端口,如果是HTTPS/SSL协议的话,还需用开放443端口
  • 对于Mail服务来说,由于涉及SMTP, POP3, IMAP协议,需要开放的端口如下:
    • SMTP : 25
    • Secure SMTP:465
    • POP3: 110
    • Secure POP3: 995
    • IMAP: 143
    • IMAP over SSL: 993
  • 对于FTP服务来说,需要开放 20, 21两个端口

一键安装SS

搬瓦工有自带的一键安装脚本Shadowsocks Server