IPTABLES(一)

文章目录

    • 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

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的基本过程。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Shell数组函数:数组——数组和循环(二)

for脚本快速定义数组 [rootlocalhost ~]# vim for12.sh #脚本编辑 #!/bin/bash for a in cat /etc/hosts do hosts[o]$a donefor i in ${!hosts[]} do echo "$i : ${hosts[$a]}" done[rootlocalhost ~]# vim for12.sh #执行脚本区别 &#xff1a;for的空格分割…

coredump

linux原生 一、设置 $ cat /proc/sys/kernel/core_pattern 通过查看core_pattern文件&#xff0c;发现其确实指定了一个路径&#xff0c;于是我前往那个路径&#xff0c;发现竟然是脚本程序&#xff0c;后来查看说明文件&#xff0c;才知道core_pattern中如果首先指定了一个 …

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

DOS 批处理 (二)

DOS 批处理 1. 基础 DOS 命令1.1 基础命令1.2 文件系统操作1.3 文件夹管理1.4 文件管理1.5 网络相关1.6 系统管理1.7 IF、FOR和NETIFFORNET 1. 基础 DOS 命令 command /? 查找帮助DOS命令不区分命令字母的大小写 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

SQL面试题,判断if的实战应用

有如下表&#xff0c;请对这张表显示那些学生的成绩为及格&#xff0c;那些为不及格 1、创建表&#xff0c;插入数据 CREATE TABLE chapter8 (id VARCHAR(255) NULL,name VARCHAR(255) NULL,class VARCHAR(255) NULL,score VARCHAR(255) NULL );INSERT INTO chapter8 (id, n…

嵌入式系统

嵌入式系统 目前国内一个普遍认同的嵌入式系统定义是&#xff1a;以应用为中心、以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。&#xff08;引用自《嵌入式系统设计师教程》&#xff09; …

点评项目——商户查询缓存

2023.12.7 redis实现商户查询缓存 在企业开发中&#xff0c;用户的访问量动辄成百上千万&#xff0c;如果没有缓存机制&#xff0c;数据库将承受很大的压力。本章我们使用redis来实现商户查询缓存。 原来的操作是根据商铺id直接从数据库查询商铺信息&#xff0c;为了防止频繁地…

一维相位解包裹

一维相位解包裹 本文首先介绍最简单的一维的位相解包裹算法。设W是包裹运算符&#xff0c;中是解包裹位相&#xff0c;是包裹的位相。则一维位相解包裹可表示为&#xff1a; 解包裹就是要选取正确的k,满足&#xff1a; 两个相邻像素位相的差值如下&#xff1a; 由式(2-1)和式(2…

JOSEF快速中间继电器DZK-916 4A AC220V板后嵌入式安装

系列型号 DZK-911快速中间继电器&#xff1b;DZK-912快速中间继电器&#xff1b; DZK-914快速中间继电器&#xff1b;DZK-916快速中间继电器&#xff1b; DZK-917快速中间继电器&#xff1b;DZK-918快速中间继电器&#xff1b; DZK-924快速中间继电器&#xff1b;DZK-934快速中…

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异&#xff0c;高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机&#xff0c;以其高转速、高精度、高刚度的特点&#xff0c;在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…

【项目问题解决】IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()

目录 lombok找不到符号问题修改 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()&#xff0c;无法使用lombok下应有的注解&#xff0c;一度怀疑是版本问题 …

什么是SPA(Single Page Application)?它的优点和缺点是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

JVM理解

1、JVM是什么&#xff1f; JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。 他是帮助我们将java代码 生成编译后 的 class 文件。 2、JRE、JDK和JVM 的关系 …

【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)

利用 FormData 实现文件上传 基础功能&#xff1a;上传文件 演示如下&#xff1a; 概括流程&#xff1a; 前端&#xff1a;把文件数据获取并 append 到 FormData 对象中后端&#xff1a;通过 ctx.request.files 对象拿到二进制数据&#xff0c;获得 node 暂存的文件路径 前端…

【STM32】TIM定时器输入捕获

1 输入捕获 1.1 输入捕获简介 IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff08;上升沿/下降沿&#xff09;&#xff0c;当前CNT的值将被锁存到CCR中&#xff08;把CNT的值读出来&#xff0c;写入到…

【链表Linked List】力扣-109 有序链表转换二叉搜索树

目录 题目描述 解题过程 官方题解 题目描述 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输…

解决思维题的一些自我总结

目录 常见思维题类型 排序 区间问题 01串串 字符串串 位运算 gcd 与 lcm 质数相关 二元组 常见思维题类型 思维题很多都可以说是贪心、但贪心种类很多&#xff0c;具体怎么贪&#xff0c;重要的还是在于积累经验吧...有些东西也很难总结&#xff0c;以下算是我的碎碎念…

linux学习之详解文件

目录 1.先认识文件 2.c语言中常用文件接口 fopen&#xff08;打开文件&#xff09; 3.系统接口操作文件 open write 文件的返回值以及打开文件的本质 理解struct_file内核对象 了解文件描述符&#xff08;fd&#xff09;分配规则 重定向 dup接口 标准错误流 文件缓冲…

(NeRF学习)3D Gaussian Splatting Instant-NGP

学习参考&#xff1a; 3D Gaussian Splatting入门指南【五分钟学会渲染自己的NeRF模型&#xff0c;有手就行&#xff01;】 三维重建instant-ngp环境部署与colmap、ffmpeg的脚本参数使用 一、3D Gaussian Splatting &#xff08;一&#xff09;3D Gaussian Splatting环境配置…