iptables是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在Linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而iptables信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
规则:就是网络管理员预定义的条件,规则一般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别定义了源地址、目的地址、传输协议(如TCP,UDP,ICMP)和服务类型(HTTP,FTP,SMTP)等,当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject),和丢弃(drop)等。配置防火墙主要工作就是添加,修改和删除这些规则。
链:链(CHAINS)是数据包传播的途径,每一条链其实就是众多规则中的一个检查清单,每一条链可以有一条或数条规则。当一个数据包到达一条链时,iptables就从链中第一条规则开始检查,看该数据包是否满足规则定义的条件。如果满足,系统就会根据这条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables将会按照默认策略来处理数据包。
表:表(tables)提供了特定的功能,iptables内建了3个表,即filter表、nat表、和mangle表。分别用于实现包过滤,网络地址转换和包重构的功能
iptables常用命令格式:iptables [-t 表] –命令 匹配 动作
1. 表选项: filter(预设)、nat、mangle
2. 命令选项:用于指定执行方式,包括插入规则、删除规则、添加规则等。常用命令,见表1:
表1 常用命令
-P | 定义默认策略 |
-L | 查看iptables规则列表 |
-A | 在规则列表最后面添加1条规则 |
-I | 在指定位置插入1条规则 |
-D | 从规则列表中删除1条规则 |
-F | 删除表中所有规则 |
3、匹配选项:匹配指定数据包与规则匹配所具有的特征,包括源地址、目的地址、传输协议和端口号。常用匹配选项见表2
表2 常用匹配选项
-p | 指定数据包匹配的协议tcp,udp,icmp等 |
-s | 指定数据包匹配的源地址 |
--sport | 指定数据包匹配的源端口号 |
-d | 指定数据包匹配的目的地址 |
--dport | 指定数据包匹配的目标端口号 |
-j | 后面接动作 |
-i | 入站网卡 |
-o | 出站网卡 |
! | 否 |
4、动作选项:指定当数据包与规则匹配时,应该做什么操作,如接收,丢弃等 。
表3 常用匹配选项
ACCEPT | 接受数据包 |
DROP | 丢弃数据包 |
实际应用:
iptables 针对 TCP/IP 数据包实施过滤和限制。 使用预设的表 filter ,使用输入 INPUT 及输出 OUTPUT 链限制包的流进及流出。以下介绍一些 iptables 常用调试方法及示例:
1、设置默认策略:当所有规则不匹配时,使用的就是默认策略:
iptables -P INPUT ACCEPT | 输入允许 |
iptables -P OUTPUT ACCEPT | 输出允许 |
2、黑名单:除了设置的黑名单地址不允许过,其他所有的包通过。
iptables -F #清除所有规则 iptables -A INPUT -s 192.0.0.128 –j DROP #增加第1条规则:丢弃源地址 192.0.0.128 数据包 iptables -A INPUT -s 192.0.0.65 -j DROP #增加第2条规则:丢弃源地址 192.0.0.65 数据包
例: 1. 192.0.0.65访问设备,匹配第1条规则,不匹配,接着匹配第2条规则,匹配上,动作丢弃,设备不响应 2. 192.0.0.129访问设备,那么所有规则均不匹配,那么使用默认策略,IPPUT输入默认允许,那么允许数据包通过,访问设备成功
通过示例可以清楚的看到,黑名单中地址被过滤掉,其他地址允许通过,实现黑名单效果 |
3、白名单:除了设置的白名单地址,禁止其他所有包。
iptables -F #清除所有规则 iptables -A INPUT -s 172.8.4.205 –j ACCEPT #增加第1条规则:允许源地址192.0.0.128通过 iptables -A INPUT -s 172.8.4.199 –j ACCEPT #增加第2条规则:允许源地址192.168.1.100通过 ……………… iptables -A INPUT -j DROP #增加最后一条规则,丢弃 |
4、ftp 服务设置
u 禁用设备ftp服务
iptables -A INPUT -p TCP --dport 21 -j DROP #禁止访问IPC的21端口,即ftp服务器
u 禁用指定主机访问设备ftp
iptables -A INPUT -s 192.0.0.65 -p TCP --dport 21 -j DROP #禁止192.0.0.65通过TCP协议访问设备的21端口
5、telnet服务设置
u iptables -A INPUT -p TCP --dport 23 -j DROP #禁止访问IPC的23端口,即telnet服务
6、调试
我们常常调试设备时,很多多余的网络信息干扰,此时我们可以通过iptables简单设置几条规则,就可屏蔽其他的多余网络包的干扰。比如要使我们自己一台主机访问设备,只需设置允许自己主机通过,禁用其他所有包,就如白名单设置;再如我们PC主机是192.0.0.65,IPC地址时192.0.0.64,我们调试某一WEB接口(80端口)功能,去除其他的一些干扰网络信息,可做如下地址过滤:
#清除所有规则
iptables -F
#允许192.0.0.65访问设备TCP的80端口
iptables -A INPUT -s 192.0.0.65 -p tcp -dport 80 -j ACCEPT
#允许本机访问本机,这条规则要加上,要不然设备内部套接字通信的功能都将失效,比如串口命令等
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
#不允许其他包通过
iptables -A INPUT -j DROP