一:iptables的用法

1.iptables简介
iptables的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者经该设备转发、路由时,都可以使用iptables进行控制。

二:Iptables链的概念

1.那四个表,有哪些作用?
具备某种功能的集合叫做表。
   filter:  负责做过滤功能呢	:    	INPUT、OUTPUT、FORWARD
nat: 网络地址转换 PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容 PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪 PREROUTING、OUTPUT
2、那五条链,运行在那些地方?
   1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
4) FOWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
###### 五链
PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING

3.Iptables流程图
流入本机: A  --->  PREROUTING  --->  INPUT ---> B
流出本机:OUTPUT ---> POSTROUTING ---> B
经过本机: A ---> OUTPUT ---> POSTROUTING | ---> PREROUTING ---> FORWARD ---> POSTROUTING ---> C ---> PREROUTING ---> INPUT ---> B 表包含链
filter : INPUT 、FORWARD、 OUTPUT
nat : PREROUTING 、 INPUT、 OUTPUT、 POSTROUTING
raw : PREROUTING、 OUTPUT
mangle : PREROUTING INPUT FORWARD OUTPUT POSTROUTING

三:iptables的安装

1、安装Iptables
[root@m01 ~]# yum install iptables* 2、启动Iptables
[root@m01 ~]# systemctl start iptables 3、关闭firewalld
[root@m01 ~]# systemctl disable --now firewalld 4 查看iptables状态
systemctl status iptables

四:iptables命令

1.iptables命令格式
格式:iptables -t 表名 选项 链名称 条件  动作
2.参数
-t:				   指定操作的表
-L, --list 列出当前的规则
-v 显示数据包和数据包大小
-n 显示不反解地址 -A, --append 追加一条规则到链中
-I, --insert 插入一条规则,插入到顶部 -F, --flush 清空(使用前清空)
-Z, --zero 清空计数器( 包数量 、包大小) -D, --delete 删除链中的规则 -R, --replace 修改
-S, --list-rules 列出所有的规则 -N, --new-chain 创建一个自定义 链
-X, --delete-chain 删除一个自定义链
-P, --policy 指定链的默认策略

五:iptables动作

ACCEPT		将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(允许通过)

REJECT 		拦阻该数据包,并传送数据包通知对方(阻拦访问/告知禁止)

DROP 		丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序(直接禁止)

REDIRECT	将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则
(转换地址)

六:Iptables基本的条件匹配

1.协议
TCP(http)
UDP
ICMP(ping)
ALL 传输层协议
3、原因:应用层需要可靠的连接,但是IP层没有这样的流机制
4、面向连接,即在客户端和服务器之间发送数据之间,必须先建立连接
图‘’‘
TCP是一种传输控制协议,是面向连接的、可靠的、基于字节流之间的传输层通信协议
2.源地址 目标地址
源地址:发送请求的地址
-s 目标地址 : 访问的地址
-d 导向另外一个端口
--to-port

七:-i、-o、-m、-j 动作

-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发动作
-p :指定协议

八:安装端口nginx

1.安装nginx
yum install nginx -y
2.启动nginx
systemctl start nginx 注:
安装nginx 关闭防火墙 清空 iptables规则 nginx端口默认尾部前加一个冒号:80
是一个程序

九:内网

1.什么是内网?内网的作用?
内网与外网只是相对概念问题,我们平时所说的内网一般指公司、学校、机关等一个单位的内部网络,外网指整个互联网。 2.ip地址
IP协议中还有一个非常重要的内容,那就是给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。

十:内网链接用户

1.原用户没清除的规则清空
iptables -F
2.复制用户(D)
3.输入原用户内网链接
ssh root@172.16.1.81

十一:iptables实战案例

