Iptables的命令与用法
一: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的命令与用法的更多相关文章
- (转)CentOS下开机启动查看管理命令:chkconfig用法
CentOS下开机启动查看管理命令:chkconfig用法 CentOS下开机启动查看管理的命令是:chkconfig 1. 开机启动列表查看: chkconfig --list 说明 ...
- jar命令的用法详解
本文详细讲述了JAR命令的用法,对于大家学习和总结jar命令的使用有一定的帮助作用.具体如下: JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中 ...
- Linux find命令的用法实践
一.find命令简介 Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大 ...
- 《Linux系统 date、cal、hwclock时间命令的用法》
date命令的用法: [root@apache ~]# date //查看当前系统的时间 Sat Jun 14 13:46:02 CST 2014 [root@apache ~]# date -s & ...
- uboot相关命令及用法
进入uboot时,在命令行上敲“?” ,回车就会打印出在uboot里可用的命令: #?? - alias for 'help'base - print or set address ...
- adb环境配置+常用adb命令+Logcat命令的用法+手动进行文件比对的方法+批量挪bug
1. adb环境配置:下载adb环境变量包:打开计算机属性-高级系统设置-环境变量:新建变量adb,值为刚才的环境变量包路径:编辑path值,在最后面加上;%adb%;确定就妥了 2. 常用adb命令 ...
- linux中find命令高级用法
前言 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天我们介绍find命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...
- Linux中find命令的用法汇总
Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm
- Shell脚本、Shell脚本结构、date命令的用法、变量
1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构: #!/bin/bash 以#!/bin/bash开头,即以/bin/ba ...
随机推荐
- 【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/search-in ...
- 【LeetCode】904. Fruit Into Baskets 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/fruit-in ...
- 【LeetCode】861. Score After Flipping Matrix 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 如何优雅的设置UI库组件的属性?
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设 ...
- MATLAB 设置示波器颜色和行列
设置颜色 设置行列和图例 放大缩小显示
- 深入 Laravel 内核之 PHP 反射机制和依赖注入
结论: PHP中提供了反射类来解析类的结构: 通过反射类可以获取到类的构造函数及其参数和依赖: 给构造函数的参数递归设置默认值后,即可使用这些带默认值的参数通过 newInstanceArgs 实例化 ...
- centos6.5-搭建LNMP
安装LNMP 一.安装nginx 1.安装相关组件 yum -y install pcre-devel zlib-devel 2.创建启动用户 useradd -M -s /sbin/nologin ...
- MongoDB_数据模型&数据类型(四)
数据模块 传统的关系型数据库需要对表结构进行预先定义和严格的要求,而这样的严格要求,导致了处理数据的过程更加烦琐,甚至降低了执行效率. 在数据量达到一定规模的情况下,传统关系型数据库反应迟钝,想解决这 ...
- hive 之 常用基本操作
show databases; -- 查看所有数据库 use 数据库; -- 进入某个数据库 select current_database(); -- 查看当前使用的数据库 show tables; ...
- spring boot 启动读取的配置文件优先级
1.优先级从高到低 1. file:/config/ 2. file:/ 3. classpath:/config/ 4. classpath:/ 所有位置的application.properti ...