Linux防火墙(7)
实验目的
通过该实验了解Linux防火墙iptables实现原理,掌握iptables基本使用方法,能够利用iptables对操作系统进行加固。
预备知识
基本原理
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,具有完成封包过滤、封包重定向和网络地址转换(NAT)等功能。netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。可以这样来理解,netfilter是表的容器,表是链的容器,而链又是规则的容器。
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。现在REHL5成了四张表五个链了如下:
系统缺省的表为"filter",该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件: 如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(policy)来处理该数据包。
数据包在filter表中的流程为:有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有三种情况:
1.如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
2.如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
3.如果数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。
iptables执行流程图
如下图所示,iptables在处理数据包时,将按照下面流程执行:
①当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
②如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables表、链说明
规则表
1.filter表——三个链:INPUT、FORWARD、OUTPUT。
作用:过滤数据包
内核模块:iptables_filter
2.Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口)
内核模块:iptable_nat
3.Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
内核模块:iptable_mangle
4.Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理
内核模块:iptable_raw
规则链
1.INPUT——进来的数据包应用此规则链中的策略;
2.OUTPUT——外出的数据包应用此规则链中的策略;
3.FORWARD——转发数据包时应用此规则链中的策略;
4.PREROUTING——对数据包作路由选择前应用此链中的规则;
5.POSTROUTING——对数据包作路由选择后应用此链中的规则。
规则表之间的优先顺序:
规则表之间按照Raw、mangle、nat、filter的顺序进行过滤,具体分三种情况:
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二种情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
iptables语法
语法:iptables [-t table] command [match] [-j target/jump]
1)[-t table] 指定规则表
-t 参数用来,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一律视为是 filter。个规则表的功能如下:
nat:此规则表拥有 PREROUTING 和 POSTROUTING 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT、DNAT),这个规则表除了作网址转换外,请不要做其它用途。
mangle:此规则表拥有 PREROUTING、FORWARD 和 POSTROUTING 三个规则链。除了进行网址转换工作会改写封包外,在某些特殊应用可能也必须去改写封包(TTL、TOS)或者是设定markMARK(将封包作记号,以进行后续的过滤),这时就必须将这些工作定义在 mangle 规则表中,由于使用率不高,这里不讨论 mangle 的用法。
filter:这个规则表是默认规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的处理动作(例如:DROP、 LOG、 ACCEPT 或 REJECT),需要将基本规则都建立在此规则表中。
2)command 常用命令列表:
命令:-A, --append;范例:iptables -A INPUT ...;说明:新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则。
命令:-D, --delete;范例:iptables -D INPUT --dport 80 -j DROP,iptables -D INPUT 1;说明:从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号加以删除。
命令:-R, --replace;范例:iptables -R INPUT 1 -s 192.168.0.1 -j DROP;说明:取代现行规则,规则被取代后并不会改变顺序。
命令:-I, --insert;范例:iptables -I INPUT 1 --dport 80 -j ACCEPT;说明:插入一条规则,原本该位置上的规则将会往后移动一个顺位。
命令:-L, --list;范例1 :iptables -L INPUT,说明: 列出某规则链中的所有规则;范例2:iptables -t nat -L ,说明:列出nat表所有链中的所有规则。
命令:-F, --flush;范例:iptables -F INPUT;说明:删除filter表中INPUT链的所有规则。
命令:-Z, --zero;范例:iptables -Z INPUT;说明:将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
命令:-N, --new-chain;范例:iptables -N allowed;说明:定义新的规则链。
命令:-X, --delete-chain;范例:iptables -X allowed;说明:删除某个规则链。
命令: -P, --policy;范例:iptables -P INPUT DROP;说明:定义过滤政策。 也就是未符合过滤条件之封包, 默认的处理方式。
命令:-E, --rename-chain;范例:iptables -E allowed disallowed;说明:修改某自定义规则链的名称。
3)[match] 常用封包匹配参数
参数:-p, --protocol;范例:iptables -A INPUT -p tcp;说明:匹配通讯协议类型是否相符,可以使用 ! 运算符进行反向匹配,例如:-p !tcp,意思是指除 tcp 以外的其它类型,如udp、icmp等;如果要匹配所有类型,则可以使用 all 关键词,例如:-p all。
参数:-s, --src, --source;范例:iptables -A INPUT -s 192.168.1.1;说明:用来匹配封包的来源 IP,可以匹配单机或网络,匹配网络时请用数字来表示 子网掩码,例如:-s 192.168.0.0/24,匹配 IP 时可以使用 ! 运算符进行反向匹配,例如:-s !192.168.0.0/24。
参数:-d, --dst, --destination;范例:iptables -A INPUT -d 192.168.1.1;说明:用来匹配封包的目的地 IP,设定方式同上。
参数:-i, --in-interface;范例:iptables -A INPUT -i eth0;说明:用来匹配封包是从哪块网卡进入,可以使用通配字符 + 来做大范围匹配,例如:-i eth+ 表示所有的 ethernet 网卡,也可以使用 ! 运算符进行反向匹配,例如:-i !eth0。
参数:-o, --out-interface;范例:iptables -A FORWARD -o eth0;说明:用来匹配封包要从哪 块网卡送出,设定方式同上。
参数:--sport, --source-port;范例:iptables -A INPUT -p tcp --sport 22;说明:用来匹配封包的源端口,可以匹配单一端口,或是一个范围,例如:--sport 22:80表示从 22 到 80 端口之间都算是符合条件,如果要匹配不连续的多个端口,则必须使用 --multiport 参数,详见后文。匹配端口号时,可以使用 ! 运算符进行反向匹配。
参数:--dport, --destination-port;范例:iptables -A INPUT -p tcp --dport 22;说明:用来匹配封包的目的地端口号,设定方式同上
参数:--tcp-flags;范例:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN;说明:匹配 TCP 封包的状态标志,参数分为两个部分,第一个部分列举出想 匹配的标志,第二部分则列举前述标志中哪些有被设置,未被列举的标志必须是空的。TCP 状态标志包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急) 、PSH(强迫推送) 等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行匹配。匹配标志时,可以使用 ! 运算符行反向匹配。
参数:--syn;范例:iptables -p tcp --syn;说明:用来表示TCP通信协议中,SYN位被打开,而ACK与FIN位关闭的分组,即TCP的初始连接,与 iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 !运算符,可用来 匹配非要求连接封包。
参数:-m multiport --source-port;范例:iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110;说明:用来匹配不连续的多个源端口,一次最多可以匹配 15 个端口,可以使用 ! 运算符进行反向匹配。
参数:-m multiport --destination-port;范例:iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110;说明:用来匹配不连续的多个目的地端口号,设定方式同上。
参数:-m multiport --port;范例:iptables -A INPUT -p tcp -m multiport --port 22,53,80,110;说明:这个参数比较特殊,用来匹配源端口和目的端口号相同的封包,设定方式同上。注意:在本范例中,如果来源端口号为 80目的地端口号为 110,这种封包并不算符合条件。
参数:--icmp-type;范例:iptables -A INPUT -p icmp --icmp-type 8;说明:用来匹配 ICMP 的类型编号,可以使用代码或数字编号来进行 匹配。请打 iptables -p icmp --help 来查看有哪些代码可用。
参数:-m limit --limit;范例:iptables -A INPUT -m limit --limit 3/hour;说明:用来匹配某段时间内封包的平均流量,上面的例子是用来 匹配:每小时平均流量是否超过一次 3 个封包。 除了每小时平均次外,也可以每秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。 除了进行封 包数量的匹配外,设定这个参数也会在条件达成时,暂停封包的匹配动作,以避免因骇客使用洪水攻击法,导致服务被阻断。
参数:--limit-burst;范例:iptables -A INPUT -m limit --limit-burst 5;说明:用来匹配瞬间大量封包的数量,上面的例子是用来匹配一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封包将被直接丢弃。使用效果同上。
参数:-m mac --mac-source;范例:iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01;说明:用来匹配封包来源网络接口的硬件地址,这个参数不能用在 OUTPUT 和 POSTROUTING 规则链上,这是因为封包要送到网 卡后,才能由网卡驱动程序透过 ARP 通讯协议查出目的地的 MAC 地址,所以 iptables 在进行封包匹配时,并不知道封包会送到哪个网络接口去。
参数:--mark;范例:iptables -t mangle -A INPUT -m mark --mark 1;说明:用来匹配封包是否被表示某个号码,当封包被匹配成功时,可以透过 MARK 处理动作,将该封包标示一个号码,号码最大不可以超过 4294967296。
参数:-m owner --uid-owner;范例:iptables -A OUTPUT -m owner --uid-owner 500;说明:用来匹配来自本机的封包,是否为某特定使用者所产生的,这样可以避免服务器使用 root 或其它身分将敏感数据传送出,可以降低系统被骇的损失。可惜这个功能无法 匹配出来自其它主机的封包。
参数:-m owner --gid-owner;范例:iptables -A OUTPUT -m owner --gid-owner 0;说明:用来匹配来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。
参数:-m owner --pid-owner;范例:iptables -A OUTPUT -m owner --pid-owner 78;说明:用来匹配来自本机的封包,是否为某特定进程所产生的,使用时机同上。
参数:m owner --sid-owner;范例:iptables -A OUTPUT -m owner --sid-owner 100;说明:用来匹配来自本机的封包,是否为某特定 连接(Session ID)的响应封包,使用时机同上。
参数:-m state --state;范例:iptables -A INPUT -m state --state RELATED,ESTABLISHED;说明:用来匹配连接状态, 连接状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示该封包的连接编号(Session ID)无法辨识或编号不正确。
ESTABLISHED 表示该封包属于某个已经建立的连接。
NEW 表示该封包想要起始一个连接(重设连接或将连接重导向)。
RELATED 表示该封包是属于某个已经建立的连接,所建立的新连接。例如:FTP-DATA 连接必定是源自某个 FTP 连接。
4)[-j target/jump] 常用的处理动作:
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,分别说明如下:
ACCEPT: 将封包放行,进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链(natostrouting)。
REJECT: 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个封包会要求对方关闭 连接),进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序。 范例如下:iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP: 丢弃封包不予处理,进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序。
REDIRECT: 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续匹配其它规则。 这个功能可以用来实现透明代理或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE: 改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则 链(manglepostrouting)。这个功能与SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP会从网卡直接读取,当使用拨 号接连时,IP通常是由ISP公司的DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG: 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续匹配其规则。例如:iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT: 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则(mangleostrouting)。范例如下:iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT: 改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。范例如下:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR: 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE: 中断过滤程序,将封包放入队列,交给其它程序处理。通过自行开发的处理程序,可以进行其它应用,例如:计算连接费用等。
RETURN: 结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,这个动作则就相当于提前结束子程序并返回到主程序中。
MARK: 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续匹配其它规则。范例如下:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
netstat语法
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
1)列出所有端口(包括监听和未监听的)
列出所有端口 netstat -a
列出所有 tcp 端口 netstat -at
列出所有 udp 端口 netstat -au
2)列出所有处于监听状态的 Sockets
只显示监听端口 netstat -l
只列出所有监听 tcp 端口 netstat -lt
只列出所有监听 udp 端口 netstat -lu
只列出所有监听 UNIX 端口 netstat -lx
3)显示每个协议的统计信息
显示所有端口的统计信息 netstat -s
显示TCP端口的统计信息 netstat -st
显示UDP端口的统计信息 netstat - su
4)在 netstat 输出中显示 PID 和进程名称 netstat -p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
5)在 netstat 输出中不显示主机,端口和用户名(host, port or user)
当不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
实验环境
服务器:centos6.3,IP地址:10.1.1.112
测试者:win2003,IP地址随机,可自己查看,在本例中为10.1.1.16
实验步骤一
2013年王小虎同学经过四年的学习,终于从北京某高校毕业了,历经千辛万苦,终于应聘到了北京某大型信息公司,担任网络管理员,负责管理公司的机房与网络,可是网管搞怎么搞,小虎同学有点迷茫了,下班后联系了之前的学长一块吃烧烤,请学长指点迷津……学长喝了一口牛栏山,说:沉住气,Rome was not built in a day,想当好网管,首先学会用iptables这个神器!明天你先学会这几个事情:
1、学会查看系统中iptables中已经有的规则,知道如何关闭和启用这些规则;
2、学会用iptables保护自己的主机,从最简单开始,不让别人用ping到主机或者用ssh访问到主机;
3、学会如何利用iptables防御网络DDos攻击;
4、如果服务器不能关闭ssh,但是又要防止黑客的字典攻击和暴力破解,管理员怎么样用iptables来实现?
你先学会上面四个事情,iptables就算入门了,剩下的下次喝酒告诉你如何用iptables做nat吧。
任务一:学会查看系统中iptables中已经有的规则,掌握如何关闭和启用这些规则
1. 利用本机putty程序登录到centos服务器中;
2. 利用windows操作机中桌面上的“putty.exe”程序,登录centos服务器(IP地址:10.1.1.112,用户名:root,密码:123456)
如果出现证书信任的提示,选择“是”,可以看到能够登录到centos主机,输入给定的用户名与密码,登录进,如下所示

