+86 135 410 16684Mon. - Fri. 10:00-22:00

阿里云ECS服务器代维

阿里云ECS服务器代维

阿里云ECS服务器代维

近期因为项目需求,采购了两台阿里云ECS,选择的系统为CentOS 6.3 X64 安全加固版,额外买了160G的硬盘,应该够应付此项目的需求了。

1511077156-5840-201402

ECS默认已经配置好了sshd服务,可以使用root账号直接登录,但是这通常是不安全的,第一件事就是针对sshd服务进行优化配置。

1.创建常用的账号

在任何Linux相关的描述中,都会说日常使用root操作是很不安全的行为,因此首先创建一个日常使用的账户。

useradd gary
passwd gary

2.编辑sudoer文件

vim /etc/sudoers

加入用户,以便使用sudo命令直接操作一些系统命令,减少对root账户的使用。

1511077155-9120-201402

3.编辑sshd配置文件,修改一些默认选项

vim /etc/ssh/sshd_config

修改一些默认的配置项

1511077155-9850-copycode
#仅使用SSH2协议
Protocol 2

#修改密钥生成强度
ServerKeyBits 1024

#禁止root账户通过ssh登录
PermitRootLogin no

#禁止使用常规的用户名密码方式登录,此项慎用
#在没有生成好Key,并且成功使用之前,不要设置为no
PasswordAuthentication no

#禁止空密码登录
PermitEmptyPasswords no
1511077155-3587-copycode

4.重启sshd服务

/etc/rc.d/init.d/sshd restart
或
service sshd restart

5.生成个人的公钥与密钥

1511077155-5235-copycode
#切换到要生成key的账号
su - gary

#建立公钥与私钥
ssh-keygen -t rsa
#密钥文件,可直接回车使用默认的文件名
Enter file in which to save the key (/home/gary/.ssh/id_rsa): 

#输入两遍密钥文件,仅供密钥登录用,可为空,不需与系统密码一致
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

#改名为sshd支持的默认公钥文件名
mv ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

#设置公钥文件名,如不设置为400,会无法登录
chmod 400 ~/.ssh/authorized_keys

#取出私钥文件(可远程通过pscp获取),并删除服务器备份
rm –rf ~/.ssh/id_rsa
1511077155-3123-copycode

6.在linux系统中,可以直接使用密钥文件,登录远程服务器

ssh gary@ip -i id_rsa

7.在windows系统中,需要使用putty项目的puttygen生成本地私钥,再使用putty进行登录

1511077157-9496-201402

载入–全部文件,选择获取到的服务器密钥–确定(如果服务器端生成时,设置了密钥,会提示输入)–保存私钥(保存为本地putty可是别的ppk私钥文件)

1511077157-5161-201402

在putty的认证标签中,浏览选择上一步生成的ppk私钥文件,即可登录。

8.总结

8.1.为什么说是安全的SSH链接呢?关闭了空密码链接、禁止常规的ssh用户名密码方式登录,只有在服务器上生成过key文件的用户方可访问,key文件+密钥,保护更完善一些

8.2.友情提示,PasswordAuthentication no配置内容,一定要在已经生成好了至少一个key之后再使用,否则会导致直接无法登录哦。

在linux中配置防火墙是一件比较有风险的事情,尤其是在ECS中,一个不当心的操作,可能就会需要重置服务器。

包括阿里云的官方建议,不要配置防火墙,没有必要什么的吧啦吧啦……

(http://bbs.aliyun.com/read/144977.html?spm=5176.7114037.1996646101.1.b6lbJx)

但是如果真的无此必要,又何必存在这个软件?又为何蛮多IDC将硬件防火墙作为一个噱头来叫卖?

如果我想在公网关闭db端口,仅在内网可访问呢?

当然如上有些吹毛求疵,但是至少我个人觉得,在服务器上开启防火墙还是很有必要的。

1.更新防火墙软件、检查当前状态

yum update iptables
/etc/init.d/iptables status

1511077157-6438-201402

上图表示防火墙运行中,使用命令

/etc/init.d/iptables stop
或
service iptables stop

关闭防火墙,确保状态如下图所示:

1511077157-4382-201402

设置系统服务,禁止iptables自动启动

chkconfig iptables off
chkconfig --list iptables

1511077157-6021-201402

如上图标示,在所有运行级别上均关闭防火墙自动启动。

如此一来,即使设置出错,至少还可以重启服务器来关闭防火墙。

清除iptables的内置规则和自定义规则

iptabls -F
iptabls -X

2.iptables内置filter、nat和mangle三张表,首先设定默认的通用规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

注意,第一条规则链一定要先添加,否则,当执行完第二条命令后,你的ssh就会断开,之前的设置自然也不会保存。该句的意思是,过滤所有的进入(INPUT)数据,并丢弃(DROP)。

下面的两句类似,OUPUT全部接受,FORWARD丢弃

3.设置filter表规则,如果不使用-T 参数指定表,则默认为filter表

如果要仅允许指定的ip地址接入ssh,则使用

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

如果是一个网段,上面的192.168.0.3地址,可换为192.168.0.0/24类似的网段地址。

请注意,如果上面设置了OUTPUT的规则也为DROP,则务必也设置对应的规则,允许ssh数据流出

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

添加其他常用规则

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

设置了如上的基本规则之后,则可以保存配置文件,启动防火墙服务,来测试配置是否成功

/etc/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/iptables status

4.总结

4.1.配置防火墙一定要很小心,如果操作不当,可能直接无法远程连接,对于硬件服务器只要去机器面前操作即可,如果是阿里云的,就只能重启或者重置了,一定要当心

4.2.配置防火墙的目的就是为了屏蔽端口,如果全部INPUT都ACCEPT,还不如不设置

4.3.当iptables stop之后,默认修改规则并save后,会覆盖之前的规则,因此可以在iptables运行的时候,修改并保存配置,或者iptables-save > /etc/iptables.rules保存到默认规则中

 

如果觉得命令麻烦,可以安装如下的组件,使用setup命令配置:

yum install setuptool ntsysv system-config-network system-config-keyboard system-config-network-tui system-config-firewall system-config-firewall-tui