网络安全防范

实践内容
学习总结
  • PDR,$$P^2$$DR安全模型。

  • 防火墙(Firewall):

    网络访问控制机制,布置在网际间通信的唯一通道上。

    不足:无法防护内部威胁,无法阻止非网络传播形式的病毒,安全策略不够精细。

    包过滤技术:数据包包头信息的检查和安全策略匹配。

    代理(Proxy):建立非直接网络连接。

    netfilter/iptables:前者为功能模块,后者为管理工具。包含最基本的三个表,filter(包过滤处理),nat(地址转换),mangle(数据包修改)。

其中的五个规则链对应者netfilter在TCP/IP协议中的五个Hook检查点(上下两部分分别对应外内数据通道)。

PREROUTING 对应检查点 1,检查进入主机的数据包,用于源地址NAT转换;INPUT对应检查点2,检查发往本地网络协议栈的数据包,用于过滤本地网络服务的连接;FORWARD对应检查点3,用于经由本地路由转发的数据包检查,过滤网络连接;ROSTROUTING对应检查点4,用于目的地址NAT转换;OUTPUT对应检查点5,对本地发出的数据包进行检查,可用于本地对外的访问控制。

Iptables:基本命令为

复制代码
iptables [-t table] command [match][target]

-t 指定表, command 指定规则链,match 指定匹配条件,target指定目标操作
eg: iptables -t filter -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
即指定filter表,对路由转发的数据进行网段流量的筛选,-A 追加命令规则至规则链尾,-s,-t 源目的地址 -j ACCEPT 指定ACCEPT操作(常用默认为ACCEPT或DROP)

动态包过滤命令(状态跟踪命令)

复制代码
eg: iptables -t filter -A FORWARD -d [WEB_SERVER] -m state --state NEW -j ACCEPT
即允许连接目标为Web_server的ip, 当前状态为NEW(新建连接)的网络连接可通过防火墙转发

ip伪装(利用nat规则链)

复制代码
通过一个在防火墙绑定一个外网ip共享进行外部访问
eg: iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j MASQUERADE 
-MASQUERADE(ip伪装)
eg: iptables -t -nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023
将通过路由发出的tcp网络连接的源ip改为1.2.3.4,端口为前1023个端口(除0端口外的保留端口)

转化目的ip

复制代码
eg: iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8
将目的地址转换为5.6.7.8
  • 入侵检测:

    入侵者分类:

    检测指标:检测率(True Positive)和误报率(False Positive),前者为捕获到的攻击数和全部攻击数目之比,后者为对正常行为的误报数和全部报警数目之比。综合分析可用ROC曲线(改变算法阈值,得到检-误曲线)。

    snort(sniffer and more,解码器(sniffer)+ 预处理器 + 检测引擎 + 出输出模块):

    解码器:将网卡设置为混杂模式,利用libpacp抓包函数进行数据包监听和捕获,在调用循环pacp_loop()中调用ProcessPacket(),利用decode.c解码。

    预处理器:会话重组,编码规范,一些检测的预处理。

    检测引擎:入侵检测功能的主体模块,主要包含规则库解析,多模式匹配,规则插件检测。其中Snort规则采用文本格式,分为规则头和规则选项。

    规则头:

    复制代码
    eg:alert tcp $EXTERNAL_NET any -> $HOME_NET 21
    alert 输出格式,报警信息方式,此外还有 log,pass,dynamic等
    TCP 协议字段
    $EXTERNAL_NET 源ip地址匹配范围位置,这里为外部网段网络
    any 源端口位置,这里设为任何源端口
    $HOME_NET 目标地址匹配范围位置
    21 攻击目的端口位置,这里为21

    规则选项:

    复制代码
    eg:(msg:"FTP EXPLOIT wu-ftpd 2.6.0 site exec format string overflow Linux"; flow:to_server, established; content: "|131c0000000000db|"; reference:bugtraq, 1387; reference:cve, CAN-2000-0573; reference:arachnids, 287; class type:attempted; sid:344; rev:4)
    msg: 报警信息
    flow: 匹配当前连接状态及流方向
    content:标识用于字符串匹配的攻击特征
    reference: 对第三方攻击的解释
    classtype: 分类目录,识别攻击及优先级
    sid: 规则的唯一标识号
    rev: 规则版本号

    五个解析后的规则表:Activation, Dynamic, Alert, Pass, Log(只记录不报警)。

    输出模块:处理信息的记录。

实践内容
  • 过滤ICMP数据包,使主机不接受Ping包。
  • 只允许特定IP地址访问主机的某一网络服务。
  • 从离线的pcap文件读取网络日志数据源。
  • 在snort.conf中配置明文输出报警日志文件。
  • 指定报警日志log目录(/var/log/snort)。
  • 分析脚本:/etc/init.d/rc.firewall, /etc/init.c/hflow-snort, /etc/snort/snort.conf, /etc/init.d/hflow-snort_inline, /etc/snort_online/snort_inline.conf。包括网关的捕获和数据控制机制,IPTables规则列表,Snort和Snort_inline执行参数,网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的。
