iptables用法

一. iptables简述

防火墙的做用就在于对通过的报文匹配(match)“规则”(rules),而后执行对应的“动做”(target)。html

防火墙的发展史就是从墙到链再到表的过程,也即从简单到复杂的过程,为何规则愈来愈多,由于互联网愈来愈不安全了,全部防火墙的规则也愈来愈复杂。linux

ipfirewall(墙)-->ipchains(链条)--iptables(表)shell

2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm;安全

2.2 版内核中,包过滤机制ipchain,管理工具是ipchains;网络

2.4版及之后的内核中,包过滤机制是netfilter,管理工具iptables。app

iptables运行在用户态,用户制定防火墙规则;netfilter运行与内核空间,规则存储在内核空间的信息包过滤表中。用户空间的iptables制定相应的规则策略控制内核空间的netfilter处理相应的数据访问控制。tcp

制做防火墙规则一般有两种基本策略。一是黑名单策略;二是白名单策略。工具

二. iptables规则

iptables规则有四表五链(其实有五表,后来又增长了security表),四表分别是raw、mangle、nat、filter表。五链分别是PREROUTING、INPUT、OUTPUT、 FORWARD、POSTROUTING链。表有什么用?链又有什么用呢?其实表规则决定了数据报文处理的方式,而链规则决定了数据报文的流经哪些位置。post

表介绍(table性能

filter表:负责过滤功能,确认是否放行该数据包;内核模块:iptables_filter

nat表:网络地址转换功能,修改数据包中的源、目标IP或端口;内核模块iptables_nat

mangle表:拆解报文、作出修改,并从新封装,为数据包设置标记;iptable_mangle

raw表:确认是否对该数据包进行状态追踪,关闭nat表上启动的链接追踪机制;iptable_raw

security表:是否认义强制访问控制规则(MAC)。

规则表的优先级:raw->mangle->nat->filter

链介绍(chain)

PREROUTING链:在进行路由选择前处理数据包,判断目标主机

INPUT:处理入栈数据包

OUTPUT:处理出栈数据包

FORWARD:处理转发数据包(主要是将数据转发到本机其余网卡设备)

POSTROUTING链:在进行路由选择后处理数据包,判断经由哪个接口送往下一跳

 

制定iptables规则的思路:

1) 选择一张表(此表决定了数据报文处理的方式)

2) 选择一条链(此链决定了数据报文的流经哪些位置)

3) 选择合适的条件(此条件决定了对数据报文作何种条件匹配)

4) 选择处理数据报文的动做,制定相应的防火墙规则。

三. iptables命令

iptables/ip6tables - administration tool for IPv4/IPv6 packet filtering and NAT

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动做或跳转]

不指定表名时,默认表示filter表;

不指定链名时,默认表示该表内全部链;

除非设置规则链的缺省策略,不然须要指定匹配条件。

 

       iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain rule-specification

       iptables [-t table] -I chain [rulenum] rule-specification

       iptables [-t table] -R chain rulenum rule-specification

       iptables [-t table] -D chain rulenum

       iptables [-t table] -S [chain [rulenum]]

       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target

       iptables [-t table] -E old-chain-name new-chain-name

 

       rule-specification = [matches...] [target]

       match = -m matchname [per-match-options]

       target = -j targetname [per-target-options]

1. 管理选项

管理选项-规则管理

-A, --append chain rule-specification:追加新规则于指定链的尾部

-C, --check chain rule-specification:确认匹配规则是否在存在chain中

-D, --delete chain rule-specification:根据规则自己删除规则

-D, --delete chain rulenum:根据规则编号删除规则

-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部

-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则

管理选项-规则显示

-L, --list [chain]:列出规则

-n, --numeric:数字格式显示主机地址和端口号

-x, --exact:显示计数器的精确值,而非圆整后的数据

--line-numbers:列出规则时,显示其在链上的相应编号

-S, --list-rules [chain]:显示指定链的全部规则

管理选项-链管理

-N, --new-chain chain:新建一个自定义的规则链

-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链

-F, --flush [chain]:清空指定的规则链上的规则

-E, --rename-chain old-chain new-chain:重命名链

-Z, --zero [chain [rulenum]]:置零计数器;

    注意:每一个规则都有两个计数器:

