Linux iptables详解

iptables

iptables 是 Linux 操作系统里面一款知名 IP 防火墙工具。iptables 有两块主要的功能,分别是 过滤映射

其中的过滤,又可以分为 访问过滤出口过滤。当一个 IP 访问我们服务器的时候,我们针对个 IP 进行一些规则判断,如果触发了规则,那么对 IP 进行禁止,这就是访问过滤。而出口过滤呢?是我们服务器要访问一个 IP,然后针对我们主动访问的 IP 进行规则校验。

映射就是转发,例如被请求了 8000 端口,但是我们通过 iptables 映射到 80 端口,也就相当于把 8000 转发到 80 端口。

理解了这两个基本的概念,就可以进入实际操作了。


rules

iptables 的规则详解。

iptables -h // 帮助

我们查看一下当前主机的规则。

$ iptables -L -t filter
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

/*
 结果显示没有任何规则
*/

我们新增一条规则。

$ iptables -A INPUT -s 0.0.0.0 // 这条规则的作用是禁止 0.0.0.0 这个 IP 访问我们的主机
$ iptables -L -t filter
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
           all  --  0.0.0.0              anywhere // 这里就多出一条记录了

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

更多的规则。

/*
 新增、修改、删除 规则
*/
-A INPUT // -A 追加一条规则到 iptables 的列表,INPUT 表示这条规则是 “访问过滤” | OUTPUT 就是 “出口过滤” 
-I INPUT 2 // -I 表示这条规则添加到哪行,规则匹配的顺序会影响规则的匹配结果,前后很重要
-R INPUT 2 // -R 修改第二行的规则
-D INPUT 2 // -D 删除第二行的规则
-F // 清空所有规则

/*
 IP 规则
*/
-s 0.0.0.0 // 来源 IP,用于 “访问过滤” 匹配
-d 0.0.0.0 // 目标 IP,用于 “出口过滤” 匹配
! -s 0.0.0.0  // ! 号,白名单机制,除了这个 IP 其他 IP 都不能访问

/*
 协议和端口规则
*/
-p tcp/udp --dport/sport 1 // -p 协议 -dport/sport 源端口/目标端口
-p icmp --icmp-type 8/0 // 匹配 icmp | type 8 表示请求,0表示 回应

/*
 网卡规则
*/
-i eth0 //  -i “访问过滤”
-o wlan0 // -o “出口过滤”

iptables 实例

结合上面的规则,举些实例。

/*
 filter 过滤 实例
*/
// 访问过滤
iptables -A INPUT -s 0.0.0.0 -p tcp --sport 8000 -j DROP // 拒绝 0.0.0.0:8000 访问 | 如果是 -j ACCEPT 这个规则就是允许访问

// 出口过滤
iptables -A OUTPUT ! -d 0.0.0.0 -j DROP // 拒绝 0.0.0.0 出口

// 拒绝所有ICMP请求
iptables -A INPUT -p icmp --icmp-type 8 

/*
 nat 映射 实例
*/
iptables -t nat -A PREROUTING -p tcp --dport 8000 -j REDIRECT --to-ports 80 // 将访问 8000 端口转发到 80 端口上
更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程