二、 基本概念
iptables 可以检测、修改、转发、重定向和丢弃 IP 数据包。其代码已经内置于内核中,并且按照不同的目的被组织成表(table)的集合。表由一组预先定义的链(chain)组成,链包含遍历顺序规则。每一条规则包含条件匹配和相应的动作(称为目标),如果条件匹配为真,该动作会被执行。
下图简要描述了网络数据包通过iptables的过程(只包含filter和nat表):
图中在上面的小写字母代表表,在下面的大写字母代表链。从任何网络端口进来的每一个 IP 数据包都要从上到下的穿过这张图。一种常见的困扰是认为 iptables 对从内部端口进入的数据包和从面向互联网端口进入的数据包采取不同的处理方式,相反,iptabales 对从任何端口进入的数据包都会采取相同的处理方式。可以定义规则使 iptables 采取不同的方式对待从不同端口进入的数据包。当然一些数据包是用于本地进程的,因此在图中表现为从顶端进入,到 <Local Process> 停止,而另一些数据包是由本地进程生成的,因此在图中表现为从 <Local Process> 发出,一直向下穿过该流程图。关于该流程图如何工作的详细解释请参考《Iptables Tutorial》。
防火墙策略一般分为两种,一种叫通策略,一种叫堵策略。通策略,默认门是关着的,必须要定义谁能进。堵策略,门是打开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
2.1表(tables)
iptables包含5张表(优先级为:security > raw > mangle > nat > filter):
2.5 模块(modules)
有许多模块可以用来扩展 iptables,例如 connlimit, conntrack, limit 和 recent。这些模块增添了功能,可以进行更复杂的过滤。
三、 相关参数
3.1 语法
iptables(选项)(参数)
3.2 命令通用格式
iptables [-t tables] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
3.3 选项(options)
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清除规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口;
3.4 目标(target)
ACCEPT:接收数据包;
DROP:丢弃数据包,不返回响应信息;
REDIRECT:重定向、映射、透明代理;
SNAT:源地址转换;
DNAT:目标地址转换;
MASQUERADE:IP伪装(NAT),用于ADSL;
LOG:日志记录;
MARK:做防火墙标记;
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息;
QUEUE: 防火墙将数据包移交到用户空间;
RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链;
四、 常见实例
4.1 查看iptables规则
iptables –nvL –t [filter|nat|mangle|raw] #默认查看filter表
4.2 清除iptables规则
iptables -F -t [filter|nat|mangle|raw] #默认清除filter表
4.3 清空规则链中的数据包计算器和字节计数器
iptables -Z -t [filter|nat|mangle|raw] #默认清除filter表
4.4 定义规则链中的默认目标(动作)
iptables -P INPUT DROP #定义filter表的INPUT链默认目标为DROP
iptables -P FORWARD ACCEPT #定义filter表的FORWARD链默认目标为ACCEPT
iptables -P OUTPUT ACCEPT #定义filter表的OUTPUT链默认目标为ACCEPT
4.5 开放IP/协议/port
iptables -A INPUT -s 192.168.1.2 -j ACCEPT #允许源192.168.1.2的数据包进入本机
iptables -A INPUT -p ospf -j ACCEPT #允许所有ospf协议数据包进入本机
iptables -A INPUT -p icmp -j ACCEPT #允许所有icmp协议数据包进入本机
iptables -A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT #允许本地回环
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关的数据包通行
iptables -A FORWARD -i eth0 -m set ! --match-set white_list src -j DROP #拒绝从eth0网卡进入,并且IP不在white_list中的数据包通过
4.6 记录日志
iptables -A PREROUTING -s 172.16.0.0/16 -i eth0 -j LOG #所有从eth0网卡进入的源172.16.0.0/16的数据包记录在log日志中
4.7启动网络转发规则
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127 #让内网192.168.188.0/24使用公网IP 210.14.67.127上网
4.8 防止SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
4.9 限速
iptables -I INPUT -p tcp -i eth0 -s 192.168.12.2 -m limit --limit=5000/s --limit-burst=100 -j ACCEPT
iptables -I INPUT -p tcp -i eth0 -s 192.168.12.2 -j DROP
本文仅整理了iptables的基本概念及入门知识,旨在帮助大家快速了解和使用iptables。关于更多iptables的扩展和实践部分将在后续篇章推出,未完待续…
参考文章:
https://en.wikipedia.org/wiki/Iptables
http://www.netfilter.org/projects/iptables/index.html
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
原文地址:http://blog.51cto.com/ptallrights/2104513