Linux下iptables的简介和自己的记录

本文简单描述了Linux下 iptables 的原理介绍 和 自己在使用过程中的小小总结。


欢迎转载,请注明作者、出处。

作者:张正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑问,欢迎联系。

一、iptables基础:(封包过滤、封包重定向、NAT等功能)

->规则(rules)

->(chains)

->(tables)

->iptables传输数据包的过程

1.规则:

->规则一般的定义为:如果数据包头符合这样的条件,就这样处理这个数据包

->规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议和服务类型

->当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。

->配置防火墙的主要工作就是添加、修改、删除这些规则

2.

->链是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。

->当数据包到达链时,会从链中的第一条规则开始检查。如果满足条件,就会根据该条规则所定义的方法处理该数据包,否则就继续检查下一条规则。如果数据包不符合链中任意一条规则,就会按照预先定义的默认策略来处理数据包。

3.

a.filter表:包过滤(iptables的默认表)

包含:

->INPUT(处理进入的数据包)

->FORWARD(处理转发的数据包)

->OUTPUT(处理本地生成的数据包)

filter表中,只允许对数据包进行接受、丢弃的操作,无法对数据包进行更改

b.nat表:网络地址转换

包含:

->PREROUTING(修改即将到来的数据包)

->OUTPUT(修改在路由之前本地生成的数据包)

->POSTROUTING(修改即将出去的数据包)

 

c.mangle表:(对指定包进行修改,使用相对较少)

包含:

->PREROUTING

->INPUT

->FORWARD

->OUTPUT

->POSTROUTING

 

 

 

二、数据包的传输过程:

__________________________________________________________

|                                                                                                               |

|   进入的数据包                                     输出的数据包 |

|                 |                                            |

|                                                                                         |       |

|    PREROUTING ------>FORWARD链条 --->  POSTROUTING |

|                 |                                            |

|                                                                                         |       |

|      INPUT    ------>内部处理过程 -->   OUTPUT链条   |

|________________________________________________________|

1.当一个数据包进入网卡时,首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

2.如果是进入本机的,数据包就会达到INPUT链,经过内部处理,然后经过OUTPUT链,最后到达POSTROUTING链输出

3.如果数据包是要转发出去的,且内核允许转发,数据包就会到达FORWARD链,然后到达POSTROUTING链输出

三、iptables命令格式

一般格式:iptables [ -t  ] -命令  匹配  [ -j 动作 ]

1.表选项

指定命令应用于哪个表:filternatmangle

2.命令选项

-P(--policy) <链名>  :定义默认策略

-L(--list)   <链名>  :查看iptables规则列表

-A(--append) <链名>  :在规则列表的最后增加1条规则

-I(--insert) <链名>  :在指定位置插入1条规则

-D(--delete) <链名>  :从规则列表中删除1条规则

-R(--replace)<链名>  :替换规则列表中的某条规则

-F(--flush)  <链名>  :删除表中所有规则

-Z(--zero)   <链名>  :将表中数据包计数器和流量计数器归零

3.匹配选项

-i <网络接口名>       :指定数据包从哪个网络接口进入,如eth0eth1

-o <网络接口名>     :指定数据包从哪个网络接口输出,如eth0eth1

-p <协议类型>          :指定数据包匹配的协议,如TCPUDPICMP

-s <源地址或子网>   :指定数据包匹配的源地址

--sport <源端口号>  :执行数据包匹配的源端口号,可用"起始端口号:结束端口号"

-d <目标地址或子网:指定数据包匹配的目标地址

--dport <目标端口号>:指定数据包匹配的目标端口号,可用"起始端口号:结束端口号"

4.动作选项

ACCEPT  接受数据包

DROP      丢弃数据包

REJECT    拒绝数据包

REDIRECT将数据包重新转到本机或另一台主机的某个端口

SNAT      源地址转换

DNAT      目标地址转换

MASQUERADE  NAT技术

LOG        将符合规则的数据包的相关信息记录在日志中

四、iptables命令示范

1.filter表默认接收

iptables -P INPUT ACCEPT

(没有-t <表名则默认为filter)

2.nat表默认丢弃

iptable -t nat -P OUTPUT DROP

3.查看规则

iptables [ -t  表名 ] -L [ 链名 ]

iptables -L

iptables -t nat

iptables -t mangle

4.禁止访问百度:

iptables -A INPUT -s www.baidu.com -j DROP

说明:

在访问百度网站的例子中

对于INPUT www.baidu.com(s)源地址,本机是(d)目的地址

对于OUTPUT:本机是(s)源地址,www.baidu.com(d)目的地址

因此禁止访问百度网站的方法有两种:

iptables -A INPUT -s www.baidu.com -j DROP

iptables -A OUTPUT -d www.baidu.com -j DROP

修改防火墙的文件:/etc/sysconfig/iptables

================================================================
防火墙设置-案例

开放22、80、6114、6115端口,其他端口默认关闭:
iptables -A INPUT -p icmp -j ACCEPT                    #允许ping
iptables -A INPUT -p tcp --dport 22 -j ACCEPT     #开放22端口,ssh
iptables -A INPUT -p tcp --dport 6114 -j ACCEPT #开放6114端口,mysql使用
iptables -A INPUT -p tcp --dport 6115 -j ACCEPT #开放6115端口,mysql使用
iptables -A INPUT -p tcp --dport 80 -j ACCEPT     #开放80端口
#iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT  #对80端口 新建立和已经建立的连接 开放
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT   #对所有已经建立的连接开放
#此条很重要,如果不设置,机器上的一些对网页的连接或者数据库的连接就无法正常 。设置此条后,就不用设置上面那条。
iptables -A INPUT -s 192.168.101.207 -j ACCEPT    
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT     #开放DNS ,否则iptables对域名解析很慢
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -P INPUT DROP    # 设置 默认INPUT链 丢失所有连接,此条慎重,一定要 开启22端口后才能设置此条。
本文转自ITPUB博客84223932的博客,原文链接:Linux下iptables的简介和自己的记录,如需转载请自行联系原博主。
上一篇:Swift语言指南(八)--语言基础之元组


下一篇:redis误同步恢复