Iptables入门教程
转自:http://drops.wooyun.org/tips/1424
linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成。
netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。

0x01 iptables的结构
iptables的结构:
iptables -> Tables -> Chains -> Rules
简单地讲,tables由chains组成,而chains又由rules组成。iptables 默认有四个表Filter, NAT, Mangle, Raw,其对于的链如下图。

0x02 iptables工作流程

0x03 filter表详解
1. 在iptables中,filter表起过滤数据包的功能,它具有以下三种内建链:
INPUT链 – 处理来自外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。
2. 数据流向场景
访问本机:在INPUT链上做过滤
本机访问外部:在OUTPUT链上做过滤
通过本机访问其他主机:在FORWARD链上做过滤
3. Iptables基本操作
启动iptables:service iptables start
关闭iptables:service iptables stop
重启iptables:service iptables restart
查看iptables状态:service iptables status
保存iptables配置:service iptables save
Iptables服务配置文件:/etc/sysconfig/iptables-config
Iptables规则保存文件:/etc/sysconfig/iptables
打开iptables转发:echo "1"> /proc/sys/net/ipv4/ip_forward
0x04 iptables命令参考
命令:
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
1. 表名
表名:Filter, NAT, Mangle, Raw
起包过滤功能的为表Filter,可以不填,不填默认为Filter
2. 命令选项
| 选项名 | 功能及特点 |
|---|---|
| -A | 在指定链的末尾添加(--append)一条新的规则 |
| -D | 删除(--delete)指定链中的某一条规则,按规则序号或内容确定要删除的规则 |
| -I | 在指定链中插入(--insert)一条新的规则,默认在链的开头插入 |
| -R | 修改、替换(--replace)指定链中的一条规则,按规则序号或内容确定 |
| -L | 列出(--list)指定链中的所有的规则进行查看,默认列出表中所有链的内容 |
| -F | 清空(--flush)指定链中的所有规则,默认清空表中所有链的内容 |
| -N | 新建(--new-chain)一条用户自己定义的规则链 |
| -X | 删除指定表中用户自定义的规则链(--delete-chain) |
| -P | 设置指定链的默认策略(--policy) |
| -n | 用数字形式(--numeric)显示输出结果,若显示主机的 IP地址而不是主机名 |
| -P | 设置指定链的默认策略(--policy) |
| -v | 查看规则列表时显示详细(--verbose)的信息 |
| -V | 查看iptables命令工具的版本(--Version)信息 |
| -h | 查看命令帮助信息(--help) |
| --line-number | 查看规则列表时,同时显示规则在链中的顺序号 |
3. 链名
可以根据数据流向来确定具体使用哪个链,在Filter中的使用情况如下:
INPUT链 – 处理来自外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他网卡设备上。
4. 条件匹配
条件匹配分为基本匹配和扩展匹配,拓展匹配又分为隐式扩展和显示扩展。
a)基本匹配包括:
| 匹配参数 | 说明 |
|---|---|
| -p | 指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议 |
| -s | 指定数据包的源地址参数,可以使IP地址、网络地址、主机名 |
| -d | 指定目的地址 |
| -i | 输入接口 |
| -o | 输出接口 |
b)隐式扩展包括:

c)常用显式扩展

