编写规则

编写规则

  • Iptables命令
    • iptables [-t table] command [match] [target/jump]
      • 命令总是放在开头或者紧挨着表名,我们用命令告诉应用程序我们想干什么。例如增加一个规则,在链尾增加一个规则或者是删除一条规则,下面我们还会说这个问题。
      • match 细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源 IP 地址,网络接口,端口,协议类型,或者其他什么。
      • 最后我们说说 target,假如一个报文匹配所有的 matches,那么 target 就告诉这个报文应该做什么。例如让内核把报文送到我们自定义的链上,我们也可以告诉内核直接丢掉这个报文,甚至可以让内核给发送者回复一个特定报文。

表(Tables)

-t选项指明你准备操作哪个表,默认情况下,filter表会被使用。

TableExplanation
filterFilter 明确的就是用来完成报文过滤的,和操作其他表一样,我们在 filter 里面可以丢弃/记录/接受/拒绝报文。FORWARD 链主要用来处理 非本机报文,INPUT 链处理所有目的地址为本机的报文,而 OUTPUT 则 处理所有本机发送的报文。
natnat 表的主要用处是网络地址转换,即 Network Address Translation,缩写为 NAT。做过 NAT 操作的数据包的地址就被改变 了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过 这个表一次。如果第一个包被允许做 NAT 或 Masqueraded,那么余下的 包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个 表,一个一个的被 NAT,而是自动地完成。这就是我们为什么不应该在 这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨 论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地 址,如果需要的话。OUTPUT 链改变本地产生的包的目的地址。 POSTROUTING 链在包就要离开防火墙之前改变其源地址
mangle这个表主要用来 mangle 数据包。我们可以改变不同的包及包头的内 容,比如 TTL,TOS 或 MARK。注意 MARK 并没有真正地改动数据包,它 只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如 tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的 链: PREROUTING,POSTROUTING, OUTPUT,INPUT 和 FORWARD。 PREROUTING 在包进入防火墙之后、路由判断之前改变包,POSTROUTING 是在所有路由判断之后。 OUTPUT 在确定包的目的之前更改数据包。 INPUT 在包被路由到本地之后,但在用户空间的程序看到它之前改变 包。FORWARD 在最初的路由判断之后、最后一次更改包的目的之前 mangle 包。注意,mangle 表不能做任何 NAT,它只是改变数据包的 TTL,TOS 或 MARK,而不是其源目地址。NAT 是在 nat 表中操作的。
rawRaw 表和它的链都在 netfilter 的模块之前,他主要就是用来完成 NOTRACK 功能,如果我们想使用这个功能,需要 2.6 以及之后的内核。 Raw 表里面有 PREROUTING 和 OUTPUT 两条链,在这两条链上他们早于 netfilter 处理报文。PREROUTING 用于到本机的所有报文,而 OUTPUT 链用于本机发送的所有报文。
CommandExampleExample
-A, --appendiptables -A INPUT ...在链尾追加一条规则
-D, --deleteiptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1删除链里面的一条规则
-R, --replaceiptables -R INPUT 1 -s 192.168.0.1 -j DROP替换指定位置的旧规则
-I, --insertiptables -I INPUT 1 --dport 80 -j ACCEPT
-L, --listiptables -L INPUT列出指定链的所有规则
-F, --flushiptables -F INPUT逐条删除所有规则
-Z, --zeroiptables -Z INPUT所有计数器值
-N, --new-chainiptables -N allowed在指定的表上面创建一条新的用户自定义链
-X, --delete-chainiptables -X allowed删除指定的链
-P, --policyiptables -P INPUT DROP为链设置默认的 target(可用的是 DROP 和 ACCEPT),这个 target 称作策略。
-E, --rename-chainiptables -E allowed disallowed这条命令会把这个链的第一个名字改成第二个

Options

OptionExampleExample
-v, --verbose--list, --append, --insert, --delete, --replace这个选项主要和—list 一起使用。假如两个一起用的话,输出 信息就包含接口地址/规则选项以及 TOS 的标记。 --list 命令 还会列出字节和报文统计。其中计数器是以 K、M、G(这里用的 是 10 的幂而不是 2 的幂哦)为单位的。如果想知道到底有多少 个包、多少字节,还要用到选项-x,下面会介绍。如果-v 和-- append、--insert、--delete 或--replace 连用,iptables 会 输出详细的信息告诉你规则是如何被解释的、是否正确地插入等 等
-x, --exact--list使--list 输出中的计数器显示准确的数值,而不用 K、M、G 等估值。注意此选项只能和--list 连用。
-n, --numeric--list使输出中的 IP 地址和端口以数值的形式显示,而不是默认的名 字,比如主机名、网络名、程序名等。注意此选项也只能和-- list 连用
--line-numbers--list--line-number 命令和—list 一起合用,他们用来控制输出数 字。用了这个选项后,每一条规则都带有序号,这样我们就很方 便的知道每条规则的位置。这条命令只能和—list 合用。
-c, --set-counters--insert, --append, --replace这个选项可以让我们在创建或者修改规则的时候,设置字节或者 报文的计数值。语法大致是这个样子的,--set-counters 20 4000,这个命令设置报文计数值为 20 而字节计数值为 4000.
--modprobeAll此选项告诉 iptables 探测并装载要使用的模块。这是非常有用 的一个选项,万一 modprobe 命令不在搜索路径中,就要用到了。有了这个选项,在装载模块时,即使有一个需要用到的模块 没装载上,iptables 也知道要去搜索。

