五分钟彻底学会iptables防火墙--技术流ken
iptables简介
IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
--摘自360百科
之前已经写过一篇关于iptables的博客《iptables实战案例详解-技术流ken》,例子虽然非常好,但是总结的还不是很到位。
本篇博客将详细讲解iptables的使用规则。希望每个人认真读完本篇博客都可以让iptables成为工作中的强盾。
四表五链
学习iptables提及最多的无非就是四表五链,也许之前你对此早有耳闻,但是没有真正的研究过。下面这些总结将让你简单的记住什么是四表五链。
四表
- filter表 过滤数据包(默认表,最常用)
- Nat表 用于网络地址转换(IP、端口)
- Mangle表 修改数据包的服务类型、TTL、并且可以配置路由实现QOS
- Raw表 决定数据包是否被状态跟踪机制处理
五链
- INPUT链 进来的数据包应用此规则链
- OUTPUT链 外出的数据包应用此规则链
- FORWARD链 转发数据包时应用此规则链
- PREROUTING链 对数据包作路由选择前应用此链(所有的数据包进来的时侯都先由这个链处理)
- POSTROUTING链 对数据包作路由选择后应用此链(所有的数据包出来的时侯都先由这个链处理)
每个表中含有如下链

iptables使用详解

iptables的使用格式如上图所示
table
-t后面跟上你要操作的表
如果不使用-t默认操作的是filter表
-t:指定表名(默认是对filter表进行操作)
有如下四种:
-t filter
-t nat
-t mangle
-t raw
command
即需要执行的命令常用命令操作有-A,-I, -D,-F,-L
-A:追加新规则
-D:删除指定的规则
-I:首部或者指定的位置插入新规则
-F:清空规则
-Z:清空计数器
-P:修改默认规则
-N:自定义一条链
-X:删除自定义的链
-E:修改自定义链的名字
-L;列举出iptables中所配置的规则
-n:如果不用n选项,那么系统会将协议反解为协议名称,这个过程很慢,该选择的作用是就用来实现禁止反解为名称
--line:在行首显示规则编号
-v:显示详细信息(通常用来看计数器) 注意:
规则中的表名、链名要区分大小写
chain
即链,需要指出对哪个表中的哪个链进行操作
表名为小写,链名为大写,严格区分大小写
有如下五种:
INPUT
OUTPUT
FORWARD
PREROUTING
POTROUTING
parameter
即参数,分为通用匹配和扩展匹配
扩展匹配又分为隐式匹配和显示匹配
通用匹配
扩展匹配
隐式扩展
显式扩展
target
即目标动作
ACCEPT: 请求被运行,数据包可以通过
DROP: 认定是一个非法请求,将数包悄悄的丢弃
REJECT: 认定是一个非法请求,禁止数据包同行的(带有通知机制)
LOG: 将这次客户端的请求记录到日志中
MARK: 标记一个连接
SNAT: 把数据包中的源地址部分替换为指定的IP
DNAT: 修改数据包中的目的IP
iptables简单常用的操作
1. 设置默认规则
[root@ken ~]# iptables -P INPUT DROP #设置INPUT链默认规则设置为DROP
[root@ken ~]# iptables -P INPUT ACCEPT #设置INPUT链默认规则设置为ACCEPT
[root@ken ~]# iptables -P OUTPUT DROP #设置OUTPUT链默认规则设置为DROP,如果OUTPUT链开启DROP,相应组合后可防范反弹式木马
[root@ken ~]# iptables -P OUTPUT ACCEPT #设置OUTPUT链默认规则设置为ACCEPT
2.清空规则
[root@ken ~]# iptables -t filter -F #清空filter表规则
[root@ken ~]# iptables -t nat -F #清空nat表规则
[root@ken ~]# iptables -t mangle -F #清空mangle表规则
[root@ken ~]# iptables -t raw -F #清空raw表规则
3. 查看规则链
[root@ken ~]# iptables -L -n --line -v
iptables通用匹配
-s:指定源ip
-d:指定目标ip
-i:指定进入数据包所经过网卡名称
-o:指定发出数据包所经过网卡名称
1. 指定仅能10.220.5.138可以ping(访问)本机
root@ken ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT
2.允许所有进入10.220.5.138的流量
[root@ken ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT
3.允许从eth0进入的流量
[root@ken ~]# iptables -A INPUT -i eth0 -j ACCEPT
iptables扩展匹配之隐式匹配
隐式匹配使用-p后面加上协议名称
-p tcp/udp/icmp
1.对于icmp协议的隐式匹配
格式:
-p icmp --icmp-type
ping数据包协议是icmp协议
type
0:应答包
8:请求包
1.可以从10.220.5.1 ping 其他主机,禁止其他主机ping 10.220.5.1
[root@ken ~]# iptables -I INPUT -p icmp --icmp-type -d 10.220.5.1 -j ACCEPT
[root@ken ~]# iptables -I INPUT -p icmp --icmp-type -s 10.220.5.1 -j ACCEPT
2.对于tcp协议的隐式扩展
-p tcp 选项
选项:
--sport:源端口
--dport:目标端口
--tcp-flags list1 list2:根据tcp包中的标志位进行匹配
--syn:syn为1,ack,fin都为0,即三次握手的第一次
1.让所有主机可以访问10.220.5.1上的网站,但是禁止10.220.5.191访问网站
[root@ken ~]# iptables -A INPUT -p tcp --dport -d 10.220.5.1 -j ACCEPT
[root@ken ~]# iptables -I INPUT -p tcp --dport -s 10.220.5.191 -j DROP
2.只允许从10.220.5.182发送连接httpd请求
[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT
3. 对于udp协议的隐式扩展
-p udp --sport|--dport
用的不多。略
iptables扩展匹配之显示匹配
注意:用显式扩展的时候,必须指定扩展功能所依赖模块的名称
指定: -m 扩展名称 --options-xxx
显示扩展1:state
作用:根据nv_conntrack的记录来对连接进行规则匹配,是根据连接记录中的状态信息做匹配
状态:
NEW:表示新的连接请求(syn=1 ack=0 fin=0)
三次握手的第一次
ping请求的第一包
udp通信的第一个包
ESTABLISHED:连接建立完成状态下所传递的数据包(syn=0 ack=1 fin=0)
INVALID:非法连接
RELATED:相关联的连接
1.让所有人都可以访问web站点
[root@ken ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport -j ACCEPT
[root@ken ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport -j ACCEPT
显示扩展2:multiport
作用:对连续或者离散的端口做匹配
选型:
--sports port[,port|,port:port]...
--dports port[,port|,port:port]...
--ports port[,port|,port:port]...
例子:
--sport 80,22,3306 逗号表示离散
--sport 80:1024 冒号表示连续
--sport 80,22,23:1024 离散和连续的可以写在一起
1.允许让10.220.5.182访问本机的80 22 443 3389 3306端口
[root@ken ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports ,,,, -j ACCEPT
显示扩展3:iprange
作用:用于对ip地址的范围做匹配
选项
--src-range
--dst-range
1. 10.220.5.1~10.220.5.100无法访问web
[root@ken ~]# iptables -I INPUT -p tcp --dport -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP
显示扩展4:limit
作用:限速
--limit rate[/second|/minute|/hour|/day]:指示每分钟/限制最大连接数为
--limit-burst number:指示当总连接数超过xx时,启动 litmit/minute 限制
1.实现每分钟可以发送10个ping包,峰值是7
[root@ken ~]# iptables -I INPUT -p icmp -m limit --limit /minute --limit-burst -j ACCEPT
2.防暴力破解。限制登录22端口的请求的频率(限制1小时只能尝试登录ssh5次)
[root@ken ~]# iptables -I INPUT -p tcp --dport -m state --state NEW -m limit --limit /hour --limit-burst -j ACCEPT
显示扩展5:connlimit
作用:限制一个客户端可以同时与当前主机建立几个链接
[!] --connlimit-above n
1. 限制每个IP可以同时登录5个ssh
[root@ken ~]# iptables -A INPUT -p tcp --dport -m connlimit --connlimit-above -j DROP
[root@ken ~]# iptables -A INPUT -p tcp --dport -j ACCEPT
五分钟彻底学会iptables防火墙--技术流ken的更多相关文章
- 学会这个删库再也不用跑路了~ --技术流ken
前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...
- Docker网络(五)--技术流ken
本章内容 1.dokcer默认自带的几种网络介绍 2. 自定义网络 3. 容器间通信 4. 容器与外界交互 docker网络分为单个主机上的容器网络和多个主机上的哇网络,本文主要讲解单个主机上的容器网 ...
- 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken
前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...
- zabbix实现百台服务器的自动化监控--技术流ken
前言 最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控? 本篇博客将讲解一个我工作时做的一个实际项目,现在写出来供大家以后参考使用. 实现自动 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken
项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...
- Jenkins凭证及任务演示-pipeline(二)--技术流ken
Jenkins前言 在上一篇博客<Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken>中已经详细介绍了jenkins的插件安装以版本更新等,本篇博客将再深入探究jenk ...
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...
- 分布式系统监视zabbix讲解七之分布式监控--技术流ken
分布式监控 概述 Zabbix通过Zabbix proxy为IT基础设施提供有效和可用的分布式监控 代理(proxy)可用于代替Zabbix server本地收集数据,然后将数据报告给服务器. Pro ...
- 高可用集群之keepalived+lvs实战-技术流ken
keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...
随机推荐
- npm Error: Cannot find module './auth.js'
Mac 下升级 npm 到 v6.8.0 翻车. 提示: Error: Cannot find module './auth.js' 根据回显的报错路径,定位到这个文件中: npm/node_modu ...
- charming_memory
Memory Master 一 .Forget遗忘 遗忘似乎是记忆的天敌,但是善用遗忘规律却能帮助我们更好的记忆. 复习的最佳时间是实际材料的1~24小时,最晚不超过2天,复习时间太长,就有一种生疏的 ...
- 支持Linux,嗅探和注入功能的网卡
支持的WiFi USB 以下是已知可以很好地支持Linux,嗅探和注入功能,外部天线(可以替换)和强大的TX功率以及良好的RX灵敏度的Wifi卡的列表 TP-LINK TL-WN722N(仅限卷1) ...
- redis设置远程通过密码进行连接
个人配置:服务器+本地鸡+win 文件概况.↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 首先修改第一个redis.windows.conf 56行左右,将bind 127.0.0.1注释掉(行前面加上# ...
- SQL 经典应用
SQL Server日常维护常用的一些脚本整理. 1.sql server开启clr权限: exec sp_configure 'clr enabled', 1 GO RECONFIGURE GO A ...
- C++面试基础概念之动态库篇
编写DLL所学所思(1)——导出函数 编写DLL所学所思(2)——导出类 C++ DLL导出类 知识大全 C++类库开发详解
- 学习C++后感
c++是一门系统级语言,记得大一是要学习这门课时还上网找过学习方法.但网上很多学习方法看的我都头晕,都说学习C++很难,有的说学C++前最好先学C语言,有的说学C++最好不要学C语言,当翻了C++课本 ...
- App设计:消息推送和界面路由跳转
概要 app消息推送.显示通知栏,点击跳转页面是很一般的功能了,下面以个推为例演示push集成,消息处理模块及app内部路由模块的简单设计. 推送 推送sdk集成 集成sdk步骤根据文档一步步做就行了 ...
- Java 使用 Jxl 实现 Excel 导入导出
开发过程中经常需要用到数据的导入导出功能,之前用的是POI,这次使用JXL,JXL相对于POI来说要轻量简洁许多,在数据量不大的情况下还是非常实用的.这里做一下使用JXL的学习记录.首先需要导入相应的 ...
- Android WebView 超大字号适配问题
目前在使用 Android WebView 展示H5页面的时候,存在当系统字号设置超大的时候,出现页面内容展示不全的问题. 此问题是因为Android WebView 默认使用系统字号进行展示. 解决 ...