UPlooking home slide

当前位置

iptables防火墙基础

netfilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态/内核空间的防火墙功能体系"

iptables:指的是用来管理linux防火墙的命令程序,属于用户态/用户空间的防火墙管理体系。

iptables属于应用层,属于一个定义规则的配置工具,核心的数据包响应和处理,包括拦截和转发等操作属于netfilter,netfilter属于linux系统核心层内部的一个数据包处理模块。

iptables作用:为包过滤机制的实现提供规则,通过各种不同的规则告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理,iptables采用表和链的分层结构

规则表:

filter表:用于过滤;根据具体的规则要求如何处理数据包。对应的内核模块为:iptables_filter

包含的链:INPUT、FORWARD、OUTPUT

nat表:用于地址转换;用于修改数据包的IP地址、端口号等信息。对应的内核模块为:iptables_nat

包含的链:PREROUTING、POSTROUTING、OUTPUT

mangle表:用于修改数据包;修改数据包的服务类型、生存周期等,用于实现流量整形、策略路由等高级应用。对应的内核模块为:iptables_mangle

包含的链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw表:不再让iptables做数据包的连接跟踪处理,跳过其他表,提高性能。对应的内核模块为:iptables_raw

包含的链:OUTPUT、PREROUTING

规则链:

INPUT链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。

OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

FORWARD链:当接收到需要通过防火墙中转发给其他地址的数据包(转发)时,应用此链中的规则。

PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。

POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。

注意:INOUT、OUTPU链主要用在"主机型防火墙"中,主要针对服务器本机进行保护的防火墙

而FORWARD、PREROUTING、POSTROUTING链多用在"网络型防火墙"中,如使用linux防火墙作为网关服务器等

应用顺序

当数据包到达防火墙时,关于表的应用顺序如下:

raw--->manlg--->nat--->filter

关于链的应用顺序:

入站:PREROUTING--->INPUT

出站:OUTPUT--->POSTROUTING

转发:PREROUTING--->FORWARD--->POSTROUTING

规则链内的匹配顺序

按顺序依次检查,匹配即停止(LOG策略例外)

若找不到相匹配的规则,则按该链的默认策略处理

二、编写iptables规则

基本语法:

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

表名、链名用于指定表和链,未指定表名将默认使用filter表

管理选项表示规则的操作方式:插入、增加、

删除、查看等

匹配条件用来指定要处理的数据包的特征,不符合条件的数据包将不会处理

控制类型指数据包的处理方式,如允许、拒绝、丢弃等

编写规则的几个注意事项

不指定表名时,默认指filter表

不指定链名时,默认指表内的所有链

除非设置链的默认策略,否则必须指定匹配条件

选项、链名、控制类型使用大写字母,其余均为小写

#数据包的常见控制类型:

ACCEPT:允许通过

DROP:直接丢弃,不给出任何回应

REJECT:拒绝通过,必要时会给出提示

LOG:记录日志信息,然后传给下一条规则继续匹配

#常用的管理选项:

添加新的规则

-A:在链的末尾追加一条规则

-I:在链的开头(或指定序号)插入一条规则

查看规则列表

-L:列出所有的规则条目

-n:以数字形式显示地址、端口等信息

-v:以更详细的方式显示规则信息

--line-numbers:查看规则时,显示规则的序号

删除、清空规则

-D:删除链内指定序号(或内容)的一条规则

-F:清空所有的规则

设置默认策略

-P:为指定的链设置默认规则

-p:指定协议

举例:

拒绝本机接受所有ICMP协议

# iptables -t filter -I INPUT -p icmp -j REJECT

拒绝本机接受所有udp协议

# iptables -t filter -I INPUT -p udp -j REJECT

允许本机接受所有tcp协议

# iptables -I INPUT 2 -p tcp -j ACCEPT

当使用-I选项进行插入时,新插入的规则最靠前,而使用-A进行插入时,插入的规则在最后

查看INPUT相关规则:

# iptables -nL INPUT --line-numbers

删除INPUT的某条规则:

# iptables -D INPUT 3 //删除序号为3的规则

清空所有与INPUT相关规则:

# iptables -F INPUT

# iptables -F //表示清除filter表中的规则

# iptables -t nat -F //表示清除nat表中的规则

# iptables -t mangle -F //表示清除mangle表中的规则

设置默认策略

当找不到任何一条能够匹配的策略时,则执行默认策略。策略控制类型有两种:ACCEPT、DROP

设置将filter表中FORWARD链的默认策略设置为丢弃:

# iptables -t filter -P FORWARD DROP

设置将filter表中OUTPUT链的默认策略设置为允许:

# iptables -P OUTPUT ACCEPT

使用-F选项无法清空默认规则,若修改需使用-P重新定义

规则的匹配条件设置

通用匹配

1.地址匹配

将本机收到的ICMP协议数据包进行丢弃,除此之外的所有协议允许通过:

# iptables -I INPUT -p icmp -j DROP //拒绝icmp协议数据包进入

# iptables -A INPUT ! -p icmp -j ACCEPT //允许除icmp协议以外的数据包进入

2.地址匹配

通过-s指定源地址,-d指定目标地址进行匹配,如下设置拒绝转发IP与网段的规则:

# iptables -A FORWARD -s 192.168.1.2 -j DROP

# iptables -A FORWARD -s 192.168.2.0/24 -j DROP

禁止192.168.3.0/24网段主机进入及转发规

则:

# iptables -A INPUT -s 192.168.3.0/24 -j DROP

# iptables -A FORWARD -s 192.168.3.0/24 -j DROP

3.网络接口匹配

-i 表示入站网卡,-o表示出站网卡

举例:若要丢弃从外网接口eth1访问本机且源地址为192.168.4.0/24的数据包:

# iptables -A INPUT -i eth1 -s 192.168.4.0/24 -j DROP