10.15 iptables filter表案例
时间:2022-04-27
本文章向大家介绍10.15 iptables filter表案例,主要内容包括iptables常用知识回顾点、icmp示例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
iptables常用知识回顾点
- iptables -I/-A/-D 后紧跟 链 ,可以是INPUT,OUTPUT,FORWARD
- iptables -P 用来指定 链的默认策略 ——>最好不要直接操作,否则会造成远程的终端断开
iptables小案例
- 需求:
- 把80,22,21端口放行,但22端口指定一个IP段,只允许这个IP段的IP访问的时候,才可访问到,其他段的一概拒绝
- 实现:(用一个脚本来实现)
- RELATED状态,这是一个边缘的一个状态
- 比如:客户端和服务端相互了通信,建立完连接之后,还会有一些额外的链接出来,这时候状态就变成了RELATED(若紧紧只有ESTABLISHED,而没有RELATED,很有可能导致其他的通信被禁掉,因为默认策略是INPUT DROP)
- ESTABLISHED状态, 保持连接
- 有时,在没有增加-m --state这条规则,导致增加了80或21端口,但是不能正常通信,加这条规则的目的是为了让通信更加顺畅
- RELATED状态,这是一个边缘的一个状态
[root@hanfeng-001 ~]# vim /usr/local/sbin/iptables.sh
添加以下内容
#! /bin/bash
ipt="/usr/sbin/iptables //这里ipt是定义个一个变量(写脚本的时候,写全局的路径,就是绝对路径,就是后面再加载它,用变量去代替,看着更加简单)
$ipt -F //清空之前的规则——>在没有 -t 指定表的时候,默认的就是filter表
$ipt -P INPUT DROP //把IPPUT的策略给扔掉
$ipt -P OUTPUT ACCEPT //把OUTPUT放行
$ipt -P FORWARD ACCEPT //把FORWARD放行
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //增加规则,-m --state 指定了状态,并针对这些状态放行(-m --state这种用法并不多见,但是这条规则必须写进来,目的是让相关的数据包放行)
$ipt -A INPUT -s 192.168.202.130/24 -p tcp --dport 22 -j ACCEPT //把该网段的22端口数据包放行——>这里的IP段根据自己的IP段来做实验
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT //把80端口数据包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT //把21端口数据包放行
然后保存退出:wq
[root@hanfeng ~]# sh /usr/local/sbin/iptables.sh //执行脚本
[root@hanfeng ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
30 2148 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 192.168.202.0/24 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 18 packets, 1816 bytes)
pkts bytes target prot opt in out source destination
[root@hanfeng ~]#
- 为什么要写脚本?
- 因为这里有INPUT DROP,肯定要把你的远程连接给断开,所以需要执行脚本把你的命令批量执行
icmp示例
- iptables -I INPUT -p icmp --icmp-type 8 -j DROP 这个规则会产生一个效果,让你ping外面的机器还可以ping通,但是ping本机的时候,就不会通了
[root@hanfeng-001 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP //会发现可ping通外面的网络,但自己的虚拟机和物理机则无法连接
[root@hanfeng-001 ~]# ping www.qq.com
PING www.qq.com (180.96.86.192) 56(84) bytes of data.
64 bytes from 180.96.86.192: icmp_seq=1 ttl=128 time=7.38 ms
64 bytes from 180.96.86.192: icmp_seq=2 ttl=128 time=6.16 ms
64 bytes from 180.96.86.192: icmp_seq=3 ttl=128 time=7.73 ms
^C
--- www.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 6.166/7.092/7.731/0.677 ms
[root@hanfeng-001 ~]#
- 这时用自己的物理机去ping虚拟机,会发现无法连接
- 这时,再来删除这条命令
- iptables -D INPUT -p icmp --icmp-type 8 -j DROP
[root@hanfeng ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP
iptables: Bad rule (does a matching rule exist in that chain?).
[root@hanfeng ~]#
- service iptables restart 重启iptables服务
[root@hanfeng ~]# service iptables restart //重启iptables服务
Redirecting to /bin/systemctl restart iptables.service
[root@hanfeng ~]# iptables -nvL //这里会看到还没禁掉之前的规则
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
81 6996 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 61 packets, 6060 bytes)
pkts bytes target prot opt in out source destination
[root@hanfeng ~]#
- 这里物理机去ping虚拟机IP,会发现再次ping通
- 这里的物理机和虚拟机不通,并不指不能连接,这里仅仅是做了一个禁ping而已(是可以ping通外网的,但别人无法ping通你)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【编译技术】:解读 Babel AST Format——02
- PyTorch入门笔记-PyTorch初见
- ssh 连接 Linux 服务器并安装 Anaconda
- Ant Design Vue 报错:Failed to resolve directive: ant-portal的解决办法
- 小程序生成二维码海报的组件-wxa-plugin-canvas
- kbone 是什么?这可能是最好的小程序开源框架
- jQuery根据填写的input的数值导出excel表格
- 小程序根据返回值英文渲染出对应的中文
- redis灵魂拷问:聊一聊AOF日志重写
- 小程序返回的时间戳转化成时间
- JSP 报错:ReferenceError: $ is not defined
- 小程序使用 组件库 vant-weapp详细教程
- DEBUG=1 宏定义对 @weakify 和 @strongify 的影响分析
- 为什么 demangle 会失败?
- js使用webgl