iptables学习笔记
Linux因为健壮、灵活、高效正在成为越来越多的WEB服务器的首选,Linux的内置功能非常多并且强大,但是很多功能可能需要用户根据自己的需求来定制。作为WEB服务器来说,安全性是需要考虑的一个非常重要的问题,因此在服务器上配置一个高效的防火强是非常必要的。防火墙可以有硬件防火墙和软件防火墙,还可以按防火墙对于数据包的获取方式分为代理和IP过滤。这篇文章关注的就是通过信息包过滤的方式来搭建防火墙的方式。IP过滤机制通过对访问服务器的TCP/IP包进行分析,从表头中取得IP、端口等资料,然后依据规则来判断访问者是否被授权访问。事实上除了IP、端口等资料外,因为取得的是底层的信息包,所以还可以用于取得MAC、TCP、UDP、ICMP等包的信息。netfilter/iptables 就是Linux中信息过滤的一个强大的组合。基于kernel2.6的Linux发行版安装好就支持iptables。首先判断一下系统是否已经支持了iptables,查看/proc/net/ip_tables_names文件,如果存在说明内核已经支持iptables,否则需要先安装iptables。
iptables是如何过滤信息的呢?首先我们需要制定一些规则,当iptables取得信息包的头信息后就会根据我们设定的规则来判断是否允许访问主机。我们定义的规则被存储在内核的信息包过滤表(filter,还有诸如nat等表)中,在信息过滤表中规则会被分组放在链中。缺省的一般有INPUT、OUTPUT和,FORWARD三种链,处理访问信息包的规则被放在INPUT链中,而处理服务器出去的信息包的规则则放在OUTPUT链中,FORWARD链中的规则是用来处理转发的信息包,另外还有其他一些类型的链可以根据需要配置。在我们设定一条规则之后,比如是放在INPUT链中的,那么当一个外部的请求到达时,信息包就会被传到INPUT链上根据规则进行处理,如果信息包不在设定的规则之内,则会根据预设的策略判断是否通过。
使用iptables -L -n命令查看当前防火墙的规则,结果类似下面这样,其中(policy ACCEPT)指的就是预设的策略
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables定义策略的语法:
iptables [-t tables] [-P] [INPUT, OUTPUT, FORWARD | PREROUTEING, OUTPUT, POSTROUTING] [ACCEPT, DROP]
-P 定义Policy
用于fliter表中的参数
INPUT 请求主机的信息包
OUTPUT 主机发出的信息包
FORWARD 转发的信息包
用于nat表的参数
PREROUTING 路由之前处理
OUTPUT 主机发出的信息包
POSTROUTING 路由之后处理
iptables查看规则的语法:
iptables [-t table] [-L] [-n]
-t 后面接 iptables 的 table,默认就是 -t filter。
-L 列出当前的 table 的规则
-n 不进行 IP 与 hostname 的转换
iptables清除规则的语法:
iptables [-t table] [-FXZ]
-F 清除所有规则;
-X 杀掉所有用户建立的链
-Z 将所有链的计数与流量统计都清零
iptables增加和定义规则的语法:
iptables [-t table] [-AI INPUT,OUTPUT,FORWARD] [-s IP/network] -j [ACCEPT,DROP]
-A:将一条规则添加到最后面
-I:插入一条规则,默认放在最前面
-s:来源数据包的IP地址或地址段
-j:要执行的动作(drop、accept、log)
iptables删除规则语法:
iptables -D INPUT 2,表示删除INPUT链中的第二条规则
