netfilter基础及iptables基本应用

防火墙及netfilter基础

firewall

工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,对能够被规则匹配的报文作出相应处理的组件。

可分为主机防火墙和网络防火墙

可以是软件,也可以是硬件,专业的硬件防火墙:checkpoint, netscreen

 

iptables:规则管理工具,是工作于用户空间的程序,可自动检查语法错误;

netfilter: 网络过滤器, 是工作于内核空间TCP/IP网络协议栈上的框架;

 

IDS:Intrusion Detecting System,即入侵检测系统

NIDS:网络入侵检测系统

HIDS:主机入侵检测系统

 

IPS: Intrusion Protec System,即入侵防御系统

 

HoneyPot: 蜜罐

 

Iptables

 

发展历程

ipfw --> ipchains--> iptables/netfilter

 

Linux本无防火墙系统,参考OpenBSD移植而来,取名ipfw;后发现firewall的防护功能依赖于众多串在一起的规则链来实现,故改名ipchains;再后来规则被规划的越来越详细,防护功能依赖于多条链结合来实现,最终定名iptables/netfilter

 

路由发生的时刻

报文进入本机后:

判断目标地址

报文离开本机之前:

判断经由哪个接口发出;

 

报文流向经由的位置

到本内部:prerouting, input

由本机发出:output, postrouting

由本机转发:prerouting, forward, postrouing

 

规则的组成部分

报文的匹配条件, 匹配之后如何处理

 

匹配条件:基本匹配条件、扩展匹配条件

如何处理:内建处理机制、自定义处理机制(自定义的链)

 

注意:报文不可能经由自定义链,自定义链只有在内置链上被引用才能生效(即做为自定义目标)

 

netfilter规则的功能

filter:过滤

NAT Server(Network Address Translation):地址转换

mangle:修改报文首部中的某些信息

raw:关闭nat表上启用的连接追踪功能

 

以上即iptables四表

 

hooks function(钩子函数)

prerouting:

进入本机后路由功能发生前

①:raw,mangle,nat

input:

到达本机内部

②:mangle,filter

output:

由本机发出

③:raw,mangle,natfilter

forward:

由本机转发

④:mangle,filter

postrouting:

路由功能发生后,即将离开本机前

⑤:mangle,nat

 

以上即iptables五链CHAIN),组合起来即构成内核中专门用于实现报文检查功能的框架--netfilter

各钩子存有众多规则,按功能存放,具有相同功能的规则集中存放,而不同功能的规则单独存放,报文到达后会按照功能的优先级按次序依次检查,由此组成iptables的表

 

各功能实现位置

filter:input, forward, output

nat:prerouting(修改目标主机地址), output, postrouting(修改源主机地址)

mangle:prerouting, input, forward, output, postrouting

raw:prerouting, outputnat的补充功能,只能发生在nat的前半段

 

功能的优先级

由高而低:raw --> mangle --> nat --> filter

 

数据包过滤匹配流程示意图

wKiom1VJ5POQlXekAAMAqfPA3Vo885.jpg

 

添加规则时的考量点

(1) 要实现的功能:判断添加在哪个表上;

(2) 报文流向及经由路径:判断添加在哪个链上;

 

链上的规则次序即为检查次序,因此有一定的法则

(1) 同类规则,匹配范围小的放上面;

(2) 不同类规则,匹配报文几率较大的放上面;

(3) 应该设置默认策略;


iptables基本用法

iptables命令

生成规则,送往netfilter;

规则通过内核接口直接送至内核;立即生效,但不会永久有效;

要想永久有效需保存至配置文件,且此配置文件需开机自动加载或由用户手动加载

 

语法格式

