iptables 指南
iptables 是 Linux 内核集成的防火墙系统, 几乎所有 Linux 发行版都会内置 iptables。
iptables 对进出的 IP 数据报进行处理和过滤, 过滤规则(rule)存储在4个表(table)中, 表中的规则又组成了数条完整的规则链(chain)。
iptables 可以追踪数据包所属的连接(TCP/UCP/ICMP协议)及其状态,允许根据连接状态进行处理和过滤。
表与规则链
iptables 中有四张表, 优先级从高到低是:
- raw: 某个链上一旦使用了raw表将会跳过 NAT 和连接跟踪处理。
- mangle: 用于修改数据包的内容
- nat: 用于网络地址转换,可以修改数据包的源地址或目标地址
- filter: iptables 的默认表, 可以抛弃或接受数据包
表中的规则构成了链:
- PREROUTING: 来自网络接口(网卡)的数据包首先会经过 PREROUTING 链,经过 raw, mangle, nat 表中规则的处理然后进行路由判断。
- 若数据包的目的地址为本机则会进入INPUT链
- 若数据包的目的地址为其它地址则进入FORWARD链进行转发
- INPUT: 处理目标为本机的数据包, 经过 mangle,filter 表中规则的处理然后发给 nginx、mysql等上层进程处理 (此处存疑: nat 表中似乎也包括INPUT链, 望大佬指正)
- FORWARD: 处理转发的数据包,经过 mangle, filter 表中规则处理后进入POSTROUTING链
- OUTPUT: 处理本地进程发出的数据包, 经过 raw, mangle, nat, filter 表中规则的处理然后进入POSTROUTING链
- POSTROUTING: 处理来自 FORWARD 和 OUTPUT 链的数据包并发送给网络接口发出,可在 raw, mangle, nat 表中配置规则
在运行中 iptables 可能处理三种场景:
- 入站数据流: 网络接口 -> PREROUTING -> INPUT -> 本地
- 转发数据流: 网络接口 -> PREROUTING -> FORWARD -> POSTROUTING -> 网络接口
- 出站数据流: 本地 -> OUTPUT -> POSTROUTING -> 网络接口
虽然我们通常将 iptables 视为单个实体, 但实际上它由两部分组成: 执行数据包过滤处理的内核模块 netfilter 和运行于用户空间的过滤规则配置工具 iptables。
连接跟踪
iptables 是有状态的防火墙,使用 ip_conntrack 模块进行连接跟踪。ip_conntrack 可以实时追踪本机的 ICMP/TCP/UDP 流并保存在内存中。
根据数据包在连接中的角色,将数据包分为四种状态:
- NEW: 连接的第一个包比如TCP的SYN包
- ESTABLISHED: 只要连接被回复那么连接的状态就是 ESTABLISHED, 比如TCP中第一个回答 ACK/SYN 包
- RELATED: 当包和某个 ESTABLISHED 状态有关系时即处于 RELATED 状态。 比如 FTP-Data 会被标记为与 FTP-control 有关。
- INVALID: 无法识别包所属的连接或没有任何状态,通常会丢弃这些包
连接追踪允许我们根据包的连接状态进行过滤。比如我们只允许本地 80 端口的 HTTP 服务器进行响应而不允许通过 80 端口主动向外请求,那么在本地 80 端口的出方向上只允许 ESTABLISHED 状态的包不允许 NEW 状态数据包即可。(通常情况下 HTTP 服务器进程是可以主动向外请求的,但是本地地址不会是 80 端口)
入站数据流和转发数据流是在 PREROUTING 链中进行连接追踪的(即标记所属连接和状态), 出站数据流在 OUTPUT 链中进行状态追踪。使用 RAW 表可以配置数据流绕过状态追踪。
配置规则
iptables -h 可以查看 iptables 自带的帮助手册。
我们将 iptables 命令分解为几部分:
iptables -t <table> <cmd> <pattern> <action>
-t <table> 或 --table <table> 选项用来指定要查看或修改的表(raw, mangle, nat, filter)。
常用的 iptables 命令选项(上文中的<cmd>部分)包括:
-L <chain>/--list <chain>: 列出某条规则链中所有规则, 不指定chain参数则列出指定表中所有链上的规则。iptables 会按照列出的顺序依次尝试匹配规则并执行匹配的动作。规则可用链上的序号来描述,第一条规则的序号为1(不是编程语言常见的0)。-L -V/-L --verbose会显示更详细的内容
-A <chain>/--append <chain>: 在规则链的末尾添加规则, 规则的内容由后面的匹配选项<pattern>和动作<action>两部分来描述-I <chain> <index>/--insert <chain> <index>: 在规则链的指定位置插入规则。-i INPUT 2会在INPUT链第2个位置插入一条规则,原第2条及以后的规则均后移一位- R <chain> <index> //--replace <chain> <index>: 替换规则链指定位置上的规则-D <chain>/--delete <chain>: 删除链上某条规则,可以使用序号指定某条规则或者使用匹配和动作完整描述规则进行删除-F <chain>/--flush <chain>: 删除链上的全部规则-P <chain> <action>/--policy <chain> <action>: 修改某条链的默认策略, 示例iptables -P filter ACCEPT
iptables 的规则(<pattern>)包含匹配条件和动作两部分。可以根据网络接口、地址、协议等进行匹配:
-i/--in-interface: 进入的网络接口,如以太网eth, 本地回环lo。-o/--out-interface: 输出的网络接口-s/--source: 输入IP地址, 格式为address[/mask], 如192.168.1.1,192.168.1.0/24-d/--destination: 目标IP地址-p/---proto: 协议类型, 包括TCP/UCP/ICMP等--sport: 源端口号--dport: 目标端口号–-state: 连接跟踪状态, 需要-m state启动连接跟踪模块。示例:--state NEW,ESTABLISHED
ifconfig命令可以查看本机可用的网络接口
iptables 常用规则的动作(<action>)包括:
- ACCEPT: 允许数据包通过,进入下一条规则
- REJECT: 拦截数据包并发送回执数据包通知发送方,可用的回执有:
ICMP port-unreachable,ICMP echo-reply,tcp-reset
示例:iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with tcp-reset拒绝22端口的tcp连接 - DROP: 丢弃数据包不返回回执,不继续执行过滤
- SNAT: 源地址转换(Source Network Address Translation), 将包的源地址改写为指定地址。完成此动作后将直接跳往下一条规则链(如POSTROUTING)
示例:iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.1-192.168.1.100:2000-3000
连接跟踪功能会使连接后续的应答数据包送达发送者 - MASQUERADE: 将数据包的源地址改写为防火墙的地址但可以指定端口号, 与SNAT相比更适合防火墙工作在 DHCP 等动态地址网络环境中的情况。完成此动作后将直接跳往下一条规则链(如POSTROUTING)
示例:iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE --to-ports 2000-3000 - DNAT: 目的地址转换, 将包目的地址改写到指定地址,完成此动作后将直接跳往下一条规则链。此功能可以为其它服务进行反向代理
示例:iptables -t nat -A PREROUTING -s 192.168.1.10 --sport 80 -j DNAT --to-destination 192.168.1.11:80 - REDIRECT: 重定向到另一个端口,可以为本地服务提供反向代理
示例:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080将对本地80端口的数据包重定向到8080 - MIRROR: 回声, 将源地址与目的地址对换位置后发送给原发送者
保存规则
iptables 命令修改后规则只存在于内存中, 使用service iptables save保存规则到配置文件。
默认配置文件地址一般为/etc/sysconfig/iptables。
修改/etc/sysconfig/iptables-config中的配置项:
IPTABLES_SAVE_ON_STOP=yes在 iptables 服务停止时存储规则。
iptables-save
iptables -L 只能逐表查看规则,iptables-save 命令将 netfilter 内核模块中的规则导出到标准输出。
我们可以使用 iptables-save 查看所有规则, 或将其备份到文件中。
iptables-save 命令执行读取操作,不会更改 iptables 配置请放心使用。
iptables-save -t <table> 仅导出指定表的内容。
iptables-save -c 将会导出字节计数器和包计数器的值。
示例
查看规则:
iptables -L列出默认表 filter 所有链上的规则。iptables -t nat -L列出 nat 表中所有链上的规则iptables -t nat -L PREROUTING列出 nat 表中 PREROUTING 链上的规则
拦截特定流量:
iptables -t filter -A INPUT -s 11.11.11.11 -j DROP拦截来自特定 IP 地址(11.11.11.11)对本地服务全部流量iptables -t filter -D INPUT -s 11.11.11.11 -j DROP删除上一条拦截规则iptables -t filter -A INPUT -p tcp -sport 445 -j DROP封锁特定端口(TCP 445)iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j REJECT ---reject-with icmp-host-prohibited禁止 ICMP (ping)iptables -t filter -A OUTPUT -p tcp --dport 80 -m state --state NEW -j DROP禁止从80端口发起新的TCP连接但允许80端口响应TCP连接
作为网关提供NAT服务:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.1将来自192.168.2.0/24子网数据包源地址改写为192.168.1.1iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE将来自192.168.2.0/24子网数据包源地址改写为防火墙地址iptables -t nat -A PREROUTING -d 192.168.1.1/24 --dport 80 -j DNAT --to-destination 192.168.1.11:80将对192.168.1.1:80的数据包发送到192.168.1.11:80iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080将对本地80端口的数据包重定向到8080
iptables 指南的更多相关文章
- Iptables 指南 1.1.19
Iptables 指南 1.1.19 Oskar Andreasson oan@frozentux.net Copyright © 2001-2003 by Oskar Andreasson 本文在符 ...
- Iptables指南教程收集
iptables对于任何Linux基本都适用,虽然在最新版的CentOS 7和Ubuntu上已经有代替的工具来简化iptables,但是最终还是会把规则写入iptables中. 读教程前先阅读ipta ...
- iptables指南
在了解iptables之前我们先了解一下 防火墙 的概念防火墙是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网,防火墙也是一种位于内部网络与外部网络之间的网络安全系统 ...
- iptables rule
和H3C中的acl很像,或者就是一会事,这就是不知道底层的缺陷,形式一变,所有的积累都浮云了 参考准确的说copy from http://www.ibm.com/developerworks/cn/ ...
- linux之iptables总结
netfilter/iptables概述: netfilter/iptables是Linux内核防火墙架构,由netfilter实现功能,由iptables提供接口. iptables ...
- iptables及其在路由器上的应用 (待完善)
1. iptables基本定义 Table (表名) Explanation (注释) nat nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT ...
- Linux iptables 备忘
iptables主要通过存储在linux内核中的一个个表来控制IP包的.可以想象成excel表格.你可以自定义所需的iptables表.不过已经内置了三张队列表. filter 这是默认的表,包含了内 ...
- iptables关键学习总结
iptables技术推荐参考这位仁兄的博客:http://www.zsythink.net/archives/category/%E8%BF%90%E7%BB%B4%E7%9B%B8%E5%85%B3 ...
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
随机推荐
- pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
数据介绍 先随机生成一组数据: import pandas as pd import numpy as np state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'N ...
- HTML/CSS实现的一个列表页
又到休息日,白天没事跟朋友去逛逛街,侃大山,晚上了,上网无趣,于是就想起该练练了, 这次是做了一个页面,最上面是一个banner 用到了一个jQuery的逻辑判断当banner初始top值小于wind ...
- Round #2
题源:来自hzwer整理的题 2014-5-10 NOIP模拟赛 by coolyangzc Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模 ...
- promise的异步链式调用
场景: 淘米 干净的米下锅 蒸米饭 吃米饭 ;这几个步骤是一个接着一个执行, 也就是只有前面的做完后, 才会去做后面的. 并且每一步都需要用一部分时间去执行. function deal(ta ...
- 接口自动化项目搭建(Java+testng+maven+git+springboot)
自动化测试: https://www.bilibili.com/video/av31078661?from=search&seid=16551153777362561361 一工具准备 二 环 ...
- 总结css
一.背景 1. background-color: 背景颜色 2.background-image 设置图像为背景 url("http://images.cnblogs.com/cnb ...
- Three.js学习笔记04--纹理
1 纹理由图片组成 3D世界的纹理由图片组成. 将纹理以一定的规则映射到几何体上,一般是三角形上,那么这个几何体就有纹理皮肤了. 首先应该有一个纹理类,其次是有一个加载图片的方法,将这张图片和这个纹 ...
- 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)
前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客 ...
- Spring Cloud,Dubbo及HSF对比
Round 1:背景 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点.阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给Apa ...
- [Java]LeetCode116. 填充同一层的兄弟节点 | Populating Next Right Pointers in Each Node
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...