iptable

来源:互联网 发布:弹窗广告拦截软件 编辑:程序博客网 时间:2024/04/20 16:08

Linux iptables 架构防火墙

netfilter/iptable允许安装、维护和检查。

其自身模块为

filter table     input    forward     output

NAT  table        output     prerouting    postrouting

Mangle table      output    prerouting     对报文数据修复表的处理

学习iptables的时候首要问题是要明白什么叫链

我们都知道:在三个表中,所有数据都会走其中一个表,然后到达目标,这时我们便有了链,

简单的说:链是用来进行检查过滤站数据报文的规则!!!!!!而这些规则是人为定义的.

而定义的这些人规则种类要看链的数量.

比如filter table中,有三个链 :input forward output 这时我们定义的规则只能有三种.

入站/转发/出站

而nat可以有三种prerouting/postrouting/output

路由前/路由中/路由后一来实现

以下是一些参数,但是我认为IPtable并不难学,关键是你要明白原理.

要真正明白什么是iptable的链和其包含意义,如果你看几个别人做的例子,再自已写几个,那么IPtables真的很简单

使用iptables 功能方法:#service ip tables status

iptables命令的语法一般如下:

iptables [标志项] [链] [选项] [扩展功能] [事件项]

实用教程如下:
1.iptables基础教程(转)
建立规则和链
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用 netfilter/iptables 系统提供的特殊命令 iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
$ iptables [-t table] command [match] [target]
表(table)
[-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则 filter 用作缺省表。
filter 表用于一般的信息包过滤,它包含 INPUT、OUTPUT 和 FORWARD 链。nat 表用于要转发的信息包,它包含 PREROUTING、OUTPUT 和 POSTROUTING 链。如果信息包及其头内进行了任何更改,则使用 mangle 表。该表包含一些规则来标记用于高级路由的信息包,该表包含 PREROUTING 和 OUTPUT 链。
注:PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而 POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
命令(command)
上面这条命令中具有强制性的 command 部分是 iptables 命令的最重要部分。它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。以下是最常用的一些命令:
-A 或 --append:该命令将一条规则附加到链的末尾。
示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
该示例命令将一条规则附加到 INPUT 链的末尾,确定来自源地址 205.168.0.1 的信息包可以 ACCEPT。
-D 或 --delete:通过用 -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。下面的示例显示了这两种方法。
示例:
$ iptables -D INPUT --dport 80 -j DROP
$ iptables -D OUTPUT 3
第一条命令从 INPUT 链删除规则,它指定 DROP 前往端口 80 的信息包。第二条命令只是从 OUTPUT 链删除编号为 3 的规则。
-P 或 --policy:该命令设置链的缺省目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。
示例:
$ iptables -P INPUT DROP
该命令将 INPUT 链的缺省目标指定为 DROP。这意味着,将丢弃所有与 INPUT 链中任何规则都不匹配的信息包。
-N 或 --new-chain:用命令中所指定的名称创建一个新链。
示例:
$ iptables -N allowed-chain
-F 或 --flush:如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。
示例:
$ iptables -F FORWARD
$ iptables -F
-L 或 --list:列出指定链中的所有规则。
示例:
$ iptables -L allowed-chain
匹配(match)
iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其示例和说明:
-p 或 --protocol:该通用协议匹配用于检查某些特定协议。协议示例有 TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及 ALL(用于所有协议)。ALL 是缺省匹配。可以使用 ! 符号,它表示不与该项匹配。
示例:
$ iptables -A INPUT -p TCP, UDP
$ iptables -A INPUT -p ! ICMP
在上述示例中,这两条命令都执行同一任务 — 它们指定所有 TCP 和 UDP 信息包都将与该规则匹配。通过指定 ! ICMP,我们打算允许所有其它协议(在这种情况下是 TCP 和 UDP),而将 ICMP 排除在外。
-s 或 --source:该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。缺省源匹配与所有 IP 地址匹配。
示例:
$ iptables -A OUTPUT -s 192.168.1.1
$ iptables -A OUTPUT -s 192.168.0.0/24
$ iptables -A OUTPUT -s ! 203.16.1.89
第二条命令指定该规则与所有来自 192.168.0.0 到 192.168.0.24 的 IP 地址范围的信息包匹配。第三条命令指定该规则将与除来自源地址 203.16.1.89 外的任何信息包匹配。
-d 或 --destination:该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。
示例:
$ iptables -A INPUT -d 192.168.1.1
$ iptables -A INPUT -d 192.168.0.0/24
$ iptables -A OUTPUT -d ! 203.16.1.89
目标(target)
我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:
ACCEPT:当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。该目标被指定为 -j ACCEPT。
DROP:当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为 -j DROP。
REJECT:该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同,REJECT 不会在服务器和客户机上留下死套接字。另外,REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT。
示例:
$ iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN:在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如 INPUT 之类的主链,则使用该链的缺省策略处理信息包。它被指定为 -jump RETURN。示例:
$ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
还有许多用于建立高级规则的其它目标,如 LOG、REDIRECT、MARK、MIRROR 和 MASQUERADE 等。
保存规则
现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则,那么必须将该规则集保存在文件中。可以使用 iptables-save 命令来做到这一点:
$ iptables-save > iptables-script
现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:
$ iptables-rest

 
2.如何建立个人防火墙实例
 
    这一部分基本上是沿袭了一个哥们的实例,但给出了具体的测试,并对其中得误写进行了纠正。
在Linux上使用iptables命令,建立一个个人防火墙(内核2.3和更高的版本)
说明:如果内核是2.3或更高的版本,常常使用命令iptables。在继续本练习之前,使用命令uname -r来核实内核版本。
1.启动Linux系统,并以root身份登陆。核实这个系统可与网上其他的系统之间实现互连。
2.核实iptables模块和命令是否已经安装了:
  host# rpm -qa | grep iptab
   iptables-1.2.9-90
  如果iptables RPM还没有安装,从www.rpmfind.net上获取。确信正在使用的内核版本为2.3或更高。
3.为阻塞到所有主机的icmp,使用下列命令:
  iptable -I INPUT -i eth0 -p icmp -s 0/0 -d 0/0 -j DROP
  说明:这个命令使iptables增加一条规则至INPUT,用以拒绝从所有的源(-s 0/0)到所有的目标(-d 0/0)ICMP包。
在iptables中,-i选项指定输入设备。注意,必须指定INPUT链,而不是input链,区分大小写很重要。
4.现在,把这个拒绝记录下来:
  host# iptables -I INPUT -i eth0 -p icmp -s 0/0 -d 0/0 -j LOG
/*插一小嘴:当完成第三步的时候就可以阻塞ICMP了,并且偶觉得做为一个administrator来讲让你的server在internet上完全消失是一个很高的境界,这只是第一步。*/
5.到另一个系统中ping第一个系统,将收不到任何回应信息, 并且会看到出错信息。这时,不要按crtl+c中止主机,让出错信息继续显示在屏幕上。
6.列出两个系统中所有的链:
  host# iptables --line-numbers -nL
你会看到,INPUT链包括所建立的icmp规则,以行号结束。当规则列表很长时,这个选项是很有帮助的。
7.在另一个单独的系统上,执行下面的命令,从INPUT链中刷新所有的规则:
  host# iptables -F
8.在第二个系统上对链刷新后,你将能够再次Ping主机。现在,这样作来核实已经刷新了所有的iptables表和链。
9.在第一个系统上,核实Web服务器正在运行,并且确信他正在使用第二个系统提供的Web页面服务。然后,为阻截到Web
服务器的所有传输,在第二个服务器上使用下面的命令:
iptables -I INPUT -i eth0 -p tcp -s 0/0 -d 0/0 --dport 80 -j DROP
iptables -I INPUT -i eth0 -p tcp -s 0/0 -d 0/0 --dport 80 -j LOG
增加的部分:在linux系统下安装用apache服务器,默认的路径/usr/local/apache2,下面可以自己建立一个index.html文件,
在另一台机器上用浏览器进行连接输入ip即可,能看到自己显示页面。
10.使用Web浏览器,如Lynx,访问第二个Web服务器。
11.在任意一个系统上,对Ftp传输增加如下规则:
iptables -I INPUT -i eth0 -p tcp -s 0/0 -d 0/0 --dport 21 -j DROP
iptables -I INPUT -i eth0 -p tcp -s 0/0 -d 0/0 --dport 21 -j LOG

12.在增加上述规则后,使用下面的命令来查看内核输出文件:
host# tail -f /var/log/messages
13.现在,使用FTP客户端来测试这个规则。
>在windows下打开server-u
>shell下输入ftp,显示ftp>
>输入open hostname port
>username
>password
>get file.*
可以把这些所建立的规则删除之后,在利用第12步,看看输出结果有什么不同。
14.你会看到有关收到的每一个包的信息。与远程系统一起,测试系统是否能够登记icmp和发送到80端口的TCP包。
15.列出所建立的规则。现在,删除FTP规则。举例来说,如果FTP规则是第三个规则,需要输入下面的命令:
  host# iptables -D INPUT 3
16. 在刷新所有规则之前,使用下面的命令把现有的规则保存至一个文本文件:
  host# iptables-save > iptablesrules.txt
17. 在每一个系统中:当已经结束时,使用iptables -F命令删除所有链。若这一步执行失败,将导致今后的运行产生问题。

原创粉丝点击