iptables[-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

 

常用选项

-t TABLE:指明要操作的表,省略时默认为filter, 共有filter, nat, mangle, raw四个表可用;

SUBCOMMAND:子命令

CHAIN:指明要操作的链

CRETERIA:指明匹配条件

-j TARGET:指明处理动作

 

SUBCOMMAND(子命令)

 

对链的操作

-F:flush,清空指定表的指定链上所有规则,省略链名时,清空默认表中所有链的所有规则;

 

-N:new, 新建一个用户自定义的链,自定义链只能作为默认链上的跳转对象,即在默认链上通过引用来生效自定义链;

 

-X:drop,删除用户自定义的空链,内置链无法删除;

 

-Z:zero,将规则的计数器置0;每个链上的每条规则都有两个计数器,一个记录被当前规则所匹配到的报文个数,另一个记录被当前规则所匹配到的报文大小之和;

 

-P:policy,设置链的默认处理机制,当所有链都无法匹配,或能匹配到但无法做出有效处理机制时,默认处理机制即生效;

filter表的可用策略:ACCEPT、DROP、REJECT

 

-E:rename,重命名自定义链;

 

注意:被引用中的链,无法删除和改名

wKiom1VJ5XzDgy3GAAGFQj3G78k334.jpg

 

对链上规则的操作

-A:append,在链尾追加一条规则;

-I:insert,在指定位置插入一条规则;

-Ddelete,删除指定的规则;                

-R:replace,替换指定的规则;

 

查看操作

-L:list,列出指定链上的所有规则;

-n:numeric,以数字格式显示地址和端口号,即不反解;

-v:verbose,详细格式,显示规则的详细信息,包括规则计数器等;

--line-numbers:显示规则编号;

-x:exactly,显示计数器的精确值,即不做单位换算;

wKioL1VJ5v-T1TcmAAHmgtFVfYo801.jpg

pktsbytes target     prot opt in     out    source      destination

pkts:被本规则所匹配到的报文个数;

bytes:被本规则所匹配到的所有报文的大小之和;

target: 处理目标 (目标可以为用户自定义的链);

prot: 协议 {tcp, udp, icmp};

opt:可选项;

in:数据包流入接口;

out:数据包流出接口;

source:源地址;

destination:目标地址;

 

CRETERIA(匹配条件)

检查IP首部,检查TCP、UDP或ICMP首部;

基于扩展机制,也可以进行额外的检查,如做连接追踪等;

可同时指定多个匹配条件,此时指定的所有条件要都满足才能被匹配到;

 

通用匹配

-s, --src, --source  IP|Network:检查报文源IP地址;

-d, --dst,--destination:检查报文目标IP地址;

-p,--protocol:检查报文中的协议,即ip首部中的protocols所标识的协议(tcp、udp、icmp三者之一);

-i,--in-interface:检查报文的流入接口;通常只用于PREROUTING, INPUT,FORWARD链上的规则;

-o,--out-interface:检查报文的流出接口;通常只用于FORWARD,  OUTPUT, POSTROUTING链上的规则;

 

注意:可以取反,在选项前加“

 

扩展匹配

使用iptables的模块实现扩展性检查机制

隐式扩展

如果在通用匹配上使用-p选项指明了协议的话,[-m 模块名称]可省略

tcp

--dport:目标端口

--sport:源端口

--tcp-flags LIST1 LIST2

LIST1:要检查的标识位

LIST2:在LIST1中出现过的,且必须为1标记位,而余下的则必须为0

示例:“--tcp-flags syn,ack,fin,rst   syn”:表示只检查4个标识位syn,ack,fin,rst,且syn必须=0,而ack,fin,rst必须=1

--syn:用于匹配tcp会话三次握手的第一次

 

udp

--dport

--sport

 

icmp

--icmp-type

8:echo request(ping请求)

0:echo reply(ping响应)

 

示例:配置本机的dns服务,并放行之;默认策略为drop

wKiom1VJ5arj-m4-AAKdtuIKFds465.jpg

注意:规则12只能放行外机指向本机做解析,若无规则34,本机自己请求的解析将无法被放行

  

显式扩展

必须指明使用的扩展机制

格式:-m模块名称,每个模块会引入新的匹配机制

查询可用的模块命令

rpm -ql iptables

小写字母,以“.so”结尾

 

multiport扩展

以离散定义多端口匹配;最多指定15个端口;

 

专用选项:

--source-ports,--sports PORT[,PORT,...]

--destination-ports,--dports PORT[,PORT,...]

--portsPORT[,PORT,...]

 

示例

# iptables -I INPUT 1 -d 172.16.100.11 -ptcp -m multiport --dports 22,80,443 -j ACCEPT

# iptables -I OUTPUT 1 -s 172.16.100.11 -ptcp -m multiport --sports 22,80,443 -j ACCEPT

 

iprange扩展

指定连续的ip地址范围;在匹配非整个网络地址时使用;

 

专用选项:

[!]--src-range IP[-IP]

[!]--dst-range IP[-IP]

 

示例

# iptables -A INPUT -d 172.16.100.11 -p tcp--dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.11 -p tcp--sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

 

string扩展

检查报文中出现的字符串,与给定的字符串作匹配;

 

字符串匹配检查算法:

kmp,bm

 

专用选项:

--algo{kmp|bm}

--string"STRING"

--hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;

 

示例

# iptables -I OUTPUT 1 -s 172.16.100.11 -ptcp --sport 80 -m string --string "sex" --algo kmp -j REJECT

 

time扩展

基于时间区间做访问控制

 

专用选项:

--datestartYYYY[-MM][-DD][hh[:mm[:ss]]]

--dattestop

 

--timestart

--timestop

 

--weekdaysDAY1[,DAY2,...]

 

示例

#iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT

 

connlimit扩展

基于连接数作限制;对每个IP能够发起的并发连接数作限制;

 

专用选项:

--connlimit-above[n]

 

示例:

#iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit--connlimit-above 5 -j REJECT

 

limit扩展

基于发包速率作限制;

 

专用选项:令牌桶算法

--limit  n[/second|/minute|/hour|/day]

--limit-burstn

 

示例:

# iptables -R INPUT 3 -d 172.16.100.11 -picmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

 

state扩展

 

 

-j TARGET

-j(jump),跳转目标

内置目标

ACCEPT:接受

DROP:丢弃

REJECT:拒绝

 

自定义连接


你可能感兴趣的:(安全,iptables,Netfilter)