ITPub博客

首页 > IT基础架构 > 网络安全 > Iptables

Iptables

原创 网络安全 作者:roninwei 时间:2006-07-03 10:20:44 0 删除 编辑

iptables-save iptables-save用来把当前的规则存入一个文件里以备iptables-restore使用。它的使用很简单,只有两个参数: iptables-save [-c] [-t table] 参数-c的作用是保存包和字节计数器的值。这可以使我们在重启防火墙后不丢失对包和字节的统计。带-c参数的iptables-save命令使重启防火墙而不中断统计记数程序成为可能。这个参数默认是不使用的。 参数-t指定要保存的表,默认是保存所有的表。它的输出格式中表都以*开始,每个表都包含链和规则,链的详细说明是: [:]。

iptables-restore iptables-restore用来装载由iptables-save保存的规则集。不幸的是,它只能从标准输入接受输入,而不能从文件接受。下面是它的事方法: iptables-restore [-c] [-n] 参数-c要求装入包和字节计数器。如果你用iptables-save保存了计数器,现在想重新装入,就必须用这个参数。它的另一种较长的形式是--counters。 参数-n告诉iptables-restore不要覆盖已有的表或表内的规则。默认情况是清除所有已存的规则。这个参数的长形式是--noflush。 Commands iptables -A INPUT :在所选择的链末添加规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字可以被解析为多个地址,则这条规则会和所有可用的地址结合。

iptables -D INPUT --dport 80 -j DROP或iptables -D INPUT 1 :从所选链中删除规则。有两种方法指定要删除的规则:一是把规则完完整整地写出来,再就是指定规则在所选链中的序号(每条链的规则都各自从1被编号)。

iptables -R INPUT 1 -s 192.168.0.1 -j DRO:在所选中的链里指定的行上(每条链的规则都各自从1被编号)替换规则。它主要的用处是试验不同的规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字可以被解析为多个地址,则这条command会失败。

iptables -I INPUT 1 --dport 80 -j ACCEP:根据给出的规则序号向所选链中插入规则。如果序号为1,规则会被插入链的头部,其实默认序号就是1。

iptables -L INPU:显示所选链的所有规则。如果没有指定链,则显示指定表中的所有链。如果什么都没有指定,就显示默认表所有的链。精确输出受其它参数影响,如-n 和-v等参数。

iptables -F INPU:清空所选的链。如果没有指定链,则清空指定表中的所有链。如果什么都没有指定,就清空默认表所有的链。当然,也可以一条一条地删,但用这个command会快些。 iptables -Z INPU:把指定链(如未指定,则认为是所有链)的所有计数器归零。

iptables -N allowe:根据用户指定的名字建立新的链。上面的例子建立了一个名为allowed的链。注意,所用的名字不能和已有的链、target同名。

iptables -X allowe:删除指定的用户自定义链。这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数,这条命令将会删除默认表所有非内建的链。

iptables -P INPUT DRO:为链设置默认的target(可用的是DROP 和ACCEPT,如果还有其它的可用,请告诉我),这个target称作策略。所有不符合规则的包都被强制使用这个策略。只有内建的链才可以使用规则。但内建的链和用户自定义链都不能被作为策略使用,也就是说不能象这样使用:iptables -P INPUT allowed(或者是内建的链)。

iptables -E allowed disallowe:对自定义的链进行重命名,原来的名字在前,新名字在后。如上,就是把allowed改为disallowed。这仅仅是改变链的名字,对整个表的结构、工作没有任何影响.

通用匹配

iptables -A INPUT -p tcp匹配指定的协议。指定协议的形式有以下几种:
1
、名字,不分大小写,但必须是在/etc/protocols中定义的。

2
、可以使用它们相应的整数值。例如,ICMP的值是1TCP6UDP17

3
、缺省设置,ALL,相应数值是0,但要注意这只代表匹配TCPUDPICMP
而不是/etc/protocols中定义的所有协议。
4
、可以是协议列表,以英文逗号为分隔符,如:
udp,tcp
5
、可以在协议前加英文的感叹号表示取反,注意有空格,如
: --protocol !
tcp
表示非tcp协议,也就是UDPICMP。可以看出这个取反的范围只是TCPUDPICMP

iptables -A INPUT -s 192.168.1.1IP源地址匹配包。地址的形式如下:
1
、单个地址,如192.168.1.1,也可写成 192.168.1.1/255.255.255.255
192.168.1.1/32
2
、网络,如192.168.0.0/24,或
192.168.0.0/255.255.255.0
3
、在地址前加英文感叹号表示取反,注意空格,如--source ! 192.168.0.0/24 表示除此地址外的所有地址

4
、缺省是所有地址

iptables -A INPUT -d 192.168.1.1IP目的地址匹配包。地址的形式和 -- source完全一样。

