0x01 前言

我在淘宝上买了一台HP ProLiant DL380 G6服务器,关于这服务器的介绍我会在这两天写篇文章介绍介绍。这篇文章里的系统就是运行在这服务器上面的。手上也没闲置的vps,也没有合适的电脑给我玩弄,所以这还是挺贴合市面上实际KVM环境。

其实从服务商那开通主机后并不能立即配置、上线服务,要先做些小配置和适配性修改才能开始放置自己的文件。这是为了能更好地适配你的程序,也能提高安全性。这里我不写关于内核的修改。

因为我也是处于学习阶段,如果有错误或不适当的地方,欢迎通过邮件或留言与我取得联系。我也欢迎读者们给我留下你所遇到的问题,我最喜欢解决问题了。

0x02 环境

  • 系统:centos7
  • 虚拟化技术:KVM

0x03 升级系统、安装常用包

要注意的是,某些主机是不允许升级内核的,不过近一年我使用的VPS都没发生过这种情况。

安装EPEL源

yum install epel-release -y

请注意别滥用yum中的 -y 函数。除非你安装的东西或过程是你熟悉或实践过的。

升级系统

yum update -y

升级系统而不升级内核

yum update --exclude=kernel* -y

这里说说update和upgrade的区别:两者的作用都是将软件包升级到最新版。可是upgrade会考虑取代关系,如果有个包foo改名为foo2,那么upgrade会将foo升级为foo2并将foo删除!如果你的系统已经存在运行中的服务,且服务正常运行着,没重大的安全隐患不要使用upgrade升级系统。

安装常用包

yum install -y pcre-devel openssl-devel libxslt* perl-ExtUtils-Embed at gcc-c++ python subversion gperf make rpm-build git curl bzip2-devel libcurl-devel gd gd-devel t1lib t1lib-devel libmcrypt libmcrypt-devel libtidy libtidy-devel GeoIP-devel libatomic_ops-devel zlib-devel unzip libstdc++* net-snmp net-snmp* gmp gmp-devel openldap openldap-devel libpcap-devel glib2-devel GeoIP-devel libxml2-devel libxml2-devel redis vim wget git htop iftop libtool make automake mlocate openssl-devel pam-devel unzip gcc screen openssl openssl-devel iptables-services bash-completion* pcre-devel openssl-devel libxslt* perl-ExtUtils-Embed at gcc-c++ python subversion gperf make rpm-build git curl bzip2-devel libcurl-devel gd gd-devel t1lib t1lib-devel libmcrypt libmcrypt-devel libtidy libtidy-devel GeoIP-devel libatomic_ops-devel zlib-devel unzip libstdc++* net-snmp net-snmp* gmp gmp-devel openldap openldap-devel net-tools

这些都是我常用的,有些VPS的系统确实很纯净,什么都没有。

0x04 关闭一些程序

因为我对selinux不熟悉,所以我选择将其关闭

#打开selinux的配置文件
vim /etc/selinux/config

#将第7行的enforcing改为disabled
SELINUX=disabled

#保存退出

centos7开始已经用firewalld替代,我试用过一段时间,觉得还需要比较长的时间学习才能懂得如何应用。这里我也选择关闭firewalld

#禁止开机启动
systemctl disable firewalld

#立即停止服务
systemctl stop firewalld

我也并不需要IPv6,在这里,我选择从系统启动就不加载它。有些vps不允许修改grub.cfg,请跳过这里并继续往下看。

#修改grub文件
vim /etc/default/grub

#在GRUB_CMDLINE_LINUX添加ipv6.disable=1
GRUB_CMDLINE_LINUX="ipv6.disable=1 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=ttyS0,115200n8"

#保存退出

#重新生成grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg

#重启即可生效

对于不允许修改grub.cfg,或这个文件不存在的系统,可以通过如下方法禁用IPv6

#修改/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1

#修改/etc/sysconfig/network
NETWORKING_IPV6 = no

#修改/etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT = no