5. 目标值
数据包控制方式包括四种为:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包通过,必须时会给数据发送端一个响应信息。
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
QUEUE:防火墙将数据包移交到用户空间
RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)
0x05 Iptables常见命令
a) 1. 删除iptables现有规则
iptables –F
b) 2. 查看iptables规则
iptables –L(iptables –L –v -n)
c) 3. 增加一条规则到最后
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
d) 4.添加一条规则到指定位置
iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
e) 5. 删除一条规则
iptabels -D INPUT 2
f) 6.修改一条规则
iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
g) 7. 设置默认策略
iptables -P INPUT DROP
h) 8.允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
i) 9.允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INTPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
j) 10.允许HTTP请求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
k) 11.限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个
iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT
l) 12.限制SSH连接速率(默认策略是DROP)
iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT
0x06 如何正确配置iptables
a) 1. 删除现有规则
iptables -F
b) 2. 配置默认链策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
c) 3. 允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
d) 4. 允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
e) 5. 允许HTTP请求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
0x07 使用iptables抵抗常见攻击
1.防止syn攻击
思路一:限制syn的请求速度(这个方式需要调节一个合理的速度值,不然会影响正常用户的请求)
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
思路二:限制单个ip的最大syn连接数
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
2. 防止DOS攻击
利用recent模块抵御DOS攻击
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP
单个IP最多连接3个会话
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
只要是新的连接请求,就把它加入到SSH列表中
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。
3. 防止单个ip访问量过大
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
4. 木马反弹
iptables –A OUTPUT –m state --state NEW –j DROP
5. 防止ping攻击
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT
Iptables入门教程的更多相关文章
- iptables系列教程(一)| iptables入门篇
一个执着于技术的公众号 前言 在早期的 Linux 系统中,默认使用的是 iptables 配置防火墙.尽管新型 的 firewalld 防火墙已经被投入使用多年,但是大量的企业在生产环境中依然出于各 ...
- Linux基础入门教程
Linux基础入门教程 --------- Linux学习路径 Linux学习者,常常不知道自己改怎么学习linux:Linux初级,也就是入门linux前提是需要有一些计算机硬件相关的知识或是有一下 ...
- Linux 新手入门教程
Linux 新手入门教程 1991年10月5日,Linus Torvalds 在互联网上发布消息,宣布他自己开发的内核系统诞生了.他将内核源代码保存在芬兰最大的 FTP 网站上,命名为 Linux,取 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
随机推荐
- sql视图和表的区别
整理一下视图和表的区别 区别: 1.视图是已经编译好了的sql,表不是 2.视图没有实际的物理存储记录,表有 3.视图是逻辑概念,表可以进行修改 5.表是内模式,视图是外模式 6.视图是我们查看表的方 ...
- var、let、const声明变量的区别
let和var声明变量的区别:1.let所声明的变量只在let命令所在的代码块内有效.(块级作用域) for(let i=0;i<10;i++){ // ... } console.log(i) ...
- tomcat性能优化 - 网络抄录
tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. tomcat内存优化 linux修改TOMCAT_HOME/bin/catalina.s ...
- Philipp Wagner
本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容(http://docs.opencv.org/modules/contrib/doc/facerec/ ...
- C语言特点_01
C语言特点: 1.C语言的32个关键字 auto 局部变量(自动储存) break 无条件退出程序最内层循环 case switch语句中选择项 char 单字节整型数据 const 定义不可更改的常 ...
- Swift 中 String 与 CChar 数组的转换
在现阶段Swift的编码中,我们还是有很多场景需要调用一些C函数.在Swift与C的混编中,经常遇到的一个问题就是需要在两者中互相转换字符串.在C语言中,字符串通常是用一个char数组来表示,在Swi ...
- 基于Vue+VueRouter+ModJS+Fis3快速搭建H5项目总结
技术选型 • 框架 - Vue+VueRouter • 相比较于react/angular/avalon ? • 简单轻量,社区配套完整• 模块化 - ModJS • 相比较于require/seaj ...
- GIMP用Path作画了解一下
先准备好Path的底稿,只是实验学到的东西,粗糙了点.Paint through the Path,顾名思义,就是沿着Path作画: 1/如果选择的是Stroke line,可以根据自己的喜好,调节S ...
- dom4j 常用操作
package com.wanbang.wbyyb.common.util; import com.alibaba.fastjson.JSONObject; import com.wanbang.wb ...
- perl学习笔记之:模式匹配,模块,文档
Perl语言的最大特点,也是Perl作为CGI首选语言的最大特点,是它的模式匹配操作符.Perl语言的强大的文本处理能力正是通过其内嵌的对模式匹配的支持体现的.模式通过创建正则表达式实现.Perl的正 ...