当前位置: > Linux服务器 > iptables >

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

时间:2014-12-26 21:03来源:linux.it.net.cn 作者:IT
一、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.表选项
指定命令应用于哪个表:filter、nat、mangle
 
2.命令选项
-P(--policy) <链名>  :定义默认策略
-L(--list)   <链名>  :查看iptables规则列表
-A(--append) <链名>  :在规则列表的最后增加1条规则
-I(--insert) <链名>  :在指定位置插入1条规则
-D(--delete) <链名>  :从规则列表中删除1条规则
-R(--replace)<链名>  :替换规则列表中的某条规则
-F(--flush)  <链名>  :删除表中所有规则
-Z(--zero)   <链名>  :将表中数据包计数器和流量计数器归零
 
3.匹配选项
-i <网络接口名>       :指定数据包从哪个网络接口进入,如eth0、eth1等
-o <网络接口名>     :指定数据包从哪个网络接口输出,如eth0、eth1等
-p <协议类型>          :指定数据包匹配的协议,如TCP、UDP、ICMP等
-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端口后才能设置此条。



 
 
(责任编辑:IT)
------分隔线----------------------------