iptables 配置防火墙

Netfilter是Linux内核的子系统,它提供了用于网络数据包过滤的核心函数库,Linux下的防火墙可以基于Netfilter来实现,而Iptables就是一个Linux下的基于Netfilter的防火墙管理工具,我们通过Iptables可以很方便的对Linux防火墙进行配置。

规则链和规则表

在Iptables中我们设置的数据包过滤策略叫做“规则”,多个规则可以形成一条“规则链”对数据包依次过滤。定义一条规则需要指定匹配的数据包以及如何处理。常见的处理方式有如下几种:

  • ACCEPT 接受该数据包
  • DROP 直接丢弃该数据包
  • REJECT 拒绝该数据包,和DROP不同的是丢弃数据包后会向发送端报告该数据被丢弃,DROP直接丢弃没有任何回复
  • LOG 记录日志,然后匹配规则连的下一条规则

“规则表”是用来容纳规则链的表格,默认规则表有四个:

  • raw:确定是否对该数据包进行状态跟踪
  • mangle:为数据包设置标记
  • nat:修改数据包中的源、目标IP地址和端口,用于网络地址转发
  • filter:是否放行一个数据包

我们配置防火墙时一般都是使用filter表,配置命令如果不指定规则表默认就是filter表。

规则表的执行顺序是raw->mangle->nat->filter,规则链的执行顺序则如下:

  • 入站顺序 PREROUTING->INPUT
  • 出站顺序 OUTPUT->POSTROUTING
  • 转发顺序 PREROUTING->FORWARD->POSTROUTING

Iptables命令的配置选项

Iptables的参数很多,具体可以查看man手册,这里就不逐个介绍了,我们只列举几个常用的参数选项。

  • -P 设置默认策略
  • -F 清空规则链
  • -L 查看规则链
  • -A 在规则链末尾插入规则
  • -I 序号 在规则链开头插入规则
  • -D 序号 删除一条规则
  • -s 匹配来源地址(IP/掩码)
  • -d 匹配目标地址
  • -i 网卡名 匹配从指定网卡流入的数据
  • -o 网卡名 匹配从指定网卡流出的数据
  • -p 匹配某种协议
  • -j 指定该条规则的目的,比如:如果匹配,怎样处理某个数据包
  • -dport 匹配目的端口号
  • -sport 匹配源端口号

Iptables使用例子

注意:测试Iptables时一定要谨慎,最好使用虚拟机模拟确认命令正确后再实际执行,避免配置错误导致SSH无法登入Linux主机的尴尬情况!

查看所有规则链包含的规则。

iptables -L

将INPUT链的默认策略设置为拒绝。

iptables -P INPUT DROP

在INPUT上允许ICMP协议(在INPUT默认规则为拒绝的前提下,也就是白名单模式)。

iptables -I INPUT -p icmp -j ACCEPT

拒绝某一IP的报文。

iptables -I INPUT -s 192.168.1.104 -j DROP

记录所有ssh连接本机通信的日志(ssh使用TCP协议22端口),查看日志可以使用dmesg命令。

iptables -I INPUT -p tcp --dport 22 -j LOG

限制某一IP某段时间对本机的访问。

iptables -I INPUT -s 192.168.1.104 -m time --timestart 06:00 --timestop 07:00 -j DROP

注意:这里配置时使用的是UTC时间,例如现在是下午2点,即14:00,对应UTC时间就是06:00,要减8。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。