3. 输入命令,查看iptables状态;
#service iptables status 查看iptables状态
由图中可以看到在表filter中有三个chain,分别为INPUT、FORWARD和OUTPUT。
4. 关闭10.1.1.112上centos服务器的iptables防火墙,如下:
#service iptables stop
5. 保存并查看10.1.1.112服务器上iptables规则
在iptables中添加的规则即时生效,但重启后规则将会丢失,因此需要保存规则,以便重启时重新加载。
#/etc/init.d/iptables save
实验步骤二
学会用iptables保护自己的主机,不让别人用ping
1、清空centos主机中iptables规则:
#iptables -F
2、登录到windows操作机中,利用ping命令访问10.1.1.112;
3、在主机centos中,加入对应的规则对centos服务器进行加固,使windows操作机中的无法ping通centos主机。在主机centos中,加入下列规则,并查看。
#iptables -A INPUT -p icmp -j DROP
发现规则已经生效,无法ping通centos:
命令说明如下:
-A INPUT #表示在链INPUT中增加一条规则;
-p icmp #p指protocol(协议),指对icmp协议进行操作;
-j DROP #指动作为DROP(丢弃)。
学会REJECT参数,并理解其与DROP两者的区别
在上个任务中,已经使用iptables的DROP处理使windows不能够ping通centos主机;接下来,在centos主机中增加什么样的iptables规则对centos服务器进行加固,能使windows操作机中的ping命令达到下面效果?
现在再试试用REJECT处理。首先,删除刚才所加的规则。
1. 在centos主机中,输入下列命令删除iptables中的规则
# iptables -F
2. 在centos主机中,加入下列新的iptables规则。
#iptables -A INPUT -p icmp -j REJECT
再次用Windows来ping,结果如下所示:
与之前DROP处理不一样,ping操作返回Destination port unreachable。
实验步骤三
如何利用iptables防御网络DDos攻击
1、在centos主机中,输入命令# iptables -F,删除iptables中的规则
2、在windows操作机下下载attack攻击程序
下载地址:http://tools.hetianlab.com/tools/attack/attack.zip
3、双击运行windows操作机运行攻击工具attack.exe对centos发起洪水攻击;
4、利用putty工具登录centos主机,输入命令:netstat -an,观察centos服务器资源与网络相关情况,发现大量对centos服务器10.1.1.112的111端口(rpc端口)的访问。
5、继续输入命令:netstat -st,观察centos服务器TCP统计信息,发现centos服务器短时间收到大量数据包。