案例1:只允许22端口可以访问,其他端口全部无法访问。
案例1:只允许22端口可以访问,其他端口全部无法访问。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT 解析:
-t : 指定操作的表
-A : 追加一条规则到链中
-p : 关联协议
--dport : 访问端口
-j : 动作
ACCEPT : 允许通过
作用:
允许22端口访问 iptables -t filter -A INPUT -p TCP -j DROP 解析:
-j : 动作
DROP : 直接禁止
作用:
拒绝所有端口访问 总结:
1.只遇到22端口才通过
2.其他端口全部拒绝访问
案例2:只允许22,80,443端口可以访问,其他端口全部无法访问。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行
iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP 192.168.15.81 : 目标地址
-d : 访问地址
--dport : 访问端口
1.允许使用访问192.168.15.81地址能通过22端口链接
2.其他地址端口拒绝
案例5:只允许192.168.15.71能够通过22端口链接,其他的不行。
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP 解析:
192.168.15.71
-s : 源地址
只允许ip地址为192.168.15.71的主机(普罗米修斯) 访问目标地址 192.168.15.81
-d : 目标地址
只允许源地址 访问目标地址(192.168.15.81) 其他地址端口拒绝
案例6:要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP 解析:
1.源地址为192.168.15.71
2.直接禁止外部访问
3.可更换主机 进行内网访问,外部是不可见。
案例7:要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i eth0 -j DROP 解析:
-i : 进来的网卡
1.拒绝使用eth0网卡访问该地址
2.只能通过内网eth1访问该地址
(只允许进,不允许出)
使用172.16.1.71登录进来的窗口,不允许访问百度。
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP 解析:
-o : 出去的网卡
1.拒绝使用eth1访问该地址
2.只能通过eth0访问该地址
(只允许出,不允许进)
案例8:要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80 解析: -t : 指定操作的表
net : 网络地址转换
-A : 追加一条规则到链中
PREROUTING : (标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
-p : 协议
TCP : TCP是一种传输控制协议,是面向连接的、可靠的、基于字节流之间的传输层通信协议
--dport :目标端口
-j : 动作
REDIRECT : (转换地址)
--to-port : 导向另外一个端口 总结:
1.由8080端口导向80端口
2.在访问地址端口默认8080
案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
iptables -t filter -A INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 22 -j DROP 1.cmd输入ipconfig 复制ipv4地址
192.168.15.1
-s : 源地址
只允许ip地址为192.168.15.1的主机 访问目标地址 192.168.15.81
-d : 目标地址
只允许源地址 访问目标地址(192.168.15.81) 其他地址端口拒绝 知识储备:
查看本机端口占用的命令:
netstat -nutlp

十二:iptables模块

拓展iptables的功能的。

-m : 指定模块

1、连续匹配多个端口(multiport)

	--dports  : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)。

2、指定一段连续的ip地址范围(iprange)
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围 3、匹配指定字符串(string)
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 匹配的查询算法 4、根据时间段匹配报文(time)
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周 还是 周天 5、禁ping, 默认本机无法ping别人 、别人无法ping自己
--icmp-type {type[/code]|typename}
echo-request (8) 请求
echo-reply (0) 回应 6、限制链接数,并发连接数(connlimit)
--connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n # 如果现有连接数大于n 则匹配 7、针对 报文速率 进行限制。 秒、分钟、小时、天(limit) --limit rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)

十三:iptables模块实战

1、要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝

	iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP 解析:
-m : 指定模块
--dports : 指定多个端口 2、要求访问数据包中包含HelloWorld的数据不允许通过。
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP 解析流程:
1.写入数据包内容
echo "HelloWorld" >> index.html
echo "Hello" >> demo.html
2.输入代码
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
3.访问(包含禁止数据不允许访问)
curl http://192.168.15.81/demo.html
curl http://192.168.15.81/ 3、要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝 iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP 解析:
指定一段连续的ip地址范围(iprange)
--src-range from[-to]: 源地址范围 192.168.15.1 - 192.168.15.10
-s : 源地址
只允许ip地址为192.168.15.1 - 192.168.15.10的主机 访问目标地址 192.168.15.81
-d : 目标地址
只允许源地址 访问目标地址(192.168.15.81) 其他地址端口拒绝 4、要求每天的12到13之间,不允许访问
iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP 必须使用UTC时间
1.UTC 东零区
2.UTC+8 东八区
3.我们比UTC快了八个小时
4.所以需要减8才得到我们现在时间 1.根据时间段匹配报文(time)
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间 5、要求别人不能ping本机,但是本机可以ping别人
iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP 解析:
8 : 我可以ping别人
0 : 别人也可以ping我
ICMP : 只针对ping的协议 1.禁ping, 默认本机无法ping别人 、别人无法ping自己
--icmp-type {type[/code]|typename}
echo-request (8) 请求
echo-reply (0) 回应 2.别人不能拼我
ping 192.168.15.81 6、要求主机连接最多有2个
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP 1.目标端口:访问的端口
--dport
2.限制链接数,并发连接数(connlimit)
--connlimit-above 2 # 如果现有连接数大于2则匹配
总结:
如果主机连接数量大于2则禁止 7、要求限制速率在500k/s左右
iptables -t filter -A OUTPUT -p TCP -m limit --limit 333/s -j ACCEPT
iptables -t filter -A OUTPUT -p TCP -j DROP 解析执行流程:
1.生成文件(指定数据量文件)
dd if=/dev/zero of=1.txt bs=20M count=100 -m : 指定模块
limit :报文数量
333/s : 每秒控制在333k 2.输入代码
iptables -t filter -A OUTPUT -p TCP -m limit --limit 333/s -j ACCEPT
iptables -t filter -A OUTPUT -p TCP -j DROP 3.执行传输数据
scp 1.txt root@192.168.15.71:/root scp : scp 与 cp 差不多 只不过cp可以远程传输 txt: : 文件数据包 root@192.168.15.71 : 传输目标 :/root : 传输到该主机root目录下 注:
报文控制是非常不准确的

