linux系统之iptables其二命令注解

  如果对iptables相关概念不甚了解,请查看前一篇博文。

  一、命令部分

  #命令格式:

  iptables [-t table] {-A|-D} chain rule-specification

  iptables [-t table] -I chain [rulenum] rule-specification

  iptables [-t table] -R chain rulenum rule-specification

  iptables [-t table] -D chain rulenum

  iptables [-t table] -S [chain [rulenum]]

  iptables [-t table] {-F|-L|-Z} [chain [rulenum]]  [options…]

  iptables [-t table] -N chain

  iptables [-t table] -X [chain]

  iptables [-t table] -P chain target

  iptables [-t table] -E old-chain-name new-chain-name

  注

  -t :对那一个表进行操作,如果不指定将以filter为默认操作表。(相关表那些、功能、内核模块,请参照前一篇博文说明)

  1、命令注解

  命令 -A (append:追加)

  样例 #iptables -A INPUT  -p tcp –dport 80 -j DROP

  注解 这个选项表示在链尾追加一条规则,这条规则将最后才能被检查到。

  命令 -D (delete:删除)

  样例 #iptables -D INPUT -p tcp –dport 80 -j DROP,#iptables -D INPUT 1

  注解

  这条命令删除链里面的一条规则,我们有两种方式输出一条规则,第一是输入一条完整的规则,另外就是通过序号删除。假如你用第一种方法删除,那么你输入的规则必须和你想删除的规则完全一致。如果你想用第二种方法来删除规则,你必须制定删除的序号,链的序号从顶部开始从1编号,如果此链当前编号为1,删除后第二条的编号将变为1。

  命令 -I (insert:插入)

  样例 #iptabels -I OUTPUT  1 -p tcp –dprot 443 -j ACCEPT

  注解 在链里面插入一条规则,这条规则会在指定的地方插入,如果不指定默认为第一个编号上插入。

  命令 -R (replace:替换 )

  样例 #iptables -R INPUT 1 -s 192.168.0.1 -j DROP

  注解

  这条命令替换指定位置的旧规则,它和 delete 工作方式一样的,但是不同在于它不完全删除这条规则,而是替换上一条新的规则。

  命令 -S(显示)

  样例 #iptables -S

  注解 显示filter表中所有链上的规则

  命令 -L(list:列出)

  样例 #iptables -L

  注解 这条命令列出指定链的所有规则

  命令 -F (flush:清空)

  样例 #iptables -F INPUT

  注解

  这个命令情况链上的所有规则,它等同于逐条删除所有规则,只是它更快。没有指定参数的话,他会把指定表上面所有链的规则删除干净。

  命令 -Z (zero:清零)

  样例 #iptables -Z OUTPUT

  注解 将默认表中的 OUTPUT链的计数器清空

  命令 -N (new:新建) chain

  样例 #iptables -N chain_out

  注解

  这个命令让在指定的表上面创建一条新的用户自定义链,请注意,名字不能和系统内建的重合

  命令 -P –policy (策略)

  样例 #iptables -P INPUT DROP

  注解

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

  命令 -E (rEname-chain)

  样例 #iptables -E allowed disallowed

  注解 这条命令会把这个链的第一个名字改成第二个,只是改变名称,内容不会变。

  命令 -X (delete-chain)

  样例 #iptables -X chain_out

  注解

  这条命令会从表上删除指定的链,要想删除这个链,这儿必须没

  有任何规则关联到这个链。

  2、选项注解

  选项

  -x, (–exact:更精确)

  样例 #iptables -L -n -x

  注解

  使–list 输出中的计数器显示准确的数值,而不用 K、M、G 等

  估值。注意此选项只能和–list 连用。

  选项 -n, (–numeric:数值)

  样例 #iptables -L -n -x -v

  注解

  使输出中的 IP 地址和端口以数值的形式显示,而不是默认的名字,比如主机名、网络名、程序名等。注意此选项也只能和–list连用

  选项 -v,(–verbose:以详细格式显示)

  样例 #iptables -L -n -x -v或 #iptables -L -n -x -vv

  注解

  iptables 会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等

  等(-vv比-v要详细)

  选项 –line-numbers

  样例 #iptables -L -n –line-number

  注解

  每一条规则都带有序号,很方便的知道每条规则的位置.

  3、匹配规则

  ⑴、通用匹配

  匹配符

  -p, –protocol(协议)

  样例 #iptables  -t INPUT -p tcp –dport 80 -j ACCEPT

  注解

  这个匹配器(match)主要用来检查特定的协议;

  它主要有以下几种使用方式:

  1. 制定协议的名称,它必须在/etc/protocols 里面定

  义,不然就会报错。

  2.你可以指定一个整数值,例如ICMP 就是 1,TCP

  就是 6 而 UDP 是 17.(-p 6 -p 17)

  3. 另外你可以指定为 ALL,ALL 表示仅仅匹配

  ICMP/TCP/UDP 协议,这个是默认配置,数值为 0.

  4. 可以是协议列表,以英文逗号为分隔符,如:

  udp,tcp

  5. 最后我们还可以对协议取反,例如!TCP 表示匹配

  UDP/ICMP,当然从这儿我们也可以看到取反只能针

  对 TCP/UDP/ICMP 协议。

  匹配符 -s, –src, –source (源地址)

  样例 #iptables -A INTPUT -s 192.168.1.34 -p tcp -j ACCEPT

  注解

  它不仅可以匹配单台主机,还以匹配一个网络(ip/mask)

  匹配符 -d, –dst, –destination (目标地址)

  样例 #iptables -A OUTPUT -d 192.168.1.1 -p tcp j DROP

  注解 匹配报文的目的地址,用法和源地址匹配一致。

  匹配符 -i, –in-interface

  样例 #iptables -A INPUT -i eth0 -p tcp -j ACCEPT

  注解

  包进入本地所使用的网络接口来匹配包。要注意这个匹配操作

  只能用于 INPUT,FORWARD 和 PREROUTING 这三个链.(注:接口前加英文感叹号表示取反,如 -i ! eth0,注意有空格)

  匹配符 -o, –out-interface

  样例 #iptables -A FORWARD -o eth0 -p tcp -j ACCEPT

  注解

  以包离开本地所使用的网络接口来匹配包。使用的范围和指定接

  口的方法与–in-interface 完全一样。

  ⑵、隐含匹配(适用于tcp/udp)

  匹配符 –sport, –source-port (源端口)

  样例 #iptables -A INPUT -p tcp –sport 22 -j ACCEPT

  注解

  1、不指定此项,则暗示所有端口。

  2、使用服务名或端口号,但名字必须是在/etc/services中定义

  的

  3、可以使用连续的端口,如果两个号的顺序反了也没关系,如:–source-port 80:22 这和 –source-port 22:80 的效果一样。

  4、可以省略第一个号,默认第一个是 0,如:–source-port :80 表示从0到80的所有端口。

  5、也可以省略第二个号,默认是 65535,如:–source-port 22:表示从 22 到 65535 的所有端口.

  6、在端口号前加英文感叹号表示取反,注意空格,如:–source-port ! 22 表示除 22 号之外的所有端口;–source-port ! 22:80 表示从 22 到 80(包括 22 和 80)之外的所有端口。

  注:此处不能匹配不连续的端口

  匹配符 –dport, –destination-port (目的端口)

  样例 #iptables -A INPUT -p tcp –dport 22 (此处没有指定target表示以链的默认的策略为准)

  注解 目的端口用来匹配报文的目的端口,用法和源端口一样

  匹配符 –syn(tcp三次握手的第一次)

  样例 #iptables -A INPUT -d 172.16.32.45 -t tcp –tcp-flags –syn -j ACCEPT

  注解 这里用到的是TCP封包中的控制标志来限定数据。(常用的有syn,ack,fin)

  匹配符 all(此处代表–tcp-flags的六个标志为1,none则表示全为0)

  样例

  #iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

  或

  #iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP

  注解 拒绝tcp标志位全部为1或为0的非法tcp的报文

  (3)、icmp

  匹配符 –icmp-type (icmp报文的类型)

  样例 #iptables -A INPUT -p icmp –icmp-type 8

  注解

  根据ICMP类型匹配包,类型的指定可以使用十进制数值或相应的

  名字。(常用的有两个8表示请求,0表示响应)

  (4)、显示匹配(-m)

  匹配符 multiport –dports (多目的端口)(此处可以是多个不相连的多个端口(<15))

  样例 #iptables -I INPUT -d 172.16.32.7 -p tcp -m multiport –dports 22,80 -j ACCEPT

  注解 到达172.16.3.27协议是tcp的使用是22和80的端口程序放行

  匹配符 multiport –sports (多源端口)

  样例 #iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport –sports 22,80 -j ACCEPT

  注解 从172.16.100.7使用22,80端口出去的程序放行

  匹配符 iprange –src-range (基于范围的源地址)

  样例

  #iptables -A INPUT -p tcp -m iprange –src-range

  192.168.1.13-192.168.2.19

  注解 –src-range 用来匹配一整段的源地址也可以对地址取反,例 iprange ! –src-range

  匹配符 iprange –dst-range (基于范围的目的地址)

  样例

  #iptables -A INPUT -p tcp -m iprange –dst-range

  192.168.1.13-192.168.2.19

  注解 匹配一整段的目的地址,用法和源一致

  匹配符 [!] –connlimit-above(限定并发连接数)

  样例 #iptables -I INPUT -d 192.168.2.34 -p tcp -dport 80 -m connlimit –connlimit-above 5 -j DROP

  注解 限定并发连接数

  匹配符 limit –limit(报文速率控制)

  样例 #iptables -A INPUT -m limit –limit 3/(hour|second|minute|day)

  注解 单位时间内通过的报文数(通常与limit-burst同用)

  匹配符 limit-burst

  样例 #iptables -A INPUT  -m iprange –src-range 172.16.32.1-172.16.32.100 -p tcp -m limit –limit 2/minute  –limit-burst 2

  注解

  这里定义的是limit的峰值,就是在单位时间内最多可匹配几个报文

  匹配符 time(指定时间范围)

  类别

  -datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

  –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

  –timestart hh:mm[:ss]

  –timestop hh:mm[:ss]

  –weekdays day[,day…]

  样例

  #iptables -A INPUT -d 172.16.32.7 -p tcp –dport 901 -m time –weekdays Mon,Tus,Wed,Thu,Fri –timestart 08:00:00 –time-stop 18:00:00 -j ACCEPT

  注解 时间范围的限定(天、小时、周),此项是可以取反的。

  匹配符 string  –algo {kmp|bm}{–string "STRING"|–hex-string “HEX-STRING”}

  样例 #iptables -A INPUT -p tcp –dport 80  -m string  –algo kmp ! –string  "admin" -m state –state ESTABLISHED -j ACCEPT

  注解

  过滤指定的字符–string "STRING":要查找的字符串或–hex-string "HEX-STRING"先将查找的字符,编码成16进制格式再比较

  匹配符 state –state

  样例 iptables -A INPUT -m state –state NEW,RELATED,ESTABLISHED

  注解

  指定要匹配包的的状态,当前有4 种状态可用:INVALID,ESTABLISHED,NEW和RELATED。

  INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题。

  ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。

  NEW表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关。RELATED说明包正在建立一个新的连接,这个

  连接是和一个已建立的连接相关的.

  四、注意事项

  1、规则相关

  (1)、对于进入的状态为ESTABLISHED都应该放行;

  (2)、对于出去的状态为ESTABLISHED都应该放行;

  (3)、严格检查进入的状态为NEW的连接;

  (4)、所有状态为INVALIED都应该拒绝;

  2、连接相关

  (1)、调整连接追踪功能所能容纳的追踪的最大连接数:

  # cat /proc/sys/net/nf_conntrack_max

  (2)、定义了连接追踪的最大值,因此,建议按需调大此值;

  # cat /proc/net/nf_conntrack

  (3)、记录了当前追踪的所有连接

  # cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

  3、如何放行工作于被动模式下的FTP服务?

  注:ftp的工作模式完全取决于客户端,具体原因请查看FTP主被模式

  (1)、确保iptables加载ftp协议支持的模块:ip_nat_ftp, nf_conntrack_ftp

  编辑/etc/sysconfig/iptables-config文件,定义如下参数:

  IPTABLES_MODULES="ip_nat_ftp nf_conntrack_ftp"

  (2)、放行请求报文的RELATED和ESTABLISHED状态,放行响应报文的ESTABLISHED状态;

  #modprobe ip_nat_ftp

  #modprobe nf_conntrack_ftp

  #iptables -P INPUT DROP

  #iptabls -P OUTPUT DROP

  #iptables -I INPUT -d 172.16.32.45 -p tcp –dport 21 -j ACCEPT

  #iptables -I OUTPUT -s 172.16.32.45 -p tcp –sport 21 -j ACCEPT

  #iptables -I INPUT -d 172.16.32.45 -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT

  #iptables -I OUTPUT -s 172.16.32.45 -p tcp -m state –state ESTABLISHED -j ACCEPT

  4、保存规则

  service iptables save保存防火墙规则,保存的位置为/etc/sysconfig/iptables文件中。

  iptables-save > /path/to/some_rulefile把规则写入到某个文件中。

  iptables-restore</path/from/some_rulefile输入重定向。

 

上一篇:安卓防火墙 PS DroidWall

下一篇:pentesterlab学习记录-week1