iptables详解

基本概念

防火墙Net-wall

  Net-wall 即防火墙
  简单地说,网络防火墙的作用就是对计算机流入或者流出的网络通信进行扫描处理。
  防火墙提供了许多有用的功能,下面是一些例子:

1. 过滤掉经过计算机的垃圾报文和攻击报文
2. 端口转发:外网PC通过端口转发可以访问内网PC
3. 限制特殊站点的访问
4. 限制特定流量的流出
......

防火墙的工作原理: 在内核表里生成一系列防火墙规则,流量数据包经过防火墙时会被规则扫描,如果匹配规则,这执行对应的动作处理。比如丢弃或转发数据包

Iptables和Netfilter简介

  Linux使用一个信息包过滤系统来实现防火墙的功能, 即Iptables/Netfilter过滤系统。
  Iptables和Netfilter是Linux防火墙过滤系统分别在用户态和内核态的表现形式。
+ Iptables: Linux防火墙的“用户态”, 用户管理防火墙的命令工具。  
+ Netfilter: Linux防火墙的“内核态” ,内核中的包过滤防火墙功能体系

 Iptables功能强大、可以用于对防火墙规则的增、删、改、查。防火墙规则是以表的形式存储的, 而这些表集成在内核中。

表、 链、规则

  我们提到防火墙使用一系列规则来扫描处理信息包、在规则被分组以链的形式保存,而链最终存储在内核表中。下面我们要学习一下防火墙的表、链、规则的概念。
  信息包流经计算机的IP层,防火墙在特定位置安装Hook来截取。
这里写图片描述
如图,我们在绿色的五个位置:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 挂载钩子(添加一些防火墙规则),执行特定处理。这五个位置对应五种规则链(注意不一定是五条,不同的规则表在各个位置上都有可能有自己的规则链)。
对于特定的信息包而言,并不是五个位置都要经过,正常信息包只会经过其中几个位置。
+ 以本地为目标的数据包: 经过PREROUOTING链和INPUT链
+ 以本地为源的数据包: 经过OUTPUT链、POSTROUTING链
+ 要被转发的数据包: 经过PREROUTING链、FORWARD链、POSTROUTING链。

  根据防火墙规则的用途,我们将防火墙规则分为到不同的表中。Linux内置一下四个规则表:

Table(表名)Description(描述)
raw 表确定是否对该数据包进行状态跟踪, 内建两条链 PREROUTING链、OUTPUT链
mangle 表这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。内建五条链,即五个位置都有
nat 表主要用于网络地址转换NAT。 会修改报文的源地址或目的地址 。 内建 PREROUTING、POSTROUTING、OUTPUT三条链
filter 表filter表专门用于过滤数据包,内建三条链:INPUT、FORWARD、OUTPUT , 可以对数据包进行DROP、LOG、ACCEPT、REJECT等操作

在执行防火墙规则时,不同的表之间有优先级高低:
优先级:raw > mangle > nat > filter
结合表和链的数据包处理流程
这里写图片描述

非标准链

  前面我们提到,Linux内核内置了5条链PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING, 我们称之为标准链, 在标准链的基础上,用户可以通过iptables创建非标准链。 非标准链 其实是以 标准链(或其他非标准链)的target形式存在的。用户可以自行定义非标准链的链名。

iptables

  iptables可以对主机进行精准的访问控制。
我们先看iptables的一个例子,

iptables语法格式:

iptables [-t table] command [chain] [match] [target/jump]
iptables [表] [管理命令] [链] [匹配规则] [规则处理命令]

