红联Linux门户
Linux帮助

iptables 基本语法

发布时间:2009-04-28 09:44:56来源:红联作者:85030455
iptables 语法概述

iptables -A 添加规则 (在最后一条规则后添加)
-I 添加规则 (默认在第一条规则前添加,可输入指定的规则号)
-D 删除规则 (可匹配条件,也可指定规则号)
-R 替换规则 (可替换内容)
-F 清空规则
-P 设置默认规则 (默认允许或拒绝)
-L 列出规则

匹配条件:
-i 入口
-o 出口
-i <匹配数据进入的网络接口>
例如:
-i eth0
匹配是否从网络接口 eth0 进来

-i ppp0
匹配是否从网络接口 ppp0 进来

-o 匹配数据流出的网络接口
例如:
-o eth0
-o ppp0


-s 源地址
-d 目的地址
-s <匹配来源地址>
可以是 IP、NET、DOMAIN,也可空(任何地址)
例如:
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包

-d <匹配目的地址>
可以是 IP、NET、DOMAIN,也可以空
例如:
-d 202.106.0.20 匹配去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
-d www.abc.com 匹配去往域名 www.abc.com 的数据包


-p 协议类型
可以是 TCP、UDP、ICMP 等,也可为空
例如:
-p tcp
-p udp
-p icmp --icmp-type 类型
ping: type 8 pong: type 0


--sport 源端口
--dport 目的端口
--sport <匹配源端口>
可以是个别端口,可以是端口范围
例如:
--sport 1000 匹配源端口是 1000 的数据包
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
--sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

--dport <匹配目的端口>
可以是个别端口,可以是端口范围
例如:
--dport 80 匹配源端口是 80 的数据包
--dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000)
--dport :3000 匹配源端口是 3000 以下的数据包(含 3000)
--dport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

-m multiport --d/sport 多个端口

注意:--sport 和 --dport 必须配合 -p 参数使用

动作(处理方式):

ACCEPT
-j ACCEPT
通过,允许数据包通过本链而不拦截它.类似 Cisco 中 ACL 里面的 permit

例如:
iptables -A INPUT -j ACCEPT
允许所有访问本机 IP 的数据包通过

DROP
-j DROP
丢弃,阻止数据包通过本链而丢弃它
类似 Cisco 中 ACL 里的 deny

例如:
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止来源地址为 192.168.80.39 的数据包通过本机

SNAT
-j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)
例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10


DNAT
-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)
例如:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


MASQUERADE
-j MASQUERADE
动态源地址转换(动态 IP 的情况下使用)

例如:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址伪装


-m :一些 iptables 的模块,主要常?的有:
state :状态

--state :数据包的状态,主要有:
INVALID :无效的数据包,例如?料损坏的数据包
ESTABLISHED:已经连接的数据包;
RELATED :与本机发送的数据包相关的连接

举例:只要已建立或相关的数据包包就予以通过,只要是不合法封包就丢弃
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
文章评论

