iptables - linux系统自带防火墙
iptables 是一种在 Linux 操作系统中用于实现防火墙功能的工具。它是一种高度灵活和可定制的软件,可用于控制网络流量,过滤恶意流量,保护网络安全,并允许对特定类型的流量实施访问控制。iptables 可以配置为拦截或允许特定的网络流量,包括 TCP、UDP 和 ICMP 数据包。是 Linux 操作系统中最流行的防火墙软件之一。
一、五表五链
:流量整形
表 | 说明 |
---|---|
filter | 过滤数据包 |
net | NET地址转换 |
mangle | 修改数据包 |
raw | 处理异常 |
security | 安全相关 |
链路 | 说明 |
---|---|
INPUT(input)链 | 匹配目的IP是本机数据包的入口流量。 |
OUTPUT(output)链 | 用于匹配出口数据包。 |
FORWARD(forward)链 | 用于匹配流经本机的数据包。 |
POSTROUTING(postrouting)链 | 用于修改源IP地址,常用于做SNAT。 |
PREROUTING(prerouting)链 | 可以修改数据包的目的IP地址,常用于做DNAT。 |
二、工作流程
涉及场景
- 数据包流入:PREROUTING –> INPUT
- 数据包流出:OUTPUT –> POSTROUTING
- 数据包转发:PREROUTING –> FORWARD –> POSTROUTING
三、规则处理动作(target)
项目 | Value |
---|---|
ACCEPT(accept) | 允许数据包通过 |
DROP(drop) | 丢弃数据包 |
----------------- | --------------------- |
QUEUE(queue) | 将数据包移交到用户空间 |
RETURN(return) | 停止执行当前链中的后续规则,并返回到调用链(The Calling Chain)中 |
REJECT(reject) | 拒绝数据包通过,同时给数据发送端一个响应信息,客户端刚请求就会收到拒绝的信息 |
----------------- | --------------------- |
SNAT(snat) | 源地址转换,解决内网用户用同一个公网地址上网的问题 |
DNAT(dnat) | 目标地址转换 |
MASQUERADE(masquerade) | 是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上 |
REDIRECT(redirect) | 在本机做端口映射 |
LOG(log) | 记录日志信息,不对数据包做任何其他操作,仍然匹配下一条规则 |
四、命令构成
iptables命令由以下几部分构成:
iptables:命令名称
项目 | Value |
---|---|
-t | 选项,指定要操作的表,包括filter、nat和mangle等。 |
< T name> | 指定要操作的表的名称。 |
-A | 选项,表示添加一条规则,在尾部。 |
-D | 选项,表示删除一条规则。 |
-I | 选项,表示插入一条规则,插入,没有指定则在头部。 |
-s | 选项,表示源地址。 |
-d | 选项,表示目标地址。 |
-p | 选项,表示协议类型,如TCP、UDP、ICMP等。 |
–sport | 选项,表示源端口。 |
–dport | 选项,表示目标端口。 |
-j | 选项,表示动作,包括ACCEPT、DROP、REJECT等。 |
-i | 选项,表示输入接口。 |
-o | 选项,表示输出接口。 |
-m | 选项,表示匹配模块,如state、tcp、udp等。 |
–state | 选项,表示连接状态,包括NEW、ESTABLISHED、RELATED等。 |
-c | 选项,表示计数器,用于统计匹配的数据包数和字节数。 |
-n | 选项,表示禁用DNS解析,加快执行速度。 |
–line-numbers | 选项,表示显示规则的编号。 |
-L | 选项,表示列出规则。 |
-F | 选项,表示清除所有规则。 |
-Z | 选项,表示清空计数器。 |
-N | 选项,表示创建一个新的用户自定义链。 |
-X | 选项,表示删除一个用户自定义链。 |
-P | 选项,表示设置默认策略,包括ACCEPT、DROP、REJECT等。 |
五、常用命令(学到一个添加一个)
规则(rules)
-
规则既是对数据包的过滤条件。存储在内核空间的信息包过滤表中,数据包每经过一个链时,系统会根据链中规则进行匹配,匹配成功则根据规则的处理动作进行处理。
-
规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
规则由 匹配条件 和 处理动作 组成。匹配条件 又分为 基本匹配条件 与 扩展匹配条件。基本匹配条件如:源地址 Source IP,目标地址 Destination IP;扩展匹配条件通常以模块的形式存在,这些模块可以按需安装,源端口 Source Port, 目标端口 Destination Port。
1、查看当前iptables状态
iptables -nL #默认查看filter表的状态,如果需要查看其他表的状态加上 -t 表名
iptables -nL --line-numbers #可以列出序列号,在插入或者删除的时候就不用自己去数了
iptables -nL --line-numbers --verbose #可以查看到包过滤的流量统计,访问次数等
2、插入|追加记录
# 在第一条的位置插入一条记录,接受所有来自lo网口的访问
iptables -I INPUT 1 -i lo -j ACCPET
# 如果在INPUT中不指明在第几条插入,默认就是在第一条插入
iptables -I INPUT 2 -s 192.168.1.0/24 -j ACCPET
# 拒绝来自特定IP地址的连接(IP)
iptables -A INPUT -s IP地址 -j DROP
#允许特定端口的TCP|UDP连接 (针对端口开放(需要指明协议))
iptables -A INPUT -p tcp|udp --dport 端口号 -j ACCEPT
# 允许与已建立的连接相关的数据包通过防火墙
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
拒绝来自特定网络接口的连接 (针对接口)
iptables -A INPUT -i eth0 -j DROP
# 允许ping连接 (针对协议开放)
iptables -A INPUT -p icmp -j ACCEPT
#在INPUT最后追加一条记录。
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT
# 将当前的规则保存到文件中
iptables-save > /etc/sysconfig/iptables
4、删除一条记录
#删除第7条记录
iptables -D INPUT 7
5、拒绝所有访问
#这个一般放到最后,不然会对前面的规则造成影响。
iptables -A INPUT -j DROP
6、根据时段限制访问
#这里的时间是指UTC时间记得换算
iptables -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:00 -j DROP
7、限制单个IP一分钟内建立的连接数
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j REJECT
8、保存iptables规则
iptables-save > /etc/sysconfig/iptables
9、从文件里面恢复iptables规则
iptables-restore < /etc/sysconfig/iptables
10、对外建立的连接经过INPUT不拦截
iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
11、端口转发(本机8080转发到远程192.168.1.22:80)
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to 192.168.1.22:80
iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward #需要打开网转发
iptables -t filter FORWARD -d 192.168.1.22/32 -j ACCEPT #转发的FROWARD要允许双方的数据传输
参考链接:https://blog.csdn.net/qq_24433609/article/details/127533426