为了快速了解iptables的用法,我们先举个简单的例子。这里我们添加一条防火墙规则,使其不应答其他主机的ping报文(从实现上看,就是Drop掉来自其他主机的icmp echo报文。
iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP
  我们添加的规则的功能是drop掉一些报文,因此应该在filter表中添加规则, ping本机,报文的目的地址为本机,因此在INPUT链中添加规则。 -p icmp表示匹配的报文为icmp报文, --icmp-type 8表示icmp报文类型为8(即icmp echo报文)。 -j Drop表示target为Drop。

command

  iptables的command参数表示进行什么样的规则操作(如添加规则、删除规则)
+ -A –append:在所选择的链表末尾添加规则。
+ -D –delete: 从所选链中删除规则。 如iptables -D INPUT --dport 80 -j DROP (也可以根据序号进行删除, 每条链的规则从1开始编号)
+ -R –replace: 在所选链的指定行上替换规则。 如iptables -R INPUT 1 -s 192.168.0.1 -j DROP
+ -I –insert: 根据给出规则序号n, 在规则插入到给定链表的第n条规则。
+ -L –list: 显示所选链的规则。
+ -F –flush: 清空所选的链。
+ -Z –zero: 把指定链的所有计数器清零。
+ -N –new-chain: 根据指定名字建立新的链。 新链的名字不能与已有链 或者 target重名
+ -X –delete-chain: 删除指定的用户自定义链
+ -p –policy:为链设置默认的target。(可用的target似乎只有ACCEPT和DROP,而不能是链名)
+ -E –rename-chain: 重命名链

Option

iptables支持一些选项
+ -v –verbose: 注意着个Option不是输出版本包,而是使iptables的输出更详细。 常与--list, --append, --insert, --delete, --replace等命令使用。 如iptables -L INPUT -v的输出比iptables -L INPUT详细。
+ -x, –exact: 精确的。 与-L list结合使用。
+ –line-numbers: 行号。 与-L --list结合使用
+ -c –set-counters:设置计数器, 与--insert, --append, --replace结合使用
+ –modprobe:此选项告诉iptables探测并装载要使用的模块。

Matches

  防火墙首先要匹配到数据报才能进行处理。Matches(匹配)分为五种:
1.通用匹配: 适用于所有规则
2.TCP匹配: 仅适用于TCP包
3.UDP匹配: 仅适用于UDP包
4.ICMP匹配: 仅适用于ICMP包
5.特殊匹配: 针对状态、所有者、访问的频率限制等。

通用匹配 (generic matches)

  通用匹配有一下Matches
+ * -p –protocol:* 匹配指定协议。
可以使用名称(必须是/etc/protocols中定义的)(不区分大小写, 也可以使用整数值(如1 表示icmp, 6表示tcp,17表示udp)。 缺省是为ALL (这里的ALL不是真的/etc/protocols中的全部,它仅仅包括TCP、UDP、ICMP)。 可以是列表如-p tcp,ucp. 可以用! 取反。
+ -s –src, –source: 根据源地址匹配。
+ -d –dst –destination: 根据目的地址匹配
+ -i –in-interface: 匹配包进入本地使用的网络接口。
+ -o –out-interface:匹配包离开本地使用的网络接口。
+ -f –fragment: 用来匹配一个被分片的包的第二片或及以后的部分。

TCP 匹配

  • –sport, –source-port: 匹配源端口号或服务名。
    (如果是服务名,则应该是在/etc/services中有定义的, 因为iptables会在该文件中查找对应的端口号)。 可以使用连续的端口号 如--source-port 22:80--source-port 80:22效果一样,均匹配端口号为22开始到80的数据包。可以使用!号进行取反操作。
  • –dport, –destination-port: 匹配目的端口号。
  • –tcp-flags: 匹配指定的TCP标记。
      TCP包包含以下标记:SYN, ACK,FIN,RST ,URG,PSH。另外还有两个词 也可使用,就是ALL和NONE. --tcp-flags接两个参数,第一个参数表示检查的标记范围(要检查的标记列表),第二个参数表示在第一个参数列表中的标记哪一些应该被设置为1. 比如:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN表示SYN被设置为1, 而FIN和ACK未被设置的tcp包。!可以用于取反, iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN表示FIN,ACK被设置为1, 而SYN未被设置的tcp包。
  • –tcp-option: 根据匹配包的TCP选项。

UDP 匹配

  • –sport –source-port: 源端口匹配
  • –dport –destination-port: 目的端口匹配

ICMP 匹配

  • –icmp-type” 根据icmp类型匹配包。

显示匹配

处理前面提到的匹配方式外,iptables还支持使用-m –match 做一些特殊的匹配

-m limit
-m mac-source
-m --mark
......

Targets/Jumps

  target/jump决定符合条件的包到何处去,语法是--jump target-j target
Target 主要有一下几种

TargetDescription
ACCEPT接收数据包
DNAT进行网络地址转换, 即重写包的目的IP地址
SNAT源网络地址转换的,就是重写包的源IP地址。
DROP丢弃数据包, 不会想发送者回复错误信息
REJECT丢弃数据包, 与DROP类似,不过会系那个发送者返回错误信息
REDIRECT在防火墙所在的机子内部转发包或流到另一个端口
LOG记录包的有关信息
MARK用于设置包的MARK值,该MARK值仅会在mangle表中被使用
MASQUERADE与SNAT 类似,不过会自动获取网络接口的IP地址
RETURN返回上一级策略。 子链->父链->缺省策略
QUEUE为用户空间的程序或应用软件管理包队列
MIRROR对换IP头部中的源地址和目的地址,不建议使用
TOS用来设置IP头中的Type of Service字段的
TTLTTL可以修改IP头中Time To Live字段的值
ULOG在用户空间记录被匹配的包的信息

ACCEPT

ACCEPT表示接收数据包,该target不带任何选项和参数。 用法:-j
ACCEPT
.
执行了ACCEPT的数据包不会再去匹配当前链的其他规则或者同一个表内的其他规则。 但还要通过(匹配)其他表中的链。

DNAT

  进行网络地址转换, 即重写包的目的IP地址。
  同一个流中,只要有一个包被匹配了,则其他包也自动转换。
  DANT target只能用在nat表的PREROUTING和OUTPUT链中,或者是被这两条链调用的链里。而且,包含DANT target的链不能被除此之外的其他链调用。 

DROP

  丢弃数据包, 而且不会向发送者回复任何信息。

LOG

  记录包的有关信息,主要用于除错。

MARK

用于设置包的MARK值,该MARK值仅会在mangle表中被使用 。
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值