目录
4.iptables的表、链结构——四表五链(实际为五表五链)
7.1.1实验 控制目的主机 不想让其访问本机的httpd服务
7.1.2如何实现主机1可以ping主机2,但是主机2无法ping主机1
引言
安全技术
广泛意义上的防水墙:防水墙(Waterwall),与防火墙相对,是一种防止内部信息泄漏的安全产品。 网络、外设接口、存储介质和打印机构成信息泄漏的全部途径。防水墙针对这四种泄密途径,在事前、事 中、事后进行全面防护。其与防病毒产品、外部安全产品一起构成完整的网络安全体系。
隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中。
简单理解为是筛选和过滤流量,对需要的流量进行放行,对不需要或者有威胁的流量进行拒绝
按保护范围划分:
按实现方式划分:
按网络协议划分:
防火墙是一个解包和重新装包的过程
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否 允许该数据包通过
- 优点:对用户来说透明,处理速度快且易于维护
- 缺点:无法检查应用层数据,如病毒等
应用层防火墙
应用层防火墙/代理服务型防火墙,也称为代理服务器(Proxy Server)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检查,比较安全
- 缺点:增加防火墙的负载
- 提示:现实生产环境中所使用的防火墙一般都是二者结合体,即先检查网络数据,通过之后再送到应用 层去检查
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
从CentOS 7 版开始引入了新的前端管理工具
软件包:
管理工具:
链chain:
内置链:每个内置链对应于一个勾子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook勾子可以调用,用自定义链使才生效。
内核中数据包传输过程
三种报文流向
用户空间进程:例如,用户通过http协议来访问我的80端口,实际上访问我的httpd服务
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
netfilter:
属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables :
属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
总结:
raw 跟踪数据包;mangle 标记数据包;nat 地址转换(公网私网地址转换);filter 地址过滤(允许/拒绝)
security > raw > mangle > nat >filter
总结:
INPUT 入站数据;OUTPUT 出站数据;FORWARD 转发数据;POSTROUTING 路由选择后;PREROUTING 路由选择前
iptables由五个表table和五个链chain以及一些规则组成
注:在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少
INPUT: 处理入站数据包,匹配目标IP为本机的数据包。
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables
- [root@localhost ~]#systemctl stop firewalld
- [root@localhost ~]#yum -y install iptables iptables-services
- 已加载插件:fastestmirror, langpacks
- Loading mirror speeds from cached hostfile
- * base: mirrors.nju.edu.cn
- * epel: mirror.nju.edu.cn
- * extras: mirrors.nju.edu.cn
- * updates: mirrors.nju.edu.cn
- 软件包 iptables-1.4.21-35.el7.x86_64 已安装并且是最新版本
- 正在解决依赖关系
- --> 正在检查事务
- ---> 软件包 iptables-services.x86_64.0.1.4.21-35.el7 将被 安装
- --> 解决依赖关系完成
-
- 依赖关系解决
-
- =============================================================================
- Package 架构 版本 源 大小
- =============================================================================
- 正在安装:
- iptables-services x86_64 1.4.21-35.el7 base 52 k
-
- 事务概要
- =============================================================================
- 安装 1 软件包
-
- 总下载量:52 k
- 安装大小:23 k
- Downloading packages:
- iptables-services-1.4.21-35.el7.x86_64.rpm | 52 kB 00:00
- Running transaction check
- Running transaction test
- Transaction test succeeded
- Running transaction
- 正在安装 : iptables-services-1.4.21-35.el7.x86_64 1/1
- 验证中 : iptables-services-1.4.21-35.el7.x86_64 1/1
-
- 已安装:
- iptables-services.x86_64 0:1.4.21-35.el7
-
- 完毕!
- [root@localhost ~]#systemctl status iptables.service
- ● iptables.service - IPv4 firewall with iptables
- Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
- Active: inactive (dead)
- [root@localhost ~]#systemctl start iptables.service
- [root@localhost ~]#systemctl status iptables.service
- ● iptables.service - IPv4 firewall with iptables
- Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
- Active: active (exited) since 四 2024-02-01 14:51:09 CST; 1s ago
- Process: 3274 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
- Main PID: 3274 (code=exited, status=0/SUCCESS)
-
- 2月 01 14:51:09 localhost.localdomain systemd[1]: Starting IPv4 firewall ...
- 2月 01 14:51:09 localhost.localdomain iptables.init[3274]: iptables: Appl… ]
- 2月 01 14:51:09 localhost.localdomain systemd[1]: Started IPv4 firewall w...
- Hint: Some lines were ellipsized, use -l to show in full.
iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 匹配条件 ] [ -j 控制类型 ]
其中,表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;
注意事项:
iptables 指定表(-t filter/-t nat) 如何在链中插入规则 指定链(-A INPUT)条件/规则(-s 192.168.0.1 -j DROP)
- -t filter 指定表;默认是filter
- A append 附加 在末尾追加
- I 插队 I 2表示第二条规则;I默认排在第一条
- -s 规则
- -j 跳转
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下
选项 | 定义 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不会做任何回应 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应信息 |
LOG | 在/var/log/message 文件中记录日志信息,然后将数据包传递给下一条视频 |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址 |
防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 动作,并没有真正处理数据包。;
控制类型必须使用大写!!!
选项 | 用法详解 |
---|---|
-A | 在指定链末尾追加一条 iptables -A INPUT (操作) |
-I | 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作) |
-P | 指定默认规则 iptables -P OUTPUT ACCEPT (操作) |
-D | 删除 iptables -t nat -D INPUT 2 (操作) |
-p | 服务名称 icmp tcp |
-R | 修改、替换某一条规则 iptables -t nat -R INPUT (操作) |
-L | 查看 iptables -t nat -L (查看) |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
--line-number | 规则带编号 iptables -t nat -L -n --line-number /iptables -t nat -L --line-number |
-F | 清除链中所有规则 iptables -F (操作) |
-N | 新加自定义链 |
-X | 清空自定义链的规则,不影响其他链 iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
清空防火墙规则
当前无任何防火墙规则
当前192.168.241.22主机还可以ping通192.168.241.11主机
添加一条防火墙规则,不允许任何主机通过icmp协议ping本机
此时,无法通过icmp协议通过ping来检测与192.168.241.11主机的网络连通性
查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号。例如,若要查看 filter 表 INPUT 链中的所有规则,并显示规则序号, 可以执行以下操作
-v详细信息;-t查看nat表;-n规则数字化显示
清空指定链或表中的所有防火墙规则,使用管理选项“-F”。例如,若要清空 filter 表 INPUT
删除规则 -D
替换规则
注意:
- 若规则列表中有多条相同的规则时,按内容匹配只删除的序号最小的一条
- 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
- 按内容匹配删数时,确保规则存在,否则报错
iptables 的各条链中,默认策略是规则匹配的最后一个环节——当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为 ACCEPT(允许)、DROP(丢弃)两种。例如,执行以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。
iptables [-t表名] -P <链名> <控制类型>
设置只有192.168.241.11的主机可以接受登录
如果输入该命令,则拒绝所有192.168.241.0网段的主机连接
会生成如下情况
解决办法,进入真机查看防火墙规则
在真机插入一条防火墙规则,置于拒绝规则之前
插播 如果一直删除第三条规则,最后只会留下两条规则
Xshell是通过真机来使用的,所以要把本机的ip添加进去,使得真机被接受通过
Xshell连接成功
需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认 策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别。
白名单
-P设置默认规则为DROP 拒绝之后 会拒绝所有连接
如果在生产环境中建议使用这个白名单,白名单要放在所有规则之后;
如果想设置白名单,默认拒绝所有之前,先把自己加进来
先设置自己的地址进来,接收真机的地址
然后设置白名单 所有的流量都拒绝 此时看到不会影响Xshell的连接
默认白名单
iptables | table | command | chain | parameter | target |
-t filter | -A -Z -N | INPUT FORWARD OUTPUT PREROUTING POSTROUTING | -p -s -d -i -o --sport --dport | -j ACCEPT -j DROP -j REJECT |
准备工作,目前192.168.241.22可以通过icmp协议来ping通192.168.241.11
设置拒绝192.168.241.22主机通过icmp协议来ping本机
此时看到192.168.241.22主机无法通过icmp协议来ping192.168.241.11主机
但是通过ssh命令可以连接本机
.so结尾的均为模块,也就是说在使用配置防护墙规则的时候,调用的是.so结尾的配置文件
如果想禁用tco协议防火墙配置,那么必须要有tcp模块才可以使用限制功能
[root@localhost ~]#man iptables-extensions
隐含扩展可以通过man iptables-extension查看扩展帮助
--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手;
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手。——错误包
注意: --sport和--dport 必须配合-p <协议类型>使用
(dport目的;sport源目的)
192.168.241.11主机操作
- [root@localhost ~]#rpm -q httpd
- 未安装软件包 httpd
- [root@localhost ~]#yum install httpd -y
- 已加载插件:fastestmirror, langpacks
- Loading mirror speeds from cached hostfile
- * base: mirrors.nju.edu.cn
- * epel: mirror.nju.edu.cn
- * extras: mirrors.nju.edu.cn
- * updates: mirrors.nju.edu.cn
- 正在解决依赖关系
- --> 正在检查事务
- ---> 软件包 httpd.x86_64.0.2.4.6-99.el7.centos.1 将被 安装
- --> 正在处理依赖关系 httpd-tools = 2.4.6-99.el7.centos.1,它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
- --> 正在处理依赖关系 /etc/mime.types,它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
- --> 正在处理依赖关系 libaprutil-1.so.0()(64bit),它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
- --> 正在处理依赖关系 libapr-1.so.0()(64bit),它被软件包 httpd-2.4.6-99.el7.centos.1.x86_64 需要
- --> 正在检查事务
- ---> 软件包 apr.x86_64.0.1.4.8-7.el7 将被 安装
- ---> 软件包 apr-util.x86_64.0.1.5.2-6.el7_9.1 将被 安装
- ---> 软件包 httpd-tools.x86_64.0.2.4.6-99.el7.centos.1 将被 安装
- ---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装
- --> 解决依赖关系完成
-
- 依赖关系解决
-
- =============================================================================
- Package 架构 版本 源 大小
- =============================================================================
- 正在安装:
- httpd x86_64 2.4.6-99.el7.centos.1 updates 2.7 M
- 为依赖而安装:
- apr x86_64 1.4.8-7.el7 base 104 k
- apr-util x86_64 1.5.2-6.el7_9.1 updates 92 k
- httpd-tools x86_64 2.4.6-99.el7.centos.1 updates 94 k
- mailcap noarch 2.1.41-2.el7 base 31 k
-
- 事务概要
- =============================================================================
- 安装 1 软件包 (+4 依赖软件包)
-
- 总下载量:3.0 M
- 安装大小:10 M
- Downloading packages:
- (1/5): httpd-tools-2.4.6-99.el7.centos.1.x86_64.rpm | 94 kB 00:00
- (2/5): apr-1.4.8-7.el7.x86_64.rpm | 104 kB 00:00
- (3/5): apr-util-1.5.2-6.el7_9.1.x86_64.rpm | 92 kB 00:00
- (4/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00
- (5/5): httpd-2.4.6-99.el7.centos.1.x86_64.rpm | 2.7 MB 00:01
- -----------------------------------------------------------------------------
- 总计 2.7 MB/s | 3.0 MB 00:01
- Running transaction check
- Running transaction test
- Transaction test succeeded
- Running transaction
- 正在安装 : apr-1.4.8-7.el7.x86_64 1/5
- 正在安装 : apr-util-1.5.2-6.el7_9.1.x86_64 2/5
- 正在安装 : httpd-tools-2.4.6-99.el7.centos.1.x86_64 3/5
- 正在安装 : mailcap-2.1.41-2.el7.noarch 4/5
- 正在安装 : httpd-2.4.6-99.el7.centos.1.x86_64 5/5
- 验证中 : httpd-2.4.6-99.el7.centos.1.x86_64 1/5
- 验证中 : mailcap-2.1.41-2.el7.noarch 2/5
- 验证中 : apr-1.4.8-7.el7.x86_64 3/5
- 验证中 : httpd-tools-2.4.6-99.el7.centos.1.x86_64 4/5
- 验证中 : apr-util-1.5.2-6.el7_9.1.x86_64 5/5
-
- 已安装:
- httpd.x86_64 0:2.4.6-99.el7.centos.1
-
- 作为依赖被安装:
- apr.x86_64 0:1.4.8-7.el7
- apr-util.x86_64 0:1.5.2-6.el7_9.1
- httpd-tools.x86_64 0:2.4.6-99.el7.centos.1
- mailcap.noarch 0:2.1.41-2.el7
-
- 完毕!
- [root@localhost ~]#systemctl start httpd
- [root@localhost ~]#systemctl status httpd
- ● httpd.service - The Apache HTTP Server
- Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
- Active: active (running) since 四 2024-02-01 18:46:41 CST; 3s ago
- Docs: man:httpd(8)
- man:apachectl(8)
- Main PID: 7938 (httpd)
- Status: "Processing requests..."
- CGroup: /system.slice/httpd.service
- ├─7938 /usr/sbin/httpd -DFOREGROUND
- ├─7939 /usr/sbin/httpd -DFOREGROUND
- ├─7940 /usr/sbin/httpd -DFOREGROUND
- ├─7941 /usr/sbin/httpd -DFOREGROUND
- ├─7942 /usr/sbin/httpd -DFOREGROUND
- └─7943 /usr/sbin/httpd -DFOREGROUND
-
- 2月 01 18:46:41 localhost.localdomain systemd[1]: Starting The Apache HTT...
- 2月 01 18:46:41 localhost.localdomain httpd[7938]: AH00558: httpd: Could ...
- 2月 01 18:46:41 localhost.localdomain systemd[1]: Started The Apache HTTP...
- Hint: Some lines were ellipsized, use -l to show in full.
- [root@localhost ~]#iptables -A INPUT -p tcp --dport 80 -j REJECT
- #拒绝任何主机通过tcp协议来连接本机的80端口的httpd服务
- [root@localhost ~]#iptables -A INPUT -p tcp --dport 22 -j REJECT
- #拒绝任何主机通过tcp协议来连接22端口
192.168.241.22主机操作
- [root@node2 ~]#curl 192.168.241.11:80
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <title>Apache HTTP Server Test Page powered by CentOS</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-
- <!-- Bootstrap -->
- <link href="/noindex/css/bootstrap.min.css" rel="stylesheet">
- <link rel="stylesheet" href="noindex/css/open-sans.css" type="text/css" />
-
- <style type="text/css"><!--
-
- body {
- font-family: "Open Sans", Helvetica, sans-serif;
- font-weight: 100;
- color: #ccc;
- background: rgba(10, 24, 55, 1);
- font-size: 16px;
- }
-
- h2, h3, h4 {
- font-weight: 200;
- }
-
- h2 {
- font-size: 28px;
- }
-
- .jumbotron {
- margin-bottom: 0;
- color: #333;
- background: rgb(212,212,221); /* Old browsers */
- background: radial-gradient(ellipse at center top, rgba(255,255,255,1) 0%,rgba(174,174,183,1) 100%); /* W3C */
- }
-
- .jumbotron h1 {
- font-size: 128px;
- font-weight: 700;
- color: white;
- text-shadow: 0px 2px 0px #abc,
- 0px 4px 10px rgba(0,0,0,0.15),
- 0px 5px 2px rgba(0,0,0,0.1),
- 0px 6px 30px rgba(0,0,0,0.1);
- }
-
- .jumbotron p {
- font-size: 28px;
- font-weight: 100;
- }
-
- .main {
- background: white;
- color: #234;
- border-top: 1px solid rgba(0,0,0,0.12);
- padding-top: 30px;
- padding-bottom: 40px;
- }
-
- .footer {
- border-top: 1px solid rgba(255,255,255,0.2);
- padding-top: 30px;
- }
-
- --></style>
- </head>
- <body>
- <div class="jumbotron text-center">
- <div class="container">
- <h1>Testing 123..</h1>
- <p class="lead">This page is used to test the proper operation of the <a href="http://apache.org">Apache HTTP server</a> after it has been installed. If you can read this page it means that this site is working properly. This server is powered by <a href="http://centos.org">CentOS</a>.</p>
- </div>
- </div>
- <div class="main">
- <div class="container">
- <div class="row">
- <div class="col-sm-6">
- <h2>Just visiting?</h2>
- <p class="lead">The website you just visited is either experiencing problems or is undergoing routine maintenance.</p>
- <p>If you would like to let the administrators of this website know that you've seen this page instead of the page you expected, you should send them e-mail. In general, mail sent to the name "webmaster" and directed to the website's domain should reach the appropriate person.</p>
- <p>For example, if you experienced problems while visiting www.example.com, you should send e-mail to "webmaster@example.com".</p>
- </div>
- <div class="col-sm-6">
- <h2>Are you the Administrator?</h2>
- <p>You should add your website content to the directory <tt>/var/www/html/</tt>.</p>
- <p>To prevent this page from ever being used, follow the instructions in the file <tt>/etc/httpd/conf.d/welcome.conf</tt>.</p>
-
- <h2>Promoting Apache and CentOS</h2>
- <p>You are free to use the images below on Apache and CentOS Linux powered HTTP servers. Thanks for using Apache and CentOS!</p>
- <p><a href="http://httpd.apache.org/"><img src="images/apache_pb.gif" alt="[ Powered by Apache ]"></a> <a href="http://www.centos.org/"><img src="images/poweredby.png" alt="[ Powered by CentOS Linux ]" height="31" width="88"></a></p>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="footer">
- <div class="container">
- <div class="row">
- <div class="col-sm-6">
- <h2>Important note:</h2>
- <p class="lead">The CentOS Project has nothing to do with this website or its content,
- it just provides the software that makes the website run.</p>
-
- <p>If you have issues with the content of this site, contact the owner of the domain, not the CentOS project.
- Unless you intended to visit CentOS.org, the CentOS Project does not have anything to do with this website,
- the content or the lack of it.</p>
- <p>For example, if this website is www.example.com, you would find the owner of the example.com domain at the following WHOIS server:</p>
- <p><a href="http://www.internic.net/whois.html">http://www.internic.net/whois.html</a></p>
- </div>
- <div class="col-sm-6">
- <h2>The CentOS Project</h2>
- <p>The CentOS Linux distribution is a stable, predictable, manageable and reproduceable platform derived from
- the sources of Red Hat Enterprise Linux (RHEL).<p>
-
- <p>Additionally to being a popular choice for web hosting, CentOS also provides a rich platform for open source communities to build upon. For more information
- please visit the <a href="http://www.centos.org/">CentOS website</a>.</p>
- </div>
- </div>
- </div>
- </div>
- </div>
- </body></html>
- [root@node2 ~]#curl 192.168.241.11:80
- curl: (7) Failed connect to 192.168.241.11:80; Connection refused
- #此时无法登录192.168.241.11主机的httpd服务,但是还可以通过ssh进行连接192.168.241.11主机
- #如果想断掉ssh服务 需要在192.168.241.11主机再新加一条规则
- [root@node2 ~]#ssh 192.168.241.11
- The authenticity of host '192.168.241.11 (192.168.241.11)' can't be established.
- ECDSA key fingerprint is SHA256:k/dmSIE+ic90gNaqecVvZT0PdW+9hJf9EwJQDXY1f7w.
- ECDSA key fingerprint is MD5:e1:61:2b:5d:fe:10:a9:72:1f:c2:7e:2b:5b:51:f4:7c.
- Are you sure you want to continue connecting (yes/no)? ^C
- #将192.168.241.11主机的规则新加入后 此时无法通过ssh命令通过22端口进行远程连接192.168.241.11主机
- [root@node2 ~]#ssh 192.168.241.11
- ssh: connect to host 192.168.241.11 port 22: Connection refused
如果想设置拒绝22-80所有端口
实验开始前,双方可以互相ping
添加规则之后,双方不能互相ping
通过控制INPUT icmp协议 拒绝192.168.241.22的8包
此时主机1可以ping通主机2 主机2ping不通主机1
如果再修改OUTPUT 拒绝192.168.241.22的0包
也是可以使主机2无法向主机1回包
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
以离散方式定义多端口匹配,最多指定15个端口
- [!] --source-ports,--sports port[,port|,port:port]...
- #指定多个源端口 逗号隔开
- [!] --destination-ports,--dports port[,port|,port:port]...
- # 指定多个目标端口 逗号隔开
- [!] --ports port[,port|,port:port]...
- #多个源或目标端
主机2目前可以连接主机1
还可以访问主机1的httpd服务
此时,如果给主机1添加一条规则,把来源于主机2的22和80端口拒绝访问
[root@localhost ~]#iptables -A INPUT -s 192.168.241.22 -p tcp -m multiport --dport 22,80 -j REJECT
此时,主机2就无法访问主机1的httpd服务,也不可以远程登录主机1
指明连续的(但一般不是整个网络)ip地址范围
- [!] --src-range from[-to] 源IP地址范围
- [!] --dst-range from[-to] 目标IP地址范围
目前,主机2和主机3均可以通过icmp协议通过ping来检测与主机1的网络连通性
如果给主机1设置一条拒绝主机2和主机3地址的防火墙规则
- [root@localhost ~]#iptables -A INPUT -m iprange --src-range 192.168.241.22-192.168.241.23 -j REJECT
- #指定(src)源地址为192.168.241.22-192.168.241.23 两个地址无法访问当前主机
此时发现,主机2和主机3无法通过icmp协议通过ping来检测与主机1的网络连通性
mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains
-m mac [!] --mac-source XX:XX:XX:XX:XX:XX
- [root@localhost ~]#ip a
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
- link/ether 00:0c:29:51:4b:b5 brd ff:ff:ff:ff:ff:ff
- inet 192.168.241.11/24 brd 192.168.241.255 scope global ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::de6f:32c8:5a64:a6b2/64 scope link
- valid_lft forever preferred_lft forever
- 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
- link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
- inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
- valid_lft forever preferred_lft forever
- 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
- link/ether 52:54:00:53:c1:45 brd ff:ff:ff:ff:ff:ff
- [root@localhost ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:51:4b:b5 -j REJECT
对报文中的应用层数据做字符串模式匹配检测
- --algo {bm|kmp} 字符串匹配检测算法
- bm:Boyer-Moore 算法
- kmp:Knuth-Pratt-Morris 算法
-
- --from offset 开始查询的地方
- --to offset 结束查询的地方
-
-
- [!] --string pattern 要检测的字符串模式
- [!] --hex-string pattern要检测字符串模式,16进制格式
8 BYEE 前导信息 | dest mac 6 byte | src mac 6 byte | type 2byte | IP 20 | TCP 20 | http | data | FCS |
主机1操作
- [root@localhost ~]#cd /var/www/html/
- [root@localhost html]#vim cxk.html
-
- cxk
-
- [root@localhost html]#vim wyb.html
-
- wyb
主机2操作
- [root@node2 ~]#curl 192.168.241.11/cxk.html
- cxk
- [root@node2 ~]#curl 192.168.241.11/wyb.html
- wyb
以上操作主机2还可以访问主机1的网页服务
如果想使主机2不能访问主机1的页面服务
主机1操作——新增一条防火墙规则
- [root@localhost html]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "cxk" -j REJECT
- #增加一条防火墙规则 限制任何主机通过80端口 通过algo bm算法 从62字节开始检查 涉及cxk的 进行拒绝
主机2操作
- [root@node2 ~]#curl 192.168.241.11/wyb.html
- wyb
- [root@node2 ~]#curl 192.168.241.11/cxk.html
-
- #cxk页面无法访问