Iptables的表链关系解析
Iptables的5条链分别是:
PREROUTING 路由前
INPUT 发到本机某进程的报文
OUTPUT 本机某进程发出的报文
FORWARD 转发
POSTROUTING 路由后
Iptables的4张表:
filter 负责过滤工程,FW
nat 网络地址转换功能 network address translate
mangle 拆解报文,做出修改,并重新封装
raw 关闭nat表上启用的连接追踪机制
链表关系
PREROUTING 的规则可存在于:nat表、mangle表、raw表
INPUT 的规则可存在于:mangle表、filter表(nat表centos6没有,centos7有)
FORWARD 的规则可存在于:mangle表、filter表
OUTPUT 的规则可存在于:raw表、mangle表、nat表、filter表
POSTROUTING 的规则可存在于:mangle表、nat表
实际操作我们用的更多的是表链关系
表链关系(表中的规则可被哪些链使用)
raw :PREROUTING、OUTPUT
mangle :PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat :PREROUTING、OUTPUT、POSTROUTING (INPUT链 centos7有,centos6没有)
filter :INPUT、FORWARD、OUTPUT
用表示出来就是:
这个不用硬记,有方法的(iptables -t 表 -L)
当4张表出现在同一条链上的时候,优先级别是:
raw—>mangle—->nat—>filter
4张表只可能同时间出现在OUTPUT链上。
规则链名包括:
• {C}INPUT链:处理输入数据包。
• {C}OUTPUT链:处理输出数据包。
• {C}PORWARD链:处理转发数据包。
• {C}PREROUTING链:用于目标地址转换(DNAT),路由前。
• {C}POSTOUTING链:用于源地址转换(SNAT),路由后。
动作包括:
• {C}accept:接收数据包。
• {C}DROP:丢弃数据包。
• {C}REDIRECT:重定向、映射、透明代理。
• {C}SNAT:源地址转换。
• {C}DNAT:目标地址转换。
• {C}MASQUERADE:IP伪装(NAT),用于ADSL。
• {C}LOG:日志记录。
iptables里面的dport和sport
首先先来翻译一下dport和sport的意思:
dport:目的端口
sport:来源端口
初学iptables比较容易迷糊,但是我尽量用通俗的语言给你讲解。
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口
dport 和sport字面意思来说很好理解,一个是数据要到达的目的端口,一个是数据来源的端口。
但是在使用的时候要分具体情况来对待,这个具体情况就是你的数据包的流动行为方式。(INPUT还是OUTPUT)
比如你的例子:/sbin/iptables -A INPUT -p tcp –dport 80 -j ACCEPT
注意里面的INPUT参数,这个代表你的这条数据包的进行的 “进入” 操作!
那么你的这条数据包可以这么描述:
1.这是一条从外部进入内部本地服务器的数据。
2.数据包的目的(dport)地址是80,就是要访问我本地的80端口。
3.允许以上的数据行为通过。
总和:允许外部数据访问我的本地服务器80端口。
再看第2条列子:/sbin/iptables -A INPUT -p tcp –sport 80 -j ACCEPT
1.这是一条从外部进入内部本地服务器的数据。
2.数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。
3.允许以上数据行为。
总结:允许外部的来自80端口的数据访问我的本地服务器。
input方式总结: dport指本地,sport指外部。
如果你的数据包是(OUTPUT)行为,那么就是另外一种理解方式:
比如:
/sbin/iptables -A OUTPUT -p tcp –dport 80 -j ACCEPT
1.这是一条从内部出去的数据。
2.出去的目的(dport)端口是80。
3.允许以上数据行为。
output行为总结:dport只外部,sport指本地。
栏目列表
推荐阅读
- 阿里云运维命令行 Terraform 系列
- 阿里云 控制台运维命令行 快照操作方式
- 阿里云 控制台运维命令 复制安全组
- 如何霸气的安装CDH大数据环境(附个人见解)
- 阿里云命令行 执行cloud-init --versions命令时提示“No module named 'requests.packages.urllib3'”
- 解决Centos 7 环境中 ifconfig: command not found
- 如何使用 Pyenv 在 Linux 实现 Python的完美版本控制
- Linux 下的 max_backlog参数设定
- 阿里云 控制台运维命令 集群
- Centos 7 自建本地yum仓库的实例
- 阿里云命令行 创建OSS存储Bucket
- Linux 下的TIME-WAIT sockets参数设定
- 如何定位查找MySQL数据占用