在公网上的Linux,我的一些配置分享
前言
去年的时候,有一篇介绍在vultr上搭建ss服务器的文章,由于某些众所周知的原因,被阿里云删除。
后来有段时间使用vps,配合《鸟哥私房菜》,学习实操linux。当时我以为只要root密码够复杂,就一切ok,有一两个月没有太关注安全的问题。偶然一次使用lastb
命令,着实下了一跳,我的vps每天都有几万次的失败登陆记录。尝试登陆的IP,有俄罗斯,越南,巴西。。。。基本上地球上所有国家都有来过。
这个时候我才意识到,如果不做相关的安全方面的措施,在公网的环境下,与裸奔无异。我的vps是CentOS 7,以下所有涉及到的配置文件,相关命令都是在CentOS 7以下并且生效了的。
安装 denyhosts
denyhosts 是查询了几万次的失败记录后,立即安装的。维基上面的简介
DenyHosts是针对SSH服务器的一个基于日志的入侵预防安全工具,是用Python编写的。其通过监测身份验证登录日志中失败的登录尝试,屏蔽这些登录者的IP地址,从而预防对SSH服务器的暴力破解。
配置文件路径/etc/denyhosts.conf
,里面可以配置的项很多,也有详细说明,我只修改了通知的用户。
sed -i "s/root@localhost/{用户名}@localhost/g" /etc/denyhosts.conf
效果还是很明显的,扫描从每天从几万降到了一千左右。但是这一千左右的失败登陆也是不能忍的。
PS:把失败的记录基本降为0以后,我考虑通过邮件第一时间通知我,有人尝试登陆我的主机。后来再网上在查询,好像是不直接支持的,还需要安装专门发送邮件的postfix,仅仅为了这个发送邮件,好像也没有太大的必要。就放弃了。
使用密钥登陆
维基:RSA非对称加密算法 我也就了解到,是大数的质因数分解,也简单做推算过,目前还是很安全的。有兴趣可以去网上找,李永乐老师的讲解。
在客户端生成公钥和私钥,然后把公钥上传到服务器,在/home/{你的用户名}/.ssh/authorized_keys
文件下追加一条记录。客户端使用私钥登陆。相关的教程网上很多,不做赘述。需要注意:
- RSA的版本和SSH版本,现在目前系统都是默认RSA2,SSH2,并且默认禁用低版本的,可以忽略;
- 在生成密钥的时候,可以不设置密码,我还是建议可以用一个简单的密码,不用太复杂;
- 注意目录(700)和文件(600)的
权限
;追加的时候注意换行
和回车
; - 目前和未来几年内这个算法是安全的,但是量子计算机破解就是一两分钟,甚至一秒钟就搞定,要有这方面意识。
这两天,阿提亚爵士声称证明了黎曼猜想。不过看新闻报道,好像是数学家们认为希望不大。如果黎曼猜想被证明了的话,就意味着以素数为基础的所有加密算法
都是不安全的。
禁用root用户
这个比较简单:
- 修改配置文件是在:
/etc/ssh/sshd_config
, - 搜索
PermitRootLogin yes
,一般是注释的#PermitRootLogin yes
; 去掉注释,改为no
就可以了。 - 根据个人需要,普通用户是否可以使用密码登陆,
PasswordAuthentication
;我修改的是yes
,我认为我可能会在临时的电脑上用密码登陆。 - 重启ssh:
systemctl restart sshd
更改 ssh 端口
把系统默认的ssh端口22,改为一个用户自定义的,1024
以下是系统保留的,从1024-65535
是用户使用的。
- 修改配置文件是在:
/etc/ssh/sshd_config
, - 在文件中找到
#Port 22
默认是注释掉的,然后去掉注释,改为其他端口号, - 千万一定要注意,记得把自定义的端口,加入到防火墙中,tcp协议,否则可能面临无法登陆了。
- 重启ssh:
systemctl restart sshd
禁用 SELinux(Security-Enhanced Linux)
因为这个vps只有我一个人使用,并且也要时不时的折腾折腾,所以为了不必要的困扰,就把这个给禁用了。
- 修改配置文件是在:
/etc/selinux/config
, - 把
SELINUX=enforcing
修改为SELINUX=disabled
,永久关闭; setenforce 0
临时关闭,
su,sudo 免密码
我的密码是vps厂商自动生成的,非常复杂。为了避免要在使用root权限时,还要再输入密码。并且既然我的账号都登陆了,就不应该再次输入密码了。
- 把用户加入 wheel 组(wheel),为了免密码
usermod -aG wheel {用户名}
- su 免密码,配置文件
/etc/pam.d/su
,加上这句话auth sufficient pam_wheel.so trust use_uid
,CentOS7是注释掉的。 - sudo 免密码,配置文件
/etc/sudoers
,把所在组 wheel 设置%wheel ALL=(ALL) NOPASSWD: ALL
,
# wheel组 sudo不需要密码
sed -i 's/^%wheel.*/%wheel ALL=(ALL) NOPASSWD: ALL/g' /etc/sudoers
# wheel组 su 不需要密码
sed -i 's/^#auth\s\+sufficient\s\+pam_wheel.so\s\+trust\s\+use_uid/auth sufficient pam_wheel.so trust use_uid/g' /etc/pam.d/su
防火墙设置
一般linux发行版本都是默认开启防火墙的,并且开启了22端口。
使用哪个端口就开哪个,不用了的端口一定要关闭,并且使用了tcp协议,只开tcp协议。
firewall-cmd --zone=public --permanent --add-port=${my_ssh_port}/tcp
firewall-cmd --reload
禁止Ping
我之前禁用过一段时间,因为网络不太稳定,还需要使用ping命令来看看是网络不通,还是延迟过高。所以就放开了。
- 禁用ICMP协议。
/etc/sysctl.conf
,增加net.ipv4.icmp_echo_ignore_all = 1
,1禁用,0启用; - 使配置生效
sysctl -p
别名设置
为了操作自己的linux 更加方便,可以做很多自定义的命令。好处是很方便,坏处就是换台机器可能就不会玩了。
- shell文件在
/etc/profile.d/
目录下,对所有用户生效,用户登陆执行下面的所有脚本。注意这个目录下的脚本执行顺序
是第一个执行的,也就是说 alias 会被后面的覆盖, - 一些登陆后初始化的脚本,环境变量设置,都建议放在这个目录下面
/etc/profile.d/
, PS1
PS(Prompt Sign): 是指命令提示符,当然调整了一下颜色root@myhost:etc#
,
cat > /etc/profile.d/alias.sh <<-EOF
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\\$ '
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
alias ls='ls --color=auto'
alias ll='ls -al'
alias lm='ls -al | more'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias mkcd='function _mkcd(){ mkdir \$@ && cd \$@; }; _mkcd'
alias cdl='function _cdl() { cd \$@ && pwd; ls -alF; }; _cdl'
EOF
结语
- 这些设置大概是半年前做的了,断断续续的;有些遗漏或是不准确的地方欢迎指出;
- 再修改配置文件的时候,建议花一些时间看一下里面的
注释
。绝大部分配置文件里面,注释非常清楚,并且占了文件的大部分内容; - 我把以上的内容,写成了sh脚本。运行过无误,仅供参考;
- 一年多的时间博客没有怎么更新,这几天会记录一下这段时间的积累。
在公网上的Linux,我的一些配置分享的更多相关文章
- Ngrok让你的本地Web应用暴露在公网上
1.Ngrok介绍 Ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道.Ngrok可捕获和分析所有通道上的流量,便于后期分析和重放.简单来说,利用 Ngrok可以 ...
- 使用本地服务器组来管理局域网或公网上的SQLSERVER
使用本地服务器组来管理局域网或公网上的SQLSERVER 测试的两台机器 Windows7 64位 SQLSERVER2005 SP5 Windows7 64位 SQLSERVER2012 S ...
- 如何在官网上下载Linux版本的MySQL安装包
如何在官网上下载Linux版本的MySQL安装包 参考百度经验,<如何在官网上下载Linux版本的MySQL安装包> 原文链接:https://jingyan.baidu.com/arti ...
- linux上redis安装配置及其防漏洞配置及其攻击方法
Linux上redis安装: 需先在服务器上安装yum(虚拟机可使用挂载的方式安装) 安装配置所需要的环境运行指令: yum -y install gcc 进入解压文件执行make 指令进行编译 执 ...
- Window VNC远程控制LINUX:VNC详细配置介绍
Window VNC远程控制LINUX:VNC详细配置介绍 //---------------------------------------vnc linux下的详细配置 1.VNC的启动/停止/重 ...
- linux下golang的配置
linux下golang的配置 之前开发golang一直在windows下,今天在linux下试了一下 ,遇到一些梗,比如go 找不到 sync包.花了一小时全部解决,把过程记录一下. 安装 go 我 ...
- Linux下Samba的配置
前言: 为了实现windows 和 Linux以及其它操作系统之间的资源共享,软件商推出nfs 和samba两种解决方案.因为市场上缺乏象pc-nfs那样的client工具,使得Linux和windo ...
- ODI11G 在Linux上的安装配置
ODI11G 在Linux上的安装配置 OS环境:Red hat Linux x86_64 一.JDK安装 1. 去oracle官网上下载 http://www.oracle.com/technetw ...
- win10 64位下装Virtual Box安装Linux(centOS)配置联网
第一步:安装VritualBox 百度"VritualBox"下载安装即可: 第二步:下载Linux镜像系统并安装 这里写出我参照的博客,很详细,我就不累赘了! 原文地址:http ...
随机推荐
- 使用Python的库qrcode生成二维码
现在有很多二维码的生成工具,在线的,或者安装的软件,都可以进行生成二维码.今天我用Python的qrcode库生成二维码.需要预先安装 Image 库 安装 用pip安装 # pip install ...
- oracle 对表的操作
对日期数据的插入 insert into tabname(datecol) value(sysdate) ; -- 用date值 insert into tabname(datecol) value ...
- laravel 常见问题
1. Specified key was too long; max key length is 767 bytes 处理: 修改config/database.php , mysql配置.删除数据库 ...
- 猴子吃桃问题(Java递归实现)
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下 ...
- 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)
常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...
- 20175307《Java程序设计》第8周学习总结
教材学习内容总结 本周学习<Java程序设计>第十五章: 泛型: 泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 泛型类声明:class ...
- npm 是node.js下带的一个包管理工具
npm 是node.js下带的一个包管理工具 npm install -g webpack webpack是一个打包工具 gulp是一个基于流的构建工具,相对其他构件工具来说,更简洁 ...
- SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解
题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点 ...
- 使用卷积神经网络CNN完成验证码识别
gen_sample_by_captcha.py 生成验证码图片 # -*- coding: UTF-8 -*- """ 使用captcha lib生成验证码(前提:pi ...
- springAOP实现操作日志记录,并记录请求参数与编辑前后字段的具体改变
本文为博主原创,未经允许不得转载: 在项目开发已经完成多半的情况下,需要开发进行操作日志功能的开发,由于操作的重要性,需要记录下操作前的参数和请求时的参数, 在网上找了很多,没找到可行的方法.由于操作 ...