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. 洛谷 1197 [JSOI2008]星球大战

    [题解] 把询问离线,倒着加点,并查集维护连通性即可. #include<cstdio> #include<cstring> #include<algorithm> ...

  2. IDEA 2018集成MyBatis Generator 插件 详解

    1.修改maven的pom文件 只需要将如下依赖添加到pom.xml文件中即可.(注意此处是以plugin的方式,放在<plugins> </plugins>中间即可) < ...

  3. Vue如何引入icon图标

             1.下载icon图标,推荐icomoon网站,里面有大量的矢量图标,也可以自定义,当然你也可以去阿里巴巴矢量图标库下载你所需要的小图标.点击进入icomoon网站点击右上角“IcoM ...

  4. Mac os安装MySQL数据库,系统提示mysql: command not found该怎么办

    当我们安装好MySQL后,在终端输入mysql命令,发现并不能看到自己安装的数据库,这是因为你没有配置环境变量. 在os系统中安装MySQL数据库默认保存在/usr/local/mysql 那么我们应 ...

  5. FPGA学习笔记(六)—— 时序逻辑电路设计

    用always@(posedge clk)描述        时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...

  6. Leetcode 147.对链表进行排序

    对链表进行插入排序 对链表进行插入排序. 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它 ...

  7. 九度oj 题目1516:调整数组顺序使奇数位于偶数前面

    题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3416 解决:1091 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序, ...

  8. topshelf生成Windows服务

    一.  概述 Visual C# 工程中选取 Windows 服务(Windows Service)选项,可以创建Windows服务程序,这种开发方式对于开发来说不方便调试,今天介绍另外一种生成Win ...

  9. bzoj2212 Tree Rotations

    被BZOJ坑了一下午,原以为是我程序有问题一直WA,结果是我数组小了...为啥不给我RE!!! 线段树合并,对于逆序对而言,只能通过交换左右子树来达到,那么我们就可以想到对于一个结点而言,我们当然要取 ...

  10. Validate Binary Search Tree(DFS)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...