返回归档
🧩技术分享

iptables in linux

文章目录

iptables

是什么

Linux 系统中用于管理和操作网络包过滤规则的工具,是 Linux 内核中的 Netfilter 框架的用户态接口。它的主要作用是配置防火墙、网络地址转换(NAT)和流量控制规则,从而实现对进出网络的数据包进行监控和管理。

基本概念

  • 三个主要的chains
    • input:处理所有进入主机的流量
    • output:处理所有主机发出的流量
    • forward:处理所有经过主机发出的流量
  • tables
    • filter:根据数据包的IP地址、端口等信息来决定接受还是丢弃数据包,多用于防火墙规则配置
    • nat:用于网络地址转换的转换规则,当包进入协议栈时,nat中的规则决定是否修改以及如何修改数据包的源、目的IP地址以及端口号信息,以及改变包被路由时的行为
    • mangle:用于修改数据包的包头
    • raw:允许用户根据 connection tracking表配置规则,比如忽略connection tracking中的有效信息

这里是 iptables 的基本流程:

  1. 包接收: 当一个包到达 Linux 系统时,系统会将其传递给 iptables
  2. 规则匹配: iptables 将包与所有定义的规则进行比较。如果该包与某个规则相符,则会执行相应的动作。
  3. 动作执行: 根据规则的类型,iptables 可以执行以下动作用:
    • ACCEPT:允许该包通过本机网络。
    • DROP:拒绝该包,并将其丢弃。
    • REJECT:将该包传回源IP(通常是接口的原始 IP)。
    • LOG:记录相关信息并继续运行包。
  4. 规则链: iptables 有两个主要的规则链:INPUTOUTPUT。其中,INPUT 规则负责处理到达本机网络的包,而 OUTPUT 规则则负责从本机网络发出包。

常见参数

-A append,表示追加规则,追加到规则表的末尾

-I insert,表示插入到链的指定位置,默认为最前面

-D delete,表示删除

-R replace,表示替换

-X 选项可以快速删除不再需要的规则,这个命令可以应用于任何链,包括 INPUT, OUTPUT, FORWARD

-Z 重制计数器

-t表示选择表,摩恩为filter表

  • 设置协议

-p 指定协议,如tcp、udp、icmp、all等

  • 设置端口

—sport 指定源端口

—dport 指定目标端口

  • 设置IP

-s—source指定源IP

-d—destination指定目标IP

  • 设置网卡

-i—in-interface 指定进入的网络接口

-o—out-interface 指定离开的网络接口

  • 设置匹配条件

-m state 用于匹配连接状态,如NEW、ESTABLISHED、RELATED、INVALID

-m time 根据时间段匹配流量

  • 限流

—limit 限制每分钟的最大连接数

—limit-burst 触发限制前允许的处罚突发流量

  • others

-f—fragment匹配数据包片段

—tcp-flags 匹配TCP标志,如SYN、ACK

example

# 清空现有规则和自定义链
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X

# 默认策略:拒绝所有入站和转发流量,允许所有出站流量
# -P 的缩写来自 English 的 "default"(默认),它表示为指定的链设定为默认行为
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许 loopback 接口 (127.0.0.1) 的流量
# 指定接口类型
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 允许已经建立或相关的连接继续通信
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许内网 IP (192.168.0.0/16) 的 SSH、HTTP 和 HTTPS 访问
iptables -A INPUT -s 192.168.0.0/16 -p tcp -m multiport --dports 22,80,443 -m conntrack --ctstate NEW -j ACCEPT

# 禁止外部 ping 请求
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# 限制外部 HTTP 连接速率,最多10个新连接/秒,允许最多50个突发连接
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m limit --limit 10/sec --limit-burst 50 -j ACCEPT

# 允许与外部数据库服务器通信 (MySQL)
iptables -A OUTPUT -p tcp --dport 3306 -m conntrack --ctstate NEW -j ACCEPT

# 记录所有被拒绝的入站请求
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

# 拒绝所有其他未匹配的入站流量
iptables -A INPUT -j REJECT

ref

bookmark