标签:iptables
防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在主机或网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
1.iptables表
1).filter:过滤
INPUT、FORWARD和OUTPUT
2).nat:地址转换
PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)
3).mangle:修改报文原数据
PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING
4).raw:
PREROUTING、OUTPUT
2.iptables链
五个钩子函数(hook functions),也叫五个规则链。
1).PREROUTING (路由决策前)
2).INPUT (数据包流入口)
3).FORWARD (转发管卡)
4).OUTPUT(数据包出口)
5).POSTROUTING(路由决策后)
这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
注意:
iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。
iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。用户不可以删除自定义非空链。
规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
3.规则的写法
iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作
-t TABLE :指定表
COMMAND:定义如何对规则进行管理
CHAIN:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配条件
-j ACTION :指定如何进行处理
4.COMMAND详解
管理规则:
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num]: 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
-E oldname newname: 重命名自定义的链;
查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
5.匹配条件详解
通用匹配:
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d:表示匹配目标地址
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
-i eth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
-o eth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上
扩展匹配:
隐含扩展:
-p tcp :TCP协议的扩展。一般有三种扩展
--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21 或者 --dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
对于它,一般要跟两个参数:
1.检查的标志位
2.必须为1的标志位
--tcpflags syn,ack,fin,rst syn = --syn
表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
-p udp:UDP协议的扩展
--dport
--sport
-p icmp:icmp数据报文的扩展
--icmp-type:
echo-request(请求回显),一般用8 来表示
所以 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)一般用0来表示
显示扩展:
state: 状态扩展
结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports
--ports
-m iprange:地址范围匹配扩展
--src-range
--dst-range
-m connlimit: 连接数限制
! --connlimit-above n
-m limit
--limit RATE 每时间单位允许多少个请求
--limit-burst 一次最多允许多少个请求
-m string:字符串过滤
--algo {bm|kmp} 指定算法
--string "STRING" 指定过滤的字符串
6.ACTION详解
常用的ACTION:
DROP:悄悄丢弃
一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
REJECT:明示拒绝
ACCEPT:接受
custom_chain:转向一个自定义的链
DNAT
SNAT
MASQUERADE:源地址伪装(外网地址动态获取时使用)
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回
在自定义链执行完毕后使用返回,来返回原规则链
参考资料:
http://blog.chinaunix.net/uid-26495963-id-3279216.html
标签:iptables
原文地址:http://wangyongbin.blog.51cto.com/8964308/1683581