你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux防火墙iptables详解

[日期:2016-12-18] 来源:Linux社区  作者:Linux [字体: ]

3 iptables命令

3.1 iptables命令基本语法

iptables [-t table] command [match] [target/jump]

-t table

用来指明使用的表,有三种选项: filter,nat,mangle。若未指定,则默认使用filter表。

command

指定iptables 对我们提交的规则要做什么样的操作。命令都都需要以chain作为参数。

  • -P (--policy) 定义默认策略。
  • -L (--list) 查看规则列表。
  • -A (--append) 在规则列表的最后增加规则。
  • -I (--insert) 在指定的位置插入规则。
  • -D (--delete) 从规则列表中删除规则。
  • -R (--replace) 替换规则列表中的某条规则。
  • -F (--flush) 清楚指定的规则。
  • -Z (--zero) 将指定链(如未指定,则认为是所有链)的所有计数器归零。
  • -X (--delete-chain) 删除指定用户自定义链。

command 选项

-v, --verbose(详细的)

可用此选项的命令:--list, --append, --insert, --delete, --replace

说明:该选项使输出更详细,常与--list 连用。与--list连用时,输出中包括网络接口的地址、规则的选项、TOS掩码、 字节和包计数器,其中计数器是以K、M、G(这里用的是10的幂而不是2的幂)为单位的。若-v 和--append、--insert、--delete 或--replace连用,iptables会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等。

-x, --exact(精确的)

可用此选项的命令:--list

说明:使--list输出中的计数器显示准确的数值,而不用K、M、G等估值。

-n, --numeric(数值)

可用此选项的命令:--list

说明:使输出中的IP地址和端口以数值的形式显示,而不是默认的名字,比如主机名、网络名、程序名等。

--line-numbers

可用此选项的命令:--list

说明:该选项的作用是显示出每条规则在相应链中的序号。对插入新规则很有用。

-c, --set-counters

可用此选项的命令:--insert, --append, --replace

说明:在创建或更改规则时设置计数器,语法如下:--set-counters 20 4000,意思是让内核把包计数器设为20,把字节计数器设为4000。

--modprobe

可用此选项的命令:All

说明:此选项告诉iptables探测并装载要使用的模块。这是非常有用的一个选项,若modprobe命令不在搜索路径中,就要用到了。有了这个选项, 在装载模块时,即使有一个需要用到的模块没装载上,iptables也知道要去搜索。

matches 匹配

匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下所示:

[-i|o 网卡名称]

说明:

-i --in-interface    网络接口名    指定数据包从哪个网络接口进入。

-o --out-interface  网络接口名    指定数据包从哪个网络接口输出。

[-p 协议类型]

-p ---proto          协议类型        指定数据包匹配的协议,如TCP、UDP和ICMP等

[-s 源IP地址|源子网]

-s --source          源地址或子网  指定数据包匹配的源地址

[--sport 源端口号]

--sport          源端口号      指定数据包匹配的源端口号

[-d 目标IP地址|目标子网]

-s --source          目标地址或子网  指定数据包匹配的目标地址

[--dport 目标端口号]

--dport          目的端口号    指定数据包匹配的目的端口号

[-m 模块]

-m --match          匹配的模块      指定数据包规则所使用的过滤模块

Targets/Jumps

target/jump决定符合条件的包到何处去,语法是--jump target或-j target。

target可以被细分为两类,Target和Jump。

  • jump的目标是一个在同一个表内的链。
  • target的目标是具体的操作。

target指定要对包做的操作,比如DROP和ACCEPT。不同的target有不同的结果。一些target会使包停止前进,也就是不再继续比较当前链中的其他规则或父链中的其他规则。而另外一些target在对包做完操作之后,包还会继续和其他的规则比较,如LOG,ULOG和TOS。它们会对包进行记录,然后让包通过,以便匹配这条链中的其他规则。有了这样的target,就可以对同一个包既改变它的TTL又改变它的TOS。有些target必须要有准确的参数(如TOS需要确定的数值),有些就不是必须的,但如果我们想指定也可以(如日志的前缀,伪装使用的端口,等等)。

常用Target简述

ACCEPT

当包满足了指定的匹配条件,就会被ACCEPT,允许包前往下一个目的地。不会再去匹配当前链中的其他规则或同一个表内的其他规则,但包还要通过其他表中的链,可能会被DROP。

DROP

当信息包与具有DROP目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为-j DROP。

若包符合条件,该target就会将target丢掉,也就是说包的生命到此结束,效果就是包被阻塞了。

在某些情况下,这个target会引起意外的结果,因为它不会向发送者返回任何信 息,也不会向路由器返回信息,这就可能会使连接的另一方的sockets因苦等回音而亡:) 解决这个问题的较 好的办法是使用REJECT target,(译者注:因为它在丢弃包的同时还会向发送者返 回一个错误信息,这样另一方就能正常结束),尤其是在阻止端口扫描工具获得更多的信息时,可以隐蔽被 过滤掉的端口等等(译者注:因为扫描工具扫描一个端口时,如果没有返回信息,一般会认为端口未打开或 被防火墙等设备过滤掉了)。还要注意如果包在子链中被DROP了,那么它在主链里也不会再继续前进,不管 是在当前的表还是在其他表里。总之,包死翘翘了。

REJECT

REJECT和DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。target还只能用在INPUT、FORWARD、OUTPUT和它们的子链里,而且包含 REJECT的链也只能被它们调用,否则不能发挥作用。它只有一个选项,是用来控制 返回的错误信息的种类的。虽然有很多种类,但如果你有TCP/IP方面的基础知识,就很容易理解它们。

拦阻该数据包,并返回数据包通知对方,可以返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。 范例如下:

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

RETURN

在规则中设置的RETURN目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如INPUT之类的主链,则使用该链的默认策略处理信息包。它被指定为-jump RETURN。

结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

REDIRECT

将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。这个功能可以用来实作透明代理或用来保护web服务器。

例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081

LOG

将数据包相关信息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续比对其它规则。

例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

MASQUERADE

改写封包来源IP为防火墙的IP,可以指定port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP服务器指派的,这个时候 MASQUERADE 特别有用。

例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

SNAT

改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。

例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

DNAT

改写数据包包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。

例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100

MIRROR

镜像数据包,也就是将来源 IP与目的地IP对调后,将数据包返回,进行完此处理动作后,将会中断过滤程序。

QUEUE

中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用.......等。

MARK

将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。

例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款