难易程度:★★★
阅读点:linux;python;web安全;
文章作者:xiaoye
文章来源:i春秋
关键字:网络渗透技术

前言
linux被越来越多的企业使用,因此掌握一些基本的linux安全加固是有必要的,今天我们来浅谈一些企业常用的linux加固方式,当然仅仅一篇文章是不可能面面俱到的,大牛们勿喷啦^_^
---------------------

一、防止ssh暴破之denyhosts
说到denyhosts,不得不说linux里面两个重要的文件:hosts.deny、hosts.allow
hosts.deny里面存放禁止访问的设定,.allow里面存放的是允许访问的设定
比如在.allow里写入 sshd:210.12.123.*:allow 就代表允许此ip段对sshd服务的使用
同样,在.deny里写入sshd:210.12.123.*就代表禁止此ip段连上本机的ssh
 
查看22端口开放情况,已经被ssh使用:
 
我们在hosts.deny里面加入如下:
 
这个时候,我们的.allow是空的,因此.deny对访问控制有绝对的控制权,此时访问ftp和ssh服务只有被拒绝的份:
 
我们有时候是会闹出“乌龙”,自己把自己给禁了也是常有的事,这时候,我们要给信任的主机ip加入.allow白名单:
 
再来试试:
 
ok了,因为.allow的“权力”比.deny的大。
我们一定要注意一点:
/etc/hosts.allow 的设定优先于 /etc/hosts.deny
就是说,一个ip既在.allow里,又在.deny里,那么以.allow为准,此ip依旧有权限使用某服务

其实今天要说的denyhosts,就是在此基础上写的p小程序:

DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。

安装有点小麻烦,在这里贴图比较多:
先去网上下载压缩包
 
解压:
 
 
安装,因为使用python写的 python setup.py install:
 
安装目录默认:
 
切进安装目录:
 
将目录下的两个文件重命名后才能使用:
 
常见的选项:
 
 
有关于常见的选项,大家可以看看 i春秋学院 因为太多了。。哈哈
改变文件所属以及赋予相应的权限,并将其添加软连接(类似于win下的快捷方式)进/etc/init.d/,这个目录大家一定很熟悉,我们启动某个应用或者服务时,一种方法就是/etc.init.d/服务 start,当然service xxx start也是一样 centos7下就是systemctl start/stop/restart xx.service:

 
 安装以及配置好了以后,我们启动服务来试试效果:
先清了之前实验时候.allow里面的白名单,然后故意输错几次密码
 
回看hosts.deny,该ip已经被拉黑了
 
关于防止ssh ftp爆破的,其实有个fail2ban做的相当好,比denyhosts功能要强大一些,有兴趣的小伙伴可以去试试水

二、简单的防止Ping探测存活主机
很多时候服务器都会被ping,来探测该主机是否存活,以及判断其他一些信息,如果,我们不想让人ping到,但是有不能影响正常web服务,怎么办
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all,将临时禁止ping,重启后失效

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 将重新启用,ping将生效

永久禁止ping的方法:
echo net.ipv4.icmp_echo_ignore_all=1 >> /etc/sysctl.conf,注意是>>不是>,>>是追加写入,>就是覆盖了,万一覆盖了重要文件可就gg了

 
/sbin/sysctl -p可以让这条命令即时生效

三、神奇又强大的linux访问控制工具--iptables
iptables真的是异常强大的访问控制工具,有关于iptables,详细的文章推荐一个给大家对iptables讲解的很透彻

iptables有5条规则链
                1.PREROUTING (路由前)
                2.INPUT (数据包流入口)
                3.FORWARD (转发管卡)
                4.OUTPUT(数据包出口)
                5.POSTROUTING(路由后)
其实一般用INPUT和OUTPUT的最多,控制进入网卡接口的数据包和流出网卡接口的数据包是最常做的规则

iptables的规则定义:
iptables [-t table] COMMAND chain CRETIRIA -j ACTION
对于command,大家可以先了解下面两个最常用的

-A:追加,在当前链的最后新增一个规则-D num:删除,明确指定删除第几条规则

比如这么一条规则:
iptables -A INPUT -s 192,168.1.1 -d 192.168.1.2 -p ICMP --icmp--type echo-request -j DROP

就是禁止了源ip为192,168.1.1目标ip为192,168.1.2的ICMP 答应请求报文

