IPTABLES(一)

news2025/1/17 3:17:11

文章目录

    • 1. iptables基本介绍
      • 1.1 什么是防火墙
      • 1.2 防火墙种类
      • 1.3 iptables介绍
      • 1.4 包过滤防火墙
      • 1.5 包过滤防火墙如何实现
    • 2. iptables链的概念
      • 2.1 什么是链
      • 2.2 iptables有哪些链
    • 3. iptables表的概念
      • 3.1 什么是表
      • 3.2 表的功能
      • 3.3 表与链的关系
    • 4. iptables规则管理
      • 4.1 什么是规则
      • 4.2 iptables规则增、删、改、查
    • 5. iptables基本匹配
      • 5.1 iptables匹配参数
      • 5.2 iptables匹配示例1
      • 5.3 iptables匹配示例2
      • 5.4 iptables匹配示例3
      • 5.5 iptables匹配示例4
      • 5.6 iptables匹配示例5
    • 6. iptables扩展匹配
      • 6.1 multiport模块
      • 6.2 iprange模块
      • 6.3 string模块
      • 6.4 time模块
      • 6.5 icmp模块
      • 6.6 connlimit模块
      • 6.6 limit模块
      • 6.8 tcp-flags模块
    • 7. iptables连接追踪state
      • 7.1 什么是连接追踪
      • 7.2 连接追踪有哪些状态
      • 7.3 连接追踪应用场景
      • 7.4 连接追踪配置场景
    • 8. iptables地址转换
      • 8.1 什么是NAT
      • 8.2 NAT的几种模式
      • 8.3 NAT环境搭建
      • 8.4 SNAT和DNAT场景配置
    • 9. iptables自定义链
      • 9.1 为什么使用i定义链
    • 10. iptables场景示例
      • 10.1 iptables场景示例1
      • 10.2 iptables场景示例2
      • 10.3 iptables场景示例3
      • 10.4 iptables场景示例4

1. iptables基本介绍

1.1 什么是防火墙

防火墙可以保护网络不受侵害,可以设置防火墙规则,确定哪些类型的数据包允许通过,哪些不允许通过。具有这类功能的设备或软件可以称之为防火墙。

1.2 防火墙种类

1. 从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙
   主机防火墙: 针对于单个主机进行防护,比如windows
   网络防火墙: 往往处于网络入口,针对网络入口进行防护,服务于防火墙背后的服务器集群
2. 物理上将,防火墙分为硬件防火墙和软件防火墙
   硬件防火墙: 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
   软件防火墙: 以软件的方式模拟防火墙功能,运行在操作系统上,性能不高,成本低 

1.3 iptables介绍

iptables其实不是真正的防火墙,就是一个代理程序,用户通过iptables这个代理程序,将安全规则执行到对应的安全框架中,这个安全框架才是真正的防火墙,这个安全阔加叫netfilter,是内核代码中不可缺少的一部分。

iptables位于操作系统的用户空间,后期是通过iptables命令工具操作netfilter内核框架。

所以iptables的完整假发应该是netfilter/iptables,它是linux平台下的包过滤型防火墙,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成数据包的过滤,连接追踪,限速,网络地址转换(NAT)等功能。

在这里插入图片描述

1.4 包过滤防火墙

1. 包过滤防火墙它工作在OSI七层模型中的网络层,用来匹配网络数据包的(header):
    a. 将Header与预先定义好的防火墙规则进行比对
    b. 与规则相匹配的包会被放行
    c. 与规则不匹配的包则可能会被丢弃、也可能执行更复杂的动作
2. 由于包过滤防火墙工作在网络层,也称网络层防火墙,它通过检查每一个数据包的:
    a. 源地址、目的地址
    b. 源端口、目的端口
    c. 协议类型(TCP、UDP、ICMP)

1.5 包过滤防火墙如何实现

包过滤防火墙是由Netfilter来实现的,它是内核的一部分
如果我们想要防火墙发到防火的目的,则需要在内核中设置关卡,多有进出的报文都要经过这些关卡进行检查:将符合条件的放行、不符合条件的组织、而这些关卡在iptables中不被成为关卡,而被成为链。

2. iptables链的概念

2.1 什么是链

