iptables介绍

iptables

	1)iptables程序工作在内核的TCP/IP网络协议栈框架netfilter上,通过网络过滤可以实现入侵检测以及入侵防御功能,而不是单个协议当中。
2)iptables工具工作在用户空间,它可以制定一些规则然后送达内核空间,然后结合netfilter的钩子函数及处理方法对数据包进行放行或者拒绝处理。

Netfilter 组件

	1)netfilter组件称为内核空间,集成在linux内核中
2)netfilter是一种内核中用于扩展各种网络服务的结构化底层框架
3)netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT 、FORWARD 、PREROUTING 、POSTROUTING),而这五个hook function 向用户开放,用户可以通过一个命令工具iptables向其写入规则
4)netfilter主要由信息过滤表table组成,包含控制IP包处理的规则集rules,规则被分组放在链chain中。

三种报文流向

	流入本机:prerouting --> input--> 用户空间进程
流出本机:用户空间进程 -->output--> postrouting
转发:prerouting --> forward --> postrouting

iptables的组成

	1)iptables由四个表和五个链以及一些规则组成。
2)四个表table:
默认表为filter,处理优先级由高到低的顺序为:raw-->mangle-->nat-->filter
filter 过滤规则表,根据预定义的规则过滤符合条件的数据包
nat 地址转换规则表
mangle 修改数据标记位规则表
raw 跟踪数据表规则表,加快封包穿越防火墙速度
3)五个内置链chain
INPUT input,通过路由表判断后目的地是本机,然后进入本机内部资源
OUTPUT output,有本机产生的数据向外部转发
FORWARD forward,通过路由表判断后目的地不是本机,然后通过路由转发到其他地方
PREROUTING prerouting,流入的数据包进入路由表之前
POSTROUTING postrouting,传出的数据包到达网卡出口之前

netfilter表和链对应的关系

数据包过滤匹配和传输过程

		1)当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
2)如果数据包就是进入本机的,数据包就会沿着图移动达INPUT链,数据包到达INPUT链后,任何进程都会收到它。
3)本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出
4)如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

路由功能发生的时间点

	1)报文进入本机后
判断目标主机是否为本机
是:INPUT
否:FORWARD
2)报文离开本机之前
判断由那个接口送达下一跳

iptables规则

	1)规则rule :
