栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux防火墙之iptables详解

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux防火墙之iptables详解

防火墙分类

从逻辑上分类
主机防火墙:针对单个主机防护
网络防火墙:出于网络入口或边缘,针对网络入口防护,服务于防火墙背后的本地局域网

从物理上分类
软件防火墙
硬件防火墙

iptables包过滤防火墙 (在用户空间)
netfilter(真正意义上防火墙)在内核空间的
内核空间:也叫内核态,操作系统占据的内核区域
用户空间:也叫用户态,用户进程所在的内存区域

iptables四表五链

防火墙是按照规则办事的,我们就来说说规则 (rules) ,规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包’。规则存储在内核空间的信息包过滤表中,这些规则
分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP) 和服务类型(如HTTP、FTP和SMTP) 等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行 (accept)、拒绝(reject) 和丢弃(drop) 等。配置防火墙的主要工作就是添加、修改和删除这些规则。

当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听
的套接字 (P:Port)上,当veb服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的1P与端口反而变成了原点,我们说过,netfiter才是真正的防火墙,它是内核的一部分,
所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡,
而这些关卡在iptables中不被称为 “关卡"而被称为"链”。

报文的流向:到本机某进程的报文,PREROUNTING–>INPUT 由本机转发的报文:PREROUNTING–>FORWARD–>POSTROUTING 由本机的某进程发出报文(通常为响应报文):OUTPUT–>POSTROUTING

规则:源地址 目标地址 源端口 目标端口 协议 服务类型

处理:accept reject(拒绝) drop(丢弃)

iptables 添加 删除 修改

链:INPUT UOTPUT PREROUTING(路由前) FORWARD POSTROUTING(路由后)

表:filter表:负责过滤:INPUT UOTPUT FORWARD

​ nat表:网络地址转换:UOTPUT PREROUTING POSTROUTING(centos7之后INPUT也有)

​ mangle表:拆解、封装报文:这张表在所有链上都有

​ raw表:关闭在nat上启用的连接机制:UOTPUT PREROUTING

其实我们还需要注意一点,因为数据包经过一个"链"的时候,会将当前链的所有规则都匹配一遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同功能类型的规则会汇聚在一张"表”中,那么这些"表"中的规则会放在"链"的最前面执行呢,这时候就需要有一个优先级的问题,那些表应该优先匹配呢?
iptables为我们定义了4张"表”,当他们处于同一条"链"时,执行的优先级如下:
优先级次序(由高到低):​ raw—>mangle---->nat—>filter​

规则:根据指定的匹配条件尝试匹配每一条流经此处的报文,一旦匹配成功,则由规则后边指定的处理动作进行处理
匹配条件:地址 目标地址 源端口 目标端口 协议 服务类型
处理动作:ACCEPT REJECT(拒绝) DROP(丢弃) SNAT DNAT REDRECT LOG
匹配条件加上处理动作共同组成了规则

iptables基本用法

匹配条件

基本匹配条件扩展匹配条件
源地址Source IP源端口Source Port
目标地址Destintionm目标端口Destintion Port

处理动作

动作含义
ACCEPT允许数据包通过
REJECT拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
DROP直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入大海了,过了超时时间才会有反应
DNAT目标地址转换
SNAT源地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE是SNAT的一种特殊形式,适用于动态的、临时会变得ip上
REDIRECT在本机做端口映射
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
常用操作命令

-F:清理 删除规则(慎用!!!)

-A:在指定的链的尾部添加

​-I:在指定位置插入规则(大写i)

​-L/S:列出链上的规则、

-D:删除匹配的规则

-R:替换匹配的规则 -R INPUT NUM

​-n:ip地址和端口以数字显示

-N:创建用户自定义链

-X:删除自定义链

-P:为指定链修改默认规则

-E:更改自定义链名

-Z:链计数器清零

-t:指定表

-j:指定处理动作
!:取反操作,用于匹配条件

常用规则匹配器

-p:tcp udp icmp all

-s addr 匹配源地址

-d addr 匹配目标地址

–sport 匹配源端口

–dport 匹配目标端口

-o:指定匹配出口网卡

-i:指定匹配入口网卡 eth0

​–icmp-type 匹配icmp类型

–tcp-flags mask(6个标志位) comp(匹配的标志)

策略

iptables -t 表 -A|I 链 匹配条件 处理动作

