iptables学习笔记

本文最后更新于:2024年9月16日 下午

Linux防火墙

Linux系统防火墙功能是由内核实现的,从2.4版本之后的内核中,包过滤机制是netfilter,管理工具是iptables

netfilter

位于系统内核中的包过滤防火墙功能体系,被称为Linux防火墙的“内核态”

iptables

位于/sbin/iptables,是用来管理防火墙的命令工具,被称为linux防火墙的“用户态”

iptables的表与链介绍

链是防火墙规则或策略的集合,对于数据包进行过滤或处理,要把处理机制的不同,将各种规则放入不同的“链”中

默认的5种链如下:

INPUT:处理入站的数据包

OUTPUT:处理出站的数据包

FORWARD:处理转发数据包

POSTROUTING:在进行路由选择后处理数据包

PREROUTING:在进行路由选择前处理数据包

表是规则链的集合,具有某一类相似作用的规则,按不同的机制到不同的链之后,再被收入到不同的表中

默认的4个表如下:

raw表:确定是否对数据包进行状态跟踪

mangle表:为数据设置标记

nat表:修改数据包中的源、目IP或端口

filter表:过滤数据包或对数据包进行相关处理

iptables的表与链的结构如下

raw表

mangle表

nat表

filter表

PREROUTING链

PREROUTING链

PREROUTING链

INPUT链

OUTPUT链

POSTROUTING链

POSTROUTING链

FORWARD链

INPUT链

OUTPUT链

OUTPUT链

OUTPUT链

FORWARD链

Iptables数据包过滤匹配介绍

表与表之间的优先顺序

raw---> mangle-->nat--->filter

链之间的匹配顺序

入站数据:PREROUTING-->INPUT

出站数据:OUTPUT--->POSTROUTING

转发数据:PRETOUTING-->FORWARD--->POSTROUTINGS

链内的匹配顺序

1、按顺序依次检查,找到匹配的规则就停止检查

2、找不到匹配的规则,则按默认的策略处理

数据包匹配的流程如下

入站数据首先经过raw,mangle,nat表的PREROUTING链规则,然后判断是否为发送给本机的数据,由此产生两条路线:

  • 若是,则经过mangle,filter表的INPUT链规则,然后到本机应用程序,然后如果需要流出,则经过raw,mangle,nat,filter表的OUTPUT链,然后经过mangle,nat表的POSTROUTING链流出

  • 若否,则经过mangle,filter表的FORWARD链进行转发,然后经过mangle,nat表的POSTROUTING链出去

iptables管理与配置

命令语法格式

iptables [-t 表名] 选项 [链名] [匹配条件] [-j 目标动作]

注:不指定表名时默认是filter表 不指定链名时默认是表内的所有链 除设置链的默认策略,否则需要指定匹配条件

1
2
3
4
iptables -t filter -A INPUT -p tcp -j ACCEPT
iptables -I INPUT -p udp -j ACCEPT
iptables -I INPUT 2 -p icmp -j ACCEPT
iptables -P INPUT DROP #设置INPUT链默认操作为DROP

选项:

-A 在末尾追加一条规则 -I 在开头插入一条规则 -D 删除一条规则 -R 替换一条规则

匹配条件

协议匹配

-p 协议名

1
2
iptables -A FORWARD -p ! icmp -j ACCEPT
iptables -A FORWARD -p tcp -j ACCEPT

地址匹配

-s 源地址 -d 目标地址 -i 匹配接口

1
2
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -s 100.0.0.100 -j ACCEPT

端口匹配

- - sport 源端口 - - dport 目标端口

1
2
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT

常见数据包的处理动作

ACCEPT:放行数据包 DROP:丢弃数据包 REJECT:拒绝数据包 SNAT - - to ip : 转译源地址 DNAT - - to ip : 转译目标地址 MASQUERADE : 转译源地址为动态ip

查看现有规则

-nvL

1
2
iptables -t nat -nvL
iptables -t filter -nvL

案例

iptables防火墙常用的策略:

1.拒绝进入防火墙的所有ICMP协议数据包

iptables -I INPUT -p icmp -j REJECT

2.允许防火墙转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p ! icmp -j ACCEPT

说明:使用“!”可以将条件取反。

3.拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据

iptables -A FORWARD -s 192.168.1.11 -j REJECT

iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

说明:注意要把拒绝的放在前面不然就不起作用了啊。

4.丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包

iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

5.封堵网段(192.168.1.0/24),两小时后解封。

1
2
3
4
5
# iptables -I INPUT -s 10.20.30.0/24 -j DROP

# iptables -I FORWARD -s 10.20.30.0/24 -j DROP

# at now 2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1

说明:这个策略咱们借助crond计划任务来完成,就再好不过了。

[1]   Stopped     at now 2 hours

6.只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

说明:这个用法比较适合对设备进行远程管理时使用,比如位于分公司中的SQL服务器需要被总公司的管理员管理时。

7.允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

8.允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT

iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

9.禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机

iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP

iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

10.禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包

iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP

说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据包的源MAC地址。

11.允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里用“-m multiport –dport”来指定目的端口及范围

12.禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

说明:此处用“-m –iprange –src-range”指定IP范围。

13.禁止转发与正常TCP连接无关的非—syn请求数据包。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

说明:“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的,新的嘛!

14.拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state --state NEW -j DROP

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

说明:“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等。

15.只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发住服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理。

iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT

iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT

iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

原文链接:https://www.jianshu.com/p/ee4ee15d3658


iptables学习笔记
https://andyppang.github.io/2020/11/25/Iptables学习笔记/
作者
PL
发布于
2020年11月25日
许可协议