其中-s指定源ip -d指定目标ip -p指定数据包协议类型 -j后面跟的是对此数据包的处理策略,DROP是丢弃 ,ACCEPT就是接收,诸如此类

四、利用iptables和python scapy建立简单的ids网络入侵检测小程序
python 里神奇的库特别多,scapy绝对算一个,为什么呢,因为用它,两行代码可以构建一个简易的wireshark!!
demo:

from scapy.all import sniff

sniff(iface='ens33', count=, filter='icmp', prn=lambda x: x.show())

效果见截图:
 
不停地检测数据包,在屏幕上打印出数据包,还支持过滤,强大的很

好了,直接放出来程序吧,其实早就想发出来了,这个是最近老师布置的一个考核试题,构建小程序来检测smurf,并且与iptables联动进行防御,在屏幕中打印出攻击报文,之所以今天才发出来,是因为今天下午刚刚答辩完,然后就可以放出来了

注意:这个小程序是防御smurf攻击的,但是这个不是重点,不需要关注,重点是掌握过滤并检测出自己想要的数据包,联动iptables进行防御的思想,这个小程序本身很简单,大牛勿喷……^_^

'''
@author: xiaoye
'''
from scapy.all import srp,Ether,ARP,conf,sniff
from scapy.utils import wrpcap
from subprocess import PIPE, Popen
from argparse import ArgumentParser
import time arg = ArgumentParser(description='smurf scan && iptables defend by xiaoye')
arg.add_argument('-l','--level',help='sniff level',dest='scapy_level',default=,type=int)
arg.add_argument('-w','--write',help='write position',dest='wr_position',default='demo.pcap')
result = arg.parse_args() global a
a = def iptables_policy(a):
print 'smurf attack !! create iptables policy to defend it...\n the attacker mac is:'
print a
#broadcast
print 'iptables -A INPUT -m mac --mac-source ' + a + ' -j DROP \n'
Popen('iptables -A INPUT -m mac --mac-source ' + a + ' -j DROP ', stdin=PIPE, stdout=PIPE, shell=True)
time.sleep()
print 'iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP\n'
Popen('iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP', stdin=PIPE, stdout=PIPE, shell=True)
time.sleep()
#broadcast icmp
print 'iptables -A INPUT -p ICMP --icmp-type echo-request -m pkttype --pkt-type broadcast -j DROP\n '
Popen('iptables -A INPUT -p ICMP --icmp-type echo-request -m pkttype --pkt-type broadcast -j DROP', stdin=PIPE, stdout=PIPE, shell=True)
time.sleep()
#icmp /s limit
print 'iptables -A INPUT -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT\n'
Popen('iptables -A INPUT -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT', stdin=PIPE, stdout=PIPE, shell=True)
time.sleep()
#policy
#Popen('iptables -A INPUT -j DROP') def callback(packet):
global a if a == and result.scapy_level == :
iptables_policy(packet[Ether].src)
#print 'xiaoye'
a = a +
wrpcap(result.wr_position, packet)
if result.scapy_level == or result.scapy_level == :
return packet.show()
if result.scapy_level == :
Popen('echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all', stdin=PIPE, stdout=PIPE, shell=True)
#exit() #filter smurf:
#filter="icmp and src 192.168.43.65 and dst 192.168.43.205"
if __name__ == "__main__":
sniff(iface="ens33", count=, filter="icmp and src 172.20.10.6 and dst 172.20.10.15", prn=callback)

filter="icmp and src 172.20.10.6 and dst 172.20.10.15"  这里src填充自己的ip,dst填充广播地址,用来过滤数据包

源程序依赖于python库scapy,linux的iptables防火墙以及python自带库及模块

思路:scapy嗅探ens33网卡流过的数据包,并用sniff方法的filter参数过滤规则过滤出具有smurf特征的数据包,并打印在屏幕上,联动iptables建立防火墙规则,进行smurf防御;

程序有三个level,
level 1只打印出smurf攻击报文;
level 2打印出攻击报文,并与iptabes联动,建立防火墙规则,阻断与攻击源的通信并对icmp echo request报文的接收频率做出限制,实现阻断smurf攻击;
level 3,临时禁止icmp报文,即一切icmp报文将不会得到响应,这里只是应急策略,用level 2就足够了。
 