1>根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
2>匹配条件:默认为与条件,同时满足
1.基本匹配:IP, 端口,TCP 的Flags(SYN,ACK 等)
2.扩展匹配:通过复杂高级功能匹配
3>处理动作:称为target,跳转目标
1.内建处理动作:
ACCEPT,接受
DROP,悄悄丢弃,请求端没有任何回应
REJECT,明确拒绝
SNAT,源地址转换
DNAT,目标地址转换
REDIRECT,端口重定向
MASQUERADE,
MARK,
LOG,将访问记录下来
2.自定义处理动作:
自定义chain ,使用于分类管理复杂情形
2)规则要添加在链上才生效,而添加在自定义上不会自动生效。
3)链chain:
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制,且只有hook钩子调用自定义链时才生效
4)iptables 规则添加时考量点
要实现哪种功能:判断添加在哪张表上
报文流经的路径:判断添加在哪个链上
报文的流向:判断源和目的
匹配规则:业务需要
5)链上规则的次序,即为检查的次序,因此隐含一定的法则
同类规则(访问同一应用),匹配范围小的放上面
不同类规则(访问不同应用),匹配到报文频率较大的放上面
将那些可由一条规则描述的多个规则合并为一个
设置默认策略
6)iptables可以自动实现规则的语法检查,另外iptables制定的规则和链中还有计数器,来记录规则或链匹配到的报文的个数,以及匹配到的所有报文大小之和。
7)iptables生成规则,然后送往netfilter当中,规则通过内核接口直接送到内核,因此,会立即生效,但不会永久有效。要想永久有效就需要保存到配置文件中,此文件在开机时自动加载或由用户手动加载。
8)任何不允许的访问,应该在请求到达时给予拒绝
9)规则优化:
1》安全放行所有入站和出站的状态为ESTABLISHED状态连接
2》谨慎放行入站的新请求
3》有特殊目的限制访问功能,要在放行规则之前加以拒绝
4》同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
5》不同类的规则(访问不同应用),匹配范围大的放在前面
6》应该将那些可由一条规则能够描述的多个规则合并为一条
7》设置默认策略,建议白名单(只放行特定连接)
1)iptables -P ,不建议使用
2)建议在规则的最后定义规则做为默认策略
10)规则有效期:
使用iptables 命令定义的规则,手动删除之前,其生效期限为kernel存活期限
11)规则的保存:保存规则至指定的文件
CentOS 6
1》service iptables save
将规则覆盖保存至/etc/sysconfig/iptables 文件中
2》iptables-save > /PATH/TO/SOME_RULES_FILE CentOS 7 可用下面方法保存规则
iptables -S > /PATH/TO/SOME_RULES_FILE
iptables-save > /PATH/TO/SOME_RULES_FILE
12)规则的重载
centos 6
1》service iptables restart
会自动从/etc/sysconfig/iptables 重新载入规则
2》iptabels-restart < /PATH/FROM/SOME_RULES_FILE CentOS 7 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
-n, --noflush :不清除原有规则
-t, --test
开机自动重载规则文件中的规则:
(1) 用脚本保存各iptables 命令,让此脚本开机后自动运行
在etc/rc.d/rc.local 文件中添加脚本路径
/PATH/TO/SOME_SCRIPT_FILE
(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
(3) 自定义Unit File,进行iptables-restore 13)实验环境的准备:
Centos7:
systemctl stop firewalld.service
systemctl disable firewalld.service
Centos6:
service iptables stop
chkconfig iptables off

网络防火墙

	iptables/netfilter网络防火墙:
1》充当网关
2》使用filter表FORWARD链
注意的问题:
1》请求-响应报文均会经由FORWARD链,要注意规则的方向性
2》如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行

NAT

	NAT(network address translation)
1)请求报文:修改源/目标IP,定义如何修改
2)响应报文:修改源/目标IP,根据跟踪机制自动实现
3)主要用于对ip和端口的修改伪装。
4)通过表和链的关系知道:
1. 进来的数据先经过nat表的prerouting链
2.经过路由表判断确定这个包是要进入本机还是仅仅只是做个转发,如果不进入本机,则进入下一步。
3.再经过filter表的forward链
4.通过nat表的postrouting链,最后传送出去。
5)NAT主要功能就是在上面过程中的1和4,也就是nat表中的两个链:prerouting和postrouting。其中:
1.prerouting链是用来修改目标ip,即DNAT,目标地址转换。
2.postrouting链是用来修改源ip,即SNAT,源地址转换。
这些实现并非是用户空间运行的进程完成转换功能,而是靠内核中地址转换规则来实现。
SNAT(source NAT postrouting input)
让本地网络中的主机通过某个特定地址访问外部网络,来实现地址伪装。
请求报文:修改源IP
DNAT :destination NAT PREROUTING , OUTPUT
把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射) ,但隐藏真实IP。
请求报文:修改目标IP
PNAT: port nat,端口和IP都进行了修改。 SANT
主要用于实现让内网客户端访问外部主机时使用,要定义在postrouting链,也可以在output上使用。
定义方法:
nat的一个target:
SNAT:固定ip地址,服务器上的某外网地址,Extip
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
iptables -t nat -A POSTROUTING -s 内网或主机地址 -j SNAT --to-source NAT 服务器上的某外网地址
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
示例:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.100.6-172.18.100.9
nat的另一个target:
MASQUERADE:动态ip,地址伪装,能自行判断该转为那个源地址。
--to-ports port[-port]
--random
iptables -t nat -A POSTROUTING -s 内网或主机地址 -j MASQUERADE
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE
示例:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.100.6-172.18.100.9
DNAT
主要用于发布内部服务器,让内网中的服务器在外网中可以被访问到,要定义在prerouting链。
定义方法:
DNAT:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
iptables -t nat -A PREROUTING -d 服务器的某外网地址 -p 协议 --dport 端口 -j DNAT --to-destination 内网服务器地址[:port]
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
示例:
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22
iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080
REDIRECT
nat表中,可用于prerouting、output以及自定义链,通过改变目标ip和端口,将接收的包转发到不同的地址
--to-ports port[-port]
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp -dport PORT -j REDIECT -to-ports 8080
示例:
iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIECT --to-ports 8080

