目录
1 Linux网络防火墙命令的关系图
2 iptables的概念
2.1 链(chain)
2.2 表(table)
2.3 规则(rule)
2.3.1 匹配(match)
2.3.2 目标(target)
2.4 链接追踪 Connection Tracking
3 iptables的开启关闭
4 实验环境
1 Linux网络防火墙命令的关系图
下图是Linux网络防火墙命令的关系图,Ubuntu的ufw已经学习过了,今天来做一下iptables试验。
CentOS Ubuntu★ openSUSE
+--------------+ +------------+ +---------------------+ -*-
| firewall-cmd | | ufw | | SUSEfirewall2 | |
+--------------+ +------------+ +---------------------+ |
用户空间
+-----------------------------------------------------------+ |
| iptables command | |
+-----------------------------------------------------------+ -*-
+-----------------------------------------------------------+ -*-
| | |
| OS(Netfilter) | 内核空间
| | |
+-----------------------------------------------------------+ -*-
2 iptables的概念
iptables可以检测、修改、转向、分组和丢弃IPv4数据包。看名字,顾名思义,是工作在网络层。要想理解iptables能做什么,然后什么时候用iptables,先得对iptables有个系统的概念。
iptables可以检测、修改、转向、分组和丢弃IPv4数据包。看名字,顾名思义,是工作在网络层。要想理解iptables能做什么,然后什么时候用iptables,先得对iptables有个系统的概念。
结合上面的iptables的数据流来说一下iptables的概念。
2.1 链(chain)
iptables有5条链,按照数据经过的顺序排列。
PREROUTING-------数据进入网卡,进入路由前调用的链INPUT------------------数据经过路由后,进入本地程序前调用的链FORWARD-----------数据经过路由后,转发出去之前调用的链OUTPUT--------------本地程序产生的数据经过路由前调用的链POSTROUTING----经过路由后,从网卡发出之前调用的链
上面的5链是netfilter的内置链(built-in),用户可以自己创建链。
2.2 表(table)
iptables有5张表(不是4表5链)
raw(不常用)
从上图可以看出,raw的优先级最高,有两个内置链。
PREROUTING OUTPUT
因为这两个链都是在Connection Tracking之前被调用,所以系统跟踪不了,也就是 用conntrack命令监视不到。
mangle(不常用)
该表用于专门的数据包更改。有所有的5个内置链。
filter
首先,这是iptables的命令的默认表,也就是不指定表的时候,默认用filter。过滤用的。
有三个内置链。
INPUT FORWARD OUTPUT
security(基本不用)
SELinux security相关的。有三个内置链。
INPUT FORWARD OUTPUT
nat
用来做网络地址转换。有除了FORWARD以外的4个内置链。
iptables有5条链,按照数据经过的顺序排列。
- PREROUTING-------数据进入网卡,进入路由前调用的链INPUT------------------数据经过路由后,进入本地程序前调用的链FORWARD-----------数据经过路由后,转发出去之前调用的链OUTPUT--------------本地程序产生的数据经过路由前调用的链POSTROUTING----经过路由后,从网卡发出之前调用的链
上面的5链是netfilter的内置链(built-in),用户可以自己创建链。
iptables有5张表(不是4表5链)
raw(不常用)
从上图可以看出,raw的优先级最高,有两个内置链。
PREROUTING OUTPUT
因为这两个链都是在Connection Tracking之前被调用,所以系统跟踪不了,也就是 用conntrack命令监视不到。
mangle(不常用)
该表用于专门的数据包更改。有所有的5个内置链。
filter
首先,这是iptables的命令的默认表,也就是不指定表的时候,默认用filter。过滤用的。
有三个内置链。
INPUT FORWARD OUTPUT
security(基本不用)
SELinux security相关的。有三个内置链。
INPUT FORWARD OUTPUT
nat
用来做网络地址转换。有除了FORWARD以外的4个内置链。
| raw | mangle | filter | security | nat | |
| PREROUTING | ● | ● | ● | ||
| INPUT | ● | ● | ● | ● | |
| FORWARD | ● | ● | ● | ||
| OUTPUT | ● | ● | ● | ● | ● |
| POSTROUTING | ● | ● |
据上面的表格来看,主要用的就是filter表和nat表,也就是7条链。
2.3 规则(rule)
规则在链里,每条规则包含匹配的条件(match),和匹配条件后动作(target)。
2.3.1 匹配(match)
| 匹配条件 | 例子 |
|---|---|
| 按协议匹配 | iptables -A INPUT -p tcp -j REJECT 所有TCP协议都拒绝 |
| 按源IP匹配 | iptables -A INPUT -s 192.168.0.0/24 -j REJECT 所有来自192.168.0网段的访问都拒绝 |
| 按目的IP匹配 | iptables -A OUTPUT -d 192.168.0.0/24 -j REJECT 所有去往192.168.0网段的访问都拒绝 |
| 按入网卡设备匹配 | iptables -A INPUT -i ens33 -j [TARGET] |
| 按出网卡设备匹配 | iptables -A FORWARD -o ens33 -j [TARGET] |
| 按源端口匹配 | iptables -A INPUT -p [tcp|udp] --sport 22 -j [TARGET] |
| 按目的端口匹配 | iptables -A INPUT -p [tcp|udp] --dport 22 -j [TARGET] |
还有各种各样的匹配条件,可以参照链接match
2.3.2 目标(target)
target就是匹配后执行的处理,常用的target有下列几种:
| target | 处理内容 |
|---|---|
| ACCEPT | 匹配条件后,放行。 当前链的后面的规则,还有当前链所在的表的剩余链都不会执行。 |
| LOG | 匹配条件后,写入日志 |
| DROP | 匹配条件后,丢弃包(因为不会返回信息,发送方一直是等待状态,最好不用,可以用下面的REJECT) |
| REJECT | 匹配条件后,丢弃包,并且会通知送信方,访问被拒(跟ufw里一样) REJECT 目标仅在 INPUT、FORWARD 和 OUTPUT 链或其子链中有效 |
| RETURN | 如果是在子链中,匹配条件后,无视这条rule,如果是在主链中,则采取默认策略(ACCEPT,REJECT等等) |
| REDIRECT | 匹配条件后,做端口转换 REDIRECT 目标仅在 nat 表的 PREROUTING 和 OUTPUT 链中有效 |
| DNAT | 匹配条件后,做地址转换 DNAT 目标仅在 nat 表中的 PREROUTING 和 OUTPUT 链中有效 |
| NOTRACK | 匹配条件后,数据不被跟踪。也就是用conntrack命令 看不到记录。 |
还有很多target,不常用,再有就是跳转到自定义的子链。
其它详细的可以参照target
2.4 链接追踪 Connection Tracking
# 用conntrack命令来跟踪数据包的路线
# Centos
yum install conntrack-tools
# Ubuntu
apt install conntrack
# 用法
conntrack -E
3 iptables的开启关闭
Centos
用firewalld的开关来管理iptables的开关。
Ubuntu
用ufw的开关来管理iptables的开关。
4 实验环境
192.168.0.0/24
访问用机器(Centos) --------------------- iptables设定机器(Ubuntu)
192.168.0.211 192.168.0.203
试验待续。



