跳转至

Iptables


一、Iptables结构

自上而下有由3部分组成:

  • Tables - 表
  • Chains - 链
  • Rules - 规则

1、Tables组成

1.1、Tables

内建4中表, 分别是:

  • Filter - 定义允许或不允许
  • NAT - 定义地址转换
  • Mangle - 修改报文原数据, 例如打标记
  • Raw - ?

优先级从上到下依次降低, 即: raw > mangle > nat > filter

1.2、Filter

Filter是Iptables的默认表,作用于以下3种内建链(Chains):

  • INPUT - 数据包入口, 判断路由并处理来自外部的数据,
  • OUTPUT - 数据包出口, 后接路由判断出口, 向外部发送的数据
  • FORWARD - 不进入用户空间, 将数据转发到本机的其他网卡设备上

1.3、NAT

NAT作用于3种内建链, 分别是:

  • PREROUTING - 路由前, 数据包刚进入网络层
  • OUTPUT
  • POSTOUTING - 路由后, 数据包通过网络接口出去

1.4、Mangle

Mangle则可以作用于以上全部的内建链:

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTOUTING

1.4、Raw

Raw只作用于2个内建链:

  • PREROUTING
  • OUTPUT

2、Chains

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTOUTING

3、Rules

通过Iptables语法创建的规则

4、总结

通过Iptables语法创建的规则存放于Tables中并应用到Chains上面


二、Iptables语法

1、语法规则

格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

-t table: filter、nat、mangle、raw

COMMAND: 定义如何对规则进行管理

chain: 定义如何对规则进行管理, 指定该规则应用到哪个链上, 当定义策略(--policy)时可省略

CRETIRIA: 指定匹配标准

-j ACTION: 指定如何进行处理

2、参数说明

2.1、COMMAND

2.1.1、链管理命令

-P: 设置默认策略, 默认策略一般只有两种, 开(ACCEPT)或者关(DROP)

-F: 清空规则链, 但需要注意每个链的管理权限

-N: 新建一个自定义链

-X: 删除一个自定义链

-E: 重命名一个自定义链

-Z: 清空链及链中默认规则的计数器

2.1.2、规则管理命令

-A: 在末尾增加一个规则

-I num: 把当前规则插入到第几条, num是数字, 省略num表示插入到最前面

-R num: 替换一个规则, 也可以理解为修改一个规则

-D num: 删除第几条规则

2.1.3、查看命令

-L: 查看

-n: 显示为IP否则是域名

-v: 显示详细信息, 可以接多个v, v越多越详细, 例如 -vvv

-x: 在计数器上显示精确值, 不做单位转换

-t table_name: 显示指定表的信息, 例如 -t nat

2.1.4、通用匹配命令

-s: 指定作为源地址匹配, 需使用IP, 不能是主机名, 格式包括IP、IP/MASK、0.0.0.0/0.0.0.0, 同时可以通过!取反

-d: 表示匹配目标地址

-p: 用于匹配协议, 常用的有TCP、UCP和ICMP等

-i eth0: 从eth0网卡流入的数据, 一般用于INPUT和PREOUTING上, eth0可以是其他接口

-o eth0: 从eth0网卡流出的数据, 一般用于OUTPUT和POSTOUTING上, eth0可以是其他接口

2.1.4、扩展(隐式)匹配命令

当使用了通用匹配命令-p后, 针对不同的协议, 有不同的扩展匹配命令, 分别是:

TCP:

  • --dport xx, xx是数字, 表示指定一个目标端口, 例如 --dport 22
  • --dport xx-xx, 指定连续的目标端口, 例如 --dport 22-25
  • --sport xx, 指定源端口
  • --tcp-fiags:TCP的标志位(SYN, ACK, FIN, PSH, RST, URG), 对于它一般要跟两个参数: 检查的标志位和必须为1的标志位

UDP:

  • --dport, 同TCP
  • --sport, 同TCP

ICMP:

  • --icmp-type: echo-request(请求回显), 一般用8 来表示, 所以 --icmp-type 8 匹配请求回显数据包; echo-reply (响应的数据包)一般用0来表示
2..1.5、显示匹配命令

用于开展各种模块, 常用的是-m, 即mulitport, 表示启用多端口扩展, 比如 --dports 21,23,80

2.2、chain

2.3、CRETIRIA

2.4、-j ACTION

常用的ACTION分别是:

  • DROP - 悄悄丢弃
  • REJECT - 明确拒绝
  • ACCEPT - 接受
  • REDIRECT - 重定向, 主要用于实现端口重定向
  • MARK - 打防火墙标记

其他的还有:

  • custom_chain - 转向一个自定义的链
  • RETURN - 返回, 在自定义链执行完毕后使用返回来返回原规则链
  • DNAT
  • SNAT
  • MASQUERADE - 是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上, 例如源地址伪装
  • LOG

3、永久保存

通过iptables命令添加、删除的规则不会永久生效, 重启后恢复原样, 持久化的命令为:

Debian系列: service iptables save 或 /sbin/iptables-save

RedHat系列: /sbin/service iptables save

查看: cat /etc/sysconfig/iptables