Iptables实际应用

一、安装iptables

1. 安装iptables软件包

  1. 1.1 安装命令
  2. [root@localhost ~]# yum install iptables*
  3. 1.2 启动Iptables
  4. [root@localhost ~]# yum install iptables*
  5. 1.3 关闭firewalld
  6. iptablesfirewalld一起使用,会产生冲突问题,所以关闭firewalld
  7. [root@localhost ~]# systemctl disable --now firewalld

2. 命令格式

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

3. 参数

  1. 参数:
  2. -t 指定操作的表
  3. -L, --list 列出当前的规则
  4. -v 显示数据包和数据包大小
  5. -n 不反解地址
  6. -A, --append 追加一条规则到链中
  7. -I, --insert 插入一条规则,插入到顶部
  8. -F, --flush 清空
  9. -Z, --zero 清空计数器( 包数量 、包大小)
  10. -D, --delete 删除链中的规则
  11. -R, --replace 修改
  12. -S, --list-rules 列出所有的规则
  13. -N, --new-chain 创建一个自定义
  14. -X, --delete-chain 删除一个自定义链
  15. -P, --policy 指定链的默认策略

二、iptables动作

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

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

  1. 协议匹配:
  2. TCP(http)
  3. UDP
  4. ICMP(ping)
  5. ALL

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

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

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

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

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

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

七、基础案例

  1. 案例1:只允许22端口可以访问,其他端口全部无法访问。
  2. iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
  3. iptables -t filter -A INPUT -p TCP -j DROP
  4. 案例2:只允许2280443端口可以访问,其他端口全部无法访问。
  5. iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
  6. iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT
  7. iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT
  8. iptables -t filter -A INPUT -p TCP -j DROP
  9. 案例3:只允许2280443端口可以访问,其他端口全部无法访问,但是本机可以访问百度。
  10. 案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行
  11. iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT
  12. iptables -t filter -A INPUT -p TCP -j DROP
  13. 案例5:只允许192.168.15.71能够通过22端口链接,其他的不行。
  14. iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
  15. iptables -t filter -A INPUT -p TCP -j DROP
  16. 案例6:要求192.168.15.71对外部不可见
  17. iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP
  18. 案例7:要求使用eth0网卡的所有请求全部拒绝
  19. iptables -t filter -A INPUT -p TCP -i etho -j DROP
  20. 使用172.16.1.71登录进来的窗口,不允许访问百度。
  21. iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP
  22. 案例8:要求访问服务器的8080端口转发至80端口
  23. iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
  24. 案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
  25. iptables -t filter -A INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
  26. iptables -t filter -A INPUT -p TCP --dport 22 -j DROP
  27. 知识储备:
  28. 查看本机端口占用的命令:
  29. netstat -nutlp

八、模块

  1. 拓展iptables的功能的。
  2. -m : 指定模块
  3. 1、连续匹配多个端口(multiport
  4. --dports : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)。
  5. 2、指定一段连续的ip地址范围(iprange)
  6. --src-range from[-to]: 源地址范围
  7. --dst-range from[-to] 目标地址范围
  8. 3、匹配指定字符串(string)
  9. --string pattern # 指定要匹配的字符串
  10. --algo {bm|kmp} # 匹配的查询算法
  11. 4、根据时间段匹配报文(time)
  12. --timestart hh:mm[:ss] # 开始时间
  13. --timestop hh:mm[:ss] # 结束时间
  14. --monthdays day[,day...] # 指定一个月的某一天
  15. --weekdays day[,day...] # 指定周 还是 周天
  16. 5、禁ping, 默认本机无法ping别人 、别人无法ping自己
  17. --icmp-type {type[/code]|typename}
  18. echo-request (8) 请求
  19. echo-reply (0) 回应
  20. 6、限制链接数,并发连接数(connlimit
  21. --connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
  22. --connlimit-above n # 如果现有连接数大于n 则匹配
  23. 7、针对 报文速率 进行限制。 秒、分钟、小时、天。
  24. --limit rate[/second|/minute|/hour|/day] # 报文数量
  25. --limit-burst number # 报文数量(默认:5)

九、拓展案例

  1. 1、要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝
  2. iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
  3. iptables -f filter -A INPUT -p TCP -j DROP
  4. 2、要求访问数据包中包含HelloWorld的数据不允许通过。
  5. iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
  6. 3、要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝
  7. iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
  8. iptables -f filter -A INPUT -p TCP -j DROP
  9. 4、要求每天的1213之间,不允许访问
  10. iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP
  11. 必须使用UTC时间
  12. 5、要求别人不能ping本机,但是本机可以ping别人
  13. iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP
  14. 6、要求主机连接最多有2
  15. iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
  16. 7、要求限制速率在500k/s左右
  17. iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
  18. 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. nginx + tomcat 单个域名及多个域名的配置

    //nginx + tomcat 单个域名及多个域名的配置//修改nginx的配置文件,linux默认路径 /usr/local/nginx/conf/nginx.conf //prot为8082的w ...

  2. Linux上天之路(十六)之Shell编程一

    用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程.以前学过的cd.alias.u ...

  3. Go语言系列之网络编程

    现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其实是一个很庞大的领域,本 ...

  4. HDU 2044 一只小蜜蜂... (斐波那契数列)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044 题目分析:其实仔细读题就会发现其中的规律, 其中:这是一个典型的斐波那契数列. 代码如下: #i ...

  5. 【刷题-LeetCode】166 Fraction to Recurring Decimal

    Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...

  6. 实习之bii--关于虚拟机桥接无线网卡

    安装完VMware workstation之后,网络连接里会多出两个虚拟网卡: VMware Network Adapter VMnet1和VMware Network Adapter VMnet8. ...

  7. golang中数组指针与指针数组的区别实现

      指针数组和数组的指针,指的是两个不同的东西. 指针数组是有指针组成的数组,数组的指针是一个数组的指针. package main import "fmt" const MAX ...

  8. golang中的原子操作atomic包

    1. 概念 原子操作 atomic 包 加锁操作涉及到内核态的上下文切换,比较耗时,代价高, 针对基本数据类型我们还可以使用原子操作来保证并发的安全, 因为原子操作是go语言提供的方法,我们在用户态就 ...

  9. 将Java连接数据库操作封装到MySQL类中

    public class MySQL { final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; final String D ...

  10. redis与集群实用操作笔记

    redis哨兵 部署方式 redis配置 首先需要区分的是主从redis,主机也就是用来写的机器,从机是从来读的,为主机分担压力,与集群不同的是redis哨兵不可通过从机写入数据同步到主机,但是也可以 ...