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

在这里插入图片描述

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 = 12.准备后端集群节点
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.hqwc.cn/news/257361.html

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

相关文章

将单体应用程序迁移到微服务

多年来&#xff0c;我处理过多个单体应用&#xff0c;并将其中一些迁移到了微服务架构。我打算写下我所学到的东西以及我从经验中用到的策略&#xff0c;以实现成功的迁移。在这篇文章中&#xff0c;我将以AWS为例&#xff0c;但基本原则保持不变&#xff0c;可用于任何类型的基…

vue2+datav可视化数据大屏(2)

接上一节所说 我们已经讲骨架搭好 这节我们讲述的如何在vue2中使用mock数据和封装axios 1&#xff0c;项目中使用moke &#x1f4d3;什么是mock&#xff1f;&#xff0c;mock就是假数据&#xff0c;除了数据是假的&#xff0c;其他内容都和正常工作中后端开发的接口都是一致的…

JavaScript实战:制作一个待办事项列表应用

JavaScript实战&#xff1a;制作一个待办事项列表应用 引言 在本教程中&#xff0c;我们将一步步创建一个简单的待办事项列表应用&#xff0c;这不仅会帮助你学习基本的JavaScript编程概念&#xff0c;还会教会你如何处理事件以及操作DOM。这个项目是面向初学者的&#xff0c…

Zookeeper单机模式搭建

1、下载 ​wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 2、解压 tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz 3、进入 apache-zookeeper-3.6.3-bin目录下&#xff0c;创建data cd apache-zookeeper-3.6.3-bin mkdir da…

makefile中选项说明

-C gcc的-c选项表示只编译不链接。不带-c选项则默认既编译又链接。 CFLAGS编译参数 LDFLAGS链接参数 指定LIBS是要链接的库的目录。LDFLAGS告诉链接器从哪里寻找库文件。 LDFLAGS指定-L虽然能让链接器找到库进行链接&#xff0c;但是运行时链接器却找不到这个库&#xff0c;…

Docker安装postgres最新版

1. postgres数据库 PostgreSQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种高度可扩展的、可靠的、功能丰富的数据库系统。以下是关于PostgreSQL的一些介绍&#xff1a; 开源性&#xff1a;PostgreSQL是一个开源项目&#xff0c;可以…

嵌入式系统

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

MangoDB数据可updata报错

报错详情 报错原因 语法错误&#xff0c;我们调整语法即可 update&#xff08;{要修改的行}&#xff0c;{$set{要修改的字段}}&#xff09;

【Java基础系列】Cron表达式入门

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

<IBM Websphere Portal>《关于IBM的Portal和WAS的说明和总结(自用笔记)》

《关于IBM的Portal和WAS的简单总结》 1 架构1.1 说明 2 常见问题2.1 LDAP链接问题2.2 启动脚本建议2.3 日志大小保留建议2.4 启动垃圾回收日志 3 日志位置 1 架构 应用服务部署架构如上&#xff1a; &#x1f449;192.168.66.1服务器运行的server进程有&#xff1a;dmgr、nodea…

有了安卓模拟器,就能在Windows 10或11上像使用安卓操作系统一样使用安卓

你可以使用Android模拟器在Windows 11或Windows 10中运行Android应用程序。如果你喜欢的应用程序只在手机上运行,但你想在电脑上使用,这些模拟器会很有用。 BlueStacks 与整个操作系统模拟器不同,BlueStacks只在Windows上模拟Android应用程序。它真的很容易使用,所以你不需…

Linux操作系统 3.Linux用户和权限

一、认知root用户&#xff08;超级管理员&#xff09; Windows、MacOS、Linux均采用多用户的管理模式进行权限管理 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; 之前我们一直使用的是普通的用户 root用户拥有最大的系…