Iptables的匹配(matches)

  • 通用匹配 Kernel 2.3, 2.4, 2.5 and 2.6
MatchExampleExplanation
-p, --protocoliptables -A INPUT -p tcp这个匹配器(match)主要用来检查特定的协议,/etc/protocols
-s, --src, --sourceiptables -A INPUT -s 192.168.1.1/24匹配报文的源地址
-d, --dst, --destinationiptables -A INPUT -d 192.168.1.1匹配报文的目的地址
-i, --in-interfaceiptables -A INPUT -i eth0包进入本地所使用的网络接口来匹配包。要注意这个匹配操作只能用于 INPUT,FORWARD 和 PREROUTING 这三个链
-o, --out-interfaceiptables -A FORWARD -o eth0包离开本地所使用的网络接口来匹配包
-f, --fragmentiptables -A INPUT -f匹配一个被分片的包的第二片或及以后的部分
  • TCP 匹配器(matchs)Kernel 2.3, 2.4, 2.5 and 2.6
MatchExampleExplanation
--sport, --source-portiptables -A INPUT -p tcp --sport 22基于 TCP 包的源端口来匹配包
--dport, --destination-portiptables -A INPUT -p tcp --dport 22目的端口用来匹配报文的目的端口
--tcp-flagsiptables -p tcp --tcp-flags SYN,FIN,ACK SYN匹配指定的 TCP 标记。有两个参数,它们都是列表,列表内部用 英文的逗号作分隔符,这两个列表之间用空格分开。第一个参数 指定我们要检查的标记(作用就象掩码),第二个参数指定“在 第一个列表中出现过的且必须被设为 1(即状态是打开的)的” 标记(第一个列表中其他的标记必须置 0)。也就是说,第一个 参数提供检查范围,第二个参数提供被设置的条件(就是哪些位 置 1)。这个匹配操作可以识别以下标记:SYN, ACK,FIN, RST ,URG,PSH。另外还有两个词也可使用,就是 ALL 和 NONE。 顾名思义,ALL 是指选定所有的标记,NONE 是指未选定任何标 记。这个匹配也可在参数前加英文的感叹号表示取反。例如: 1、iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 表示匹配那 些 SYN 标记被设置而 FIN 和 ACK 标记没有设置的包,注意各标记 之间只有一个逗号而没有空格。
2、--tcp-flags ALL NONE 匹配所有标记都未置 1 的包。 3、iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN 表示匹配 那些 FIN 和 ACK 标记被设置而 SYN 标记没有设置的包,注意和例 1 比较一下。
--syniptables -p tcp --syn这个匹配或多或少算是 ipchains 时代的遗留物,之所以还保留 它,是为了向后兼容,也是为了方便规则在 iptables 和 ipchains 间的转换。它匹配那些 SYN 标记被设置而 ACK 和 RST 标 记没有设置的包,这和 iptables -p tcp --tcp-flags SYN,RST,ACK SYN 的作用毫无二样。这样的包主要用在 TCP 连接 初始化时发出请求。如果你阻止了这样的包,也就阻止了所有由 外向内的连接企图,这在一定程度上防止了一些攻击。但外出的 连接不受影响,恰恰现在有很多攻击就利用这一点。比如有些攻 击黑掉服务器之后安装会一些软件,它们能够利用已存的连接到 达你的机子,而不要再新开一个端口。这个匹配也可用英文感叹 号取反,如:! --syn 用来匹配那些 RST 或 ACK 被置位的包,换 句话说,就是状态为已建立的连接的包。
--tcp-optioniptables -p tcp --tcp-option 16根据选项匹配包。TCP选项是TCP头中的特殊部分,有三个不同的 部分。第一个 8 位组表示选项的类型,第二个 8 位组表示选项的 长度(这个长度是整个选项的长度,但不包含填充部分所占的字 节,而且要注意不是每个TCP选项都有这一部分的),第三部分当 然就是选项的内容了。为了适应标准,我们不必执行所有的选 项,但我们可以查看选项的类型,如果不是我们所支持的,那就 只是看看长度然后跳过数据部分。这个操作是根据选项的十进制 值来匹配的,它也可以用英文感叹号取反。所有的选项都可在 Internet Engineering Task Force里找到。
  • udp 匹配器(matchs)Kernel 2.3, 2.4, 2.5 and 2.6
MatchExampleExplanation
--sport, --source-portiptables -A INPUT -p udp --sport 53基于 UDP 包的源端口来匹配包
--dport, --destination-portiptables -A INPUT -p udp --dport 53基于 UDP 包的目的端口来匹配包
  • ICMP 匹配器(matchs)Kernel 2.3, 2.4, 2.5 and 2.6
MatchExampleExplanation
--icmp-typeiptables -A INPUT -p icmp --icmp-type 8ICMP类型匹配包,类型的指定可以使用十进制数值或相应的名字
  • SCTP 匹配器(matchs)Kernel 2.3, 2.4, 2.5 and 2.6 流控制传输协议(SCTP)
MatchExampleExplanation
--sport,--source-port
--dport,--destination-port

转载于:https://my.oschina.net/xyh592/blog/3099556

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值