您的位置:首页 > 其它

iptables学习使用笔记

2012-07-27 09:45 218 查看
本文档的Copyleft归rosetta所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性。

最近在学习netfilter框架,少不了来学习它的控制工具iptables。

先来了解一下iptables的历史。iptables 的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。但是 ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。

他们都是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)。

总得来说就是netfilter由内核实现, iptables只是用户层工具,用户通过iptables工具来配置规则,最终由netfilter使规则生效。明白了netfilter和iptables的关系后再去学习它们心理就有把握些了。



1,NetFilter在协议栈中定义了五个钩子函数:

1.PREROUTING (路由前)

2.INPUT (数据包流入口)

3.FORWARD (转发管卡)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)



引用网上的一副图:

NF_IP_PRE_ROUTING(ip_rcv)-------->NF_IP_FORWARD(ip_forward)--------->NF_IP_POST_ROUTING(ip_output)

| ^

| |

∨ |

NF_IP_LOCAL_IN NF_IP_LOCAL_OUT

(ip_local_deliver) (ip_local_out)

2,iptables策略

防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。



3,实际例子iptables的使用。

下面结合实际iptables例子,然后讲解其格式,更详细的可看man iptables

环境如下:

实验主机:VMware CentOS release 5.4, IP:192.168.95.228/24

控制主机:win7 IP:192.168.95.165/24

首先在95.228中开启iptables服务,service iptables restart,并确保setup中的防火墙安全级别为启用。

通用命令:

1),查看当前规则列表:

iptables -L -n -v --line-number(--line-number为了查看规则序号)

iptables -L -t nat

2), 清空规则

iptables -F //清空全部规则

或者使用iptables -F -t nat

iptables -t nat -F PREROUTING //清空指定规则



首先把实验主机默认规则设为DROP,丢弃所有数据包, 然后尝试使用ssh登陆和ping请求,无法完成登陆,无法ping通,现在相当于与世隔绝了。

然后通过增加规则,使用控制主机可以ping通实验主机。

设置DROP:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

设置过滤规则:

iptables -t filter -A INPUT -s 192.168.95.165/32 -d 192.168.95.228/42 -p tcp --dport 22 -j ACCEPT

iptables -t filter -A OUTPUT -s 192.168.95.228/32 -d 192.168.95.165/32 -p tcp --sport 22 -j ACCEPT

增加以上两条规则后,使用控制主机可以通过ssh登陆。

iptables -t filter -A INPUT -s 192.168.95.165/32 -d 192.168.95.228/32 -p icmp -j ACCEPT

iptables -t filter -A OUTPUT -s 192.168.95.228/32 -d 192.168.95.165/32 -p icmp -j ACCEPT

增加以上两条规则后,使用控制主机可以ping通实验主机。

4,命令讲解

1)、规则写法:

iptables定义规则的方式比较复杂:

格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

-t table :4个filter nat mangle raw

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

COMMAND:定义如何对规则进行管理

chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的

CRETIRIA:指定匹配标准

-j ACTION :指定如何进行处理

2)、COMMAND

-A:追加,在当前链的最后新增一个规则

-I num : 插入,把当前规则插入为第几条。

-I 3 :插入为第三条

-R num:Replays替换/修改第几条规则

-D num:删除,明确指定删除第几条规则

格式,在命令和NUM之前需要指定对哪条链操作,比如:iptables -D INPUT3

3)通用匹配

-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP

IP | IP/MASK | 0.0.0.0/0.0.0.0

而且地址可以取反,加一个“!”表示除了哪个IP之外

-d:表示匹配目标地址

-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)

-i eth0:从这块网卡流入的数据

流入一般用在INPUT和PREROUTING上

-o eth0:从这块网卡流出的数据

流出一般在OUTPUT和POSTROUTING上

-p tcp :TCP协议的扩展。一般有三种扩展

--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如

--dport 21 或者 --dport 21-23 (此时表示21,22,23)

--sport:指定源端口

-p udp:UDP协议的扩展

-p icmp:icmp数据报文的扩展

--icmp-type:

echo-request(请求回显),一般用8 来表示

所以 --icmp-type 8 匹配请求回显数据包

echo-reply (响应的数据包)一般用0来表示

4)、-j ACTION

常用的ACTION:

DROP:丢弃

REJECT:明示拒绝

ACCEPT:接受

custom_chain:转向一个自定义的链

DNAT

SNAT

MASQUERADE:源地址伪装

REDIRECT:重定向:主要用于实现端口重定向

MARK:打防火墙标记的

RETURN:返回

在自定义链执行完毕后使用返回,来返回原规则链。

本文是按以下文章写的一个适合自己理解的学习笔记,而且不全面,原文写的比较详细。
http://blog.chinaunix.net/uid-26495963-id-3279216.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: