热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

安全的log纪录服务器

文章标题:安全的log纪录服务器。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  *环境 RedHat 7.3
  在网上越来越多的 hacker 的出现, 越来越多的高手出现的情况下.如何才能确保自己可以保存一份完整的 log 呢?稍微有点概念的 hacker 都知道,进入系统后的第一见事情就是去清理 log, 而发现入侵的最简单最直接的方法就是去看系统纪录文件.现在我们来说说如何设定一个安全的 log 服务器.
  想想看,如果入侵者无法连结您的 log 服务器,又如何能改您的 log 呢?现在我们来学习如何设定一个无 ip 的 log 服务器.
  现在,来介绍一下如何用 Snort 来做三件事情:
  · Stealth sniffer
  · stealth NIDS porbe
  · stealth logger
  这一切都是用在一台没有 ip 的服务器上面的. NIDS 是 Network Intrusion Dectection Server 的简称,也就是说入侵检测服务器.
  为什么要 stealth 呢?
  在 internet 中运行任何一种服务,都是有一定的危险的.不管是 http 也好, ftp 也好, telnet 也好,总之都会有机会被 hack 入侵. stealth logger 的独特性可以让我们在接收资料的同时,不发送任何的资料.这样外界的电脑(被 hack 入侵的电脑)就根本无法去更改 loger server 所收到的信息.也就是说保证了我们信息的完整性,以及原始性. 为了确保 log 服务器的安全,最好不要将 log 服务器连接在网路中.也就是说,当您需要检查 logger 服务器上得东西的时侯,您需要到电脑前,打开屏幕.而不是远端 login 进来.但是,如果说您一定要连接网路的话的话,那么请用两个的介面来做.也就是说两片网卡.并且注意,第一, IP forwarding 一定要关闭.第二就是,用来做 stealth logger 的介面是没有 ip 的一张网卡,这张网卡必须不能跟另外一个有 ip 的网卡在同一网路下面.
  设定
  首先当然是确定您的网卡安装无误,并且可以被 kernel 抓到.然后把网卡所需要的 module 写到 /etc/modules.conf 文件中.
  现在我们来设定一个没有 ip 的网卡介面.
  编辑文件 /etc/sysconfig/network-scripts/ifcfg-eth0
  
  vim /etc/sysconfig/network-scripts/ifcfg-eth0
  DEVICE=eth0
  USERCTL=no
  OnBOOT=yes
  BOOTPROTO=
  BROADCAST=
  NETWORK=
  NETMASK=
  IPADDR=
  
  存档后,用 ifconfig 来 active 我们的 eth0 介面.
  
  初试 stealth
  这里我们用到了 snort 这个程式.如果您的电脑中没有这个程式,可以到 www.snort.org 下载.
  现在我们运行
  snort -dvi eth0
  
  这里 -d 的选项告诉 snort 对资料进行 decode (解码)
  -v 告诉 snort 将结果显示在屏幕上面
  -i 则是指定所需要的 interface
  
  可以用 -C 选项告诉 snort 只显示 ASCII 部份. 忽略 hexadecimal 资料.
  
  $snort -dviC eth0
  
  Log directory= /var/log/snort
  
  Initializing Network Interface eth0
  kernel filter, protocol ALL, TURBO mode
  (63 frames), raw packet socket
  
   --== Initializing Snort ==--
  Decoding Ethernet on interface eth0
  
   --== Initialization Complate ==--
  
  -*> Snort! <*-
  
  Version 1.8.4 (Build 99)
  By Martin Roesch (roesch@sourcefire.com,
  www.snort.org)
  
  ......
  ......
  ......
  
  NIDS(入侵侦测) 入侵检测本身是一件很复杂的事情. snort 本身也提供了强大的入侵检测的功能. 这里我只做一个简单的介绍,好让大家有一个概念.如果真正实体去做一个 NIDS 的话.需要些更复杂的动作.例如设定更完善的 rules, 定时更新 snort.conf 中所定义的 rules (当新的攻击方式出现以后,要及时更新)
  首先,我们需要更改一下 /etc/snort/snort.conf 具体需要参照您自己的机器来设定.
  
  #设定 log 存放的地方
  config logdir: /var/log/snort
  
  #设定网路
  var HOME_NET 192.168.1.0/24
  var EXTERNAL_NET any
  var SMTP $HOME_NET
  var HTTP_SERVERS $HOME_NET
  var SQL_SERVERS $HOME_NET
  var DNS_SERVERS 192.168.1.250/32
  var RULE_PATH ./
  
  #设定 preprocessors
  preprocessor frag2
  preprocessor stream4: detect_scans
  preprocessor stream4_reassemblt
  preprocessor portscan: $HOME_NET 4 3 portscan.log
  
  #设定 output
  output database: log, mysql, user=root
  dbname-snort host=localhost
  
  #rules
  alert tcp $HOME_NET 7161 -> $EXTERNAL_NET any
  (msg: "MISC Cisco Catalyst Remote Access";
  flags: SA; reference:arachnids, 129;
  reference:cve, CVE-1999-0430;
  classtype:bad-unknow; sid:513; rev:1;)
  
  #设定 patch , 这些都是些附加的 rules 的文件
  include $RULE_PATH/bad-traffic.rules
  include $RULE_PATH/exploit.rules
  include $RULE_PATH/scan.rules
  include $RULE_PATH/ftp.rules
  
  #这些 rule 其实还有很多.您可以自己去写,也可以找人家写好的下载拿来用.
  
  现在让我们把 snort 跑起来:
  
  snort -c /etc/snort/snort.conf -D -i eth0
  
  现在 snort NIDS 的模式跑起来了. 在 default 的情况下:
  alerts 会放在 /var/log/snort/alert 中
  port-scanning 会放在 /var/log/snort/portscan.log
  
  当您真正跑 NIDS 的时侯,需要把 snort 以 daemon 的模式来跑. 如果您安装的是 rpm 的东西,那么 rpm 文件中已经包含了一个 snortd 的文件,并且会帮您安装在 /etc/rc.d/init.d/ 下面. 当您设定好 snort 的 configure 文件以后,只要用 chkconfig 把 snortd 打开就可以了:
  加入 snortd
  chkconfig --add snortd
  
  打开 snortd
  chkconfig snortd on
  或者
  chkconfig --level 3 snortd on
  这里的 level 请自行更改到您所跑的 runlevel
  您可以用 cat /etc/inittab | grep id 来看自己在哪个
  runlevel 上面.
  cat /etc/inittab | grep id
  id:5:initdefault:
  这里就是说跑在 run level 5 上面.
  设定服务器 我们需要对服务器做一些设定,让服务器把 log 送到我们的 logger 服务器去. 首先,我们需要设定 /etc/syslog.conf 把 log 送到一个有效的,但是不存在的 ip 下面.例如我们的网路是 192.168.1.0/24 其中并没有 192.168.1.123 这台机器,也就是说这个 ip 实际上是空的.我们就把 log 指向这里.您可以指向任意一个空的有效 ip.
  vim /etc/syslog.conf
  加入
  *.info @192.168.1.123
  
  如果您的系统是用 syslog-ng 的话
  vim /etc/syslog-ng/syslog-ng.conf
  
  destination d_loghost { udp(ip(192.168.123)
  port (514)); };
  filter f_info { level(info); };
  log {filter(f_info); destination(d_loghost);};
  
  我们还需要加入 static ARP entry 才可以. 如果您的网路只是接了记个 Hub 而已, 那么 ARP 地址一样可以好象 ip 一样,设定成虚构的. 如果您有连结 switch, 您需要加入 log 服务器的真实 MAC 地址.
  我们这里加入我们 logger 服务器的真实 MAC 地址就可以了.
  
  arp -s 192.168.1.123 00:D0:B7:DB:BF:95
  
  在 Logger 服务器设定 snort
  
  /etc/snort/snort.conf
  
  var EXTERNAL_NET any
  
  #等于 snort -d
  config dump_payload
  
  #等于 snort -C
  config dump_chars_only
  
  #设定 log 存放的 path
  config logdir: /var/log/snort
  
  # frag2 所做的动作就是把 fragmented 给我们 re-assembly
  preprocessor frag2
  
  log udp 192.168.1.1/32 any -> 192.168.1.123/32 514
  (logto: "logged-packets";)
  最后一行需要稍微解释一下:
  我们这里把 snort 来做 packet logger. 也就是说,并不是把所有的东西都写入到 /var/log/snort/alert 中.而是 log any packets with match the rule without writing an alert.
  udp: 是说,我们这里用 udp 的 protocol. system log 通常都是使用 udp 的.
  192.168.1.1/32: 就是只我们的服务器啦,也就是送 log 的机器. 如果您是从整个一个网路段中收 log 也可以用 192.168.1.0/24.
  any: any source port 任何 port
  ->: 这个是 direction operator 大家都知道的
  192.168.1.123/35 514 就是我们给出的那个空 ip 啦, port 514
  如果没有指定 logto: 的话, log 会分别保存在不同的文件中. 而指定 logto 的话,就会把 log 全部存放到我们指定的文件中,看起来方便多了.
  
  更安全的保存 log 就可以更安全的保护服务器. snort 的功能实际上非常的强大, 这里只是一个简单的介绍而已.如果您对这些东西有兴趣.可以去 www.snort.org/docs/ 下面看到非常多的有用的文件.
  
推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • UDP千兆以太网FPGA_verilog实现(四、代码前期准备UDP和IP协议构建)
    UDP:userDatagramprotocol用户数据报协议无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC76 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 基于SSL的mysql服务器的主从架构实现说明:本文选用172.16.22.1作为主服务器,172.16.22.3作为从服务器从服务器的mysql软件版 ... [详细]
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Linux 服务器修改用户名
    Linux服务器修改用户名1、编辑名称vimetchostname2、保存编辑并退出wq3、重 ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
author-avatar
彭德利
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有