#请通过ip addr确认你的网卡名称,这里默认是ifcfg-eth0

0x05 启用iptables

#设置iptables为开机启动
systemctl enable iptables

#立即启动iptables
systemctl start iptables

#禁止IPv6的ip6tables开机启动
systemctl disable ip6tables

#立即停止IPv6的ip6tables
systemctl stop ip6tables

0x06 设置iptables

我的服务器主要用于网站和radiusd,所以我只放行80,443,1812,1813和SSH端口9099。

#通过以下命令查看iptables现有的规则,包含INPUT,FORWARD,OUTPUT
iptables -L -vn --line-number

#通过以下命令查看iptables现有nat的规则,包含PREROUTING,INPUT,OUTPUT,POSTROUTING
iptables -L -vn -t nat --line-number

我的SSH端口不是默认的22,而是修改后的9099(临时的,写文章用,请手下留情)。所以我会删除预设的22放行规则,也删除一切reject规则,我只通过对INPUT的规则对网络流量进行控制。

#删除22端口,先查看规则所在的编号。因为我的iptables是修改过的,预设规则的应该是在第4行。
iptables -D INPUT 4

#同样,INPUT里有个reject规则,也同样删掉。要注意编号!
iptables -D INPUT 4

#用同样的手法删掉FORWARD里的reject规则。
iptables -D FORWARD 1
3.pic
添加参数 –line-number 可以显示行号,方便删除操作。

添加放行端口

#添加80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#添加443端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#添加9099端口
iptables -A INPUT -p tcp --dport 9099 -j ACCEPT

#添加1812和1813端口,要注意radiusd用的是udp协议。连续的端口可以写成80:8080,表示从80到8080
iptables -A INPUT -p udp --dport 1812:1813 -j ACCEPT

默认情况下,所有规则都是开放的,我要对进站(INPUT)的所有数据包都DROP,只有我ACCEPT的规则才能通行,这能起到一定的防护作用。

iptables -P INPUT DROP

保存修改并重新加载iptables,重启iptables前请再次审视SSH的端口是否放行,如果出错,你将无法通过SSH登陆服务器!

#保存,如果发现错了,可以直接重新启动iptbales,被保存的修改都会被还原。
service iptables save

#完成修改后,重新启动
service iptables restart

记住修改完后要重新审视规则,以防有错!

0x07 配置SSH

无论你的服务器是用在外网还是内网,默认的SSH端口都必须更改。安全是最重要的。同时使用证书登陆,那就更好了。

#编辑sshd_config文件
vim /etc/ssh/sshd_config

#修改端口,在#Port 22这一行下添加,端口号请自行选择。
Port 9099

#修改PasswordAuthentication字段为no
PasswordAuthentication no

#保存退出

生成ssh key

#通过以下命令生成key(密钥对)
ssh-keygen -t rsa -b 4096

#这里回车即可
Enter file in which to save the key (/root/.ssh/id_rsa):

#这里请为你的key设置一个密码,用key登录的时候需要密码才能解锁key。这是保护key的一种有效的方法。
#密码留空并回车即为空密码,不安全!
Enter passphrase (empty for no passphrase):

#重命名密钥,有些主机以内置密钥,覆盖前请确认。
mv .ssh/id_rsa.pub .ssh/authorized_keys

#查看key并保存到本地,然后删除。
cat .ssh/id_rsa

#留密钥在服务器内就足够了,key删掉以保安全。前提是你已经保存到本地!要不然你将不能通过SSH登陆服务器!
rm -f .ssh/id_rsa

重启SSH服务

systemctl restart sshd

0x08 修改hostname

如果你有多台服务器,那hostname将是区分这些服务器最好的方法。你可以通过以下命令进行修改

hostnamectl set-hostname [your-hostname]

#例如
hostnamectl set-hostname test1

#重启生效

完成,重启一遍。可以部署你的服务啦!

0x09 相关视频

  • EP4 – 新安装的centos7前期准备

https://www.bilibili.com/video/av10446815/