Iptables的命令与用法的更多相关文章

  1. (转)CentOS下开机启动查看管理命令:chkconfig用法

    CentOS下开机启动查看管理命令:chkconfig用法   CentOS下开机启动查看管理的命令是:chkconfig   1. 开机启动列表查看: chkconfig --list     说明 ...

  2. jar命令的用法详解

    本文详细讲述了JAR命令的用法,对于大家学习和总结jar命令的使用有一定的帮助作用.具体如下: JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中 ...

  3. Linux find命令的用法实践

    一.find命令简介 Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大 ...

  4. 《Linux系统 date、cal、hwclock时间命令的用法》

    date命令的用法: [root@apache ~]# date //查看当前系统的时间 Sat Jun 14 13:46:02 CST 2014 [root@apache ~]# date -s & ...

  5. uboot相关命令及用法

    进入uboot时,在命令行上敲“?” ,回车就会打印出在uboot里可用的命令: #??       - alias for 'help'base    - print or set address ...

  6. adb环境配置+常用adb命令+Logcat命令的用法+手动进行文件比对的方法+批量挪bug

    1. adb环境配置:下载adb环境变量包:打开计算机属性-高级系统设置-环境变量:新建变量adb,值为刚才的环境变量包路径:编辑path值,在最后面加上;%adb%;确定就妥了 2. 常用adb命令 ...

  7. linux中find命令高级用法

    前言 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天我们介绍find命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...

  8. Linux中find命令的用法汇总

    Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm

  9. Shell脚本、Shell脚本结构、date命令的用法、变量

    1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构:   #!/bin/bash  以#!/bin/bash开头,即以/bin/ba ...

随机推荐

  1. 【Android开发】问答机器人,聊天类App的开发制作过程记录

    缘起 很久没写项目了,所以单纯的想练练手,正好看到有问答机器人的接口,想到之前也做过聊天项目,为什么不实验一下呢.当然也是简单调用接口的项目,并没有真正的完成问答的算法等等.业余项目,功能不齐全,只实 ...

  2. 【剑指Offer】链表中倒数第k个节点 解题报告(Python)

    [剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  3. 【LeetCode】113. Path Sum II 路径总和 II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 文章目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https:// ...

  4. Inverse/Implicit Function Theorem

    目录 4.1 The Inverse Function Theorem The Implicit Function Theorem 4.3 Curves and Surfaces 4.4 The Mo ...

  5. MarkDown 使用方法

    MarkDown学习 标题的使用 ​ 在MarkDown中标题的使用,是用#+空格+标题名称,来进行编辑的.一个#就是一级标题, 两个#就是两级标题,以此类推,一定要加空格,否则无效 ### 三级标题 ...

  6. Browser Events 常用浏览器事件

    事件 说明 click 鼠标点击时触发此事件 dblclick 鼠标双击时触发此事件 mousedown 按下鼠标时触发此事件 mouseup 鼠标按下后松开鼠标时触发此事件 mouseover 当鼠 ...

  7. HiSql 实现case语法操作 新一代无实体ORM框架

    HiSql 实现case语法操作 在SqlServer,Oralce,Hana,PostGreSql,MySql 这些数据都支持SQL case语法,平常在实现业务开发中也会常用到,那么HiSql对于 ...

  8. 第10组 Alpha冲刺 (6/6)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14008187.html ·作业博客:https://edu.cnblogs.co ...

  9. MySQL索引失效之隐式转换

    常见索引失效: 1. 条件索引字段"不干净":函数操作.运算操作 2. 隐式类型转换:字符串转数值:其他类型转换 3. 隐式字符编码转换:按字符编码数据长度大的方向转换,避免数据截 ...

  10. 彻底剖析JVM类加载机制

    本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动. 0 javac编译 java代码 public class Math { public static final int initD ...