Iptables实际应用

一、安装iptables

1. 安装iptables软件包

1.1 安装命令
[root@localhost ~]# yum install iptables* 1.2 启动Iptables
[root@localhost ~]# yum install iptables* 1.3 关闭firewalld
iptables与firewalld一起使用,会产生冲突问题,所以关闭firewalld。
[root@localhost ~]# systemctl disable --now firewalld

2. 命令格式

格式:iptables -t [表] [选项][链] [协议] [条件] [动作]

3. 参数

参数:
-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(accept,接受)		将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
'''匹配了第一个条件后,下面的条件就不匹配了'''
REJECT(reject,拒绝) 拦阻该数据包,并传送数据包通知对方。
DROP(drop,中断停止) 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT(redirect,重定向) 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。

三、Iptables基本的条件匹配(协议)

协议匹配:
TCP(http)
UDP
ICMP(ping)
ALL

四、-s 源地址、-d 目标地址

-s 源地址(source)
源地址:发送请求的地址,即指定数据包的源地址。
1.参数可以使IP地址、网络地址、主机名
例如:-s 192.168.1.101指定IP地址
例如:-s 192.168.1.10/24指定网络地址
2.如果不指定-s参数,就代表所有地址
3.还可以使用–src或者–source -d 目的地址(destination)
目标地址 : 访问的地址
1.参数和-s相同
2.还可以使用–dst或者–destination

五、--sport源端口、--dport 目标端口

--sport 源端口(source port)
源端口:发送请求的端口
1.在缺少具体端口号情况下,将匹配所有端口
2.可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
3.从性能上讲,使用端口号更好
4.使用冒号可以匹配端口范围,如”–sport 22:100″
5.还可以使用”–source-port” --dport 目标端口(destination port)
目标端口:访问的端口
1.参数和–sport类似
2.还可以使用”–destination-port”

六、描述规则的基本参数(-i、-o、-m、-j 、-m)

-j 执行目标(jump to target)----# 转发动作
1.-j指定了当与规则(Rule)匹配时如何处理数据包
2.可能的值是ACCEPT, DROP, QUEUE, RETURN,MASQUERADE -i 输入接口(input interface)
1.-i指定了要处理来自哪个接口的数据包
2.这些数据包即将进入INPUT, FORWARD, PREROUTE链
例如:-i eth0指定了要处理经由eth0进入的数据包
如果不指定-i参数,那么将处理进入所有接口的数据包
如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
3.还可以使用–in-interface参数 -o 输出(out interface)
1.-o指定了数据包由哪个接口输出
2.这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
如果出现! -o eth0,那么将从eth0以外的接口输出
如果出现-i eth+,那么将仅从eth开头的接口输出
3.还可以使用–out-interface参数 -m : 指定模块
-p :指定协议
例如: -p TCP
1.指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
2.如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
3.可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。
4.还可以使用–protocol参数代替-p参数

七、基础案例

案例1:只允许22端口可以访问,其他端口全部无法访问。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP 案例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 案例3:只允许22,80,443端口可以访问,其他端口全部无法访问,但是本机可以访问百度。 案例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 案例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 案例6:要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP 案例7:要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i etho -j DROP 使用172.16.1.71登录进来的窗口,不允许访问百度。
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP 案例8:要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80 案例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 知识储备:
查看本机端口占用的命令:
netstat -nutlp

八、模块

拓展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 rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)

九、拓展案例

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 2、要求访问数据包中包含HelloWorld的数据不允许通过。
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP 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 -f filter -A INPUT -p TCP -j DROP 4、要求每天的12到13之间,不允许访问
iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP 必须使用UTC时间 5、要求别人不能ping本机,但是本机可以ping别人
iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP 6、要求主机连接最多有2个
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP 7、要求限制速率在500k/s左右
iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

框架02--Iptables实际应用的更多相关文章

  1. Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)

    理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...

  2. Django框架02 /Django下载安装、url路由分发

    Django框架02 /Django下载安装.url路由分发 目录 Django框架02 /Django下载安装.url路由分发 1. django下载安装 2. pycharm创建项目 3. 基于D ...

  3. Java自动化测试框架-02 - TestNG之理论到实践

    TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...

  4. 4-3 Spring MVC框架-02

    Spring MVC框架-02 Ⅰ.RESTful基础 是一种设计风格和开发方式 1.get和post请求区别: get post 获取请求 上传请求 请求参数在地址栏URL 请求参数在请求体里面 U ...

  5. netfilter框架和iptables

    转载自:http://blog.chinaunix.net/uid-23069658-id-3160506.html http://blog.chinaunix.net/uid-23069658-id ...

  6. 来玩Play框架02 响应

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我上一章总结了Play框架的基本使用.这一章里,我将修改和增加响应. HTTP协议 ...

  7. java集合框架02

    public class ListTest { public static void main(String[] args) { //创建几个新闻对象 News news1=new News(1, & ...

  8. 阶段01Java基础day16集合框架02

    16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...

  9. SpringMVC框架02——SpringMVC的Controller详解

    1.基于注解的控制器 1.1.@Controller 注解类型 在SpringMVC中使用org.springframework.stereotype.Controller注解类型声明某类的实例是一个 ...

  10. 基于OpenGL编写一个简易的2D渲染框架-02 搭建OpenGL环境

    由于没有使用GLFW库,接下来得费一番功夫. 阅读这篇文章前请看一下这个网页:https://learnopengl-cn.github.io/01%20Getting%20started/02%20 ...

随机推荐

  1. sublime text 3 添加packagecontrol

    打开sublime控制台输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee1 ...

  2. Linux下配置GitHub

    一.注册GitHub账号 二.在linux命令行输入 git config --global user.name "YOUR NAME" #配置github账号 git confi ...

  3. Git 的配置 config

    Git 的配置 config Git 的配置 config config 文件简述 config 文件位置 信息查询 修改 config 文件 编辑配置文件 增加指定配置项 删除指定配置项 自助餐   ...

  4. 【基因组学】maker的安装和注释

    本文默认读者有一定的生信基础,没有基础的可以阅读以前的笔记内容. maker作为比较受人认可的基因组注释软件,其流程较为清晰简单. 不知何故,我的conda无法安装maker,故而采用手动安装方式. ...

  5. Java 中如何实现线程间通信

    世界以痛吻我,要我报之以歌 -- 泰戈尔<飞鸟集> 虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信. 关于线程间通信本文涉及到 ...

  6. 【原创】阿里三面:搞透Kafka的存储架构,看这篇就够了

    阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 你好, 我是华仔,在这个 1024 程序员特殊的节日里,又和大家见面了. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, ...

  7. JS调用堆栈

    调用栈 JavaScript 是一门单线程的语言,这意味着它只有一个调用栈,因此,它同一时间只能做一件事.如果我们运行到一个函数,它就会将其放置到栈顶.当从这个函数返回的时候,就会将这个函数从栈顶弹出 ...

  8. node.js和vue cli脚手架下载安装配置方法

    一.node.js安装以及环境配置 1.下载vue.js 下载地址: https://nodejs.org/en/ 2.安装node.js 下载完成后,双击安装包开始安装.安装地址最好换成自己指定的地 ...

  9. golang中goroutine协程调度器设计策略

    goroutine与线程 /* goroutine与线程1. 可增长的栈os线程一般都有固定的栈内存,通常为2MB,一个goroutine的在其声明周期开始时只有很小的栈(2KB),goroutine ...

  10. 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教程)

    1.简介 按照计划宏哥今天将介绍java+ selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客 - 截取某个元素(或者目标区域)的图片.在测试的过程中,有时候不需要截取整个屏 ...