一:Netfilter
Netfilter是是集成到Linux内核协议栈中的一套防火墙系统。它有4种类型,包括filter、nat、mangle、raw,具体是哪一种表,取决于数据包的处理方式。4种类型如下表所示:
表类型 | 说明 | 包含的链接 |
filter | 显示所有区域及其配置信息的列表 | INPUT、FORWARD、OUTPUT |
nat | 显示默认区域 | PREROTING、OUTPUT、POSTROTING |
mangle | 将默认区域更改为指定区域 | PREROTING、OUTPUT(2.4.18版本之后新增INPUT、FORWARD、POSTROTING)、 |
raw | 执行命令指定区域 | PREROUTING、OUTPUT |
每个表都有不同类型的链接,称为规则集。链接种类的选择取决于数据包的访问点。链接类型及说明如下表所示。
链接类型 | 说明 |
INPUT | 应用于传入数据包到本地主机的链接 |
OUTPUT | 应用于从本地主机输出数据包的链接 |
FORWARD | 应用于通过本地主机转发数据包的链接 |
PREROUTING | 在路由决定之前应用的链接 |
POSTORUTING | 在路由决定之后应用的链接 |
要转发的数据包(FORWARD)数据包,必须将内核参数net.ipv4.ip_forward的值设为1.用户可以为链接指定规则,在规则种也可以使用“指定地址以外的地址”这种“否定”方式。可以为链接种设置的规则指定字段有:协议、源地址、目标地址、源端口、目标端口、TCP标志、接收端口、传输接口和状态。数据包与链接中设置的规则匹配时的处理方法有目标指定,可以指定的目标根据表和链接不同而不同。主要目标如下表所示:
指令和设置值 | 指令和设定值 | 指令和设定值 | 说明 |
ACCEPT | 全部 | 全部 | 权限 |
REJECT | 全部 | INPUT、OUTPUT、FOEWARD | 拒绝,返回ICMP错误信息 |
DROP | 全部 | 全部 | 丢弃,不返回ICMP错误信息 |
DNAT | nat | PREROUTING、OUTPUT | 重写目标地址 |
SNAT | nat | POSTROUTING | 重写源地址 |
MASQUEERADE | nat | POSTROUTING | 重写源地址,动态地址设置 |
LOG | 全部 | 全部 | 记录日志,继续转到下一条规则而不结束 |
用户定义链 | 全部 | 全部 | - |
Netfilter可以让用户完全控制防火墙配置和信息包过滤,也就是说我们可以制定自己的规则来满足需求。
二:iptables和Netfilter的关系
iptables是应用层,其实质是一个定义规则的配置工具,而核心的数据包拦截和转发是Netfilter负责的。iptables命令可以指定一个表和一个链接,并且可以在链接中设置一个或多个规则。Netfilter顺序地将链表中设置的多个规则应用于数据包来执行过滤。如果规则匹配,则该规则中设置的目标(ACCEPT、REJECT、DROP等)进行处理,如果规则不匹配,则进行下一个规则,对于不符合任何规则的分组,都适用于链接默认策略(ACCEPT、DROP)。
格式:iptables [-t 表 ] {子命令} 链接规则 -j 目标
iptables命令的子命令如下表所示。
子命令 | 说明 |
-append -A | 追加到现有规则的末尾 |
--insert -I | 指定要添加到现有规则开头的规则编号时,将其插入到指定编号处 |
--list -L | 显示规则,如果指定了链接,则显示该链接规则,如果未指定链接,则显示所有链接的规则 |
--delete -D | 删除指定链接的规则 |
--policy -P | 指定链接的默认策略,指定ACCEPT或DROP |
规则匹配条件说明如下表所示。
指定项目 | 指定匹配条件选项 | 说明 |
协议 | [!]-p 、--protocal协议 | 指定top、udp、icmp、all |
源地址 | [!]-s、--source源地址 | 指定源地址,如果未指定则指定所有地址 |
目标地址 | [!]-d、--destination | 指定目标地址。如果未指定则指定所有地址 |
源端口 | [!]--sport 端口号 -m multiport | PREROUTING、OUTPUT |
[!]--source-ports、--sports端口 | 指定源端口,如果未指定则指定所有端口 | INPUT、FOTWARD、OUTPUT |
目标端口 | [!]--dport 端口号 -m mutiport | PREROUTING、OUTPUT、POSTROUTING |
[!]destination-ports、--spors端口 | 指定目标端口或所有端口(如果未指定) | PREROUTING、OUTPUT(2.4.18版本之后,新增INPUT、FORWARD、POSTROUTING) |
TCP标志 | [!]--tcp-flags 参数1 参数2 | PREROUTING、OUTPUT |
[!]--syn | --tcp-flags指定参数1评估的标志,以逗号分隔,参数·2设置 | PREROUTING、OUTPUT |
接收接口 | [!]-i、--in-interface网络接口 | 可以在INPUT、FORWARD、PREROUTING中指定 |
传输接口 | [!]-o、--out-interface网络接口 | 可以在OUTPUT、FORWARD、POSTROUTING中指定 |
状态 | [!]--state | 连接跟踪机制可以确定连接状态 |
CentOS中单独设置iptables命令的方法如下:
- 安装iptables.service软件包:yum install iptables.service。
- 禁用firewalld.service:systemctl disable firewalld.
- 启用iptables.service:systemctl enable iptables。
- 重启系统:systemctl reboot。
- Ubuntu系统单独设置iptables命令的方法如下。
- 安装iptables.service软件包:apt install iptables-persistent。
- 禁用ufw: ufw disable。
- 重启系统:systemctl reboot。
以Ubuntu系统为例,设置iptables规则,如下图所示。指定22端口号表示允许项目的端口22号发送分组;指定80端口表示接收人允许端口的数据包到80号,指定iptables -P INPUT DROP命令将默认策略设置为丢弃,拒绝22和80以外的数据包,使用iptbales -L命令指定-v选项可以显示详细的设置状态。
通过以下的命令,如果可以看到允许接收来自ssh和http的数据包,说明之前设置的iptables规则已成功。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP
iptables -L -v
在CentOS7以后,系统使用firewalld服务替代了iptables服务,但是依然可以使用iptables来管理内核的Netfilter。其实iptables服务和firewalld服务都是真正的防火墙。,只是用来定义防火墙规则的管理工具,将定义好的规则交由内核中的Netfilter(网络过滤器)来读取,从而实现真正的防火墙功能。
标签:iptables,--,规则,指定,Linux,数据包,链接,Netfilter From: https://blog.51cto.com/u_15912723/8304704