6、由此判断,有攻击者进行对端口111(sunrpc)的tcp洪水攻击,并且攻击者伪装了攻击源IP地址,因此对111端口的tcp协议进行iptables规则设置:iptables -A INPUT -p tcp --dport 111 -j DROP,并查看
7、在centos服务器的iptables中输入规则之后,等待2分钟左右(centos回收资源需要一定时间),运行相关查看系统网络信息,观察洪水攻击造成的影响;
8、请一定记住完成上一步之后,关闭windows操作机中的attack命令窗口,停止洪水攻击。
实验步骤四
如何利用iptables的recent模块防御ssh字典攻击
在某服务器应用中,为了远程管理,SSH不能停掉,但是又要防止攻击者的字典攻击,试通过iptables配置,保证SSH的安全。
iptables的recent模块可以根据源地址、目的地址对最近一段时间内经过本机的数据包的情况进行统计,并根据相应的规则执行,命令如下:
--name #设定列表名称,默认DEFAULT
--rsource #源地址,此为默认
--rdest #目的地址
--seconds #指定时间内
--hitcount #命中次数
--set #将地址添加进列表,并更新信息,包含地址加入的时间戳
--rcheck #检查地址是否在列表,以第一个匹配开始计算时间
--update #和rcheck类似,以最后一个匹配计算时间
--remove #在列表里删除相应地址,后跟列表名称及地址
1. 在centos主机中,输入下列命令删除iptables中的规则:
# iptables -F
2. 依次点击“开始”>>“所有程序”>>“Metasploit”>>“Metasploit Console;打开metasploit界面,等待几分钟出现msf提示符;
3. 在msf提示符下,输入:use auxiliary/scanner/ssh/ssh_login对metasploit 进行配置
在msf auxiliary(ssh_login)提示符下:
a)输入命令:set RHOSTS 10.1.1.112,设置SSH主机地址;
b)输入命令:set PASS_FILE c:/pass.txt,设置字典文件;
c)输入命令:set USERNAME root,设置破解的帐号名;
d)设置完成后输入run命令运行字典攻击
4. 利用putty登录centos服务器,查看系统安全日志信息(/var/log/secure),输入命令:cat /var/log/secure,发现大量相同IP地址登录失败信息,分析可能有人进行ssh暴力破解。
5. 继续输入命令:cat /var/log/secure | grep 10.1.1.16 | wc -l,对该IP地址进行统计,发现来自该IP地址的登录失败次数不停增长。
6. 在centos服务器上利用iptables的recent模块进行主机加固。输入如下命令:
a)iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --update --seconds 60 --hitcount 3 -j DROP
b)iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
规则过程分析:模拟一下某个电脑连接本机SSH服务的数据包流程,假设以下数据包是在一小时内到达本机的:
•当这个电脑的第1个SSH包到达本机,规则a检查SSHPOOL列表中这个源IP是否有hitcount,因为是第一个包,显而易见,列表是0,规则a判定这个数据包不必执行DROP,并且也不处理这个数据包,将数据包转给下条规则;
•规则b将这个数据包计入SSHPOOL列表,就是做+1,因为规则中有-j ACCEPT,规则b放行这个包;
•当第2个SSH包到达本机,规则a检查SSHPOOL列表的hitcount,发现没有超过3,于是判定不执行DROP并转给下条规则处理;
•规则b在SSHPOOL中+1,并放行,第2个数据包进入本机;
•第3个数据包过程如上;
•第4个包到达本机,规则a检查SSHPOOL列表中的hitcount,发现是3了已经连接3次了,于是执行DROP,不必再转给下条规则了丢弃该包。
从上面的流程可以看出,--set的功能在于计录数据包,将源IP加入列表。--update的功能在于判定数据包在seconds和hitcount条件下是否要DROP。
7. 返回Windows操作机中,查看metasploit,发现SSH暴力破解由于连接错误终止。

