RHEL5.4配置iptables防火墙

本文发布时间: 2019-Mar-21
关于linux下面配置iptables防火墙的讨论,Iptables与netfilter模块关系在linux下面的防火墙并不是一个服务,而是一个加载到内核中的模块。这个模块就是netfilter模块(网络过滤模块),我们使用iptables工具来管理这个netfilter模块。Iptables的模式Enabled默认拒绝所有Disabled默认允许所有我们可以通过system-config-securitylevel这条命令通过图形界面修改,这里可以选择enabled模式和disabled模式。关于netfilter表和netfilter链这张图就很清楚的显示了netfilter表和netfilter链。Filtertable里面有三条链:INPUT目的地是访问防火墙本身的数据包OUTPUT源地址是防火墙出去的数据包FORWARD数据包的源地址和目的地址都不是防火墙的数据包Nattable里面也有三条链:OUTPUT数据包在出网关之前被丢给代理服务器PREROUTING做目的NAT转换(路由判断之前)POSTROUTING做源NAT转换(路由判断之后)Mangletalbe里面有五条链:INPUTOUTPUTFORWARDPREROUTINGPOSTROUTING关于iptables数据包的流程这张图就显示了整个iptables防火墙在工作时候的数据包流程。关于iptables的访问控制规则当数据包要经过iptables防火墙,首先读取第一条策略,如果第一条策略匹配,则执行,不在读取下面的策略。如果第一条策略没有匹配,则读取第二条策略,如果匹配到第二条策略,则执行,不在读取下面的策略。如果数据包没有匹配到任何策略,则匹配默认策略。默认策略是允许或者拒绝可以由用户自己定义。关于iptables的匹配规则-s192.168.0.0/24源地址为192.168.0.0/24的网段-d192.168.0.10目的地址为192.168.0.10的主机-ieth0从eht0进来的数据包-oeth0从eth0出去的数据包‘!’192.168.0.10反向选择-ptcp--dport80协议的类型,目标端口是80-pudp--sport53协议类型,源端口是53关于iptables的规则目标DROP拒绝ACCEPT允许LOG日志,匹配到这条策略后,还是会继续往下面读取策略。REJECT拒绝,但是会给用户回应的信息。关于iptables基本链操作Iptables-L查看iptablestable(默认显示filtertable)Iptables-nL以IP地址的方式显示Iptables-L--line-numbers显示策略条目的行号Iptables-vL查看iptablestable(显示更具体的信息)Iptables-A追加iptables的策略条目(默认会追加策略的最后面)Iptables-I插入iptables的策略条目(默认插入到策略的最前面)Iptables-IINPUT2插入成iptables策略条目的第二条策略Iptables-DINPUT2删除iptables策略条目的第二条策略Iptables-F清空所有的策略,但是不会清空链的默认策略。Iptables-Z清空计数器Iptables-N添加用户自定义链Iptables-X清空用户自定义链关于iptables的默认的链策略Iptables-PINPUTDROP改变INPUT链的默认策略,拒绝只可以用DROP,不可以用REJECT。(这条策略最后被执行)Iptables-POUTPUTDROP改变OUTPUT链的默认策略Iptables-PFORWARDDROP改变FORWARD链的默认策略下面我们来做试验,写几个简单的策略。[root@localhost~]#[root@localhost~]#lftp192.168.0.254lftp192.168.0.254:~>lsdrwxrwxrwx23004096Mar2507:29publftp192.168.0.254:/>cdpub/lftp192.168.0.254:/pub>可以看到,现在我们的192.168.0.10这台主机访问服务器上面的ftp服务是没有问题的,现在我们写个策略拒绝这台主机访问。[root@server1~]#[root@server1~]#iptables-tfilter-AINPUT-s192.168.0.10-ptcp--dport21-jREJECT[root@server1~]#[root@server1~]#iptables-nLChainINPUT(policyACCEPT)targetprotoptsourcedestinationREJECTtcp--192.168.0.100.0.0.0/0tcpdpt:21reject-withicmp-port-unreachableChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination[root@server1~]#OK,这条简单的策略就写成功了。现在我们来测试下,[root@server1~]#[root@server1~]#[email protected]'spassword:Lastlogin:ThuMar2521:52:372010fromftp.example.com[root@localhost~]#lftp192.168.0.254lftp192.168.0.254:~>ls`ls'at0[Delayingbeforereconnect:30]刚才写的那条策略就生效了。现在192.168.0.10就不可以访问服务器ftp服务了。刚才使用的INPUT链,现在我们使用OUTPUT链,现在我们拒绝服务器ssh到192.168.0.20上面,[root@server1~]#[email protected]'spassword:Lastlogin:ThuMar2522:04:532010fromserver1.example.com[root@localhost~]#现在我们是可以ssh到192.168.0.10这台主机上面去的。[root@server1~]#[root@server1~]#iptables-tfilter-AOUTPUT-d192.168.0.10-ptcp--dport22-jREJECT[root@server1~]#[root@server1~]#iptables-nLChainINPUT(policyACCEPT)targetprotoptsourcedestinationChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestinationREJECTtcp--0.0.0.0/0192.168.0.10tcpdpt:22reject-withicmp-port-unreachable[root@server1~]#OK,这条策略就写完成了。现在我们再来测试下,[root@localhost~]#[root@localhost~]#ssh192.168.0.10ssh:connecttohost192.168.0.10port22:Connectionrefused[root@localhost~]#OK,现在就连接被拒绝了,说明刚才那条策略生效了。现在还有个特殊的策略,#iptables-AINPUT-jDROP/REJECT这个策略我们一般写在最后面,所有没有匹配到的用户全部拒绝。这条策略会有一个副作用,就是服务器自己反而会访问不到自己。现在我们来测试下,首先来访问下自己的ftp服务,[root@server1~]#[root@server1~]#lftplocalhostlftp192.168.0.254:~>lsdrwxrwxrwx23004096Mar2507:29publftp192.168.0.254:/>cdpub/lftp192.168.0.254:/pub>OK,现在访问是没有问题的。现在我们来加上刚才的那条策略。[root@server1~]#[root@server1~]#iptables-AINPUT-jREJECT[root@server1~]#[root@server1~]#[root@server1~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationREJECTall--anywhereanywherereject-withicmp-port-unreachableChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination[root@server1~]#添加策略就完成了,现在我们再来访问下本地ftp服务,[root@server1~]#[root@server1~]#lftplocalhostlftp192.168.0.254:~>ls可以看到,现在就访问不了。ls'at0[Connecting...]这个是因为没有开启本地回环,所以必须写条策略开启本地回环。[root@server1~]#[root@server1~]#iptables-IINPUT-ilo-jACCEPT[root@server1~]#[root@server1~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTall--anywhereanywhereREJECTall--anywhereanywherereject-withicmp-port-unreachableChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination[root@server1~]#现在我们插入了一条策略,再来测试下现在能否访问本地的ftp服务。[root@server1~]#[root@server1~]#lftplocalhostlftplocalhost:~>lsdrwxrwxrwx23004096Mar2507:29publftplocalhost:/>cdpub/lftplocalhost:/pub>OK,当我们允许了本地回环访问,现在就可以访问本地的ftp服务了。默认的链策略也会有这个副作用。写完iptables策略以后,重启计算机这些策略就都不会生效了。可以使用这条命令,#serviceiptablessave[root@localhost~]#[root@localhost~]#serviceiptablessaveSavingfirewallrulesto/etc/sysconfig/iptables:[OK][root@localhost~]#敲完这条命令以后,系统会将iptables的策略自动写入到/etc/sysconfig/iptables。我们只是对数据包的源地址和目的地址进行过滤。下面我们对数据包的状态进行过滤。这个叫做链接跟踪。在使用状态过滤的时候,我们必须先加载相应的模块,Modprobeip_conntrack_ftpModprobeip_conntrack_tftpModprobeip_nat_ftpModprobeip_nat_tftp关于数据包的状态NEW第一次发起连接请求的数据包状态ESTABLISHED已经建立三次握手的数据包状态RELATED发送出去得到回应的数据包状态INVALID无效的数据包状态关于连接跟踪的示例:Iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPTIptables-AINPUT-mstate--stateNEW-ptcp--dport25-jACCEPTIptables-AINPUT-mstate--stateNEW-jDROP现在我们以FTP为例,测试下,正常情况下面,现在我们是可以访问服务器上面的ftp服务的,[root@localhost~]#[root@localhost~]#lftp192.168.0.254lftp192.168.0.254:~>lsdrwxrwxrwx23004096Mar2507:29publftp192.168.0.254:/>可以看到,现在访问的确没有问题的,现在我们来写几条策略,[root@server1~]#[root@server1~]#iptables-AINPUT-s192.168.0.10-ptcp--dport21-jACCEPT[root@server1~]#[root@server1~]#iptables-AINPUT-jREJECT[root@server1~]#[root@server1~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--192.168.0.10anywheretcpdpt:ftpREJECTall--anywhereanywherereject-withicmp-port-unreachableChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination[root@server1~]#现在我们再到192.168.0.10上面去测试下,[root@localhost~]#[root@localhost~]#lftp192.168.0.254lftp192.168.0.254:~>ls`ls'at0[Delayingbeforereconnect:20]可以看到,现在就访问不到服务器的ftp服务了。因为我只开放了21号端口,而ftp服务的21号端口是用来传输命令通道的,现在客户端与服务器是建立不起三次握手的。现在我们就只能够使用状态防火墙来允许建立三次握手。使用状态防火墙首先要加载模块,[root@server1~]#[root@server1~]#modprobeip_conntrack_ftp[root@server1~]#[root@server1~]#iptables-IINPUT2-mstate--stateESTABLISHED,RELATED-jACCEPT[root@server1~]#[root@server1~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--192.168.0.10anywheretcpdpt:ftpACCEPTall--anywhereanywherestateRELATED,ESTABLISHEDREJECTall--anywhereanywherereject-withicmp-port-unreachableChainFORWARD(policyACCEPT)targetprotoptsourcedestinationChainOUTPUT(policyACCEPT)targetprotoptsourcedestination[root@server1~]#现在我们再到192.168.0.10上面去测试下,[root@localhost~]#[root@localhost~]#lftp192.168.0.254lftp192.168.0.254:~>lsdrwxrwxrwx23004096Mar2507:29publftp192.168.0.254:/>OK,现在就可以访问了,这个就是状态防火墙的用法。关于NAT(网络地址转换)网络地址转换的类型:目的地NAT(DNAT)在PREROUTING链中进行设置,源NAT(SNAT,MASQUERADE)在POSTROUTING链中进行设置DNAT示例:INBOUND(进入)Iptables-tnat-APREROUTING-ptcp--dport80-jDNAT--to-dest192.168.0.10OUTBOUD(输出,带有端口重定向)Iptables-tnat-AOUTPUT-ptcp--dport80-jDNAT--to--dest192.168.0.100:3128SNAT示例:MASQUERADE(地址伪装)Iptables-tnat-APOSTROUTING-oeth0-jMASQUERADESNATIptables-tnat-APOSTROUTING-jSNAT--to-source1.2.3.45


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表