iptables -t 表 -R 链 序列 匹配条件 处理动作

iptables -t 表 -D 链 序列 匹配条件 处理动作

iptables -t 表 -D 链 序号

保存

​ (centos6) service iptables save

​ (centos7) 先关闭fiewalld systemctl stop firewalld systemctl disable firewalld

​ 安装 yum install iptables

​ 保存 iptables-save > /etc/sysconfig/iptables

​ 恢复 iptables-restore < /etc/sysconfig/iptables

扩展匹配条件

​ 隐式匹配:-p

​ 显式匹配:-p -m

​ -p tcp -m tcp --sport 指定连续端口 22:80

​ -p tcp -m tcp --dport 指定连续端口 22:80

​ multiport 指定离散的端口 22,80

​ -p tcp -m multiport --sport 22,80

​ -p tcp -m multiport --dport 22,80

进阶用法: iprange 模块

​ 指定一段地址

​ --src-range:

​ --dst-range:

​ -m iprange --src-range

​ -m iprange --dst-range

string 模块

​ 匹配字符串 关键字 指定匹配算法 --algo kmp

​ -m string

​ --string

​ -m string --algo kmp --string

time 模块

​ 默认使用UTC时区时间 东八区需要减8小时

​ centos6 --locatetz --使用本地内核时间

​ centos7 --kerneltz --使用本地内核时间

​ -m time

​ --timestart

​ --timestop

​ --weekdays 1-7

​ --datestart

​ --datestop

​ --monthdays

2、每周一到周五9点-17点允许来自192.168.100.0/24 访问本机,且每秒数据访问不超过20个
iptables -t filter -I OUTPUT -p tcp --s 192.168.100.0/24 -m time --kerneltzb --timestart 9:00:00 --timestop 17:00:00 --weekdays 1,2,3,4,5 -m limit --limit 20/second -j ACCEPT

connlimit 模块

​ 显示每个IP地址链接到server的数量 如果不指定ip地址,则指所有的地址

​ -m connlimit

​ --connlimit-above 连接上限

​ --connlimit-mask 子网掩码 网段连接上限

每一个连接上的最多连三次:

limit 模块

​ -m limit

​ --limit

​ --limit-burst 定义令牌桶大小

tcp-flags 模块

​ SYN、ACK、FIN、RST、URG、PSH SYN(要匹配的是谁)

匹配第一次握手

iptables规则配置

在配置之前,先将系统的环境清零
[root@localhost ~]# iptables -F #清理规则
[root@localhost ~]# iptables -nvL #查看时已经没有任何规则
Chain INPUT (policy ACCEPT 6 packets, 384 bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 4 packets, 368 bytes)
pkts bytes target prot opt in out source destination
#当清理之后,可以看到 INPUT 、FORWARD、OUTPUT默认策略都是ACCEPT,也就是说默认当前所有发往本机的报文,都将放行

两台服务器演示
服务器A:192.168.163.139
服务器B:192.168.163.157
#增加规则,拒绝所有来自192.168.163.157的所有报文
[root@localhost ~]# iptables -t filter -I INPUT -s 192.168.163.157 -j REJECT
[root@localhost ~]# ping 192.168.163.157
PING 192.168.163.157 (192.168.163.157) 56(84) bytes of data.
^C
— 192.168.163.157 ping statistics —
5 packets transmitted, 0 received, 100% packet loss, time 4762ms

[root@localhost ~]# ping 192.168.163.157 #已经无法ping通
PING 192.168.163.157 (192.168.163.157) 56(84) bytes of data.
^C

选项说明
-t:指定操作的表
-I:指定插入规则到哪个链中
-s:指定“匹配条件”中的源地址
-j:指定“匹配条件”中的动作

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 72 packets, 4608 bytes)
pkts bytes target prot opt in out source destination
5 420 REJECT all – * * 192.168.163.157 0.0.0.0/0 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 48 packets, 4356 bytes)
pkts bytes target prot opt in out source destination

[root@localhost ~]# iptables -t filter -I INPUT 2 -s 192.168.192.157 -j ACCEPT
[root@localhost ~]# ping 192.168.162.157
PING 192.168.162.157 (192.168.162.157) 56(84) bytes of data.
^C
#在这里加了一个2 表示新增规则编号是2
#在这里有一个规则顺序问题,所有的匹配从第一条规则开始,如果前面已经REJECT了,也就不存在放行了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号