设为首页 收藏本站
查看: 370|回复: 0

[经验分享] netfilter基础及iptables基本应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-7 08:34:13 | 显示全部楼层 |阅读模式
防火墙及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,nat,filter
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, output,nat的补充功能,只能发生在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,在指定位置插入一条规则;
-D:delete,删除指定的规则;                 
-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
注意:规则1和2只能放行外机指向本机做解析,若无规则3和4,本机自己请求的解析将无法被放行

显式扩展
必须指明使用的扩展机制
格式:-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:拒绝

自定义连接


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-64423-1-1.html 上篇帖子: linux查看硬件信息 下篇帖子: nsf与samba基本应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表