360 likes | 528 Views
防火墙技术. Iptables 防火墙. 防火墙基本概念. Internet 防火墙技术 防火墙有两种:一种是硬件的,一种软件的。 代理技术
E N D
防火墙技术 Iptables防火墙
防火墙基本概念 Internet防火墙技术 防火墙有两种:一种是硬件的,一种软件的。 代理技术 可以采用软件方式保护内部网络不受外来用户的攻击。在Web主机上或单独一台计算机上运行一类软件,监测、侦听来自网络上的信息,对访问内部网的数据起到过滤作用,从而保护内部网免受破坏。这类软件中,最常用的是代理服务器软件。 在代理方式下,私有网络的数据包从来不能直接进入互联网,而是需要经过代理的处理。同样,外部网的数据也不能直接进入私有网,而是要经过代理处理以后才能到达私有网,因此在代理上就可以进行访问控制,地址转换等功能。
防火墙基本概念 传统代理 传统代理工作方式下,内部网络和外部网络之间的唯一连接是代理服务器,客户端要在浏览器中设置代理服务器的地址和端口号,客户浏览器在发出连接请求以前,会自动察看浏览器设置的代理地址及代理端口,若设置了代理端口和代理地址,则将连接请求发送给指定的代理服务器的指定端口。在这种方式的一个明显特点是客户机在连接以前的dns查询也由代理服务器去做。解析DNS的过程是根据代理服务器设置的dns查询顺序进行的。
防火墙基本概念 透明代理技术 透明代理技术中的透明是指客户端感觉不到代理的存在,不需要在浏览器中设置任何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺省网关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需 数据然后拷贝给客户端。理论上透明代理可以对任何协议通用, 目前能实现的主要有:DNS, sendmail relay, 和 HTTP. 但是在这种情况下客户端必须正确设置DNS服务器。
防火墙基本概念 透明代理配置举列: 例如: 从私有网络上访问因特网上的 web 站点. 私有网络地址为192.168.1.*, 其中 客户机 是 192.168.1.100, 防火墙机器网卡是 192.168.1.1. 透明web 代理 ( "squid"的补丁程序工作于此种方式) 被安装在防火墙机器上并配置端口为 8080. 核心使用 ipchains 把与防火墙端口80的连接重定向到代理服务. 私有网上的 Netscape 被配置为直接连接方式. 私有网络的 DNS 需要设置(你需要在防火墙机器上运行DNS代理服务). 防火墙机器上的 DNS 必须设置. 私有网络上机器的默认路由(别名网关)指向防火墙机器. 客户机机器上的 Netscape 访问 http://slashdot.org.
防火墙基本概念 软件ip伪装技术 这里核心的伪装服务重写经过防火墙的包, 所以包看起来就象从防火墙自身发出的. 然后伪装服务器重写返回的包使他们看起来是发往原来的申请者. 需要因特网访问的所有服务必须安装在作为防火墙的机器上.(看下面的 有限的因特网服务). 例如: 从私有网络上访问因特网上的 web 站点. 私有网络地址为192.168.1.*, 其中一台客户的地址是192.168.1.100, 防火墙机器网卡是 192.168.1.1. 防火墙设置为实现对从私有网络中来的任何发往因特网上某主机80端口的包进行伪装。 私有网上的客户机被配置为直接连接方式。私有网络机器的 DNS 必须正确设置。 私有网络上机器的默认路由(网关)设定为指向防火墙机器. 客户机机器上的 Netscape 访问 http://slashdot.org.
防火墙基本概念 端口转发 端口转发技术指园区网的各种信息服务器,如:www,dns,email等都被放置在内部网络中,且其地址为内部地址,如:192.168.0.1。而在DNS中这些服务器的地址指向防火墙。而当外部需要访问这些服务器时,防火墙进行了特定的设置,其会转发这个数据包到内部特定的,而当内部服务器生成回复包朝外发出经过防火墙时,包被重写。
防火墙基本概念 具体过程如下: 在防火墙上设置端口转发规则,指定所有到防火墙外部地址194.160.1.1的TCP连接, 且目的端口为80的所有连接,重定向到内部机器192.168.11.2的端口80。假定任意一外部 连接进来的主机IP为 163.158.1.2。 则源和目的地址及端口号分别为 Source: 163.158.1.2/7890 Dest: 194.160.1.1/80 被转发到内部主机,重写目的地址部分 Source: 163.158.1.2/7890 Dest: 192.168.11.2/80 由内部主机回复后的包为: Source: 192.168.11.2/80 Dest: 163.158.1.2/7890 再经过防火墙时源地址被重写 Source 194.160.1.1/80 Dest: 163.158.1.2/7890。
防火墙基本概念 反向代理技术 反向代理和端口转发类似,区别在于反向代理工作在应用层,而端口转发工作在ip层。
防火墙基本概念 防火墙一些典型的过滤规则: 一些典型的过滤规则包括: 允许进入的Telne会话与指定的内部主机连接 允许进入的FTP会话与指定的内部主机连接 允许所有外出的Telne会话 允许所有外出的FTP会话 拒绝所有来自特定的外部主机的数据包
防火墙基本概念 ---- 源IP地址欺骗式攻击(Source IP Address Spoofing Attacks)。这种类型的攻击的特点是入侵者从外部传输一个假装是来自内部主机的数据包,即数据包中所包含的IP地址为内部网络上的IP地址。入侵者希望借助于一个假的源IP地址就能渗透到一个只使用了源地址安全功能的系统中。在这样的系统中,来自内部的信任主机的数据包被接受,而来自其它主机的数据包全部被丢弃。对于源IP地址欺骗式攻击,可以利用丢弃所有来自路由器外部端口的使用内部源地址的数据包的方法来挫败。
防火墙基本概念 ---- 源路由攻击(Source Rowing Attacks)。这种类型的攻击的特点是源站点指定了数据包在Internet中所走的路线。这种类型的攻击是为了旁路安全措施并导致数据包循着一个对方不可预料的路径到达目的地。只需简单的丢弃所有包含源路由选项的数据包即可防范这种类型的攻击。
防火墙基本概念 --- 极小数据段式攻击(Tiny Fragment attacks)。这种类型的攻击的特点是入侵者使用了IP分段的特性,创建极小的分段并强行将TCP头信息分成多个数据包段。这种攻击是为了绕过用户定义的过滤规则。黑客寄希望于过滤器路由器只检查第一个分段而允许其余的分段通过。对于这种类型的攻击,只要丢弃协议类型为TCP,IP Fragment Offset等于1的数据包就可安然无恙。
IPTABLE的使用 什么是防火墙 防火墙的种类 包过滤的实现 包过滤可以通过使用有包过滤功能的核心来实现。在Linux系统中,如果存在/proc/net/ip_fwchains文件,则当前运行的核心支持包过滤。
IPTABLE的使用 在Linux中支持包过滤的核心中有三个规则列表,这些列表称为防火墙链。三个链分别称为输入链,输出链和转发链。当一个包通过以太网卡进来以后,核心使用输入链决定该包得取舍。如果该包没有被丢弃,则核心要决定下面将向哪里发包,称为包的路由。如要发给另一台机器,核心通过转发链来决定。最后,在包要被发出以前,核心通过输出链来做决定。 一个链是一些规则的列表,每个规则规定:如果包的包头与规则相匹配,那对包进行相应的处理。如该规则与包不匹配,则引入链中的下一个规则。最后,如没有要引入的规则,核心根据内置链决定如何做。
IPTABLE的使用 规则的目标: 一个防火墙规则指定一个包的匹配标准和一个匹配目标。如包不匹配该规则,那 将使用链中的下一个规则继续检查;如果匹配,则由规则目标的值来指定下一个规则。该值可以是一个用户定义链的名字,或如下任意特殊值:
IPTABLE的使用 ACCEPT:让包通过 DROP: 把包拒绝 REJECT:把包丢弃,并向发送者发送ICMP 消息告知包被丢弃。 MASQ: 只用于转发链和用户定义链。包 被伪装成从本地主机发出,回应 的包自动解伪。 REDIRECT:只用于输入链和用户定义链。包被重定向到本地,尽管它们原是要发送给一个远地主机。可使用参数,指定重定向端口。缺省为0,表示使用包的目的地址端口做为重定向端口。 IPTABLES命令选项: 命令选项 : -A --apend:在所选链的链尾加入一条或多条规则
IPTABLE的使用 -D --delete:从所选链的链尾删除一条或多条规则 -R --replace|:在所选链中替换一条或多条匹配的规则 -I --insert:以给出的规则号在所选链中插入一条或多条规则。如果规则号 是1,插入的规则在链的头部 -L --list:列出指定链的所有规则。如果没有指定链,将列出所有链中的所 有规则 -F --flush:清除指定链和表中的所有规则。假如不指定链,那么所有链都 将被清空 IPTABLES命令参数: -p 要检查的包或规则的协议。!表示指定协议之外的协议。“0”表示“all” -s 表示源地址。地址可以是主机名,网络名或IP名
IPTABLE的使用 -d 目的地址。 IPTABLES命令简介: # /sbin/iptables --version • 在一个单一的规则中操作 -A -D -I -R 举例:若要DENY所有来自IP地址为127.0.0.1的ICMP包 #iptables -A input -s 127.0.0.1 -p icmp -j DENY
IPTABLE的使用 删除一个规则: # /sbin/iptables -D input 1 #/sbin/iptables -D input -s 127.0.0.1 -p icmp -j DENY 指定过滤规则: -p -s #iptables -A input -s 0/0 -j DENY
IPTABLE的使用 指定反意设置: 很多标志,包括“-s”和“-d”可通过在参数前加上“!”来匹配任何不与给定的参数相等的地址。如: -s ! localhost
IPTABLE的使用 IPTABLES在整个链上的操作: iptables可把相关的规则组成链。你可给新的链命名,但不要与内置的链名以及规则目标冲突。链名长度在8个字符以内。 建立一个新的链 # /sbin/ipchains -N test 删除一个链 #/sbin/ipchains -X test 清空一个链 #/sbin/ipchains -F forward
IPTABLE的使用 列出一个链: #/sbin/ipchains -L input
IPTABLE的使用 • 设置基本的规则匹配 1、指定协议匹配 (1)、匹配指定的协议 #iptables –A INPUT –p tcp (2)、匹配指定协议之外的所有协议 #iptables –A INPUT –p!Tcp 2、指定地址匹配 (1)、指定匹配的主机 #iptables –A INPUT –s 192.168.0.110 (2)、指定匹配的网络 #iptables –A INPUT –s 192.168.0.0/24 (3)、匹配指定主机之外的地址 #iptables –A FORWARD –s! 192.168.1.1 (4)、匹配指定网络之外的网络 #iptables –A FORWARD –s!192.168.1.0
IPTABLE的使用 3、指定网络接口匹配 (1)、指定单一的网络接口匹配 #iptables –A INPUT –i eth0 #iptables –A FORWARD –o eth0 (2)、指定同类型的网络接口匹配 #iptables –A FORWARD –o ppp+
IPTABLE的使用 • 4、指定端口匹配 (1)、制定单一的端口匹配 #iptables –A INPUT –p tcp --sport www #iptables –A INPUT –p tcp --sport 80 #iptables –A INPUT –p udp --sport 53 #iptables –A INPUT –p udp --dport 53 (2)、匹配指定端口之外的端口 #iptables –A INPUT –p tcp –dport ! 22 (3)、匹配指定的端口范围 #iptables –A INPUT –p tcp –sport 22:80 (4)、匹配ICMP端口和ICMP类型 #iptables –A INPUT –p icmp –icmp-type 8
IPTABLE的使用 5、指定ip碎片 #iptables –A FORWARD –p tcp –s 192.168.0.0/24 –d 192.168.1.110 \ --dport 80 –j ACCEPT #iptables –A FORWARD –f –s 192.168.0.0/24 –d 192.168.1.110 \ -j ACCEPT
IPTABLE的使用 防火墙应用举列: 假设网络环境如下:某一单位,租用DDN专线上网,网络拓扑如下: +--------------+ | 内部网段 | eth1+--------+eth0 DDN | +------------|firewall|<===============>Internet | 198.168.80.0 | +--------+ +--------------+ eth0: 198.199.37.254 eth1: 198.168.80.254
IPTABLE的使用 以上的IP地址都是Internet上真实的IP,故没有用到IP欺骗。并且,我们假设在内部网中存在以下服务器: dns服务器:dns.yourdomain.com 由firewall兼任 www服务器:www.yourdomain.com 198.168.80.11 ftp服务器:ftp.yourdomain.com 198.168.80.12 bbs服务器:bbs.yourdomain.com 198.168.80.13 email服务器:mail.yourdomain.com 198.168.80.14 下面我们将用ipchains一步一步地来建立我们的包过滤防火墙。
IPTABLE的使用 实现步骤 1. 在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewll以更改文件属性 ,编辑/etc/rc.d/rc.local文件,在末尾加上 /etc/rc.d/firewall 以确保开机时能自动执行该脚本。 2. 刷新所有的ipchains #!/bin/sh echo "Starting ipchains rules..." #Refresh all chains /sbin/ipchains -F
IPTABLE的使用 3.设置WWW包过滤 说明:WWW端口为80,采用tcp或udp协议。规则为:eth1=>允许所有来自Intranet的WWW包;eth0=>仅允许目的为内部网WWW服务器的包。 #Define HTTP packets #Allow www request packets from Internet clients to www servers /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 1024: -d 198.168.80.11/32 www -i eth0 -j ACCEPT /sbin/ipchains -A input -p udp -s 0.0.0.0/0 1024: -d 198.168.80.11/32 www -i eth0 -j ACCEPT
IPTABLE的使用 #Allow response from Intranet www servers to request Internet clients /sbin/ipchains -A input -p tcp -s 198.168.80.11/32 www -d 0.0.0.0/0 1024: -i eth1 -j ACCEPT /sbin/ipchains -A input -p udp -s 198.168.80.11/32 www -d 0.0.0.0/0 1024: -i eth1 -j ACCEPT #Allow www request packets from Intranet clients to Internet www servers /sbin/ipchains -A input -p tcp -s 198.168.80.0/24 1024: -d 0.0.0.0/0 www -i eth1 -j ACCEPT /sbin/ipchains -A input -p udp -s 198.168.80.0/24 1024: -d 0.0.0.0/0 www -i eth1 -j ACCEPT
IPTABLE的使用 #Allow www response packets from Internet www servers to Intranet clients /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 www -d 198.168.80.0/24 1024: -i eth0 -j ACCEPT /sbin/ipchains -A input -p udp -s 0.0.0.0/0 www -d 198.168.80.0/24 1024: -i eth0 -j ACCEPT
IPTABLE的使用 设置ftp包过滤 说明:ftp端口为21,ftp-data端口为20,均采用tcp协议。规则为:eth1=>允许所有来自Intranet的ftp、ftp-data包;eth0=>仅允许目的为内部网ftp服务器的包。 #Define FTP packets #Allow ftp request packets from Internet clients to Intranet ftp server /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 1024: -d 198.168.80.12/32 ftp -i eth0 -j ACCEPT /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 1024: -d 198.168.80.12/32 ftp-data -i eth0 -j ACCEPT
IPTABLE的使用 • #Allow ftp response packets from Intranet ftp server to Internet clients • /sbin/ipchains -A input -p tcp -s 198.168.80.12/32 ftp -d 0.0.0.0/0 1024: -i eth1 -j ACCEPT • /sbin/ipchains -A input -p tcp -s 198.168.80.12/32 ftp-data -d 0.0.0.0/0 1024: -i eth1 -j ACCEPT • #Allow ftp request packets from Intranet clients to Internet ftp servers • /sbin/ipchains -A input -p tcp -s 198.168.80.0/24 1024: -d 0.0.0.0/0 ftp -i eth1 -j ACCEPT • /sbin/ipchains -A input -p tcp -s 198.168.80.0/24 1024: -d 0.0.0.0/0 ftp-data -i eth1 -j ACCEPT
IPTABLE的使用 Allow ftp response packets from Internet ftp servers to Intranet clients /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 ftp -d 198.168.80.0/24 1024: -i eth0 -j ACCEPT /sbin/ipchains -A input -p tcp -s 0.0.0.0/0 ftp-data -d 198.168.80.0/24 1024: -i eth0 -j ACCEPT