防火墙的作用就在于对经过的数据报文进行规则匹配,然后执行规则对应的动作,所以当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是这个关卡上可能不止有一条规则,而是由很多条规则,当我们把这些规则串到一起的时候,就形成了链。

所以每个经过这个关卡的报文都要将这条链上的所有规则匹配一遍,如果由符合条件的规则,则执行规则对应的动作,如果没有则执行默认链的动作。

在这里插入图片描述

2.2 iptables有哪些链

启动了防火墙共呢个是,报文需要经过很多关卡,根据实际情况的不同,报文经过链可能不同,答题分为如下三类:

请求本机经过哪些链: PREROUTING-->INPUT-->Local Process
经过本机又会经过哪些链:PREROUTING-->FORWARD-->POSTROUTING 网络防火墙
从本机发出又会经过哪些链:Local Process-->OUTPUT-->POSTROUTING

丽娜姐iptables链的数据包流向;后期在设定规则时,能很清晰的知道将规则设定在哪个链上;
在这里插入图片描述

3. iptables表的概念

3.1 什么是表

最大的单位是表,表中有链,链中有规则
每个链上都放置了一串规则,但是这些规则都很相似,把具有相同功能的规则集合在一起叫做表,所以说不同功能的规则可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能。

3.2 表的功能

表名作用包含的链
filter负责过滤功能INPUT 、 OUTPUT、 FORWARD
nat负责网络地址转换功能PREROUTING 、INPUT、 OUTPUT、 POSTROUTING
mangle负责修改数据包内容INPUT OUTPUT FORWARD POSTROUTING PREROUING
raw关闭nat表上启用的连接追踪PREROUTING、OUTPUT

3.3 表与链的关系

raw --> mangle --> nat --> filter
在这里插入图片描述

下面这两个表用的最多:
	filter: 过滤,网络安全;
	nat: 路由;地址转换;

表-->链-->规则(匹配条件+动作)
	iptables -t filter -I INPUT -p tcp --dport 80 -j DROP

问题1:来自`10.0.0.1`的地址,访问本机的`web`服务请求不允许,应该在哪个表的哪个链上设定规则?
可能会觉的是PREROUTING链,但其实是INPUT链,因为我们要做的是过滤,而PREROUTING不能做过滤,所以是INPUT。
fiter表中的INPUT链上设定规则;

问题2:所有由本机发往`10.0.0.0/24`网段的`TCP`服务都不允许?
由本地发出会经过OUTPUT、POSTROUTING、但由于POSTROUTING不支持过过滤,所以应该在OUTPUT规则链上配置。
fiter表中的OUTPUT链上设定规则;

问题3:所有来自己本地内部网络的主机,向互联网发送`web`服务器请求都允许?
本地内部主机发送互联网经过PREROUTING、FORWARD、POSTROUTING而能做过滤的只有FORWARD
filter表中的FORWARD链上设定规则;
c   --  iptables  -->  s

4. iptables规则管理

4.1 什么是规则

数据包的过滤基于规则,而规则是由匹配条件+动作组成
操作规则的语法:iptables [-t表名] 选项 [链名] [规则] [动作]
操作规则之前需要考量如下两个问题:
(1)要实现什么功能: 判断添加到哪个表上
(2)报文流经的路线: 判断添加到哪个链上

iptables选项含义示例
-t, --table指定要操作的表(默认filter)iptables -t filter
-A,–append追加一条规则至链的末尾iptables -t filter -A INPUT
-l, --insert插入一条规则至链的顶部iptables -t filter -l INPUT
-D, --delete指定删除一条规则iptables -t filter -D INPUT 1
-R, --replace替换指定链中的规则iptables -t filter -R INPUT
-S, --list-rules打印选定链中的所有规则iptables -t filter -S
-F, --flush清空链中的所有规则iptables -t filter -F
-Z, --zero将所有链中的数据包和字节计数器归零iptables -t filter -Z
-N, --new-chain创建自定义名称规则链iptables -N New_Rules
-E, --rename-chain给自定义链修改名称iptables -E Old_Rules New_Rules
-X, --delete-chain删除自定义链iptables -X Rules_Name
-P, --policy给链设定默认策略iptables -t filter -P DROP

