1.iptables规则详解
- 格式:pdf
- 大小:794.64 KB
- 文档页数:5
1.iptables规则详解
1.什么是防⽕墙,防⽕墙的种类有哪些
防⽕墙: 古⼈⽤来隔绝失⽕后的⾼墙,阻挡外来的⽕势,起到了隔离的⼿段。
在互联⽹上,我们会采⽤类似于防⽕墙的⽅法,来保护我们的⽹络不受外来攻击,为此我们需要设定⼀些防⽕墙的规则,确定哪些数据允许通过,哪些不能通过,具有这种功能的设备或软件,我们将其称为防⽕墙
防⽕墙的种类: 逻辑层⾯:
主机防⽕墙:针对单个主机进⾏防护,例如Windows防⽕墙 ⼀般是软件
⽹络防⽕墙:处于⽹路⼊⼝的边缘,针对⽹络⼊⼝进⾏防护 ⼀般是硬件,也可以⽤软件
物理层⾯:
硬件防⽕墙:⼀个实体的硬件,嵌⼊软件,实现防⽕墙的功能,性能⾼,成本⾼
软件防⽕墙:通过软件的⽅式,模拟防⽕墙的功能,运⾏在操作系统上⾯,性能低,成本低
2.iptables介绍
1.什么是iptables?
iptables可以理解为是⼀个代理程序,⽤户通过代理程序,将安全规则添加到安全框架中 net filter(内核空间)
netfilter/iptables 是Linux中的包过滤型防⽕墙,是免费的,可以代替昂贵的商业防⽕墙解决⽅案,可以实现数据包的过滤,实现数据包的转换。
2.什么是包过滤防⽕墙?
包过滤型防⽕墙在我们⽹络层拦截⽹络数据包的包头(header),可以针对数据包的包头,与我们事先准备好的防⽕墙规则进⾏⽐对,与规则相匹配的包放⾏,不匹配的包丢弃或者执⾏⼀些复杂的动作,包过滤型防⽕墙⼀般作⽤在我们的⽹络层,故
通常header中带有 客户端来源IP,源端⼝,⽬标IP,⽬标端⼝,协议类型:tcp udp icmp,根据这些状态信息来判断,是否符合我们的IP tables的过滤规则,符合通过,不然拒绝。
3.包过滤型防⽕墙是怎么实现的?
是基于net filter安全框架实现的,是内核的⼀部分,如果我们想要让防⽕墙达到防⽕的⽬的,需要我们在内核中,设定⼀些关卡,所有进出的报⽂,根据设定的这些关卡进⾏检查,将符合条件的放⾏,不符合的阻⽌,
在net filter中,这些关卡就是链
3.iptables链的概念
1.什么是链?
防⽕墙的作⽤就是在于将经过的报⽂与设定的规则进⾏⽐对,然后执⾏响应的动作,报⽂经过链时,必须匹配链的规则,在链上不⽌⼀条规则,存在着很多规则,当我们将这些规则穿在⼀起的时候就形成了链
链的匹配规则,如下图所⽰,当有报⽂经过时,会以此往下匹配规则,如果匹配成功,则执⾏相对于的动作,如果匹配不成功,就以此往下匹配,直到最后⼀条规则还是没有匹配成功,会执⾏链的默认规则。
2. iptables 有哪些链?
我们从A点到达B点时,途中会经过很多的⾼速路,不同的⾼速路有不通的关卡设定,⽐如说,过路费,查酒驾,查超载,查超速等等,这些都可以理解为⼀些关卡
在iptables中,数据流⼊本机,经过防⽕墙,会经过五个关卡,也就是五个链
PREROUTING:
input:
output:
forward:
postrouting:
数据流⼊本机:当数据经过prerouting,会判断是否是请求本机,请求本机,送往input链,经过input 发送到我们⽤户空间的process进程
数据流出本机:process进程发送给output,由我们的output发送给postrouting,由postrouting选择最优路线,回传给⽤户
数据经过本机:当⽤户请求防⽕墙时,数据报⽂要传给后端的服务器,这时数据报⽂是经过本机,⽽不是到达本机,⾸先会经过prerouting链,由于不是请求本机,所以不会送往input,会送往forward,通过postrouting选择接⼝,转给后端主机。
4.什么是表?
对每个链上⾯会放很多规则⽐如:
A:IP地址或端⼝过滤
B:修改数据报⽂
我们把具有相同功能规则的集合叫做表,不通功能的规则,可以放置在不同的表中进⾏管理
iptables中的表:
filter: 负责做过滤功能 input、output、forward
nat: ⽹络地址转换 PREROUTING、input、output、postrouting
mangle: 负责修改数据包的内容 PREROUTING: input、output、forward、postrouting
raw: 关闭nat表中的追踪机制(⽤的较少)
操作不同表中的不同的链实现的功能不⼀样,
4.1.数据包的优先级
1.当⽤户A请求的是我本机的⽤户进程,⾸先数据包进来会经过prerouting链,由于raw,mangle,nat表都可以管理prerouting链,他会依次看raw,mangle,nat 表中的链有什么规则,依次执⾏,执⾏完之后在进⾏路由选择,
2.由于是访问我们本机的应⽤进程,会送往input链,会先执⾏mangle表中的数据规则,看有没有需要改写的,在进⼊filter表中的数据规则,看有没有需要过滤的,在送往我们的⽤户空间进程
数据包的优先级 raw--->mangle--->nat--->filter
问题1:来⾃于10.0.0.1的地址,访问本机的web服务请求都不允许,应该在那个表的那个链上设定规则? 在filter表中的input链
prerouting链是由raw,mangle,nat表管理的,他们没有数据包过滤的功能
input 是由 filter nat mangle 管理的,filter ⽀持过滤,所以是由filter表中的input链
问题2:所有本机发往10.0.0.0/24⽹段的tcp服务都不允许 在filter表中的output链
output属于filter表,有数据改写的功能,postrouting属于nat,mangle没有数据包过滤的功能
问题3:所有来⾃本机内部⽹络的主机,像互联⽹发送web请求,都不允许 防⽕墙在内部主机之前,内部主机要上⽹的化需要经过防⽕墙,当内部主机需要经过防⽕墙时,第⼀个经过的时prerouting,不是请求本机,只是从本机经过,所有不会转给input,会转给forward,forward转给postrouting选择接⼝,转给web服务器。
prerouting ---> froward ---> postrouting
prerouting 和postrouting都不属于 filter表,所以没有过滤功能,要在forward的上⾯做
PS: 要明确的了解需要做的是 过滤、地址转换、数据包的改写,这样我们才知道是操作的那个表,然后我们需要知道数据包流经的路径,这样我们才知道应该添加到那个链上
实现的功能是什么: 操作那个表
报⽂经过的路径: 判断规则添加到那个链上
5.iptables 的规则
1.什么是规则?规则是如何组成的
我们的数据包的过滤,就是基于规则,⽽规则,是基于条件+动作完成的,想实现防⽕墙达到防⽕的⽬的,⽆外乎是为其添加相应的规则,即,我们匹配的条件和执⾏的动作
2.规则的增删查改
iptables -t 表名 选项(增删查改)链名称 条件 动作
-t 指定操作的表名
-A, --append 追加⼀条规则到链中
-D, --delete 删除链中的规则
-I, --insert 插⼊⼀条规则,插⼊到顶部
-R, --replace 替换,修改
-L, --list 列出当前的规则
-S, --list-rules 列出所有的规则
-F, --flush 清空
-Z, --zero 清空计数器(每条规则都有匹配的包数量、包⼤⼩)
-N, --new-chain 创建⼀个⾃定义链
-X, --delete-chain 删除⼀个⾃定义链
-P, --policy 指定链的默认规则
iptables -t 表名 选项(增删查改)链名称 条件 动作
hdss7-11 bin]# iptables -t filter -L -n -v #查看规则
hdss7-11 bin]# iptables -t filter -I INPUT -p icmp -j REJECT #添加⼀条禁⽌icmp的规则(禁ping)
hdss7-11 bin]# iptables -t filter -R INPUT 1 -p icmp -j DROP #修改第⼀条规则,改为DROP(丢弃)
[root@hdss7-11 bin]# iptables -t filter -Z #清除计数器
hdss7-11 bin]# iptables -t filter -D INPUT 1 #删除指定编号规则
6.iptables 基本的条件匹配
1. -p #指定协议
2. -s -d #源地址,⽬标地址
3. --sport --dport #源端⼝ ⽬标端⼝
4. -i -o #进来的接⼝,出去的接⼝
5. -m -j #
实例1:仅允许10.0.0.1访问10.0.0.5的80端⼝,其他拒绝
先允许: 1.过滤,添加到filter 表,10.0.0.1请求本机的报⽂,会经过prerouting,会到达input,到达⽤户进程,prerouting不⽀持过滤,所以要在input链中做
2.指定来源的ip地址 10.0.0.1
3.指定⽬标的IP地址 10.0.0.5
4.指定具体的协议 tcp
5.指定具体的端⼝ 80
6.指定匹配后的动作 accept
后拒绝: 1.添加到filter表
2.明确指定拒绝所有
具体的配置: iptables -t filter -I INPUT -s 10.0.0.1 -d 10.0.0.5 -p tcp --dport 80 -j ACCEPT #允许来源IP为10.0.0.1⽬的IP为10.0.0.5 协议为tcp 端⼝为80 的进⾏访问
iptables -t filter -A INPUT -p tcp -j DROP #拒绝所有的tcp链接,注意ssh属于tcp连接,-A 追加
iptables -t filter -F #清空所有的配置
实例2:凡是由本机发出的TCP协议报⽂,都允许出去,其他的协议不允许
先允许: 1.过滤,filter表,要从本机出去,所以是output链
再拒绝: 拒绝所有的
具体配置: iptables -t filter -I OUTPUT -p tcp -j ACCEPT #在顶部添加⼀条允许tcp出去的条件
iptables -t filter -A OUTPUT -j DROP #追加⼀条条件为任何协议都不允许出去
iptables -t filter -F OUTPUT #清空OUTPUT 链上的所有规则
实例3:禁⽌其他主机 从eth0 发来的ping请求 1.过滤,filter表,请求的是本机,在input链上
2.指定从哪个⽹络接⼝过来的数据包 ech0 -i 指定接⼝
3.指定具体的协议 icmp
4.指定具体的动作 DROP
iptables -t filter -I INPUT -p icmp -i eth0 -j DROP
[!] -i, --in-interface name
Name of an interface via which a packet was received (only for packets entering the INPUT, FORWARD and PREROUT‐