理解概念
iptables可以为Linux创建快速且强大的防火墙IP表,提供与包过滤框架配合使用的接口,它是管理进出系统的网络数据包的强大工具。
必须理解三个概念:表tables,链chains,规则 rules
首先是表tables:
filter表:这是默认表也是主表,如果不指定,就是使用这个表。顾名思义就是过滤数据包,允许或拒绝数据包到达目的地。这也是iptables使用最多的表。
NAT表:该表提供网络地址转换规则,确定是否进行转换,以及如何修改数据包源或目标地址,以便在无法直接访问时NAT路由数据包。
Mangle表:用于更改IP的标头,比如可以调整数据包的生存时间TTL,延长或缩短数据包的有效网络跳点数,以及其他IP标头参数。
RAW表:连接跟踪,提供一种标记数据包的机制,以将数据包视为正在进行的连接或会话的一部分;
Security表:用于在数据包上设置内部SELinux安全上下文标记,这将影响SELinux或其他可以解释SELinux安全上下文的系统如何处理这些数据包。
链chains:
链就像数据数据包路径中的点,我们可以在那里应用规则。一共有5个链:
PRE-ROUTING、INPUT、FORWARD、OUTPUT、POST-ROUTING。
链的顺序如图:

不同的表可以调用哪些链如下图:

如图,比如filter表可用于 input、forward、output链中。
链遍历顺序,实际就是数据包的路径:

再说说规则rules:
规则就是用户定义的命令来操纵网络流量。
数据包按顺序检查链中的每条规则。
如果不匹配,就检查下一条规则;
如果匹配,则由动作组件的值指定。
每个规则都由两个组件组成:匹配组件和动作组件。
比如:
iptables -A INPUT -s 15.15.15.51 -j DROP
匹配组件:示例用红色标注部分。可以用协议、源和目的地址、源和目的端口、接口、标头Header等来匹配,也可以组合匹配规则。
动作组件:示例用蓝色标注部分。表示匹配规则时触发的操作,目前有两种:终止动作和非终止动作。终止目标是动作后,结束该链中进一步遍历,具体的动作有接受、拒绝、队列返回或移动到用户自定义的链。非终止动作是指执行一个动作,然后继续在链中评估下一条。
值得注意的是:并非所有动作都适用于每一个表和链,表和链的类型决定了可用的动作。
语法及实例演示
sudo iptables -L -n -v
查询iptables,-L 表示列出,-n 表示数字显示,-v 表示详细
我们省略了表,表示默认用filter表,如果需要指定表的话,加上 -t参数
sudo iptables -t mangle -L -n -v
iptables的语法是:
iptables -t 表名 -选项 链 匹配组件 动作组件
表名和链前面已讲过,其他的分别如下:
选项:包括APPEND、DELETE、INSERT、REPLACE、Zero Counters、List、Policy、Rename、Flush、New User defined Chain、Delete Chain,选项可以用开头大写字母简写,Delete Chain有重复,用X代替。

匹配组件:主要有三种:通用的、隐式的和显式的用法。

详细可以查看:
https://www.frozentux.net/iptables-tutorial/chunkyhtml/c2264.html
动作组件:
匹配之后的动作。
跳转:
-j ,for jump ,跳转到特定规则或同一表中的链。有两个基本的规则 ACCEPT和DROP。还有REJECT,它类似于DROP,但它用于ICMP等返给源一个REJECT响应。最后还有RETURN,它将子链中的数据包返回到上级链。
我们已了解足够多的基础知识了,来实践一下:
假设要阻止用户访问www.360.cn网站:
sudo iptables -A INPUT -s www.360.cn -j DROP
可以查看一下生效的规则:
sudo iptables -L -n -v
我们能看到域名已解释成具体的IP了,并在INPUT链中添加了相应的规则。
实际测试确实打不开www.360.cn网站了。
删除:
sudo iptables -D INPUT 1
删除用D选项,1是这条规则的编号。
前面方法对付小型服务器是可以的,但要针对google,qq等网站,这种方法就不合适了,因为google和qq对应的IP地址很多,我们不可能列出全部IP地址,可以修改成丢弃策略,然后将允许访问的网址逐个添加上去,也就是白名单方式。
sudo iptables -P INPUT DROP
INPUT链的策略已改为DROP。这样所有的网站都不能访问了。然后添加具体允许的网站就可以了。
策略改回ACCEPT:
sudo iptables -P INPUT ACCEPT