4.2 iptables规则增、删、改、查

默认不用-t 指定表,则默认为filter表;

1.如何查看
-L:查看  -n:不解析 -v 详细  --line-numbers 编号
[root@route ~]# iptables -L  -n -v  --line-numbers

2.如何添加规则:  禁止10.0.0.10 ping 10.0.0.200
-I:插入Insert
[root@route ~]# iptables -t filter -I INPUT -p icmp -j REJECT
[root@route ~]# iptables -L -n

3.如何修改规则:
-R:修改 需要指定规则的编号
[root@route ~]# iptables -t filter -R  INPUT 1 -p icmp -j DROP

4.如何清空计数器:
[root@route ~]# iptables  -Z

5.备份规则;
[root@route ~]# iptables-save > /etc/iptables.rule

6.清空规则:
[root@route ~]# iptables -F					# 只操作filter
[root@route ~]# iptables -t nat -F			# 清空nat表

7.恢复规则:
[root@route ~]# iptables-restore < /etc/iptables.rule

8.永久生效:
	命令: iptables-restore < /etc/iptables.rule  
	加入开机自启动 /etc/rc.local 

5. iptables基本匹配

5.1 iptables匹配参数

条件参数含义
-p , --protocol protocol指明需要匹配的协议,如icmp、udp、tcp
-s , --source address/mask指定匹配源地址,如有多个可以逗号分隔
-d , --destination address/mask指定匹配目标地址,如有多个可以逗号分隔
–source-port, --sport port[:port]指定源端口
–destination-port, --dport port[:port]指定目标端口
-i, --in-interface name接收数据包的接口名称
-o, --out-interface name发送数据包的接口名称
-m, --match match执行需要使用的匹配项,属于扩展匹配
-j, --jump target执行匹配规则后的动作、ACCEPT、DROP、REJECT等

小提示: 每个链上的规则都是从上到下按顺序进行匹配,如果这个链上就只有一条规则,没有配配上,也没有被拒绝。因为下面已经没有规则了,所以默认通过(Chain INPUT (policy ACCEPT))。

