码迷,mamicode.com
首页 > 其他好文 > 详细

iptables规则

时间:2016-07-25 16:43:19      阅读:465      评论:0      收藏:0      [点我收藏+]

标签:iptables规则

Packets Filter Firewall; 


Firewall:隔离工具;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件;

        硬件防火墙:在硬件级别能部分防火墙,另一部分功能基于软件实现; 

        软件防火墙:应用软件处理逻辑运行通用硬件实现的防火墙;

        主机防火墙:服务范围为当前主机;

        网络防火墙:服务范围为局域网;

        iptables/netfilter:软件实现的主机或网络防火墙; 

            iptables:规则编写工具;

            netfilter:防火墙框架;framework;

        所提供的机制(钩子):hook function

                路由前:prerouting

                入站:input

                转发:forward

                出站:output

                路由后:postrouting

        iptables:

            chain:

                PREROUTING

                INPUT

                FORWARD

                OUTPUT

                POSTROUTING

        tables:

                filter:过滤,防火墙;

                nat:network address translation;用于修改报文的源地址或目标地址,甚至是端口;

                mangle:拆解报文,做出修改,并重新封装起来;

                raw:关闭nat表上启用的连接追踪机制;

                优先级次序(由高而低):

                        raw --> mangle --> nat --> filter

功能<-->钩子:

raw:PREROUTING,OUTPUT

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat:PREROUTING,INPUT,OUTPUT,POSTRUTING

filter:INPUT,FORWARD,OUTPUT

报文流向:

到本机某进程的报文:PREROUTING --> INPUT

由本转发的报文:PREROUTING --> FORWARD --> POSTROUTING

由本某进程发出的:OUTPUT --> POSTROUTING 

规则的组成的部分:

匹配条件:

网络层首部属性值; 

传输层首部属性值;

附加的条件;

处理动作:

                                access;

                                drop;

...

TCP/IP协议栈:

数据链接层:物理到物理设备之间的通信;(MAC,Media Access Control)

网络层:源主机到目标主机之间的通信;

传输层:进程到进程之间的通信;

                netfilter:位于内核中的tcp/ip协议栈的报文处理框架;

                iptables:用户空间的命令行程序(系统中需要安装iptables后才可使用);

                        CentOS 5/6:iptables命令编写规则;

                        CentOS 7:基于firewalld命令生成iptables规则; 

                                若需要直接使用iptables,则需要要关闭systemctl disable firewalld.service 


iptables命令:

规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,就由规则后面指明的处理动作进行处理;

匹配条件:

基本匹配条件:简单检查IP、TCP、UDP等报文的某属性进行匹配的机制;

扩展匹配条件:需要借助于扩展模块进行的匹配条件指定即为扩展匹配;

处理动作:

基本动作:ACCEPT,DROP, ...

扩展动作:需要借助扩展模块进行的动作;

添加规则之时需要考量的问题:

(1) 报文的流经路径,判断添加规则至哪个链上;

(2) 确定要实现的功能,判断添加规则至哪个表上;

(3) 要指定的匹配条件,以用于匹配目标报文;

iptables/netfilter:包过滤型防火墙;带状态检测的包过滤型防火墙;连接追踪(connection tracking);

规则的编写格式:iptables [-t table表明(可省略,省略表示filter表] COMMAND(字命令) 

chain(指明链) [-m matchname(指明扩展模块) [per-match-options(指明模块专用选项)]]  [-j targetname(处理动作) [per-target-options(处理动作选项)]]

                -t table:默认为filter;其它可用的有raw, mangle, nat;

                COMMAND规则,链

链:

-P:policy,策略,定义默认策略; 一般有两种选择,ACCEPT和DROP;

-N:new,新建一条自定义的规则链;被内建链上的规则调用才能生效;[-j  chain_name];

-X:drop,删除自定义的引用计数为0的空链(链中不能有规则);

-F:flush,清空指定的链;(清空之前青雀表默认策略为ACCESS,否则将无法连接服务器)

-E:重命名自定义的引用计数和为0的链;

规则:规则处理自上而下,配上条规则拒绝后,将不匹配下条规则

-A:append,追加,在指定链的尾部追加一条规则;

-I:insert,插入,在指定的位置(省略位置时表示链首)插入一条规则;

-D:delelte,删除,删除指定的规则;

-R:replace,替换,将指定的规则替换为新规则;不能仅修改规则中的部分,而是整条规则完全替换;

查看:

-L:list,列出表中的链上的规则;

-n:numeric,以数值格式显示;

-v:verbose,显示详细格式信息; 

-vv, -vvv

-x:exactly,计数器的精确结果;

--line-numbers:显示链中的规则编号;

计数器:

规则,以及默认策略有专用的计数器;

记录被当前规则所匹配到的:

(1) 报文个数;

(2) 字节总数;

重置规则计数器:

-Z:zero,置0;

chain:

(1) 内建链;

(2) 自定义链;

iptables命令的使用格式:

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

-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]

matches...:匹配条件

target:处理动作


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

-m:指明加载模块

per-match-options:模块专用选项


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

-j:指明动作

targetname:动作名称

per-target-options:处理动作选项

匹配条件:

多重条件:逻辑关系为“与”;"!"表示取反

