iptablesiptablesiptablesiptables官方网站:://netfilter.org/://netfilter.org/•数据包经过防火墙的路径•禁止端口•强制访问某站点•发布内部网络服务器•智能DNS•端口映射•通过NAT上网•IP规则的保存与恢复•iptables指令语法•iptables实例数据包经过防火墙的路径图1比较完整地展示了一个数据包是如何经过防火墙的,考虑到节省空间,该图实际上包了三种情况:来自外部,以防火墙(本机)为目的地的包,在图1中自上至下走左边一条路径。由防火墙(本机)产生的包,在图1中从“本地进程”开始,自上至下走左边一条路径来自外部,目的地是其它主机的包,在图1中自上至下走右边一条路径。图1如果我们从上图中略去比较少用的mangle表的图示,就有图2所显示的更为清晰的路径图.图2禁止端口的实例禁止sshsshsshssh端口只允许在192.168.62.1上使用ssh远程登录,从其它计算机上禁止使用ssh#iptables-AINPUT-s192.168.62.1-ptcp--dport22-jACCEPT#iptables-AINPUT-ptcp--dport22-jDROP禁止代理端口#iptables-AINPUT-ptcp--dport3128-jREJECT禁止icmpicmpicmpicmp端口除192.168.62.1外,禁止其它人ping我的主机#iptables-AINPUT-ieth0-s192.168.62.1/32-picmp-micmp--icmp-typeecho-request-jACCEPT#iptables-AINPUT-ieth0-picmp--icmp-typeecho-request–j?DROP或#iptables-AINPUT-ieth0-s192.168.62.1/32-picmp-micmp--icmp-type8-jACCEPT#iptables-AINPUT-ieth0-picmp-micmp--icmp-type8-jDROP注:可以用iptables--protocolicmp--help查看ICMP类型还有没有其它办法实现?禁止QQQQQQQQ端口#iptables-DFORWARD-pudp--dport8000-jREJECT强制访问指定的站点图3要使192.168.52.0/24网络内的计算机(这此计算机的网关应设为192.168.52.10)强制访问指定的站点,在做为防火墙的计算机(192.168.52.10)上应添加以下规则:1.打开ip包转发功能echo1/proc/sys/net/ipv4/ip_forward2.在NAT/防火墙计算机上的NAT表中添加目的地址转换规则:iptables-tnat-IPREROUTING-ieth0-ptcp--dport80-jDNAT--to-destination202.96.134.130:80iptables-tnat-IPREROUTING-ieth0-pudp--dport80-jDNAT--to-destination202.96.134.130:803.在NAT/防火墙计算机上的NAT表中添加源地址转换规则:iptables-tnat-IPOSTROUTING-oeth1-ptcp--dport80-s192.168.52.0/24-jSNAT--to-source202.96.134.10:20000-30000iptables-tnat-IPOSTROUTING-oeth1-pudp--dport80-s192.168.52.0/24-jSNAT--to-source202.96.134.10:20000-300004.测试:在内部网的任一台计算机上打开浏览器,输入任一非本网络的IP,都将指向IP为202.96.134.130的网站.发布内部网络服务器图4要使因特网上的计算机访问到内部网的FTP服务器、WEB服务器,在做为防火墙的计算机上应添加以下规则:1.echo1/proc/sys/net/ipv4/ip_forward2.发布内部网web服务器iptables-tnat-IPREROUTING-ptcp-ieth1-s202.96.134.0/24--dport80-jDNAT--to-destination192.168.52.15:80iptables-tnat-IPOSTROUTING-ptcp-ieth0-s192.168.52.15--sport80-jSNAT--to-source202.96.134.10:20000-300003.发布内部网ftp服务器iptables-tnat-IPREROUTING-ptcp-ieth1-s202.96.134.0/24--dport21-jDNAT--to-destination192.168.52.14:21iptables-tnat-IPOSTROUTING-ptcp-ieth0-s192.168.52.14--sport21-jSNAT--to-source202.96.134.10:40000-500004.注意:内部网的计算机网关要设置为防火墙的ip(192.168.52.1)5.测试:用一台IP地址为202.96.134.0段的计算机虚拟因特网访问,当在其浏览器中访问时,实际应看到的是192.168.52.15的的web服务;当访问时,实际应看到的是192.168.52.14上的的ftp服务智能DNSDNSDNSDNS图51.echo1/proc/sys/net/ipv4/ip_forward2.在NAT服务器上添加以下规则:在PREROUTING链中添加目的地址转换规则:iptables-tnat-IPREROUTING-ieth0-ptcp--dpor53-jDNAT--to-destination202.96.134.130iptables-tnat-IPREROUTING-ieth0-pudp--dpor53-jDNAT--to-destination202.96.134.130在POSTROUTING链中添加源地址转换规则:iptables-tnat-IPOSTROUTING-oeth1-s192.168.52.0/24-ptcp--dpor53-jSNAT--to-source202.96.134.10:40000-50000iptables-tnat-IPOSTROUTING-oeth1-s192.168.52.0/24-pudp--dpor53-jSNAT--to-source202.96.134.10:40000-500003.测试在内部网任一台计算机上,将DNS设置为任意的外网IP,就可以使用DNS测试工具如nslookup来解析DNS服务器202.96.134.130上的名称.端口映射见上节透明代理设置#iptables-tnat-APREROUTING-ieth0-ptcp-s192.168.62.0/24--dport80-jREDIRECT--to-ports3128通过NATNATNATNAT上网典型NATNATNATNAT上网一般做为NAT的计算机同时也是局域网的网关,假定该机有两块网卡eth0、eth1,eth0连接外网,IP为202.96.134.134;eth1连接局域网,IP为192.168.62.101.先在内核里打开ip转发功能#echo1/proc/sys/net/ipv4/ip_forward2.?使局域网用户能访问internet所要做的nat#iptables-tnat-APOSTROUTING-ptcp-oeth0-jSNAT--to?202.96.134.134如果上网的IP是动态IP,则使用以下规则:#iptables-tnat-APOSTROUTING-oeth0-s192.168.62.0/24-jMASQUERADE如果是通过ADSL上网,且公网IP是动态IP,则使用以下规则:#iptables-tnat-APOSTROUTING-oppp0-s192.168.62.0/24-jMASQUERADE3.使internet用户可以访问局域网内web主机所要做的nat#iptables-tnat-APREROUTING-ptcp-d202.96.134.134--dport80-jDNAT--to-destination192.168.62.10注:局域网内的客户端需将默认网关、DNS设为防火墙的IP在我们的网络机房实现NATNATNATNAT共享上网工作环境:上层代理192.168.60.6(4480),只授予教师机(192.168.62.111)使用该代理的权限目标:不使用squid代理上网,而是使用NAT的方式上网方法:1)确保停止教师机(192.168.62.111)的squid或其它代理服务2)客户端网关、DNS均指向192.168.62.111,浏览器代理设置为192.168.60.6(4480)。测试在当前情况下能否上网3)在教师机(192.168.62.111)上添加如下iptables规则:#iptables-tnat-APOSTROUTING-ptcp-d192.168.60.6/32--dport4480-jSNAT--to-source192.168.62.111:10000-30000解释:对于目的地为192.168.60.6、目的端口为4480的TCP包,在经过防火墙路由后,将其源地址转换为192.168.62.111,端口转换为10000-30000间的某个端口。4)客户端测试能否上网IPIPIPIP规则的保存与恢复iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载使用命令iptables-save来保存规则。一般用iptables-save/etc/sysconfig/iptables生成保存规则的文件/etc/sysconfig/iptables,也可以用serviceiptablessave它能把规则自动保存在/etc/sysconfig/iptables中。当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。iptablesiptablesiptablesiptables指令语法iptables[-ttable]command[match][-jtarget/jump][-t[-t[-t[-ttable]table]table]table]指定规则表-t参数用来,内建的规则表有三个,分别是:nat、mangle和filter,当未指定规则表时,则一律视为是filter。个规则表的功能如下:nat:此规则表拥有PREROUTING和POSTROUTING两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT、DNAT),这个规则表除了作网址转换外,请不要做其它用途。mangle:此规则表拥有PREROUTING、FORWARD和POSTROUTING三个规则链。除了进行网址转换工作会改写封包外,在某些特殊应用可能也必须去改写封包(TTL、TOS)或者是设定MARK(将封包作记号,以进行后续的过滤),这时就必须将这些工作定义在mangle规则表中,由于使用率不高,我们不打算在这里讨论mangle的用法。filter:这个规则表是默认规则表,拥有INPUT、FORWARD和OUTPUT三个规则链,这个规则表顾名思义是用来进行封包过滤的处理动作(例如:DROP、LOG、ACCEPT或REJECT),我们会将基本规则都建立在此规则表中。co