部分实验截图:
centos服务器:

window截图:

attack.exe 泛洪攻击模块截图

msf工具截图:




相关文章:
Linux防火墙(7)
实验目的 通过该实验了解Linux防火墙iptables实现原理,掌握iptables基本使用方法,能够利用iptables对操作系统进行加固。预备知识基本原理 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,具有完成…...
2.11整理(2)(主要关于teacher forcing)
teacher forcing 训练迭代过程早期的RNN预测能力非常弱,几乎不能给出好的生成结果。如果某一个unit产生了垃圾结果,必然会影响后面一片unit的学习。RNN存在着两种训练模式(mode): free-running mode:就是常见的那种训练网络的方式: 上一个sta…...
亿级高并发电商项目-- 实战篇 --万达商城项目 三(通用模块、商品服务模块、后台API模块、IDEA忽略文件显示等开发工作
专栏:高并发项目 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框…...
IDEA下java程序的调试(简易实例图示版)
在线排版不太好看,介意的读者可下载word下来看:https://download.csdn.net/download/xijinno1/87441301IDEA下java程序的简单调试-System.out.println首先本次进行调试的一个程序是实现从1累加到100的功能,是在IDEA下进行编写的。如图所示&am…...
动态规划算法
1.应用场景-背包问题 背包问题:有一个背包,容量为 4 磅 , 现有如下物品 要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复 2.动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是&…...
nacos的单机模式和集群模式
文章目录 目录 文章目录 前言 一、nacos数据库配置 二、单机模式 三、集群模式 四、使用nginx集群模式的负载均衡 总结 前言 一、nacos数据库配置 在数据库中创建nacos_config 编码格式utf8-mb4的数据库 把上面的数据库文件导入数据库 在 配置文件中添加如下 spring.datasour…...
Spring Boot 整合定时任务完成 从0 到1
Java 定时任务学习 定时任务概述 > 定时任务的应用场景非常广泛, 如果说 我们想要在某时某地去尝试的做某件事 就需要用到定时任务来通知我们 ,大家可以看下面例子 如果需要明天 早起,哪我们一般会去定一个闹钟去通知我们, 而在编程中 有许许多多的…...
Dialogue Transformers
Abstract 本文介绍了一种基于 Transformer 架构的 对话策略,其中自注意力机制被应用于对话轮次(dialogue turns)的序列上。近期的一些工作使用层次化的循环神经网络(hierarchical recurrent neural networks)在对话上下文中对多个话语(utterances)进行编码,但是我们认…...
【遇见青山】项目难点:缓存击穿问题解决方案
【遇见青山】项目难点:缓存击穿问题解决方案1.缓存击穿互斥锁🔒方案逻辑过期方案2.基于互斥锁方案的具体实现3.基于逻辑过期方案的具体实现1.缓存击穿 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效…...
2023Flag具体实施计划(短期)
重新看了flag ,要做的事情太多,太杂,上周一周时间都在纠结和琢磨,该怎么下手。如何达成小目标。特别是沟通,汇报,演讲能力, 以及整体体系化的思维能力的训练。如何做到多思考,而不是瞎搞。这边重…...
研一寒假C++复习笔记--左值和右值的理解和使用
目录 1--左值和右值的定义 2--简单理解左值和右值的代码 3--非const引用只能接受左值 1--左值和右值的定义 左值:L-Value,L理解为 Location,表示可寻; 右值:R-Value,R理解为 Read,表示可读&a…...
Android 11.0 动态修改SystemProperties中ro开头系统属性的值
需求: 在11.0的产品开发中,对于定制功能的需求很多,有些机型要求可以修改系统属性值,对于系统本身在10.0以后为了系统安全性,不允许修改ro开头的SystemProperties的值,所以如果要求修改ro的相关系统属性&am…...
为什么分库分表
系列文章目录 文章目录系列文章目录前言一、什么是分库分表二、分库分表的原因分库分表三、如何分库分表3.1 垂直拆分1.垂直分库2、垂直分表3.2 水平拆分水平分库水平分表水平分库分表的策略hash取模算法range范围rangehash取模混合地理位置分片预定义算法四、分库分表的问题分…...
1625_MIT 6.828 stabs文档信息整理_下
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续之前的学习笔记,整理一下最近看过的一点stabs资料。 这一页中有一半的信息是Fortran专用的,直接跳过。参数的符号修饰符是p,…...
论文阅读 | Rethinking Coarse-to-Fine Approach in Single Image Deblurring
前言:ICCV2021图像单帧运动去糊论文 论文地址:【here】 代码地址:【here】 Rethinking Coarse-to-Fine Approach in Single Image Deblurring 引言 图像去糊来自与物体或相机的运动。现有的deblur领域的深度学习方法大多都是coarse-to-fin…...
Mysql 增删改查(二)—— 增(insert)、删(delete)、改(update)
目录 一、插入 1、insert 2、replace(插入否则更新) 二、更新(update) 三、删除 1、delete 2、truncate(截断表,慎用) 一、插入 1、insert (1) 单行 / 多行插入 全列插入:…...
JSD2212复习串讲
1. Java语言基础阶段 这一部分主要是练,给一些题目还有讲解一些最基础的语法,做一些额外的补充 1.1 基本概念 1.2 变量 1.2.1 数据类型 4类8种 基本类型:整形、浮点型、字符型、布尔型 整形:byte -》short-》int-》long 浮点…...
sphinx 升级到6.x后的Jquery问题
sphinx 升级到6.0 后,以前对于jquery的默认引用方式发生了改变以前在编译后的html中jquery是如下引用的:<script src"_static/jquery.js"></script>而升级到6.0后,对于jquery 是一个googleapi的远程jquery调用…...
NSSCTF Round#8 Basic
from:http://v2ish1yan.top MyDoor 使用php伪协议读取index.php的代码 php://filter/readconvert.base64-encode/resourceindex.php<?php error_reporting(0);if (isset($_GET[N_S.S])) {eval($_GET[N_S.S]); }if(!isset($_GET[file])) {header(Location:/index.php?fi…...
多传感器融合定位十二-基于图优化的建图方法其一
多传感器融合定位十二-基于图优化的建图方法其一1. 基于预积分的融合方案流程1.1 优化问题分析1.2 预积分的作用1.3 基于预积分的建图方案流程2. 预积分模型设计3. 预积分在优化中的使用3.1 使用方法3.2 残差设计3.3 残差雅可比的推导3.3.1 姿态残差的雅可比3.3.2 速度残差的雅…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