浏览器崩了。。图片只能传几张了。。这是我的实验报告上的一张演示图 :
注:这是防御程序,攻击可以用kali里的hping3    hping3 --icmp --spoof targetip(目标ip) broadcastip(广播地址)
当攻击开始后,防御程序-l 2时会自动添加iptables规则,并且打印出攻击报文
重点还是iptables规则,这里写了4条规则,第一条是从攻击报文中检测对方的mac地址,将此mac地址的数据包全部丢弃,其余:
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP

对INPUT链添加规则,-m指用扩展模块 此条规则对目标地址是广播地址的数据包进行丢弃

iptables -A INPUT -p ICMP --icmp-type echo-request -m pkttype --pkt-type broadcast -j DROP

对INPUT链添加规则,-p匹配数据包中类型,此条规则较上条规则,添加了icmp类型的限制

iptables -A INPUT -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT

对INPUT链添加规则,对icmp请求应答报文,进行3/s的频率限制                                                  

总结
浏览器有点问题,先写成这样吧,大牛勿喷,有什么error的话请留言,一定会改正

linux安全加固浅谈的更多相关文章

  1. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  2. Linux文件目录权限浅谈

    1.基本权限三种(1)r (read) 读 针对目录,有读(r)权限就代表能对此目录有列表功能,就是可以执行ls命令进行查看,另外还有cp的功能.针对文件,有读(r)权限就代表能对此文件有阅读功能,可 ...

  3. linux服务器开发浅谈

    [开发前准备] 在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题比如:功能架构:提供服务的模块体系结构稳定性:服务器的出core率,内存泄露情况性能:请求与返回的速度与正 ...

  4. Linux说明书 - man浅谈

    原文链接: http://www.cnblogs.com/xuxn/archive/2011/08/26/linux-manual-man-command.html 所有学过Linux的同学都应该知道 ...

  5. Linux网络编程——浅谈 TCP 三次握手和四次挥手

    一.tcp协议格式 二.三次握手 在 TCP/IP 协议中.TCP 协议提供可靠的连接服务,採用三次握手建立一个连接. 第一次握手:建立连接时,client发送 syn 包(tcp协议中syn位置1. ...

  6. 浅谈android代码保护技术_ 加固

    浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...

  7. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  8. 浅谈 Linux 内核无线子系统

    浅谈 Linux 内核无线子系统 本文目录 1. 全局概览 2. 模块间接口 3. 数据路径与管理路径 4. 数据包是如何被发送? 5. 谈谈管理路径 6. 数据包又是如何被接收? 7. 总结一下 L ...

  9. Linux CentOS下MySQL的安装配置之浅谈

    前期必备安装:VMware虚拟机,CentOS镜像[注意:Linux下使用CentOS   MySQL是不用在官网下载的,只需要配置就OK了] 下面开始正式操作: //CentOS安装MySQL之浅谈 ...

随机推荐

  1. python abc模块

    面向对象的设计中,抽象类,接口这些必不可少的东西,在python中是如何提现的呢? python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现,在执行的时候python不严格要求你必须是 ...

  2. layer.js 注册登录切换的问题

    layer.js 是一个很好用的弹窗框架,使用的时候很方便,但是今天遇到一个问题,让我很头疼啊,一直都做不出来,就是登录和注册弹窗的切换问题 这里涉及到两个页面:guide.html 即父页面,den ...

  3. mongodb安装及配置

    下载安装篇 MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb.com/download-center#com ...

  4. Java学习笔记(十七):构造器和setter方法选用

  5. Gson的入门使用

    Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用. 基础概念:  Serialization:序列化,使Java对象到Json字符串 ...

  6. 转载:轻量级Config文件AppSettings节点编辑帮助类

    using System.Configuration; using System.Windows.Forms; namespace Allyn.Common { public class XmlHep ...

  7. 【python深入】装饰器理解及使用

    装饰器,其实就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下额外增加功能,装饰器的返回是一个函数对象. 用一个例子来说明一下什么是函数对象: 从这里可以看到,直接在函数后面加bar(),就 ...

  8. FortiGate防火墙HA下联堆叠交换机

    1.拓扑图 2.防火墙配置 3.交换机配置 interface GigabitEthernet1/0/47 switchport access vlan 30 switchport mode acce ...

  9. Yii2增删改查

    Controller <?php namespace frontend\controllers; use frontend\models\User; use yii\data\Paginatio ...

  10. android app主程序启动前加载图片

    android app加载启动图片需要新创建一个activity,在主activity先加载图片activity,展示过程结束后,显示主activity.具体流程如下: 一.创建图片activity的 ...