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
添加放行端口
#添加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/
- YouTube:EP4 – 新安装的centos7前期准备