[root@localhost ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

5.2 iptables匹配示例1

仅允许10.0.0.10访问10.0.0.200服务器的80端口、其他地址全部拒绝

# -I插入规则第一行、-A 追加规则、-s源地址、-d目标地址、--dport目标端口、-j匹配后执行的动作
[root@localhost ~]# iptables -t filter -I INPUT -s 10.0.0.10 -d 10.0.0.200 -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -d 10.0.0.200 -p tcp --dport 80 -j DROP

5.3 iptables匹配示例2

所有来访问本机的协议,属于TCP协议的都通通放行

[root@localhost ~]# iptables -t filter -I INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j DROP

5.4 iptables匹配示例3

凡是由本机发出的TCP协议报文,都允许出去,其他协议不行;

[root@localhost ~]# iptables -t filter -I OUTPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -t filter -A OUTPUT -j DROP 

5.5 iptables匹配示例4

禁止其他主机从eth0像本机发送ping请求

[root@localhost ~]# iptables -t filter -I INPUT -i eth0 -p icmp -j DROP

5.6 iptables匹配示例5

允许主机发送ping请求,其他任何协议都不允许

[root@localhost ~]# iptables -t filter -I OUTPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -t filter -I OUTPUT -j DROP

6. iptables扩展匹配

6.1 multiport模块

multiport模块可以添加多个不连续的端口; -m multiport <--sports|--dports|--ports> [端口1,端口2,...,端口n]

示例: 10.0.0.10 访问本机20、21、80、443允许通过;

# 以.so的文件都是扩展模块
[root@localhost ~]# rpm -ql iptables | grep ".so"
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -I INPUT -m multiport -s 10.0.0.10 -d 10.0.0.200 -p tcp --dports 20:22,80,443 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j DROP

6.2 iprange模块

iprange模块可以指定"一段连续的IP地址范围";用于匹配报文的源地址或者目标地址,iprange扩展模块中有两个扩展匹配条件可以使用。

--src-range from[-to]: 原地址范围
--dst-range from[-to]: 目标地址范围

示例:10.0.0.5-10.0.0.10地址段ping本机,则丢弃;

[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m iprange --src-range "10.0.0.5-10.0.0.10" -j DROP
[root@localhost ~]# iptables -t filter -L -n --line-numbers

6.3 string模块

string模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件
--algo {bm|kmp}: 字符匹配的查询算法
--string pattern: 字符匹配的字符串

# 示例:应用返回的报文中包含字符`"hello"`,我们就丢弃当前报文,其余正常通过。
[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -t filter -I OUTPUT -p tcp -m string --algo kmp --string "video" -j DROP

# curl --HHost:web.dk.net 10.0.0.200/index.html ,模拟头部添加域名
# 示例:用户请求iptables节点,如果请求中包含  “jd.dk.net”  则拒绝;
[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m string --algo kmp --string "jd.dk.net" -j DROP
小提示: 这个是在主机进行拦截的,iptables如果是做的是网络防火墙,需要在forward链添加规则

6.4 time模块

time模块,可以根据时间段区匹配报文,吐过报文到达的时间在指定的时间范围内,则符合匹配条件
--timestart hh:mm[:ss]: 开始时间
--timestop hh:mm[:ss]: 结束时间
--monthdays day[,day...]: 指定一个月的某一天
--weekdays day[,day...]: 指定周一到周天
--kerneltz: 使用内核时区而不是UTC时间

time:
	--timestart: 14:12   -8:   06:12
	--timestop: 14:14    -8:   06:14
协议:
	icmp 限制
[root@route ~]# iptables -t filter -I INPUT -p icmp -m time --timestart 06:13 --timestop 06:15 -j DROP

string: (路由器)
	限制早上:8:00  ~ 12:00   (00:00-04:00)
	限制下午:14:00 ~ 18:00   (06:00-10:00)

网络策略

上午:
iptables -t filter -I  FORWARD -p tcp -m string --string "qq" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "tb" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "jd" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "aqy" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "wx" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP

下午:
iptables -t filter -I  FORWARD -p tcp -m string --string "qq" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "tb" --algo kmp -m time --timestart 06:00 --timestop 06:22 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "jd" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "aqy" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  FORWARD -p tcp -m string --string "wx" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP


主机策略:
上午:
iptables -t filter -I  INPUT -p tcp -m string --string "qq" --algo kmp -m time --timestart 00:00 --timestop 10:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "tb" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "jd" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "aqy" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "wx" --algo kmp -m time --timestart 00:00 --timestop 04:00 -j DROP
					   
下午:                 
iptables -t filter -I  INPUT -p tcp -m string --string "qq" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "tb" --algo kmp -m time --timestart 06:00 --timestop 06:24 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "jd" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "aqy" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP
iptables -t filter -I  INPUT -p tcp -m string --string "wx" --algo kmp -m time --timestart 06:00 --timestop 10:00 -j DROP

6.5 icmp模块

icmp模块: 可以控制其他主机无法ping通主机,但本机可以ping通其他主机

默认情况当禁止ping后,其他主机无法ping通本主机,本主机也无法ping通其他主机,现需要本主机可以ping通其他主机,而其他主机依然无法ping通本主机。

--icmp-type {type[/code]|typename}
指定ICMP类型,echo-request(8请求)、echo-reply(0回应)

# 常规做法不满足需求
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j DROP

# 通过扩展 icmp
[root@localhost ~]# iptables -t filter -F INPUT	
# INPUT链只拒绝请求request,不拒绝reply。可以实现本主机可以ping通其他主机,而其他主机依然无法ping通本主机
[root@localhost ~]# iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT
[root@localhost ~]# iptables -L -n

6.6 connlimit模块

connlimit扩展模块,限制每个客户端IP地址到服务端的并行连接数
--connlimit-upto n: 如果现有连接数小于或等于n,则匹配
--connlimit-above n: 如果现有连接数大于n,则匹配

DDOS攻击脚本程序,模拟大量的并发连接数;flood conect.c
示例: 使用脚本模拟DDOS攻击,然后检查网站是否异常,如果异常,则使用iptables限制并发连接数。

[root@localhost ~]# yum install httpd -y
[root@localhost ~]# echo "hello" > /var/www/html/test.html
[root@localhost ~]# echo "index" > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd

# 通过netstat会发现大量的ESTABLISHED状态,从而造成正常用户请求异常;开启并发限制,然后测试
[root@localhost ~]# iptables -I INPUT  -p tcp --dport 80 -m connlimit --connlimit-above 2 -j DROP

6.6 limit模块

limit模块,限制单位时间内流入包的数量
可以以秒为单位进行限制,也可以以分钟、小时、天最为单位进行限制。
--limit rate[second|minute|hour|day]: 平均匹配的速率
--limit-burst number: 超过限制速率的包,允许超过burst所设定值,默认可超出5个

# 1. 限制主机每分钟接收10个icmp数据包,差不多6秒会接收客户端一个数据包。(直接用ping进行测试)
# 清空规则
[root@localhost ~]# iptables -t filter -F 
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT

# 2. 允许icmp瞬间通过10个数据包通过,超过的数据包每分钟仅能通过一个
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
# 如果超过10的我们给其drop掉
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT

# 3. 限制主机传输时的宽带每秒不超过500k;(500k * 1000=500000字节/1500=333个包)
[root@localhost ~]# iptables -t filter -I OUTPUT -p tcp -m limit --limit 300/second -j ACCEPT
[root@localhost ~]# iptables -t filter -A OUTPUT -p tcp -j DROP

限速:限制传输速度最多300k;
300k * 1000 = 300000 / 1500 = 200 
	
主机防护: 
filter表OUTPUT链: 
[root@route ~]# iptables -t filter -I OUTPUT -p tcp -m limit --limit 200/second -j ACCEPT
[root@route ~]# iptables -t filter -A OUTPUT -p tcp -j DROP

网络防护:
filter: 
[root@route ~]# iptables -t filter -I FORWARD -p tcp -m limit --limit 200/second -j ACCEPT
[root@route ~]# iptables -t filter -A FORWARD -p tcp -j DROP

6.8 tcp-flags模块

使用tcp模块的 --tcp-flags可以对TCP的标志位进行匹配,匹配指定标志位的值是否为1;

在tcp协议建立连接的过程中,需要先进行三次握手,而三次握手就要依靠tcp头中的标志为进行

第一次: 客户端向服务点发起TCP连接,在TCP的flag标志位中,SYN,RST,ACK ,FIN等仅SYN为1,其他标志位为0

第二位:服务端向客户端返回ACK,在TCP的flag标志位中,SYN,RST,ACK,FIN等标志位仅SYN、ACK为1,其他标志位为0.

第三次: 客户端向服务端返回ACK,在TCP的flag标志位中,SYN,RST,ACK,FIN等标志位仅ACK为1,其他标志位为0

可以通过–tcp-flag指明需要匹配哪些标志位,然后在指明这些标志位中,哪些必须为1,剩余的都必须为0.

所以当服务器接收新请求时,SYN标志位必须1,其他的标志位为0.(这样可以避免木马程序通过端口主动向外发送新连接。)

tcp-flags:
[root@route ~]# man 8 iptables-extensions
客户端连接服务端22端口第一次握手必须是客户端发起的,所以SYN必须为1,剩下全部为0。然后服务端可以通过22端口返回对应的报文(SYN+ACK=1)# 数据包流入本机时的策略:
# --tcp-flags SYN,ACk,FIN,RST SYN  意思是SYN为1,其余的为0
iptables -t filter -I INPUT -p tcp --dport 22 -m tcp --tcp-flags SYN,ACk,FIN,RST SYN -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 22 -m tcp --tcp-flags SYN,ACk,FIN,RST ACK -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT


SYN+ACK数据包流出本机时策略:
iptables -t filter -I OUTPUT -p tcp --sport 22  -m tcp --tcp-flags SYN,ACK,FIN,RST SYN,ACK -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m tcp --tcp-flags SYN,ACK,FIN,RST ACK -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -j REJECT

7. iptables连接追踪state

7.1 什么是连接追踪

state(conntrack)连接跟踪,顾名思义,就是跟踪(并记录)连接的状态。
如下图:是一台IP地址为10.1.1.2的Linux机器,看到这台及其傻瓜有三条连接:
机器访问外部HTTP服务的连接(目的端口80)
外部访问机器内FTP服务的连接(目的端口21)
机器访问外部DNS服务的连接(目的端口53)

连接跟踪所做的事情就是发现并跟踪这些连接的状态;但这个追踪状态与TCP协议没有关系

它是由内核netfilter在IP层实现,可IP层是无连接、无追踪的,那是如何知道这个IP是否存在;

当用户发送请求时,会将用户的请求信息存储在内存开辟的空间中,对应在/proc/net/nf_conntrack
文件会记录源IP、目标IP、协议、时间、状态等信息
当用户再次发起请求,就可以通过文件获取该用户是否来过,一次来实现连接追踪机制;
注意:该文件能存储的条目时受/proc/sys/net/nf_conntrack_max设定大小所限

conntrack:
查看链接追踪详情:/proc/net/nf_conntrack
调整链接追踪大小:echo "100000" > /proc/sys/net/nf_conntrack_max

在这里插入图片描述

7.2 连接追踪有哪些状态

NEW : 新请求,内存中不存在此连接的相关条目,因此识别为第一次请求,状态为NEW;

ESTABLISHED: NEW状态之后,再次建立连接,由于此前的连接还没有失效,所以追踪后被视为已连接通讯状态,状态为ESTABLISHED

RELATED: 相关的连接。比如ftp程序有两个连接,命令连接和数据连接;命令连接有来有往是一个独立的循环,数据来凝结有来有往又是另一个独立的循环,但是两者之间有关系,如果没有命令连接就不可能有数据连接,所以我们将这种称为相关联的连接

INVALID: 无效的连接

7.3 连接追踪应用场景

正常情况下服务器的80端口不会主动连接其他服务器,如果出现了80端口连接其他服务器,那么说明出现了异常行为,或者可以理解为中了木马程序病毒。反弹端口木马

如果关闭80端口的响应报文,就会造成请求进来无法响应;如果开放80端口则又会出现异常行为。

所以我们需要对80端口做连接追踪限制,凡是从80端口出去的就必须是对某个请求的响应,也就是说通过80端口出去的状态必须是ESTABLISHED,不能是NEW

7.4 连接追踪配置场景

(1)允许接收远程主机向本机发送的SSH与HTTP请求(NEW、ESTABLISHED)

(2)同时也仅允许本机像其他主机回应SSH以及HTTP响应(ESTABLISHED)

(3)但不允许本机通过22、80端口主动向外发起连接

# 外部访问内部主机可以连接的状态可以有NEW、ESTABLISHED
INPUT:
[root@route ~]# iptables -t filter -I INPUT -p tcp -m multiport --dport 80,22 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@route ~]# iptables -t filter -A INPUT -p tcp -m multiport --dport 80,22 -j DROP

# 主机响应外部的主机状态只有ESTABLISHED。如果出现NEW的话,是内部主机主动向外发起请求是异常现象。
OUTPUT:
[root@route ~]# iptables -t filter -I OUTPUT -p tcp -m multiport --sport 22,80 -m state --state ESTABLISHED -j ACCEPT
[root@route ~]# iptables -t filter -A OUTPUT -p tcp -m multiport --sport 22,80 -j DROP

8. iptables地址转换

8.1 什么是NAT

网络地址转换(NAT),对(数据包的)网络地址(IP+Port)进行转换

例如: 机器自己的IP:10.1.1.2是能与外部正常通信的,但192.198网段是私有IP段,无法与外界通信,因此当源地址为192.168网段的包要出去时,机器会先将源IP换成机器自己的10.1.1.2再发送出去;收到应答包时,在进行相反的转换。这就是NAT的基本过程。

在这里插入图片描述

8.2 NAT的几种模式

SANT: 源地址转换
DNAT: 目标地址转换
PNAT: 端口地址转换

8.3 NAT环境搭建

NAT实现原理
在这里插入图片描述

NAT:
构建环境:
1.准备iptables节点
eth0:10.0.0.200
eth1: 172.16.1.200
开启forward
	
[root@route ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5

[root@route ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.200
PREFIX=24

[root@route ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@route ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_forward = 1


2.准备后端集群节点
eth1: 172.16.1.7	 Gateway: 172.16.1.200
eth1: 172.16.1.8	 Gateway: 172.16.1.200

[root@web01 ~]# cat   /etc/sysconfig/network-scripts/ifcfg-eth1 
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.7
PREFIX=24
GATEWAY=172.16.1.200
DNS1=223.5.5.5

[root@web01 ~]# ifdown eth1 && ifup eth1
[root@web02 ~]# ifdown eth0

8.4 SNAT和DNAT场景配置

SNAT配置:
必须使用nat表;
[root@route ~]# iptables -t nat -I POSTROUTING -s 172.16.1.0/24 -j SNAT --to 10.0.0.200
[root@route ~]# iptables -t nat -L

------------------------------------------------------------------------
DNAT配置(必须先实现SNAT)[root@route ~]# iptables -t nat -I PREROUTING -d 10.0.0.200 -p tcp --dport 80 -j DNAT --to 172.16.1.7:80
[root@route ~]# iptables -t nat -I PREROUTING -d 10.0.0.200 -p tcp --dport 2222 -j DNAT --to 172.16.1.8:22

9. iptables自定义链

9.1 为什么使用i定义链

iptables的默认链就已经能够满足我们了,为什么还需要自定义链?

当默认链中的规则非常多时,不便于管理。
假设INPUT链中存放了100条规则,这100条规则有针对80端口的,有针对22端口的;
如果想修改22端口的规则,则需要将所有的规则都看一遍,然后找出匹配的规则,这显然不合理;

所以我们需要使用自定义链,通过自定义链即可解决上述问题
首先创建一个自定义链,链名叫IN_SSHD
然后将所有针对22端口入站规则都写入到这条自定义链中
后期想要修改针对22端口入站规则时,就直接修改IN_SSHD链中的规则就可以了
这样即使有再多的规则也没有关系,因为我们可以通过自定义链,快速定位到想修改的规则

自定义链,分类:
1.创建一个自定义链			[root@route ~]# iptables -t filter -N IN_SSHD
2.编辑链中的规则			[root@route ~]# iptables -t filter -I IN_SSHD -s 10.0.0.10 -d 10.0.0.200 -p tcp --dport 22 -j DROP
3.使用默认的链调用自定义	[root@route ~]# iptables -t filter -I INPUT -p tcp --dport 22 -j IN_SSHD
	
删除;
1.自定义链没有被引用、2.自定义链中没有任何规则
# 删除INPUT引用
[root@route ~]# iptables -t filter -D INPUT 1
# 删除自定义规则
[root@route ~]# iptables -t filter -D IN_SSHD 1
# 删除自定义链
[root@route ~]# iptables -t filter -X IN_SSHD

自定义链执行顺序:
在这里插入图片描述

10. iptables场景示例

10.1 iptables场景示例1

10.2 iptables场景示例2

10.3 iptables场景示例3

10.4 iptables场景示例4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1293984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC详解、静态资源访问、拦截器

1. Spring MVC概述 1.1 Spring MVC是什么 SpringMVC是Spring的一个模块&#xff0c;是一个基于MVC设计模式的web框架。 1.2 Spring MVC执行流程。 1.3 组件分析 前端控制器&#xff08;默认配置&#xff09;Dispatcher Servlet 作用&#xff1a;只负责分发请求。可以很好的对…

HL7/FHIR 是什么

如果你对上面 2 个单词不熟悉的话&#xff0c;那就需要先脑补下了。 HL7 HL7 可以认为是一个标准化的组织&#xff0c;这个组织主要对标准进行控制。 如果你希望在医疗系统中对数据进行交换&#xff0c;通常 HL7 现在就是事实上的标准了。 FHIR FHIR – Fast Health Inter…

urllib 异常、cookie、handler及代理(四)

目录 一、urllib异常 二、urllib cookie登录 三、urllib handler 处理器的基本使用 四、urllib 代理和代理池 参考 一、urllib异常 URLError/HTTPError 简介&#xff1a; 1.HTTPError类是URLError类的子类 2.导入的包urllib.error.HTTPError urllib.error.URLError 3.h…

JavaScript单页面路由详解:打造现代化、高性能的Web应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-spa单页面路由 目录 # 基于SPA的单页面路由 关于单页应用 单页应用的…

编程实战:自己编写HTTP服务器(系列2:请求)

系列入口&#xff1a;编程实战&#xff1a;自己编写HTTP服务器&#xff08;系列1&#xff1a;概述和应答&#xff09;-CSDN博客 本文介绍如何处理请求。 目录 一、概述 二、成员变量 三、接收并分解请求 四、完整代码 五、HTTP处理框架 一、概述 请求和应答结构其实差不多…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整的组件库&#xff0c;大家一起学习。 本组件库的图表模块&#xff0c;已包含所有常用的图表&#xff0c;以下为部分组件截图示意。文末可下载…

Axure原型组件库,数据可视化动态元件库(超详细Axure9可视化素材)

专门针对Axure制作的动态图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整 Axure 9 的组件库&#xff0c;大家一起学习。&#xff08;如需 Axure 8组件请详见文末&#xff09; 每一个动态组件在原型文件中都配有…

NLP自然语言处理学习笔记

参考&#xff1a;NLP&#xff08;自然语言处理&#xff09;介绍 - 知乎 (zhihu.com) 一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自…

小航助学2023年6月GESP_Scratch二级真题(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号 单选题3.00分 删除编辑附件图文 答案:D 第1题高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A、编辑B、…

Liunx系统使用超详细(四)~文件/文本相关命令2

承接文章Liunx系统使用超详细(四)~文件/文本相关命令1http://t.csdnimg.cn/f7G6S 目录 一、awk命令(三剑客之一) 1.1工作原理 1.2工作流程 1.3语法格式 1.3.1格式注释&#xff1a; 1.3.2模式&#xff08;pattern&#xff09;的类型&#xff1a; 1.3.3动作&#xff08;ac…

Java期末复习题之继承

点击返回标题->23年Java期末复习-CSDN博客 第1题. 设计一个学生类Student&#xff0c;其数据成员有name(姓名)、age(年龄)和degree(学位)。由Student类派生出本科生类Undergraduate和研究生类Graduate&#xff0c;本科生类Undergraduate增加成员specialty(专业)&#xff0c;…

vue-tree-color 组件实现组织架构图遇到的坑和解决方案以及实现

**1、前期工作可以先看看大佬的文章 **https://blog.csdn.net/Try_your_best_l/article/details/120173192?spm1001.2101.3001.6650.5&utm_mediumdistribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-5-120173192-blog-128109597.235%5Ev38%5Epc_relevant_default…

案例精选|聚铭网络助力莱阳市人民医院打造合规性网络安全保障体系

莱阳市人民医院是一所集医疗、教学、科研、急救、康复、医养结合于一体的大型二级甲等综合性公立医院&#xff0c;占地总面积约3万平方米&#xff0c;建筑面积约7万平方米&#xff0c;设置科室48个&#xff0c;开放床位500张。医院先后获得山东省首批医养结合典型、山东省卒中防…

案例060:基于微信小程序考试系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

【Proteus仿真】【STM32单片机】蓝牙遥控小车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使LCD1602液晶&#xff0c;L298电机&#xff0c;直流电机&#xff0c;HC05/06蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显…

Matlab 点云对称性检测

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 这是一个很有趣的功能,它的思路其实与ICP算法的思路有些相似: 首先,它会初始化两个旋转角度,即绕x轴旋转与绕y轴旋转,初始的过程是将点对称(镜像)过去,计算与匹配点之间的距离误差,误差最小者为最优初始值…

【Docker二】docker网络模式、网络通信、数据管理

目录 一、docker网络模式&#xff1a; 1、概述 2、docker网络实现原理&#xff1a; 3、docker的网络模式&#xff1a; 3.1、bridge模式&#xff1a; 3.2、host模式&#xff1a; 3.3、container模式&#xff1a; 3.4、none模式&#xff1a; 3.5、自定义网络模式&#xf…

Spring基于注解存储对象

小王学习录 前言基于注解存储对象Controller (控制器存储)Service (服务存储)Repository (仓库存储)Component (组件存储)Configuration (配置存储)Bean(方法注解) 前言 上一篇文章中已经介绍了在Spring中存储Bean和取Bean的方法. 而在 Spring 中想要更简单的存储和读取对象的…

【面试经典150 | 二叉树】从前序与中序遍历序列构造二叉树

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;递归 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容…