Linux 防火墙入门.doc_第1页
Linux 防火墙入门.doc_第2页
Linux 防火墙入门.doc_第3页
Linux 防火墙入门.doc_第4页
Linux 防火墙入门.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux防火墙概述 Linux系统的防火墙功能是由内核实现的 2.0 版内核中,包过滤机制是ipfw,管理工具是ipfwadm 2.2 版内核中,包过滤机制是ipchain,管理工具是ipchains 2.4 版及以后的内核中,包过滤机制是netfilter,管理工具是iptables netfilter 位于Linux内核中的包过滤防火墙功能体系 称为Linux防火墙的“内核态” iptables 位于/sbin/iptables,是用来管理防火墙的命令工具 为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包 称为Linux防火墙的“用户态” 习惯上,上述2种称呼都可以代表Linux防火墙 包过滤防火墙工作在TCP/IP的网络层链路层网络层传输层应用代理上层程序链路层网络层传输层应用层客户程序链路层网络层传输层应用层服务程序外部网络网络层防火墙受保护网络iptables的规则表、链结构 规则链 规则的作用在于对数据包进行过滤或处理,根据处理时机的不同,各种规则被组织在不同的“链”中规则链是防火墙规则/策略的集合默认的5种规则链: INPUT:处理入站数据包 OUTPUT:处理出站数据包 FORWARD:处理转发数据包 POSTROUTING链:在进行路由选择后处理数据包 PREROUTING链:在进行路由选择前处理数据包iptables规则链示意图:Prerouting城门入口Forward 街道Postrouting城门出口Input 皇宫入口Output 皇宫出口皇宫 以上主要是介绍规则链的概念,并分别举例说明5种规则链的作用: INPUT链用于处理访问防火墙本机的数据,OUTPUT链用于处理防火墙本机访问其他主机的数据 FORWARD链用于处理需要经过防火墙转发的数据包,源地址、目标地址均不是防火墙本机 POSTROUTING、PREROUTING链分别用于在确定路由后、确定路由前对数据包进行处理 在“主机防火墙”中,主要针对服务器本机进出的数据实施控制, 多以INPUT、OUTPUT链的应用为主 在“网络防火墙”中,主要针对数据转发实施控制,特别是防火墙主机作为网关使用时的情况 ,因此多以FORWARD、PREROUTING、POSTROUTING链的应用为主 规则表 具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中 规则表是规则链的集合默认的4个规则表: raw表:确定是否对该数据包进行状态跟踪 mangle表:为数据包设置标记 nat表:修改数据包中的源、目标IP地址或端口 filter表:确定是否放行该数据包(过滤)每个规则表包含的规则链: 还可以使用iptables查看每个规则表内包含的规则链rootserver # iptables -L -t nat Chain PREROUTING (policy ACCEPT)target prot opt source destination Chain POSTROUTING (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination 这些都是系统默认自带的规则链,也可以用户自定义一些规则链 以上主要介绍规则表的概念、作用,并分别举例说明4个规则表的作用,并强调filter表、nat表是最常用的、也是我们的学习重点 mangle表可以对数据包进行特殊标记,结合这些标记可以在filter表中对数据包进行有选择性的处理(如“策略路由”,举个例子,网关主机有两条ADSL线路,分别使用网通、电信的接口,可以将访问网通服务器的数据交给网通ADSL接口,而访问电信服务器的数据交给电信ADSL接口) raw表是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,目前raw表中的应用尚不多见数据包过滤匹配流程 规则表间的优先顺序 依次为:raw、mangle、nat、filter 规则链间的匹配顺序 入站数据:PREROUTING、INPUT 出站数据:OUTPUT、POSTROUTING 转发数据:PREROUTING、FORWARD、POSTROUTING 规则链内的匹配顺序 按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外) 若在该链内找不到相匹配的规则,则按该链的默认策略处理其中加粗的链为最常用的几个规则链,包括:filter表的INPUT、OUTPUT、FORWARD链;nat表的PREROUTING、POSTROUTING链入站数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标地址是防火墙本机(如Internet用户访问防火墙主机中Web服务的数据包),那么内核将其传递给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(如httpd服务器)进行响应 转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其他外部地址(如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先被OUTPUT规则链处理,之后进行路由选择,然传递给POSTTOUTING规则链(是否修改数据包的地址等)进行处理管理和设置iptables规则 iptables命令的语法格式 iptables -t 表名 管理选项 链名 条件匹配 -j 目标动作或跳转 几个注意事项 不指定表名时,默认表示filter表 不指定链名时,默认表示该表内所有链 除非设置规则链的缺省策略,否则需要指定匹配条件 设置规则内容: -A:在链尾追加一条新的规则 -I:在指定位置(或链首)插入一条新的规则 -R:修改、替换指定位置或内容的规则 -P:设置指定链的默认策略 列表查看规则 -L:列表查看各条规则信息 -line-numbers:查看规则信息时显示规则的行号 -n:以数字形式显示IP地址、端口等信息 -v:显示数据包个数、字节数等详细信息 相关操作rootserver # iptables -t filter -A INPUT -p tcp -j ACCEPT =在末尾追加规则rootserver # iptables -I INPUT -p udp -j ACCEPT =默认插入规则的行号为1rootserver # iptables -I INPUT 2 -p icmp -j ACCEPT =默认插入规则的行号为2rootserver # iptables -P INPUT DROP =更改默认策略,默认是acceptrootserver # iptables -L -n line =查看规则,默认是filterChain INPUT (policy DROP)num target prot opt source destination 1 ACCEPT udp - /0 /0 2 ACCEPT icmp - /0 /0 3 ACCEPT tcp - /0 /0 Chain FORWARD (policy ACCEPT)num target prot opt source destination Chain OUTPUT (policy ACCEPT)num target prot opt source destination 清除规则 -D:删除指定位置或内容的规则 -F:清空规则链内的所有规则 自定义规则链 -N:创建一条新的规则链 -X:删除自定义的规则链具体操作rootserver # iptables -D INPUT 2 =删除行号为2的规则rootserver # iptables -F =清除filter的所有规则rootserver # iptables -t nat -F =清楚规则表nat的所有规则rootserver # iptables -t filter -N lth =添加自定义规则链rootserver # iptables -t filter -L =查看filter规则表的所有规则Chain INPUT (policy DROP)target prot opt source destination Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination Chain lth (0 references)target prot opt source destination设置匹配数据包的条件 通用条件匹配 可直接使用,不依赖于其他的条件或扩展模块 包括网络协议、IP地址、网络接口等匹配方式通用条件匹配有分为以下三类: 协议匹配 使用“-p 协议名”的形式 协议名可使用在“/etc/protocols”文件中定义的名称 常用的协议包括tcp、udp、icmp等 地址匹配 使用“-s 源地址”、 “-d 目标地址”的形式 地址可以是单个IP地址、网络地址(带掩码长度) 接口匹配 使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口具体操作:rootserver # iptables -I INPUT -p icmp -j REJECT =限制icmp对本机的访问rootserver # iptables -A FORWARD -p ! icmp -j ACCEPT =接受所有非icmp的访问rootlocalhost # iptables -A FORWARD -s 1 -j REJECT =拒绝所有来自1 IP地址的转发请求rootlocalhost # iptables -A INPUT -i eth1 -s /12 -j DROP=丢弃所有来自/12网段从eth1网卡进入的对本机的访问请求rootlocalhost # iptables -A FORWARD -o eth1 -d -j DROP=丢弃所有去往地址的从eth1网卡出去的转发请求 隐含条件匹配 一般需要以特定的协议匹配作为前提 包括端口、TCP标记、ICMP类型等匹配方式 端口匹配 使用“-sport 源端口”、“-dport 目标端口”的形式 采用“端口1:端口2”的形式可以指定一个范围的端口 TCP标记匹配 使用“-tcp-flags 检查范围 被设置的标记”的形式 如“-tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件 ICMP类型匹配 使用“-icmp-type ICMP类型”的形式 ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply分别讲解几种隐含匹配的作用、使用形式,酌情进行操作演示(可以参考教材中的例子)端口匹配需以“-p tcp”或者“-p udp”为前提条件;TCP标记匹配需以“-p tcp”为前提条件,以“!”可以取反;ICMP类型匹配需以“-p icmp”为前提条件ICMP协议的消息类型可以通过“iptables -p icmp -h”命令进行查看-syn的用法为兼容旧版本iptables的形式,此处等同于-tcp-flags SYN,RST,ACK SYN 显式条件匹配 需要使用“-m 扩展模块”的形式明确指定匹配方式 包括多端口、MAC地址、IP地址范围、数据包状态等匹配方式显示匹配又分为以下三种 MAC地址匹配 使用“-m mac”结合“-mac-source MAC地址”的形式 多端口匹配 使用“-m multiport”结合“-sports 源端口列表”或者“-dports 目标端口列表”的形式 多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔 IP地址范围匹配 使用“-m iprange”结合“-src-range 源IP范围”或者“-dst-range 目标IP范围” 的形式 以“-”符号连接起始IP地址、结束IP地址 数据包状态匹配 使用“-m state”结合“-state 状态类型”的形式 同时表示多种状态时以逗号“,”分隔 常见的数据包状态包括:NEW、ESTABLISHED、RELATED具体操作:rootlocalhost # iptables -A FORWARD -m mac mac-source 00:0C:29:27:55:3F -j DROP #使用源mac地址匹配,丢弃所有来自以上mac地址的所有转发数据包rootlocalhost # iptables -A INPUT -p tcp -m multiport dport 20,21,25,110,1250:1280 -j ACCEPT #允许访问本机的以上所有端口rootlocalhost # iptables -A FORWARD -p tcp -m iprange src-range 0-9 -j DROP #丢弃一段范围的ip的转发请求rootlocalhost # iptables -A FORWARD -m state -state NEW -p tcp ! syn -j DROP =状态为NEW,syn号不为1的都拒绝rootlocalhost # iptables -A INPUT -p tcp -m state state NEW -j DROP=不允许访问防火墙本身。rootlocalhost # iptables -A INPUT -p tcp -m state state ESTABLISHED,RELATED -j ACCEPT 数据包控制 常见的数据包处理方式 ACCEPT:放行数据包 DROP:丢弃数据包 REJECT:拒绝数据包 LOG:记录日志信息,并传递给下一条规则处理 用户自定义链名:传递给自定义链内的规则进行处理 SNAT:修改数据包的源地址信息 DNAT:修改数据包的目标地址信息rootlocalhost # iptables -A INPUT -p tcp -dport 22 -m limit -limit 3/minute limit-burst 8 -j LOG 每分钟新增3个匹配,一次最多匹配八个rootlocalhost # iptables -A INPUT -p tcp -dport 22 -j DROProotlocalhost # iptables -t filter -N MyLAN1rootlocalhost # iptables -A FORWARD -s /24 -j MyLAN1 将需求转给自定义链mylan1处理rootlocalhost # iptables -A FORWARD -d /24 -j MyLAN1rootlocalhost # iptables -A MyLAN1 -p icmp -j DROP rootlocalhost # iptables -A MyLAN1 导入导出防火墙规则 导出规则 iptables-save 结合重定向输出“”符号保存规则信息 导入规则 iptables-restore 结合重定向输入“ /etc/sysconfig/iptablesrootlocalhost # service iptables restartrootlocalhost # chkconfig level 35 iptables onrootlocalhost # iptables-restore /proc/sys/net/ipv4/ip_forward 方法3:修改/etc/sysctl.conf,设置 net.ipv4.ip_forward = 14.用于添加的具体防火墙规则内容 清空原有规则,建立新的规则 加载模块 /sbin/depmod a /检查所有模块的依赖关系 /sbin/modprobe ip_nat_ftp 加载支持对ftp连接进行nat转换的功能模块 sbin/modprobe ip_conntrack_ftp 加载支持ftp连接跟踪的功能模块加载完成之后可以使用lsmod查看是否成功加载rootserver # lsmod | grep ip_nat_ftpip_nat_ftp 7361 0 ip_conntrack_ftp 11569 1 ip_nat_ftpip_nat 21101 2 ip_nat_ftp,iptable_natip_conntrack 53281 4 ip_nat_ftp,ip_conntrack_ftp,iptable_nat,ip_natrootserver # lsmod | grep ip_conntrack_ftpip_conntrack_ftp 11569 1 ip_nat_ftpip_conntrack 53281 4 ip_nat_ftp,ip_conntrack_ftp,iptable_nat,ip_nat模块所在路径:rootserver netfilter# pwd/lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter开启路由转发功能:rootserver netfilter# vi /etc/sysctl.conf net.ipv4.ip_forward = 1 =将原来的0改为1rootserver netfilter# sysctl -p =查看iptables脚本开头语句,清除原来的配置 /sbin/iptables -X /sbin/iptables -t nat -X /sbin/iptables -t mangle X /sbin/iptables -t raw -X /sbin/iptables F /sbin/iptables -t nat F /sbin/iptables -t mangle-F /sbin/iptables -t raw -F /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT防火墙练习:需求描述 入站控制: 允许从Internet访问本机的21、25、80、110、143,53端口 允许从主机 35访问本机的22端口(远程登录服务),每15分钟记录一次日志 允许从主机 25(MAC地址为40:61:86:8F:BB:9B访问网关的22端口 允许局域网主机(LAN1:/24)访问本机的3128端口(代理服务) squid服务 rootserver # yum install squid -y 转发控制:允许LAN1的主机访问位于LAN2的DNS服务器(25)Eth0:1 21实验拓扑图:网关服务器也就是防火墙Eth0 21internetDNS缓存服务器25远程控制工作站35需要添加的路由:DNS缓存服务器:route add -net netmask gw 21远程控制工作站:route add -net netmask gw 21防火墙:要记得删除默认路由route add -net netmask gw 21route add -net netmask gw 21防火墙规则脚本:#!/bin/bash/sbin/iptables -F/sbin/iptables -t nat -F/sbin/iptables -t mangle -F/sbin/iptables -t raw -F/sbin/iptables -P INPUT DROP#/sbin/iptables -P OUTPUT DROP/sbin/iptables -P FORWARD DROP/sbin/iptables -A FORWARD -p icmp -s 35 -d 25 -j ACCEPT #允许从35到25的icmp数据包/sbin/ip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论