iptables防火墙实验手册1/24实验一:IPTABLES基础使用1.删除系统原自带的防火墙设置rm/etc/sysconfig/iptables–f2.启动iptables/etc/init.d/iptablesstart(或serviceiptablesstart)3.查看当前防火墙的设置iptables–Liptables–tnat–Liptables–tmanagle–L4.清空三个表中的所有策略如果防火墙策略中还有其它策规则,请一一清除清除方法:逐一删除如:iptables–tfilter–DINPUT1表示删filter表中INPUT链的第一条规则B.全部清除如:iptables–tfilter–FINPUT或iptables–FINPUT表示将filter表中INPUT链中的所有规则全清空(不指名表则默认为filter表)iptables–F表示直接将filter中的所有链听规则都清空iptables防火墙实验手册2/245.查看目前的默认策略iptables防火墙实验手册3/246.设置默认策略将filter表的各条链默认值设为DROP7.允许其它机器可以ping通本机允许其它机器从eth0进入的ping数据包进行测试:iptables防火墙实验手册4/24回想一下我们教材,为什么会出现这种情况?我们再加入一条语句,然后看看测试情况如何:再来测试一下,看看结果如何:OK,可能ping通了。想想我们最加入的语句倒底起到了什么作用。上例中我们的目标地址和源地址都是anywhere,如觉得有必要,可进行更严格的限制(上例中虽然我们已经对网络接口限制到了eth0上,但eth0可能会进行IP的修改,这样我们上面的ping仍旧有效,这可能与你当初设置的愿望不一致)我们只允许外面ping通本机IP:192.168.1.254,我们可以进行以下设置,为方便理解,此处我们先清除掉原来所有的策略,再新增策略。实际处理时,可直接对原策略进行修改,或都只删除对应的策略,然后再新增,不需要全部清除。iptables防火墙实验手册5/24看看以上的设置画面,可以看到针对请求的目标地址及回应的源地址都进行了限制。看看测试结果是否正常:8.可以用ssh登录本机在允许之前我们先测试一下看看能不能用putty进行ssh登录,或者直接telnetssh端口看看能没有反应,以确认是否可以访问目标主机的ssh服务iptables防火墙实验手册6/24不能登录端口不打开,访问失败。以上测试说明我们的默认策略DROP是生效的。接下来我们进行允许的相关测试。iptables防火墙实验手册7/24问题:为什么我们这次只设置了一条规则就可以访问了?好了,通过这样的设置,我可以通过远程登录进入系统进行工作了。9.上面设置中,我们允许了所有机器可ping和ssh登录我们的主机,是不是觉得有些不安全呢?如果我们知道需要SSH登录我们主机的IP范围,则我们可以将允许范围缩小到我们需要的IP范围。当然你也可以明确禁止某个或某个网段登录禁止192.168.1.100这个IPssh登录我们的主机,但允许ping是否感觉奇怪呢?192.168.1.100还是可以登录我们的主机注意上图上我们策略的顺序,策略顺序是很重要的。我们重新来设置看看结果如何为方便查看设置,我们列出每条规则的编号(注意使用—line-number参数)iptables防火墙实验手册8/24删掉我们刚才建立的那条规则:再来,我们接下来在正确的位置添加一条规则,但这里我们是在原来的规则中插入一条新的规则到指定的位置再来测试,发现192.168.1.100已经不能正常登录本机了。需注意的是我们上例中目标IP没有指定,请大家考虑一下如果192.168.1.100要通过本防火墙的路由功能的访问另一主机的ssh,那么此规则是否会对此有影响呢?如下图(请注意,我们所抓图中FORWARD链的规则情况!!)。iptables防火墙实验手册9/24firewall验证设置步骤:1)检查FORWARD策略状态,将其默认策略设为允许2)设置路由转发功能3)PC2因为也是RHEL5,请关掉其防火墙iptables防火墙实验手册10/244)在PC1一端(WinXP上)使用ssh客户端软件putty登录,进行测试验证,检验是否可以通过firewall登录到PC2上。设置如下:PC1(WinXP):IP:192.168.1.100掩码:255.255.255.0网关:192.168.1.254PC2(RHEL5linux):IP:192.168.2.252掩码:255.255.255.0网关:192.168.2.254iptables防火墙实验手册11/24验证对果如下:A.登录192.168.1.254被拒绝。测试登录192.168.2.252:通讯正常,可以登录。请考虑出现这样结果的原因。经过以上实验我们基本了解了对进出本机的数据及经过本机数据进行简单过滤处理的设置,通这些实验了解在防火墙上进行规则的增加,插入,修改及删除方法。以下我们进行进一步的实验进行相关功能的测试验证。iptables防火墙实验手册12/2410.根据协议进行匹配ICMP的匹配:1.)清空所有规则策略也可用iptables–F进行清除,然后再用iptables–P对各链设置默认规则2.)为了方便我们直观的看到数据的处理过程,我们一条记录所有ICMP包的策略,然后再设置一条拒绝所有ICMP协议的规则3.)在XP系统上ping192.168.1.254,观察结果4.)重点:在防火墙上观察防火墙产生的日志信息:iptables防火墙实验手册13/24说明:ICMPDROPed:这个是我们在规则中为规则日志加入的消息头,每条消息都会以此字符串开头,这样当有很多消息日志时,我可以根据每条规则指定的消息头信息查找特定规则的日志。IN=eth0:同其名,就是表示数据进入的网络端口。MAC:其后为目标和源机器的MAC地址SRC=:源地址DST=:目的地址PROTO=ICMP:协议类型,此处与我们指定的协议一致TYPE,CODE为ICMP协议的类型为代码此处我们的TYPE为8,code为0表示echoRequest回显请求(ping请求)相应还有TYPE=0,CODE=0表示echoReply回显应答(ping应答)iptables防火墙实验手册14/24TCP协议匹配为方便理解,在开始前我仍旧清空原来的规则。1.)设置默认策略为禁止访问2.)设置允许所有进入TCP协议以及与其状态相关的数据从本机出站3.)进行数据通讯并查看日志情况:iptables防火墙实验手册15/24跟ICMP协议类似,其中红线注明的地方请留意,上面过程体现了一个TCP握手的过程,SYN标志,ACK标志,但这里没能看到SYN/ACK标志,我们在内核的状态机制中去看看:cat/proc/net/ip_connack(每次可能只能看到一个,因为数据一但有相应的应答包,其状态就会改变,下图是多次抓取结果放在一起的效果,并不是一次就直接看到的)说明(我们以站在防火墙内核的立场来看数据包):tcp6表示tcp协议,6是tcp的代码第一条数据状态为SYN_SENT表示连接已经发出一个SYN包以过防火墙,但应答还没发送过来,所以其后有个[UNRELIED]标志第二条数据状态为SYN_RECV表明防火墙现在已收到针对第一条数据的应答包SYN/ACK,同时也说明第一条数据经过防火墙后正确传输到了目的地址(此处是iptables防火墙实验手册16/24本机)第三条数据为TCP三步握手的最后一个包,即ACK包,连接进入ESTABLISHED状态。请注意,以上我们是站在防火墙内核角度看到的状态,这个状态跟TCP连接的三次握手相一致。但IPTABLE又是怎么处理状态机制的呢:连接跟踪一看到SYN包,就认为这个连接是NEW状态,一看到返回的SYN/ACK包,就认为连接是ESTABLISHED状态由此可知IPTABLE在看到第二条数据时就认为状态已经是established了。UDP协议匹配UDP协议匹配与TCP匹配基本一致,请自行实验测试11.NAT配置NAT配置分为SNAT和DNAT我们仍以下图结构环境进行实验让PC1通过NAT方式访问PC2(RHEL5Linux),我们以SSH服务进行测试A.)清空原来filter表的规则并将FORWARD链默认策略设为iptables防火墙实验手册17/24禁止访问B.)设置NAT规则:以上我们将访问目标的源地址改为192.168.2.254C.)进行测试,观察是否可以通讯.测试结果为不能访问,这是因我们只设置了NAT规则,但对filter表中的FORWARD链还没有设置允许的规则。请注意数据通过防火墙的顺序,nat是在数据离开本机时再进行处理的,所以数据在到达filter表时就被拦截了,根本不能到达nat表。iptables防火墙实验手册18/24D.)设置允许访问PC2(192.168.2.252)SSH服务的规则E.)设置允许established,related的数据通过FORWARD链F.)通过上设置我们可以允许从eth0方向来的数据通过防火墙NAT后访问PC2上的ssh服务,在PC2上看到的结果是IP:192.168.2.254,即防火墙IP在访问它。G.)H.)如果将NAT的命令修改为以下语句,以便将源地址NAT到iptables防火墙实验手册19/24多个地址上,请测试结果情况提示:可在目标机上用抓包等方法检查数据通讯情况参考命令:tcpdump,arping,ping说明:SNAT与MASQUERADE的别:从功能上来说两都是相同的,比如上例中,你也可以用MASQUERADE来实现,但MASQUERADE在进行数据处理时会占用更多的系统资源,因为对每个匹配的包他都需要去检查可用的IP,而SNAT中直接指明了可用NAT的范围的,不需要随时检查。所在MASQUERADE适用于不知道端口IP经常变化的场合,比如用DHCP获取IP,PPPOE(如ADSL等)拔号后动态获取IP的场合。12.发布内网服务(DNAT)(我们以比较复杂的FTP为例进行实验)我们仍以图为例,假设PC2不能直接访问我们局域网内的电脑PC1上的服务,但PC2可以与firewall上的公网IP:192.168.2.254相互通讯,由此我们可以进行DNAT的设置,让iptables防火墙实验手册20/24PC2访问firewall的公网地址上的服务,再由firewall对数据进行处理,将访问请求发送到内网PC1上。A.)因为我们的FTP服务器在内网的私有IP上,所以数据需要穿过防火墙,这时需要开启防火墙的路由转发功能。B.)对从公网来的访问数据设置一条NAT规则,将其访问目标地址通过NAT修改为提供服务的IP,以便将请求转发到内网对应的IP上。C.)我们还需设置一条SNAT的规则,以便内网对公网数据访问的回应信息能够到达请求的客户.iptables防火墙实验手册21/24D.)在FORWARD链上设置允许访问内网的规则E.)测试访问为了更加真实的测试结果,我们将到达内网私有IP的路由指向到一个不存在的网关IP上,这样我们就不能通过路由方式访问我们内网的ftp服务器了,然后我们再ftp访问firewall对外的公网IP,以测试我们的ftp服务器是否能够对外网提供服务。iptables防火墙实验手册22/24可以正常登录FTP服务器了F.)为了更详细的理解防火墙的处理机制,我们登录FTP后再进行文件的列表和下载,会发现都没办法进行,这是因为FTP访问时我们只开放了21端口,而21端口只是FTP传输控制信息的端口,客户端在主动模式下,其数据传输会用到20端口,虽然20端口和21端口是相关的(related),但因为FTP会把这个信息封装到其转输的数据包中,所以在防火墙上仅用一般的状态机制模块ip_conntrack(此模块当有规则需要用到状态机制时会自动加载到内核)是不能识别的,为此我们需加