220 likes | 356 Views
信息安全综合实验. 张焕杰 中国科学技术大学网络信息中心 james@ustc.edu.cn http://202.38.64.40/~james/nms Tel: 3601897(O). 第一章防火墙原理及其基本配置. 课程目的 学习包过滤防火墙基本原理 简单理解 Linux kernel 2.4.* 中的 netfilter/iptables 框架 熟悉 iptables 配置. 1.1 包过滤防火墙原理. 包过滤型 根据数据包的源地址、目的地址、协议、端口、协议内部数据、时间、物理接口来判断是否允许数据包通过。 外在表现:路由型、透明网桥型、混合型
E N D
信息安全综合实验 张焕杰 中国科学技术大学网络信息中心 james@ustc.edu.cn http://202.38.64.40/~james/nms Tel: 3601897(O)
第一章防火墙原理及其基本配置 • 课程目的 • 学习包过滤防火墙基本原理 • 简单理解Linux kernel 2.4.*中的netfilter/iptables框架 • 熟悉iptables配置
1.1 包过滤防火墙原理 • 包过滤型 • 根据数据包的源地址、目的地址、协议、端口、协议内部数据、时间、物理接口来判断是否允许数据包通过。 • 外在表现:路由型、透明网桥型、混合型 • 优点:性能高,对应用透明,使用方便 • 缺点:安全控制粒度不够细
包过滤防火墙 • 规则 • 条件 动作 序列 • 条件 • 源地址、目的地址、协议、端口、协议内部数据、时间、物理接口 • 动作 • ACCEPT 允许 • DROP 直接丢弃 • REJECT tcp-reset/icmp-port-unreachable • LOG 日志
包过滤防火墙 • 有先后关系 • 数据包的处理 • 接收到数据包 • 逐条对比规则 • 如果满足条件,则进行相应的动作,如果动作不是ACCEPT/DROP/REJECT,继续处理后面的规则
1.2 Linux Kernel中的包过滤防火墙 • Ipfw/ipfwadm • 2.0.*中使用移植于BSD的ipfw • 缺点:包过滤、NAT等代码混杂在整个网络相关代码中 • Ipchains • 2.2.*中使用 • Netfilter/iptables • 2.4.* • http://www.netfilter.org/ • 模块化
Netfilter/iptables • Netfilter是Linux kernel 中对数据包进行处理的框架 • 定义了5个HOOK位置 • NF_IP_PRE_ROUTING • NF_IP_LOCAL_IN • NF_IP_FORWARD • NF_IP_POST_ROUTING • NF_IP_LOCAL_OUT
netfilter结果 • NF_ACCEPT: continue traversal as normal. • NF_DROP: drop the packet; don't continue traversal. • NF_STOLEN: I've taken over the packet; don't continue traversal. • NF_QUEUE: queue the packet (usually for userspace handling). • NF_REPEAT: call this hook again.
Netfilter • Iptables是netfilter上的应用程序 • nat mangle filter
Netfilter/iptables • 可以实现完整的基于连接跟踪的包过滤防火墙 • 支持包过滤,双向地址转换 • 一般是路由型的 • 使用ebtables中的bridge+nf patch可以表现为网桥型的 • http://ebtables.sourceforge.net/
1.3 iptables配置 • 包过滤 • INPUT/OUTPUT/FORWARD 三个规则链 • 可以增加自定义规则链 • iptables –N xxx • 命令格式 • iptables –L –nv 显示 • iptables –F 规则链名 清空规则链 • iptables –A 规则链名 规则 增加规则 • iptables –I 规则链名 规则 插入规则 • iptables –D 规则链名 规则 删除规则 • iptables –D 规则链名 规则编号
包过滤 • 规则 • -j 动作 ….条件 • 动作为: • ACCEPT 接受数据包 • DROP 丢弃数据包 • RETURN 从当前规则链返回 • LOG 日志,用dmesg可以看到 • REJECT • SNAT/DNAT等
包过滤 • 条件 • -s IP地址 源地址 • -d IP地址 目的地址 • -i 接口名 接收的接口 • -o 接口名 发送的接口 • -m state -- state 状态 状态包过滤 • ESTABLISHED RELATED NEW INVALID • -p tcp/udp/icmp/47 协议 • --dport 目的端口 • --sport 源端口
实验 • 建议编辑如下文件,命名为 • ipt,并用chmod a+x ipt • 每次试验时用命令./ipt执行,文件内容为 • #!/bin/sh • IPT=iptables • $IPT –F • $IPT …. • $IPT –L –nv
实验一 • Iptables –F • Ping 127.0.0.1 • 执行如下命令 • $IPT –A INPUT –j LOG –s 127.0.0.1 • $IPT –A INPUT –j DROP –s 127.0.0.1 • ping 127.0.0.1看是否通? • 用dmesg能看到什么? • Iptables –L –nv 能看到什么? • 为什么?
实验二 • 让你的机器只能telnet 202.38.64.3(BBS) • $IPT –A OUTPUT –j ACCEPT –d 202.38.64.3 –p tcp –dport 23 • $IPT –A OUTPUT –j LOG • $IPT –A OUTPUT –j DROP • $IPT –A INPUT –j ACCEPT –s 202.38.64.3 –p tcp –m tcp --sport 23 --dport 1024:65535 ! --syn • $IPT –A INPUT –j LOG • $IPT –A INPUT –j DROP
实验三 • 连接跟踪 • 文件/proc/net/ip_conntrack是否存在? • 如果不存在,执行命令 • modprobe ip_conntrack • 文件/proc/net/ip_conntrack的内容有什么? • more /proc/net/ip_conntrack • dmesg显示最多支持多少session? • lsmod 增加了什么模块
实验四 • 让你的机器只能telnet 202.38.64.3(BBS) • $IPT –A OUTPUT –j ACCEPT –d 202.38.64.3 –p tcp --dport 23 • $IPT –A OUTPUT –j LOG • $IPT –A OUTPUT –j DROP • $IPT –A INPUT –j ACCEPT –m state --state ESTABLISHED,RELATED • $IPT –A INPUT –j LOG • $IPT –A INPUT –j DROP
实验五 • 让你的机器只能ftp 202.38.64.40 • $IPT –A OUTPUT –j ACCEPT –m state --state ESTABLISHED,RELATED • $IPT –A OUTPUT –j ACCEPT –d 202.38.64.40 –p tcp --dport 21 • $IPT –A OUTPUT –j LOG • $IPT –A OUTPUT –j DROP • $IPT –A INPUT –j ACCEPT –m state --state ESTABLISHED,RELATED • $IPT –A INPUT –j LOG • $IPT –A INPUT –j DROP
实验五 • 以上设置,只能登录,无法使用列目录等操作 • 用命令modprobe ip_conntrack_ftp加载ftp对应的连接跟踪模块后再进行一次实验
实验脚本 • http://202.38.64.40/~james/nms/lab01.tar • wget http://202.38.64.40/~james/nms/lab01.tar • tar xvf lab01.tar • cd lab01