packets:被本规则所匹配到的全部报文的个数

bytes:被本规则所匹配到的全部报文的大小之和

-P, --policy chain target:指定链表的默认策略(ACCEPT | DROP | REJECT),增长的规则应该是相反的,须要特殊处理的。

2. 条件匹配

条件匹配分为基本匹配和扩展匹配,扩展匹配又分为显示匹配和隐式匹配。

基本匹配的特色是:无需加载扩展模块,匹配规则生效;扩展匹配的特色是:须要加载扩展模块,匹配规则方可生效。

隐式匹配的特色:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不须要手动加载扩展模块;  

显示匹配的特色:必须使用-m选项指明要调用的扩展模块的扩展机制以及须要手动加载扩展模块。

基本匹配的使用选项及功能

-p 指定规则协议,tcp udp icmp all

-s 指定数据包的源地址,ip hostname

-d 指定目的地址

-i 输入接口

-o 输出接口

! 取反

隐式匹配的使用选项及功能 

-p tcp

  --sport 匹配报文源端口;能够给出多个端口,但只能是连续的端口范围

  --dport 匹配报文目标端口;能够给出多个端口,但只能是连续的端口范围

  --tcp-flags mask comp 匹配报文中的tcp协议的标志位

-p udp

  --sport 匹配报文源端口;能够给出多个端口,但只能是连续的端口范围

  --dport 匹配报文目标端口;能够给出多个端口,但只能是连续的端口范围

--icmp-type

  0/0: echo reply 容许其余主机ping

  8/0:echo request 容许ping其余主机

显式匹配的使用选项及功能

man iptables-extensions查看具体用法

包含multiport(多端口),iprange,time,string,connlimit,limit,state(数据报文状态:INVALID,ESTABLISHED,NEW,RELATED,UNTRACKED)。

3.处理动做

处理动做有内置的处理动做和自定义的处理动做。自定义的处理动做用的比较少,所以只介绍内置的处理动做。

ACCEPT:容许数据包经过

DROP:直接丢弃数据包,不给出任何回应信息,这时客户端会感受请求丢失了,过了超时时间才会有反应。

REJECT:拒绝数据包经过,必要时会给数据发送端一个响应信息,客户端刚请求就会收到拒绝的信息。

LOG:在日志文件/var/log/messages中记录日志信息,而后将数据包传递给下一条规则

QUEUE: 防火墙将数据包移交到用户空间

RETURN:防火墙中止执行当前链中的后续Rules,并返回到调用链 

REDIRECT:端口重定向,在本机作端口映射。

MARK:作防火墙标记

DNAT:目标地址转换

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

MASQUERADE:地址假装,是SNAT的一种特殊形式,适用于动态的、临时会变的IP上。

四. iptables应用

1. 删除现有规则

iptables -F

2. 配置默认链策略

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

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

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

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

6. 查看本机关于iptables的设置状况

iptables -L -n

7.有线端口接收到数据包转发到无线端口wlan0后发送出去

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wlan0 -j MASQUERADE

五. iptables系列工具

iptables

用于创建,维护和检查Linux内核中IP包过滤规则的表格。

iptables-restore

用于从STDIN指定的数据恢复IP表。 使用shell提供的I/O重定向从文件读取。

iptables-save

用于将IP表的内容以易于解析的格式转储到STDOUT。 使用shell提供的I / O重定向写入文件。

iptables-xml

用于将iptables-save的输出转换为XML格式。 使用iptables.xslt样式表将XML转换回iptables-restore的格式。

iptables-apply

更安全的方式来远程更新iptables。

ip6tables*

是一组用于并行上述iptables命令的IPV6命令。

nfsynproxy

(可选)配置工具。 在这种状况下,SYNPROXY目标能够处理大型SYN洪水,而不会形成链接跟踪形成的大量性能损失。

xtables-multi

是一个二进制,它的行为是根据它所调用的名字。

 

参考:

1.  iptables 从入门到应用

2.  iptables详解:iptables概念

3.    netfiler/iptables

4.  Ubuntu 16.04中iptables的工具简介(iptables/iptables-restore/iptables-xml/iptables-apply/iptables-save)

相关文章
相关标签/搜索