linux服务器安全增强(ssh和iptables)

其实在大学里就一直想做一个服务器运维人员,可惜机遇不巧现在做的是C++开发。终于某一天当我用lastb查看到那么多的对root密码猜解失败记录时意识到我们服务器的安全性确实很差,因为不确定是否有某人进来过所以干脆重装系统从头来。(用的阿里云ECS)
一键编译安装dropbear脚本地址(http://download.csdn.net/detail/cracker_zhou/9417041
一键编译安装python脚本地址(http://download.csdn.net/detail/cracker_zhou/9417051
1.禁止root用户的ssh登陆,更改ssh默认端口
之前一直使用root用户登陆,确实方便。但是确实也很容易出问题,于是首先第一件事就是新建一个账户。

    useradd -m test #添加用户,并自动创建家目录
    echo "test" | passwd --stdin test #设置密码

修改/etc/sudoers文件在root ALL=(ALL) ALL下面添加一行test ALL=(ALL) ALL(这里的test要换成你刚刚新建的用户名)

新建完账户后,下面就要开始配置ssh了。下面讲述一下 /etc/ssh/sshd_config中比较重要的几个选项:(其他选项还在学习中)
Port 22          # 监听端口,建议改别的
Protocol 2,1        # SSH 协议版本
PermitRootLogin no     # 是否允许 root 登入
PasswordAuthentication yes # 密码验证当然是需要的!
PermitEmptyPasswords no #不解释,不允许空密码登陆
RSAAuthentication yes #是否启用RSA验证
PubkeyAuthentication yes  #如果需要用ssh key登陆,则开,只有Protocol 2支持
AuthorizedKeysFile .ssh/authorized_keys # pub key的位置
KeepAlive yes #开启长连接,否则客户端隔一点时间不操作就会被服务器强制断开
ClientAliveInterval 60 #每隔60s服务器向客户端发送一次心跳包
ClientAliveCountMax 3 #如果服务器向客户端发送的心跳包丢失3次则断开此次连接

2.升级openssh
可以通过 ssh -V 命令查看一下当前OpenSSH和OpenSSL的版本,截止笔者写这篇文章时OpenSSH的最新版本是6.7p1,OpenSSL的最新版本是OpenSSL 1.1.0 Alpha1,如果版本太低就升级吧。
因为笔者是通过ssh连接到ecs服务器,想想如果openssh被玩坏了岂不是只能恢复系统了?所以在升级openssh之前推荐先装一个替代产品dropbear(一个嵌入式轻量级的shh客户端工具),万一openssh玩坏了还能从dropbear进来。
dropbear的编译安装很简单啊(一键安装脚本):

    yum install -y gcc zlib*
    wget http://matt.ucc.asn.au/dropbear/dropbear-2015.71.tar.bz2
    tar -jxvf dropbear-2015.71.tar.bz2
    cd dropbear-2015.71
    ./configure
    make && make install
    if [ ! -d "/etc/dropbear" ]; then
            mkdir /etc/dropbear
    fi
    /usr/local/bin/dropbearkey -t dss -f  
    /etc/dropbear/dropbear_dss_host_key
    /usr/local/bin/dropbearkey -t rsa -s 4096 -f 
    /etc/dropbear/dropbear_rsa_host_key
    /usr/local/sbin/dropbear -p 2222

最后可以通过netstat -antup命令检查一下dropbear是否正确的使用了2222端口。

装完dropbear下面开始编译安装openssl。

    #卸载原有openssl
    rpm -e `rpm -qa | grep openssl` --allmatches --nodeps
    wget http://www.openssl.org/source/openssl-1.1.0-pre1.tar.gz
    tar -zxvf openssl-1.1.0-pre1
    ./config --prefix=/usr --shared
    make && make install

更新玩openssl之后可以通过openssl version -a命令查看当然openssl版本。(后来看了一下openssl文件夹中的config文件,还是蛮有意思的,因为正常的编译都是./configure,原来config比configure多了一个guess operation的功能)
下面开始编译安装openssh。

    yum -y install gcc* make perl pam pam-devel openssl openssl-devel
    wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz
    tar -zxvf openssh-6.7p1.tar.gz && cd openssh-6.7p1
    ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords
    make
    rpm -e `rpm -qa | grep openssh`
    make install
    cp contrib/redhat/sshd.init /etc/init.d/sshd
    chkconfig --add sshd

通过ssh -V检查openssh版本是否成功升级。
最后通过service sshd reload重启sshd服务(之前记得看下/etc/ssh/sshd_config配置文件)。
如果最后openssh安装没有问题,就可以把dropbear卸载删除了。
首先ps -ef |grep dropbear查看进程,然后kill掉。最后删除文件。
rm -rf /etc/dropbear/ /usr/local/sbin/dropbear /usr/local/bin/dropbear*

3.配置防火墙
1)iptables有两个可执行文件,分别是/sbin/iptables和/etc/init.d/iptables。前者用于更改规则,后者用于查看保存规则。
miaoshu
2.iptables默认有三张表,分别是filter,nat,mangle,最常用的是filter表。在filter表中有三条规则链,分别是INPUT(处理进入的包)、FORWARD(处理通过的包)和OUTPUT(处理从本地出去的包)。所以一个包只会走其中一个链。一个链上可以有多条规则,过滤时规则是由上而下依次判断(有顺序的),所以之后在用/sbin/iptables添加规则时会有一个-I(插到链表开始)和-A(接在链表尾巴)两种区别,而且某条规则匹配后便不再继续向后匹配。
常用语法:
/sbin/iptables -L # 显示所有规则
/sbin/iptables -F # 删除所有规则
/sbin/iptables -A INPUT -i lo -j ACCEPT #允许本地回环
/sbin/iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT #对于已连接请求是不会block的
/sbin/iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j DROP #防ping
/sbin/iptables -A INPUT -p tcp -m multiport –dports 80,443 -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -m recent –rcheck –seconds 60 –hitcount 10 –name webpool –rsource -j LOG –log-prefix “DDOS:” –log-ip-options #一分钟内新请求个数不超过10个,否则记录
/sbin/iptables -A INPUT -p tcp -m multiport –dports 80,443 -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -m recent –rcheck –seconds 60 –hitcount 10 –name webpool –rsource -j DROP ##一分钟内新请求个数不超过10个,否则block
/sbin/iptables -A INPUT -p tcp -m multiport –dports 80,443 -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -m recent –set –name webpool –rsource -j ACCEPT #记录每次的新请求
需要注意的是以上改动是立即生效的,也就是当你设置22端口的规则为REJECT时你的putty会立即会被断开连接,但是这些规则没有写入文件,所以下次服务重启后便不会生效。这时候可以调用/etc/init.d/iptables save ,刚才配置的规则将被写入 /etc/sysconfig/iptables文件中。
感谢那些扫root弱口令的大大,让我学到了这么多的知识。当然,这还不够,good good study,day day up!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值