共有 28 条评论

  1. 铁虫 于 2017-01-05 20:44:18发表:

    多谢楼主!!!

  2. eddw00001 于 2013-11-21 14:47:29发表:

    感?分享

  3. jt120117 于 2013-11-12 14:24:55发表:

    不错

  4. tht_517 于 2013-06-21 15:30:04发表:

    学习!!!

  5. seaside_city 于 2012-03-14 14:54:10发表:

    iptables 支持一下:0wl;l1

  6. hackerlirui 于 2012-03-11 22:10:34发表:

    谢谢楼主

  7. daen 于 2011-06-28 14:34:38发表:

    太好了

  8. qianji 于 2011-06-28 11:13:54发表:

    简单实用。感谢。。

  9. littercs 于 2011-06-03 20:00:04发表:

    保存了,打印出来,非常感谢!!

  10. shuming 于 2011-05-28 19:30:21发表:

    不错 很详细啊

  11. shari2000 于 2011-02-24 08:25:22发表:

    真的很好,我这两天正好上头要求我弄这个东西,

    跪谢楼主啊!

    能不能再给来几个 例句 讲解下

  12. anlingna 于 2011-02-17 11:59:59发表:

    学习一下。

  13. 花开花败2011 于 2011-02-11 20:03:49发表:

    谢谢分享

  14. tobecto 于 2011-01-21 13:37:07发表:

    楼主写的不错,顶

  15. 芈祖 于 2011-01-17 16:13:23发表:

    现在下载来看看

  16. taotie 于 2010-09-09 10:55:00发表:

    :0)1

  17. gdh7201 于 2010-08-13 09:52:42发表:

    thanks!

  18. panda6401 于 2010-05-29 10:50:13发表:

  19. stuskr 于 2010-05-17 22:53:48发表:

    {:3_111:}收藏了,半夜精神不好,回头研究。嘿嘿,不要见怪我

  20. blue7590 于 2010-05-06 16:05:24发表:

    刚好学习ING,看看

  21. gudujianxfh 于 2010-03-21 00:02:31发表:

    学习,辛苦了!!!

  22. wangyoubang 于 2009-07-14 20:52:32发表:

    支持

  23. lmy5262008 于 2009-05-10 10:49:02发表:

    支持一个,很详细!

  24. angel.wing 于 2009-05-06 22:15:01发表:

    支持 分享

  25. lovemmlzy 于 2009-05-03 17:40:32发表:

    晕了,用你的帖子回一网友呢,不小心发你这了(5ty(

  26. lovemmlzy 于 2009-05-03 17:36:24发表:

    楼主 85030455发表于 2009/4/28 09:44
    iptables 基本语法
    iptables 语法概述

    iptables -A 添加规则 (在最后一条规则后添加)
    -I 添加规则 (默认在第一条规则前添加,可输入指定的规则号)
    -D 删除规则 (可匹配条件,也可指定规则号)
    -R 替换规则 (可替换内容)
    -F 清空规则
    -P 设置默认规则 (默认允许或拒绝)
    -L 列出规则

    匹配条件:
    -i 入口
    -o 出口
    -i <匹配数据进入的网络接口>
    例如:
    -i eth0
    匹配是否从网络接口 eth0 进来

    -i ppp0
    匹配是否从网络接口 ppp0 进来

    -o 匹配数据流出的网络接口
    例如:
    -o eth0
    -o ppp0


    -s 源地址
    -d 目的地址
    -s <匹配来源地址>
    可以是 IP、NET、DOMAIN,也可空(任何地址)
    例如:
    -s 192.168.0.1 匹配来自 192.168.0.1 的数据包
    -s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
    -s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包

    -d <匹配目的地址>
    可以是 IP、NET、DOMAIN,也可以空
    例如:
    -d 202.106.0.20 匹配去往 202.106.0.20 的数据包
    -d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
    -d www.abc.com 匹配去往域名 www.abc.com 的数据包


    -p 协议类型
    可以是 TCP、UDP、ICMP 等,也可为空
    例如:
    -p tcp
    -p udp
    -p icmp --icmp-type 类型
    ping: type 8 pong: type 0


    --sport 源端口
    --dport 目的端口
    --sport <匹配源端口>
    可以是个别端口,可以是端口范围
    例如:
    --sport 1000 匹配源端口是 1000 的数据包
    --sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
    --sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
    --sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

    --dport <匹配目的端口>
    可以是个别端口,可以是端口范围
    例如:
    --dport 80 匹配源端口是 80 的数据包
    --dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000)
    --dport :3000 匹配源端口是 3000 以下的数据包(含 3000)
    --dport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

    -m multiport --d/sport 多个端口

    注意:--sport 和 --dport 必须配合 -p 参数使用

    动作(处理方式):

    ACCEPT
    -j ACCEPT
    通过,允许数据包通过本链而不拦截它.类似 Cisco 中 ACL 里面的 permit

    例如:
    iptables -A INPUT -j ACCEPT
    允许所有访问本机 IP 的数据包通过

    DROP
    -j DROP
    丢弃,阻止数据包通过本链而丢弃它
    类似 Cisco 中 ACL 里的 deny

    例如:
    iptables -A FORWARD -s 192.168.80.39 -j DROP
    阻止来源地址为 192.168.80.39 的数据包通过本机

    SNAT
    -j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
    源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池
    (一组连续的 IP 地址)
    例如:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
    将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10


    DNAT
    -j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
    目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
    (一组连续的 IP 地址)
    例如:
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
    把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


    MASQUERADE
    -j MASQUERADE
    动态源地址转换(动态 IP 的情况下使用)

    例如:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    将源地址是 192.168.0.0/24 的数据包进行地址伪装


    -m :一些 iptables 的模块,主要常?的有:
    state :状态

    --state :数据包的状态,主要有:
    INVALID :无效的数据包,例如?料损坏的数据包
    ESTABLISHED:已经连接的数据包;
    RELATED :与本机发送的数据包相关的连接

    举例:只要已建立或相关的数据包包就予以通过,只要是不合法封包就丢弃
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -m state --state INVALID -j DROP

  27. lovemmlzy 于 2009-05-03 17:12:58发表:

    :0wmjh(1
    支持