iptables 规则学习
iptables 一共有 3 张表:mangle,nat,filter
mangle 表主要处理 ttl,tos,mark 等信息(进)
filter 顾名思义就是过滤器,用作防火墙(出)
nat 主要处理 ip、端口转换的信息
input chain 1)Chain INPUT (policy ACCEPT)
)target prot opt source destination
)ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
)ACCEPT icmp -- anywhere anywhere
)ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
)ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
chain:chain 就是要执行的防火墙操作的列表;
Chain INPUT:Ip 包发往本机的时候要进行的防火墙操作;
Chain FORWARD:目的地不是本机的时候,要进行的防火墙的操作;
Chain OUTPUT:本机发出的包需要进行的防火墙的操作;
Chain POSTROUTING:进入本机路由变换前进行的防火墙操作;
Chain QoSAppRule0:进行路由转换操作后进行的防火墙操作;
chain 还可以自定义新增 chain,自定义的 chain 由系统定义的 chain 里跳入,执行完后跳回原来的 chain。
policy Accept :的意思是如果 Chain 中的所有条目都没有命中并执行,则默认 Accept,放行
第3行 的意思是 匹配 连接的状态(什么是连接的状态?https://blog.csdn.net/jcxch/article/details/52536425)若连接的状态被防火墙判断为 related 或者 established 的话,就 Accept 放行。
related 指代某个已经放行的通讯相关联的端口通讯
establish 的意思是已经建立连接的话那么就放行(何为已经建立连接?就是本地发出去一堆信息,远程有回应信息 或者 远程发一堆信息 本地有回应信息)
第5行 如果是连接到 ssh 端口的 状态为 NEW 的连接,则放行(状态为 NEW 的意思是,发出去一堆信息,还没有收到回应 或者 收到一堆信息,还没有回应)
output chain
1)Chain OUTPUT (policy ACCEPT)
2)target prot opt source destination
第一行标明了如果没有匹配的规则,则放行,也就是说 本地总是可以发信息到外面,一旦发出去,那么连接就变成了 new 只要对方有回应 连接就变成 establish,在 input 的列表里 establish 是放行的
pkts:由规则或链所匹配到的报文的个数;
bytes:由规则或链匹配到的所有报文大小之和;
target : 处理机制;
prot: 协议:tcp, udp, icmp等,放行哪种协议;
opt : 额外的选项,--表示没有 ;
source :源地址
destination :目标地址
保存规则:
[root@test3~]#/etc/init.d/iptables save
保存规则至其他文件
[root@test3~]# iptables-save > /tmp/iptables
加载iptables文件规则
[root@test3~]# iptables-resotre < /tmp/iptables
显式扩展
在iptalbes中数据包和被跟踪连接的4种不同状态相关联,这四种状态分别是NEW、ESTABLISHED、RELATED及INVALID,除了本机产生的数据包由NAT表的OUTPUT链处理外,所有连接跟踪都是在NAT表的PREROUTING链中进行处理的,也就是说iptables在NAT表的PREROUTING链里从新计算所有数据包的状态。如果发送一个流的初始化数据包,状态就会在NAT表的OUTPUT链里被设置为NEW,当收到回应的数据包时,状态就会在NAT表的PREROUTING链里被设置为ESTABLISHED,如果第一个数据包不是本机生成的,那就回在NAT表PREROUTING链里被设置为NEW状态,所以所有状态的改变和计算都是在NAT表中的表链和OUTPUT链里完成的。
使用-m来指定其状态并赋予匹配规则,语法如下
-mstate --state 状态
NEW
ESTABLISHED
RELATED
INVALID
NEW:
NEW状态的数据包说明这个数据包是收到的第一个数据包。比如收到一个SYN数据包,它是连接的第一个数据包,就会匹配NEW状态。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。
ESTABLISHED:
只要发送并接到应答,一个数据连接就从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接后继数据包。
RELATED:
当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED,也就是说,一个连接想要是RELATED的,首先要有个ESTABLISHED的连接,这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED。
INVALID:
INVALID状态说明数据包不能被识别属于哪个连接或没有任何状态。
例:
对本机22端口做状态监测:
进来的请求状态为new,而出去的状态则为ESTABLISHED,如果自动连接别人 状态肯定为NEW,如果正常去响应别人那么状态肯定是ESTABLISHED
[root@test3~]# iptables -I INPUT -s 10.0.10.0/24 -d 10.0.10.62 -p tcp --dport 22 -m state--state NEW,ESTABLISHED -j ACCEPT
出口的响应都必须是ESTABLISHED
[root@test3~]# iptables -A OUTPUT -s 10.0.10.62 -d 10.0.10.0/24 -p tcp --dport 22 -m state--state ESTABLISHED -j ACCEPT
[root@test3~]# iptables -L -n
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 10.0.10.0/24 10.0.10.62 tcp dpt:22 state NEW,ESTABLISHED
ChainFORWARD (policy DROP)
target prot opt source destination
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 10.0.10.62 10.0.10.0/24 tcp dpt:22state ESTABLISHED
多端口规则匹配
使用参数-m multiport 可以指定15个以内的非连续端口,比如21-22,80
-mmulitport
--src-prots
--dst-ports
--prots
#对多端口进行匹配,只要匹配以下端口,则全部放行
[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d10.0.10.62 -p tcp -m state --state NEW -m mulitport--destination-ports 21,22,80 -j ACCEPT
多IP匹配,指定匹配的IP地址范围:
-miprange
--src-range
--dst-range
指定匹配的连续ip段
[root@test3~]# iptables -A INPUT -s -m iprange --src-range 10.0.10.100-10.0.10.200
指定速率匹配
默认为每秒匹配3个报文,基于令牌桶算法
-mlimit
--limit #NUMBER,表示允许收集多少个空闲令牌
--limit-burst #RATE,允许放行多少个报文
比如:ssh一分钟之内只能建立20个链接,平均5秒一个,而一次性只能放行2个空闲令牌
--limit 20/min
--limit-burst 2
只有在大量空闲令牌存储的情况下,才可有limit-burst控制
例:控制NEW状态的请求
[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.62 -m state --state NEW -mlimit --limit 12/min --limit 12/min --limit-burst 2 -j ACCEPT
例2:每次只允许2个ping包进来
[root@test3~]# iptables -F
[root@test3~]# iptables -A INPUT -s 10.0.10.0/24 -d 10.0.10.62 -p icmp --icmp-type 8 -mlimit --limit 20/min --limit-burst 5 -j ACCEPT
新建立一终端,在其终端ping10.0.10.62可以看到效果,不再演示
iptables 规则学习的更多相关文章
- iptables
一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- Failed to stop iptables.service: Unit iptables.service not loaded.
redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...
- CentOS7安装iptables防火墙
CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...
- linux iptables常用命令之配置生产环境iptables及优化
在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...
- CentOS系统配置 iptables防火墙
阿里云CentOS系统配置iptables防火墙 虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...
- /etc/sysconfig/下找不到iptables文件解决方法
时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...
- docker通过iptables修改或新增镜像映射端口
443 8088 22 端口是初始映射端口 [root@SERVER ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...
- lnmp 预设iptables设置
「LNMP」iptables初始配置 首先使用命令iptables -P INPUT ACCEPT允许所有连接,否则容易把自己关在外边.然后使用iptables -F;iptables -X;ip ...
随机推荐
- PHP设计模式 - 命令模式
命令模式:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将“ ...
- SQL语句报错:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
报错如图: 最开始其实我的列名tname和tsubject分别叫name和subject,后来看到网上有说这个报错可能是数据库建表的时候使用了mysql的关键词,我就只把name改了.后来还是这个问题 ...
- CLRS10.1-6练习 - 用双栈实现队列
双栈实现队列算法: 分别考虑队列两种操作入队和出队,我们假设使用栈s1 s2, s1用来模拟入队,s2用来模拟出队 入队: 入队操作直接执行s1.push即可 出队: 代码实现 package hel ...
- sql特殊日期
--a. 本月的第一天 select dateadd(mm, datediff(mm,0,getdate()), 0) as 本月的第一天 --b. 本月的最后一天 select dateadd(ms ...
- Spring中的ApplicationListener的使用详解案例
本文链接:https://blog.csdn.net/u010963948/article/details/83507185 1.ApplicationContext Spring的核心,Contex ...
- 你也可以写个聊天程序 - C# Socket学习1
原文:你也可以写个聊天程序 - C# Socket学习1 简述 我们做软件工作的虽然每天都离不开网络,可网络协议细节却不是每个人都会接触和深入了解.我今天就来和大家一起学习下Socket,并写一个简单 ...
- C#设计模式之12:中介者模式
中介者模式 在asp.net core中实现进程内的CQRS时用mediatR是非常方便的,定义command,然后定义commandhandler,或者notification和notificati ...
- spring中AspectJ的使用
目录 AspectJ: AOP术语 通知的类型 切入点表达式 基于xml的AspectJ编程 导入jar包 定义切面类 引入约束 AOP配置 基于注解的AspectJ编程 AspectJ: 什么是AO ...
- Ubuntu中使用sanp一键安装安装Notepad ++
很少有文本编辑器像Notepad ++一样流行得到广大用户的喜爱,Notepad ++是一个免费的开源代码编辑器,专为Windows构建,用C ++编写.以其小巧的应用程序大小和出色的性能而闻名,但缺 ...
- ThreadLocal简解
ThreadLocal特点 ThreadLocal实现了线程间数据隔离,ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量.简单来说 ...