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-numbers2.如何添加规则:  禁止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 -n3.如何修改规则:
-R:修改 需要指定规则的编号
[root@route ~]# iptables -t filter -R  INPUT 1 -p icmp -j DROP4.如何清空计数器:
[root@route ~]# iptables  -Z5.备份规则;
[root@route ~]# iptables-save > /etc/iptables.rule6.清空规则:
[root@route ~]# iptables -F					# 只操作filter
[root@route ~]# iptables -t nat -F			# 清空nat表7.恢复规则:
[root@route ~]# iptables-restore < /etc/iptables.rule8.永久生效:命令: 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 DROPstring: (路由器)限制早上: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 REJECTSYN+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的基本过程。

在这里插入图片描述

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

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

相关文章

【华为数据之道学习笔记】3-4主数据治理

主数据是参与业务事件的主体或资源&#xff0c;是具有高业务价值的、跨流程和跨系统重复使用的数据。主数据与基础数据有一定的相似性&#xff0c;都是在业务事件发生之前预先定义&#xff1b;但又与基础数据不同&#xff0c;主数据的取值不受限于预先定义的数据范围&#xff0…

MySql概述及其性能说明

MySQL是一种开源的关系型数据库管理系统&#xff0c;由瑞典MySQL AB公司开发&#xff0c;现属于Oracle公司。MySQL是最流行的开源数据库之一&#xff0c;被广泛地应用于Web开发中。MySQL提供了一个高度稳定可靠的数据存储解决方案&#xff0c;同时也可以很容易地跨平台运行。My…

2023年广东工业大学腾讯杯新生程序设计竞赛

E.不知道叫什么名字 题意&#xff1a;找一段连续的区间&#xff0c;使得区间和为0且区间长度最大&#xff0c;输出区间长度。 思路&#xff1a;考虑前缀和&#xff0c;然后使用map去记录每个前缀和第一次出现的位置&#xff0c;然后对数组进行扫描即可。原理&#xff1a;若 s …

Linux篇之在Centos环境下搭建Nvidia显卡驱动

一、前提条件 1、首先确认内核版本和发行版本&#xff0c;再确认显卡型号 uname -a // Linux localhost.localdomain 4.18.0-408.el8.x86_64 #1 SMP Mon Jul 18 17:42:52 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux1.2 cat /etc/redhat-release // CentOS Stream release 81.3…

【S2ST】Direct Speech-to-Speech Translation With Discrete Units

【S2ST】Direct Speech-to-Speech Translation With Discrete Units AbstractIntroductionRelated workModelSpeech-to-unit translation (S2UT) modelMultitask learningUnit-based vocoder ExperimentsDataSystem setupBaselineASRMTTTSS2TTransformer Translatotron Evaluat…

Python Jinja2 库的无限可能性

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Jinja2&#xff0c;作为Python中最流行的模板引擎之一&#xff0c;为开发者提供了强大的工具&#xff0c;用于在Web应用和其他项目中生成动态内容。本文将深入研究 Jinja2 库的各个方面&#xff0c;提供更丰富的…

数据科学:Matplotlib、Seaborn笔记

数据科学&#xff1a;Numpy、Pandas 数据科学&#xff1a;Matplotlib、Seaborn笔记 数据科学&#xff1a;Numpy、Pandas、Matplotlib、Seaborn、Scipy、Scikit-Learn 三、Matplotlib1.Matplotlib subplots函数2.tight_layout()函数3.Matplotlib grid()设置网格格式4.fill_bet…

<蓝桥杯软件赛>零基础备赛20周--第9周--前缀和与差分

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

从零开始的c语言日记day41——自定义类型结构体

一、结构体的声明 1.1结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 Tag结构体标签 Member-list成员列表-里面可以有很多成员 Variable-list变量列表 结构体类型的定义方式 S1&#xff0c;s2是struct stu类型的…

黑苹果之显卡篇

一、什么是显卡 显卡GPU&#xff08;Video card、Display card、Graphics card、Video adapter&#xff09;是个人计算机基础的组成部分之一&#xff0c;将计算机系统需要的显示信息进行转换驱动显示器&#xff0c;并向显示器提供逐行或隔行扫描信号&#xff0c;控制显示器的正…

python数据分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 pandas统计分析基础实训 实训1 读取并查看某地区房屋销售数据的基本信息1. 训练要点2. 需求说明3.实现思路及步骤 实训2 提取房屋售出时间信息并描述房屋价格信息1. 训练要点…

数据结构 图的广度优先搜索和深度优先搜索

一、广度优先搜索 广度优先搜索等价于树的层次遍历&#xff0c;将起点的每一层进行遍历 当这一层结点全部被遍历完时&#xff0c;再遍历下一层次&#xff0c;从图中可以根据距离遍历起点的长度进行层次选择 例&#xff1a; 以a结点作为开始结点 a的下一层次有b c e三个结点 所以…

Spark Structured Streaming使用教程

文章目录 1、输入数据源2、输出模式3、sink输出结果4、时间窗口4.1、时间窗口4.2、时间水印&#xff08;Watermarking&#xff09; 5、使用例子 Structured Streaming是一个基于Spark SQL引擎的可扩展和容错流处理引擎&#xff0c;Spark SQL引擎将负责增量和连续地运行它&#…

Spring Security 自定义异常失效?从源码分析到解决方案

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch(ES)数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

微信小程序js数组对象根据某个字段排序

一、排序栗子 注: 属性字段需要进行转换,如String类型或者Number类型 //升序排序 首元素(element1)在前 降序则(element1)元素在后 data data.sort((element1, element2) >element1.属性 - element2.属性 ); 二、代码 Page({/*** 页面的初始数据*/data: {user:…

SpringSecurity安全授权

目录 前言 正文 1.基本流程 2.基本用法 3.配置项 4.HttpSecurity 方式和内存认证方式 5.认证流程 6.基于数据库查询的登录验证 7.多种角色权限认证 8.自定义权限认证 总结 前言 安全对于任何系统来说都是非常重要的&#xff0c;权限的分配和管理一直都是开发者需…

C语言——输出菱形

法一&#xff1a; #include<stdio.h> #define N 7 //假设输出7层菱形 int main(){int i;//i控制第几行 int j;//j控制每一行空格的循环个数 int k;//k控制每一行*的循环次数 for(i1;i<4;i){//将图形分为两部分,前四行(第一部分) for(j1;j<4-i;j){//输出第i行的…

echarts双折线图

引用 //反应时长 durationCharts categoryCommonChart(studyBehavior.durationCharts, durationCharts) function categoryCommonChart(odata, dom){var myChart echarts.init(document.getElementById(dom));let oarr []oarr odata.series.map(function(item){let color…

随笔-这都是命吗

我与鹏哥、小付有个小群&#xff0c;前几天&#xff0c;鹏哥在群里发了一个图&#xff0c;是他那个城市准备扶持的高新产业&#xff0c;有元宇宙、量子信息、生物制药、人工智能什么的。 先前的时候鹏哥给我说过&#xff0c;当地准备了六百多亩地&#xff0c;准备发展高新产业…