前言

去年的时候,有一篇介绍在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文件下追加一条记录。客户端使用私钥登陆。相关的教程网上很多,不做赘述。需要注意:

  1. RSA的版本和SSH版本,现在目前系统都是默认RSA2,SSH2,并且默认禁用低版本的,可以忽略;
  2. 在生成密钥的时候,可以不设置密码,我还是建议可以用一个简单的密码,不用太复杂;
  3. 注意目录(700)和文件(600)的权限;追加的时候注意换行回车
  4. 目前和未来几年内这个算法是安全的,但是量子计算机破解就是一两分钟,甚至一秒钟就搞定,要有这方面意识。

这两天,阿提亚爵士声称证明了黎曼猜想。不过看新闻报道,好像是数学家们认为希望不大。如果黎曼猜想被证明了的话,就意味着以素数为基础的所有加密算法都是不安全的。

禁用root用户

这个比较简单:

  1. 修改配置文件是在:/etc/ssh/sshd_config
  2. 搜索PermitRootLogin yes,一般是注释的#PermitRootLogin yes; 去掉注释,改为no就可以了。
  3. 根据个人需要,普通用户是否可以使用密码登陆,PasswordAuthentication;我修改的是yes,我认为我可能会在临时的电脑上用密码登陆。
  4. 重启ssh: systemctl restart sshd

更改 ssh 端口

把系统默认的ssh端口22,改为一个用户自定义的,1024以下是系统保留的,从1024-65535是用户使用的。

  1. 修改配置文件是在:/etc/ssh/sshd_config
  2. 在文件中找到#Port 22 默认是注释掉的,然后去掉注释,改为其他端口号,
  3. 千万一定要注意,记得把自定义的端口,加入到防火墙中,tcp协议,否则可能面临无法登陆了。
  4. 重启ssh: systemctl restart sshd

禁用 SELinux(Security-Enhanced Linux)

因为这个vps只有我一个人使用,并且也要时不时的折腾折腾,所以为了不必要的困扰,就把这个给禁用了。

  1. 修改配置文件是在:/etc/selinux/config
  2. SELINUX=enforcing修改为SELINUX=disabled,永久关闭;
  3. 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命令来看看是网络不通,还是延迟过高。所以就放开了。

  1. 禁用ICMP协议。/etc/sysctl.conf,增加net.ipv4.icmp_echo_ignore_all = 1,1禁用,0启用;
  2. 使配置生效sysctl -p

别名设置

为了操作自己的linux 更加方便,可以做很多自定义的命令。好处是很方便,坏处就是换台机器可能就不会玩了。

  1. shell文件在/etc/profile.d/目录下,对所有用户生效,用户登陆执行下面的所有脚本。注意这个目录下的脚本执行顺序是第一个执行的,也就是说 alias 会被后面的覆盖,
  2. 一些登陆后初始化的脚本,环境变量设置,都建议放在这个目录下面/etc/profile.d/
  3. PS1PS(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脚本。运行过无误,仅供参考;
  • 一年多的时间博客没有怎么更新,这几天会记录一下这段时间的积累。

转载于:https://www.cnblogs.com/BenAndWang/p/9713080.html

在公网上的Linux,我的一些配置分享相关推荐

  1. Ngrok让你的本地Web应用暴露在公网上

    1.Ngrok介绍 Ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道.Ngrok可捕获和分析所有通道上的流量,便于后期分析和重放.简单来说,利用 Ngrok可以 ...

  2. 使用Sakura Frp 将本地VNCServer端口映射到公网上

    目录 使用Sakura Frp 将本地VNCServer端口映射到公网上 Sakura Frp 软件下载 启动 内网穿透 使用Sakura Frp 将本地VNCServer端口映射到公网上 Sakur ...

  3. 如何利用固定IP在路由器中设置局域网IP映射到公网上

    http://hi.baidu.com/good_boy_/item/3e08391cb5bed4436926bbd6 你要知道你要映射到公网的那个内网IP需要向外映射的端口是哪些.你不可能把所有端口 ...

  4. 《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——2.2 容器式Linux系统的Docker配置...

    本节书摘来自异步社区<Docker容器:利用Kubernetes.Flannel.Cockpit和Atomic构建和部署>一书中的第2章,第2.2节,作者: [美]Christopher ...

  5. Window VNC远程控制LINUX:VNC详细配置介绍

    Window VNC远程控制LINUX:VNC详细配置介绍 //---------------------------------------vnc linux下的详细配置 1.VNC的启动/停止/重 ...

  6. linux ospf 命令,Linux运维知识之linux下使用quagga配置ospf协议

    本文主要向大家介绍了Linux运维知识之linux下使用quagga配置ospf协议,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 环境:三台redhat6.5(VM虚拟机)一 ...

  7. Linux下ejabberd安装配置

    为什么80%的码农都做不了架构师?>>>    Linux下ejabberd安装配置 1.下载Ejabberd安装包 wget http://www.process-one.net/ ...

  8. suse linux 10 ftp服务配置

    在SUSE linux 10上安装配置FTP相对是比较方便的,具体过程如下: 1.首先检查是否有VSFTPD的包 #rpm  -qa|grep vsftpd 如果没有,则可以从网上下载或使用SUSE ...

  9. linux系统引导设置,Linux操作系统GRUB引导程序配置方法大全 - 技术文档 - 新手入门 Linux时代......

    1. GRUB 介绍 计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS 的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占 ...

最新文章

  1. Attention! .net 持久层正式发布 :Noebe
  2. php使用swoole的应用场景
  3. 迭代器: isinstance
  4. Linux 指定运行时动态库路径【转】
  5. 高级数据库,建库,建表,建约束
  6. java继承的终极奥义_java学习笔记12-继承
  7. 虚拟主机如何创建svn服务器,虚拟主机搭建svn
  8. C++前景如何,C++好学吗?
  9. php streamsocketenablecrypto,PHPMailer发送邮件报错Msg:stream_socket_enable_crypto():
  10. 【MyBatis框架】Lombok插件的安装及使用
  11. 姓名大战c语言,c语言姓名大作战游戏
  12. 阿里巴巴JAVA开发手册最新版pdf
  13. 人工智能入门——机器学习小案例(二)
  14. 在Android中Unity3D透明背景的实现
  15. php fpm 报错,php-fpm报错
  16. 403forbiden解决
  17. 4个简单有效的网页视频下载方法,超级简单好用
  18. 常用模块fractions基本使用
  19. test题目:袋鼠过河
  20. 【死链】JDK1.7中HashMap在多线程环境的并发问题源码分析

热门文章

  1. freetextbox文本编辑器
  2. java中的static方法可以被重写吗?(从方法调用过程理解)
  3. Lintcode 973 解题思路及c++代码
  4. 模拟电子技术_清华大学华成英教授主讲之符号说明
  5. “女性机器人”火了,称其只有富人买得起,男性用户表示很满意
  6. 你真的懂对抗样本吗?一文重新思考对抗样本背后的含义
  7. Linux 下 mail、mailx 和 sendmail、postfix的区别
  8. pycharm安装过程及文件
  9. matlab同窗口显示图片,[求助]关于GUI的问题,如何在同一窗口里显示四副图片...........
  10. Android Handler消息传递机制