基本匹配条件:

[!] -s, --source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或范围;

[!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或范围;

[!] -p, --protocol protocol:

protocol:{tcp|udp|icmp}

[!] -i, --in-interface name:数据报文的流入接口;INPUT, FORWARD  and  PREROUTING 

[!] -o, --out-interface name:数据报文的流出接口; FORWARD, OUTPUT and POSTROUTING

扩展匹配条件

隐式扩展:不用-m选项指出matchname即可使用此match的专用选项进行匹配;

-p tcp:隐含了-m tcp;

[!] --source-port,--sport port[:port]:匹配报文中传输层的源端口;

[!] --destination-port,--dport port[:port]:匹配报文中传输层的目标端口;

[!] --tcp-flags mask comp

SYN,ACK,FIN,RST,URG,PSH;

mask:要检查的标志位列表,以逗号分隔;

comp:必须为1的标志位,余下的出现在mask列表中的标志位则必须为0;

--tcp-flags  SYN,ACK,FIN,RST  SYN 

[!] --syn:

相当于--tcp-flags  SYN,ACK,FIN,RST  SYN 

-p udp:隐含了-m udp:

[!] --source-port,--sport port[:port]:匹配报文中传输层的源端口;

[!] --destination-port,--dport port[:port]:匹配报文中传输层的目标端口;

-p icmp:隐含了-m icmp:

 [!] --icmp-type {type[/code]|typename}

8:echo-request

0:echo-reply


显式扩展:必须使用-m选项指出matchname,有的match可能存在专用的选项;

获取帮助:

CentOS 7:man iptables-extensions

CentOS 6:man iptables

                        1、multiport扩展

以离散或连续的方式定义多端口匹配条件;

[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;

[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;

[!] --ports port[,port|,port:port]...:指定多个端口;

 

2、iprange扩展

以连续的ip地址范围指明连续的多地址匹配条件;

[!] --src-range from[-to]:源IP地址;

[!] --dst-range from[-to]:目标IP地址;

3、string扩展

对报文中的应用层数据做字符串匹配检测;

[!] --string pattern:要检测字符串模式;

[!] --hex-string pattern:要检测的字符串模式,16进制编码;

    --algo {bm|kmp}

4、time扩展

根据报文到达的时间与指定的时间范围进行匹配度检测;

                                                --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间;

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间;

                                                --timestart hh:mm[:ss]

--timestop  hh:mm[:ss]

[!] --monthdays day[,day...]

[!] --weekdays day[,day...]


5、connlimit扩展

根据每客户端IP做并发连接数匹配;

--connlimit-upto n:连接数数量小于等于n,此时应该允许;

--connlimit-above n:连接数数量大于n,此时应该拒绝;


6、limit扩展

基于收发报文的速率进行匹配;

                                        --limit rate[/second|/minute|/hour|/day]:平均速率

--limit-burst number:峰值速率

7、state扩展

状态检测;连接追踪机制(conntrack);

INVALID:无法识别的状态; 

ESTABLISHED:已建立的连接;

NEW:新连接; 

RELATED:相关联的连接;

UNTRACKED:未追踪的连接;

 

nf_conntrack内核模块;

追踪到的连接:/proc/net/nf_conntrack文件中;

能追踪的最大连接数量定义在:/proc/sys/net/nf_conntrack_max

此值可自行定义,建议必要时调整到足够大;

不同的协议的连接追踪的时长:

/proc/sys/net/netfilter/

[!] --state STATE

如何开放被模式的ftp服务: 

(1) 装载追踪ftp协议的模块;

# modprobe nf_conntrack_ftp

        (2) 放行命令连接

                                                                

                                                                放行新的连接

~] # iptables -A INPUT -d IP -p tcp --dport PORT -m state --state NEW -j ACCEPT

                                                                放行已建立的连接

~] # iptables -A INPUT -d IP -p tcp -m state --state ESTABLISHED -j ACCEPT


        (3) 放行数据连接

~] iptables -A INPUT -d IP -p tcp -m state --state RELATED -j ACCEPT

处理动作(目标)

-j targetname [per-target-options]

targetname:

ACCEPT:接受;

DROP:丢弃;

REJECT:拒绝;

保存和重载规则:

iptables-save > /PATH/TO/SOME_RULE_FILE 

iptables-restore < /PATH/FROM/SOME_RULE_FILE

CentOS 6:

保存规则:

service iptables save

自动保存规则至/etc/sysconfig/iptables文件中;

重载规则:

server iptables restore

从/etc/sysconfig/iptables文件中重载规则; 

开机启动直接读取iptables规则

将规则保存至/etc/rc.d/init.d/中并设置开机启动

chkconfig iptables on


规则优化:

(1) 可安全放行所有入站及出站,且状态为ESTABLISHED的连接;

(2) 服务于同一类功能的规则,匹配条件严格的放前面,宽松放后面;

(3) 服务于不同类功能的规则,匹配报文可能性较大扩前面,较小放后面;

(4) 设置默认策略;

(a) 最后一条规则设定;

(b) 默认策略设定;

iptables规则

标签:iptables规则

原文地址:http://mylinuxlearn.blog.51cto.com/9740653/1829565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!