iptables 可以简单理解为 Linux 系统内核级防火墙 netfilter 的用户态客户端。
Linux 管理员通过调用 iptables 命令,配置 Linux 内核 netfilter 模块规则,对网络数据包的流动进行管理。iptables 有表 (tables) 的概念,每张表又包含不同链 (chains),大部分情况下我们仅需要使用 filter 和 nat 两张表的链就可以完成功能。
filter 表中有 3 条链: INPUT, FORWARD, OUTPUT。如果3 条链都没有任何规则存在,则网卡的网络数据包不会受到任何影响。
iptables链中的规则是从上到下依次执行的,因此一条规则在链中的位置十分重要。
例如一条拒绝全部连接的规则 -j REJECT 一定要放在链的最后,而允许通行的规则要放在这条规则之前。
否则所有网络数据包进入链后直接匹配到这条规则,将导致所有连接被拒绝。
禁止本机访问指定网站:
//参数解析 -I 添加规则到链的最前面, -p 匹配协议, -d 匹配目的地址, -j DROP 将匹配的数据包实施丢掉动作
sudo iptables -I OUTPUT -p icmp -d www.baidu.com -j DROP
查看已有(iptables过滤)规则:
sudo iptables -L -n
导出规则:
sudo iptables-save > /home/ubuntu/iptables_rules
导入规则:
sudo iptables-restore /home/ubuntu/iptables_rules
//清除已有规则
sudo iptables -F
//清除自建链
sudo iptables -X
//新建一个叫做 BLACKLIST 的链
sudo iptables -N BLACKLIST
//当访问的源 IP 地址是本机的时候进入 BLACKLIST 链
sudo iptables -A OUTPUT -s 10.135.166.86 -j BLACKLIST
//向 BLACKLIST 链添加 2 条规则
sudo iptables -A BLACKLIST -d 114.114.114.114 -j DROP
sudo iptables -A BLACKLIST -d 220.181.111.188 -j DROP
端口转发
//把8080端口转发到80端口
sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 8080 -j DNAT --to 127.0.0.1:80
//把外网8080端口转发到80端口
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80