iptables -A INPUT -i eth0n以包进入本地所使用的网络接口来匹配包。要注意这个匹配操作只能用于INPUTFORWARD PREROUTING这三个链,用在其他任何地方都会提示错误信息。指定接口有一下方法:

1、指定接口名称,如:eth0ppp0

2、使用通配符,即英文加号,它代表字符数字串。若直接用一个加号,即iptables -A INPUT -i +表示匹配所有的包,而不考虑使用哪个接口。这也是

不指定接口的默认行为。通配符还可以放在某一类接口的后面,如:eth+表示所有Ethernet接口,也就是说,匹配所有从Ethernet接口进入的包。

3、在接口前加英文感叹号表示取反,注意空格,如:-i ! eth0意思是匹配来自除eth0外的所有包。

iptables -A FORWARD -o eth0n以包离开本地所使用的网络接口来匹配包。使用的范围和指定接口的方法与--in-interface完全一样。

iptables -A INPUT -fn用来匹配一个被分片的包的第二片或及以后的部分。因为它们不包含源或目的地址,或ICMP类型等信息,其他规则无法匹配到它,所以才有这个匹配操作。要注意碎片攻击哦。这个操作也可以加英文感叹号表示取反,但要注意位置,如:! -f 。取反时,表示只能匹配到没有分片的包或者是被分片的包的第一个碎片,其后的片都不行。现在内核有完善的碎片重组功能,可以防止碎片攻击,所以不必使用取反的功能来防止碎片通过。如果你使用连接跟踪,是不会看到任何碎片的,因为在它们到达任何链之前就被处理过了。

Owner match

iptables -A OUTPUT -m owner --uid-owner 500: 按生成包的用户的IDUID)来匹配外出的包。使用这个匹配可以做这样一些事,比如,阻止除root外的用户向防火墙外建立新连接,或阻止除用户http外的任何人使用HTTP端口发送数据。

iptables -A OUTPUT -m owner --gid-owner: 按生成包的用户所在组的IDGID)来匹配外出的包。比如,我们可以只让属于network组的用户上Internet,而其他用户都不行;或者只允许http组的成员能从HTTP端口发送数据。

iptables -A OUTPUT -m owner --pid-owner 78: n按生成包的进程的IDGID)来匹配外出的包。比如,我们可以只允许PID94的进程(http进程当然不能是多线程的)使用http端口。这个匹配使用起来有一点难度,因为你要知道进程的ID号。当然,你也可以写一个小小的脚本,先从ps的输出中得到PID,再添加相应的规则.

iptables -A OUTPUT -m owner --sid-owner 100: n按生成包的会话的IDSID)来匹配外出的包。一个进程以及它的子进程或它的多个线程都有同一个SID。比如,所有的HTTPD进程的SID和它的父进程一样(最初的 HTTPD进程),即使HTTPD是多线程的(现在大部分都是,比如ApacheRoxen)也一样。

State matches

iptables -A INPUT -m state --state RELATED,ESTABLISHE: 指定要匹配包的状态,当前有4种状态可用:INVALIDESTABLISHEDNEWRELATED INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题。ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。NEW表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关。RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transferICMP error 和一个TCPUDP连接相关。注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此它不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方。

TOS match

iptables -A INPUT -p tcp -m tos --tos 0x16: 根据TOS字段匹配包。这个match常被用来mark包,以便后用,除此之外,它还常和iproute2或高级路由功能一起使用。它的参数可以是16进制数,也可以是十进制数,还可以是相应的名字(用 iptables -m tos -h能查到)。到写这篇文章时,有以下参数可用:

Minimize-Delay 16 (0x10),要求找一条路径使延时最小,一些标准服务如telnetSSHFTP-control 就需要这个选项。

Maximize-Throughput 8 (0x08),要求找一条路径能使吞吐量最大,标准服务FTP-data能用到这个。

Maximize-Reliability 4 (0x04),要求找一条路径能使可靠性最高,使用它的有BOOTPTFTP
Minimize-Cost 2 (0x02)
,要求找一条路径能使费用最低,一般情况下使用这个选项的是一些视频音频流协议,如RTSPReal Time Stream Control
Protocol
)。

Normal-Service 0 (0x00),一般服务,没有什么特殊要求。

TTL matches

iptables -A OUTPUT -m ttl --ttl 60: n根据TTL的值来匹配包,参数的形式只有一种,就是十进制数值。它可以被用来调试你的局域网,比如解决LAN内的主机到Internet上的主机的连接问题,或找出 TrojanTrojan)可能的入口。这个match的用处相对有限,但它其实是很有用的,这就看你的想象力如何了。比如可以用它来发现那些TTL具有错误缺省值的机子(这可能是实现TCP/IP栈功能的那个程序本身的错误,或者是配置有问题)。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7507082/viewspace-846739/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ARP病毒解决办法
请登录后发表评论 登录
全部评论
  • 博文量
    151
  • 访问量
    1014566