0%

Iptables原理和使用

基本概念

netfilter是一个免费的包过滤防火墙,位于内核空间,替代商业防火墙方案,完成封包过滤,封包重定向,网络地址转换(NAT)等功能。

iptables是一个命令行工具,位于用户空间,用来操作netfilter。

  • 5条链(关卡):

到本机某进程的报文:prerouting–>input

本机某进程发出的报文:output–>postrouting

本机转发的报文:prerouting–>forward–>postrouting

  • 4张表:

表中包含一条条规则

规则组成:

匹配条件+处理动作

匹配条件:source ip,port destination ip, port

处理动作:accept, drop, reject, snat, masquerde, dnat, redirect, log

表的作用:

filter:过滤

nat:网络地址转换

mangle:拆解报文,作出修改,重新封包

raw:关闭nat表启用的连接追踪机制

规则查看

iptables -t 表名 -L 链名

选项:

-v 显示详细信息

-n 不解析IP地址

-x 显示计数器精确值

–line-number 规则显示编号

规则管理

  • 添加规则:
1
2
3
iptables -t filter -I INPUT -s ip -j ACCEPT

iptables -t filter -A INPIT -s ip -j ACCEPT

-I 在表头插入规则

-A 在表尾追加规则

规则的顺序很重要,如果某个报文已经被前面的规则匹配了,那么后面的规则不会处理。

  • 删除规则

按序号删除

1
2
3
iptables --line -vnL INPUT

iptables -t filter -D INPUT 3

按匹配条件和处理动作删除

1
iptables -t filter -D INPUT -s ip -j ACCEPT
  • 修改规则

命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作

示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

修改默认规则

命令语法:iptables -t 表名 -P 链名 动作

示例:iptables -t filter -P FORWARD ACCEPT

!!! 修改iptables都是临时修改,iptables服务或者机器重启后都会丢失,一定要保存。

service iptables save

匹配条件

匹配条件可以取反

基本匹配条件源ip 目的ip

扩展匹配条件 源端口, 目的端口,需要 -m参数指定模块

  • 扩展匹配模块

tcp:匹配tcp协议 –sport –dport –tcp-flags –syn

multiport:匹配多个端口

iprange: 匹配连续IP范围

string: 匹配报文中包含的字符

time: 匹配报文的时间段区

connlimit:匹配单个ip连接数量

limit: 匹配单位时间内的报文数量

udp: 匹配udp协议

icmp: 匹配icmp协议

state: 匹配连接状态,实现连接追踪

黑白名单机制

  • 黑名单机制

INPUT链默认策略设置为ACCEPT,添加动作为DROP的规则。不够安全

  • 白名单机制

1)链默认策略设置为RDROP,添加动作为ACCEPT的规则,但是规则清空后,管理员也无法登录主机。

2)链默认策略设置为ACCEPT,设置放行规则完毕之后,在最后设置一条拒绝所有连接的规则。

自定义链

方便管理各种规则,普通规则的动作设置为自定义链,符合条件的报文会经过自定义链的规则。

Docker一般也会添加自定义链。

1
2
3
4
5
6
7
8
# 添加自定义链
iptables -t filter -N IN_WEB
# 引用
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB
# 修改名称
iptables -E IN_WEB WEB
# 删除
iptables -X WEB

动作总结

  • accept
  • drop
  • log
  • snat 用来隐藏内网IP或者共享公网IP。
  • dnat 用来暴露内网服务

snat dnat 都用到了snat dnat两个动作,snat在前就叫snat, dnat在前就叫dnat

  • masquerde 和snat相似,区别在于不绑定具体ip,而绑定网卡上的可用ip,用在外网ip地址常变动场景下。
  • redirect 本机端口映射

套路总结

  • 规则顺序很重要,如果前面规则匹配,后面规则不会执行,所以相同服务的规则,更严格的规则要放前面
  • 规则中多个匹配项存在“与“的关系
  • 不考虑第一条规则的情况下,使用频率更高的规则放前面,节省主机计算资源。
  • iptables作为防火墙时,要考虑双向性,从内到外,从外到内。
  • 设置白名单机制时,通常将链默认策略设置为ACCEPT,设置放行规则完毕之后,在最后设置一条拒绝所有连接的规则。