iptables介绍
netfilter/iptables是内核集成的,不存在start/stop或者禁用的说法。可以用iptables命令创建过滤规则。(现在较新的内核中已经默认集成,无需单独安装)
而ufw则是ubuntu上简化iptables配置的工具,其定义了一系列的规则并加入到iptables中。所以在ufw启用的情况下,你能在iptables规则中看到一系列的ufw
类字样。这些具体的由ufw定义的规则在/etc/ufw/*.rules
下。
以下适合于Ubuntu 16.04.5 LTS
基本命令
查看帮助:
查看过滤规则
sudo iptables -vnL --line-numbers
- -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名
- -v:显示详细信息
- --line-numbers:给规则标上数字,这个在删除规则时很有用
同一个chain,从上到下进行匹配,所以num很重要;
创建一个新的iptables规则,不会影响现有的连接;
保存创建好的规则到文件
iptables-save > /etc/iptables.up.rules
从文件中恢复规则
/sbin/iptables-restore < /etc/iptables.up.rules
也可以把上条命令添加到/etc/rc.local,在系统重启时恢复规则
完整命令规则
iptables [-t table] command chain [match] [-j target]
以下是各段命令主要参数的解释。
-t table,table有四个选项,默认为filter:
- filter:一般的过滤功能,默认的table
- nat:用于NAT功能(端口映射,地址映射等)
- mangle:用于对特定数据包的修改
- raw:主要用于配合NOTRACK的响应
- security:用户强制访问控制(MAC)网络规则
command,定义规则写入方式:
- -P:定义链的默认规则(所有其它规则都没有匹配到的数据包,将按照默认规则来执行)
- -A:追加,在当前链的最后新增一个规则
- -I num:插入,把当前规则插入为第几条
- -R num:Replays替换/修改第几条规则
- -D num:删除,明确指定删除第几条规则 num要放到chain之后,见后面的应用实例。
chain,netfilter可以在五个位置进行过滤:
- PREROUTING (路由前)
- INPUT (数据包流入口)
- FORWARD (端口转发)
- OUTPUT(数据包出口)
- POSTROUTING(路由后)
match:匹配规则,常用的规则有以下几种,可以并列使用多种匹配规则:
- -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP,逗号分隔多个协议,ALL是确实设置,!表示反向匹配)
- -s:匹配源地址ip或ip段(IP或IP/MASK,!表示反向匹配)
- -d:匹配信息包的目的地IP地址(!表示反向匹配)
- -i:流入网卡
- -o:流出网卡
- --dport:目标端口(两个短行)
- –sport:源端口
- –state:连接状态
- -m:显式扩展以上的规则(即可以匹配多个状态、端口等)
target:进行的操作/响应,常见的有以下几种:
- DROP(悄悄丢弃)
- REJECT(明示拒绝)
- ACCEPT(接受)
- MASQUERADE(源地址伪装)
- REDIRECT(重定向)
- MARK(打防火墙标记的)
- RETURN(返回)
实际使用范例
开放某个tcp端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
删除某条规则
这里删除的是规则1
sudo iptables -t filter -D FORWARD 1
添加一条nat记录
sudo iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE
保存和恢复iptables
sudo iptables-save > ./iptables.bak
sudo iptables-restore < ./iptables.bak
参考资料
写的比较好的博客,适合入门
适合入门之后的深入
wiki页面 大而全