实践过程
实验机器 ip
A(kali) 192.168.200.7
B(SEED) 192.168.200.2
C(metas..linux) 192.168.200.125
命令详情查询 iptables -h, snort -h及上述内容
  • 过滤ICMP数据包,使主机不接受Ping包

    选取A,B,确定A,B可相ping通后,在A中输入命令iptables -t filter -A INPUT -p icmp -j DROP阻塞ping包,发现B已经不能ping通A:

查看 chain rules list确认阻塞ping包规则:

  • 只允许特定IP地址访问主机的某一网络服务

    此实验为禁止某一ip访问操作,"只允许"实验操作步骤为禁止所有ip访问某端口后添加可访问的ip,参考iptables 设置特定IP访问指定端口

    操作类似阻塞ping包操作。首先选取A,B,C,其中A访问被控制,B提供服务,确认实验之前A,C皆可访问B的网络服务,本实验访问ftp服务。然后在B中输入命令iptables -t -filter -A INPUT -s 192.168.200.7 -p tcp --dport 21 -j DROP

    发现A已经不能访问B的ftp服务,但C依然可以:

    查看 chain rules list确认阻塞端口21访问规则:

  • 从离线的pcap文件读取网络日志数据源

    命令snort -r /file/path:

    得到文件listen.pcap输出的一大长串报告:

    分析上次写过了,这次就不写了。

  • 在snort.conf中配置明文输出报警日志文件

    貌似默认明文(-K<model> ascii)输出,但是还是进入配置文件查看,在output模块输出配置中并未发现关于编码格式的配置(可能在预处理模块中)。

  • 指定报警日志log目录(/var/log/snort)

    虽然在配置文件中未找到输出编码格式配置,但发现了log_to_dir 配置注释:

    命令 snort -l /var/log/snort执行后初始化output模块插件,并作一次网口抓包分析(也不知道为啥进行这次操作,可能是为了验证上述命令生效):

    查看目录,有刚扫描的文件:

  • 分析脚本:/etc/init.d/rc.firewall, /etc/init.d/hflow-snort, /etc/snort/snort.conf, /etc/init.d/hflow-snort_inline, /etc/snort_online/snort_inline.conf。包括网关的捕获和数据控制机制,IPTables规则列表,Snort和Snort_inline执行参数,网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的:

    对个人来说,读这种源码基本是让我读注释:

  1. 查看/etc/init.d/rc.firewall分析数据的捕获和控制:

    基本上就是利用一些基本模块(),flush模块(用于清除all tables),create_chains模块(创建规则链),default_policy和localhost_policy模块(用于控制本地主机访问和缺省访问数据的策略),management_policy模块(管理的访问权限设置)进行数据包捕获和控制:

    捕获到数据包后,检查其变量(ip啥的),如果在blacklist(creat_chains)里,就丢弃且不log:

    如果在whitelist里,接受且不log:

    如果在fencelist里,接受且log:

    然后就是根据网卡模式进行一些防火墙的设置,并且进行一些更细致的命令设置和协议handle以用来控制匹配命令。

  2. IPTables规则列表

    命令 iptables --list|less观察规则列表:

  3. Snort和Snort_inline执行参数

    snort:

    查看/etc/snort/snort.conf(没有文件/etc/init.d/hflow-snort,只有.../hflow,难顶 ),variable设置包括 HOME_NET, server lists, service ports for attacks,以及一些其他的variables:

    snort_inline:

    查看/etc/init.d/hw-snort_inline(同样没找到文件.../hflow-snort_inline,配置文件中也只有一些默认网络变量设置,不需人为设置)查看执行参数:

  4. 网关开机后,防火墙、NIDS、NIPS是如何启动的,Snort规则是如何自动升级的:

    命令 chkconfig --list|grep [服务]查询服务状态(这里操作没看源码,也不知道配置文件写没写这些,参考的同学博客),发现snort_inline的开启与防火墙(系统)同步,snortd需手动设置:

    Snort规则的手动升级可通过编辑local.rules文件,自动升级则需通过Oinkmaster(社区默认工具)或者pullpork等工具。

学习问题及解决
  1. 找不到书上指定的文件
实践总结

安全防护通过防火墙,入侵检测等方式进行,需系统掌握工具的命令及一些安全防护的思想。

相关推荐
tmacfrank1 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
James. 常德 student3 小时前
网络安全知识点
安全·web安全·php
QQ2740287564 小时前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
qwfys2004 小时前
How to configure Linux mint desktop
linux·desktop·configure·mint
南方以南_4 小时前
Ubuntu操作合集
linux·运维·ubuntu
冼紫菜5 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
Chuncheng's blog6 小时前
RedHat7 如何更换yum镜像源
linux
爱莉希雅&&&6 小时前
shell脚本之条件判断,循环控制,exit详解
linux·运维·服务器·ssh
wei_work@6 小时前
【linux】Web服务—搭建nginx+ssl的加密认证web服务器
linux·服务器·ssl
可怜的Tom被玩弄于股掌之中6 小时前
BUUCTF——Nmap
网络·安全·web安全·网络安全