命令:iptables

	iptables/ip6tables — administration tool for IPv4/IPv6 packet filtering and NAT
iptables [-t table] [command] chain [rulenum] [options...] [match] [target]
iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号][-i|o 网卡名称][-p 协议类型][-s 源ip地址][源子网][--sport 源端口号][-d 目标ip地址|目标子网][--dport 目标端口号][-j 处理动作]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
table,默认为filter:
filter 一般的过滤功能,包含input,forward,output
nat 用于地址转换、映射、端口映射等,包含prerouting,postrouting
mangle 用于对特定数据包的修改,包含prerouting,output,forward,input,postrouting
raw 一般是为了不再让iptables做数据包的连接跟踪处理,从而提供性能,包含prerouting,output
command:
--append ,-A chain 追加
--check ,-C chain 检查规则的存在
--delete ,-D chain 删除(指明规则本身)
--delete ,-D chain rulenum 删除(指明规则序号)
--insert ,-I chain [rulenum] 插入,要指明插入至的规则编号,默认为第一条
--replace ,-R chain rulenum 替换指定链上的指定规则编号,默认为第一条
--list ,-L [chain [rulenum]] 列出规则
--list-rules ,-S [chain [rulenum]] 显示链上规则
--flush ,-F [chain] 清空指定的链,默认清空表中所有链,注意:被引用的链无法删除和改名
--zero ,-Z [chain [rulenum]] 将规则计数器置为0
iptables 的每条规则都有两个计数器
(1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和
--new ,-N chain 自定义一条新的规则链
--delete-chain ,-X [chain] 删除自定义的空的规则链,注意:被引用的链无法删除和改名
--policy ,-P chain target 设置默认策略,对filter 表中的链而言,其默认策略有ACCEPT(接受)、DROP(丢弃)和REJECT(拒绝)
--rename-chain ,-E old-chain new-chain 重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除。注意:被引用的链无法删除和改名
-S, --list-rules [chain] selected, 以iptables-save 命令格式显示链上规则
options
--ipv4 -4 Nothing (line is ignored by ip6tables-restore)
--ipv6 -6 Error (line is ignored by iptables-restore)
[!] --protocol,-p proto 指定协议,可使用数字如0(all),protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,
mh or “all“ 参看:/etc/protocols
[!] --source ,-s address[/mask][...] 源IP地址或范围
[!] --destination ,-d address[/mask][...] 目标ip地址或范围
[!] --in-interface ,-i input name[+] 报文流入的接口;只能应用于数据报文流入环节,只应用于 INPUT 、FORWARD 、PREROUTING 链
--jump ,-j target 规则目标,可加载目标扩展名
--goto,-g chain 跳转到没有返回的链
--match,-m match 扩展匹配,可加载扩展名
--numeric,-n 以数字格式显示地址和端口号
[!] --out-interface ,-o output name[+] 报文流出的接口;只能应用于数据报文流出的环节,只应用于 FORWARD 、OUTPUT 、 POSTROUTING 链
--table,-t table 要操作的表 (default: `filter')
--verbose,-v 详细信息,-vv,-vvv,更详细的信息
--wait -w [seconds] 等等xtables锁定
--line-numbers 显示规则的序号
--exact,-x 显示计数器结果的精确值, 而非单位转换后的易读值
[!] --fragment,-f 仅匹配第二个或更多片段
--modprobe=<command> 尝试使用此命令插入模块
--set-counters PKTS BYTES 在插入/追加期间设置计数器
[!] --version ,-V 显示包版本

iptables的介绍的更多相关文章

  1. iptables中文介绍 、基本使用操作命令(转)

    iptables 命令介绍   原文链接http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables防火墙可 ...

  2. iptables 命令介绍

    http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables 防火墙可以用于创建过滤(filter)与NAT ...

  3. linux iptables规则介绍

    今天又学习了一下iptables,做一点总结来方便以后查阅. Netfilter(网络过滤器)是Linux操作系统核心层内部的一个数据包处理模块,主要负责数据包的拦截和转发,而iptables是Net ...

  4. 【转】iptables 命令介绍

    iptables 防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有 效地管理Linux防火墙.如果你是第 ...

  5. [转]iptables 命令介绍

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有效地管理Linux防火墙.如果你是第一次 ...

  6. linux防火墙(一)—— iptables架构介绍

    一.防火墙的分类 一般宏观来说,防火墙分为主机型防火墙,例如我们为了防止个人电脑被攻击,而开启的防火墙,还分为网关型防火墙,一般部署在企业的网关,用于过滤和转发,保证整个企业的网络环境安全性. 按照物 ...

  7. iptables 简单介绍及应用 Linux防火墙

    iptables 即 Linux防火墙 的简单介绍及使用 iptables生效位置如下图: 其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省 ...

  8. iptables详细介绍

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...

  9. linux防火墙iptables简单介绍

    --append  -A chain        Append to chain  --delete  -D chain        Delete matching rule from chain ...

随机推荐

  1. 85-Momentum 动量指标.(2015.7.3)

    Momentum 动量指标 动量数值就是当天价格同前几个时段的价格的比率 MOMENTUM = CLOSE(i)/CLOSE(i-N)*100 注解: CLOSE(i) - 当前柱形的收市价格: CL ...

  2. LeetCode(59)SPiral Matrix II

    题目 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. F ...

  3. LeetCode 167. Two Sum II – Input array is sorted

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  4. STM32F407 GPIO原理 个人笔记

    datasheet(STM32F407ZGT6.pdf)中,IO structure 为FT,表示容忍5V电压 后面的uart1_TX之类,表示端口复用 共有A~G7组IO口, 每组16个IO口:0~ ...

  5. heap corruption detected VS2015 C语言 报错

    申请动态内存时,申请的单元数为n,可用下标为0~n-1 但实际使用时超过了该范围,就会报这个错

  6. fzu 2113 数位dp

    #include<stdio.h> #include<string.h> #define N 20 #define ll __int64 ll dp[N][N];//最多记忆4 ...

  7. 【bzoj1922】[Sdoi2010]大陆争霸 - STL - dijkstra

    信仰斯普林·布拉泽的克里斯国教徒. 幻想历 8012年 3月2日,位于杰森国东部小镇神谕镇的克里斯国教徒发动 起义. 幻想历 8012年 3月7日,神谕镇的起义被杰森国大军以残酷手段镇压. 幻想历 8 ...

  8. 莫比乌斯反演套路三、四--BZOJ2154: Crash的数字表格 && BZOJ2693: jzptab

    t<=1e4个询问每次问n,m<=1e7,$\sum_{1\leqslant x \leqslant n,1 \leqslant y\leqslant m}lcm(x,y)$. 首先题目要 ...

  9. msp430入门编程00

    msp430单片机最小系统 msp430入门学习 msp430入门编程

  10. kibana启动--nohup在关闭终端后无效&&守护进程详解

    https://blog.csdn.net/ty_0930/article/details/70184705 https://blog.csdn.net/Dream_Flying_BJ/article ...