Linux防火墙
iptables
iptables详解
-
iptables 架构:
- iptables 使用规则链(rule chains)来过滤网络数据包。主要包括三个默认链:INPUT、OUTPUT 和 FORWARD。
- 数据包经过这些链,根据规则进行匹配和处理。可以在每个链中添加自定义规则。
-
iptables 规则:
- iptables 规则由匹配条件和动作组成。当数据包满足匹配条件时,将执行相应的动作。
- 常见的匹配条件包括源 IP、目标 IP、协议、端口等;常见的动作包括 ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)等。
-A
:在指定链的末尾添加规则。-I
:在指定链的开头或指定位置插入规则。-D
:删除指定链中的规则。-R
:替换指定链中的规则。-F
:清空指定链中的所有规则。-P
:设置指定链的默认策略。-N
:创建自定义链。-s
:指定源 IP 地址或 IP 段。-d
:指定目标 IP 地址或 IP 段。-p
:指定协议。--sport
:指定源端口。--dport
:指定目标端口。-j
:指定动作,如 ACCEPT、DROP、REJECT 等。-m
:指定匹配模块,如 state、tcp、udp 等。-i
:指定输入接口。-o
:指定输出接口。-c
:显示匹配的数据包数量和字节数。-v
:显示详细信息。-n
:显示数字格式的 IP 地址和端口号。-L
:列出规则。-Z
:清空数据包和字节计数。-E
:重命名自定义链。
-
iptables 配置示例:
- 允许 SSH 访问:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 允许 HTTP 访问:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- 拒绝 ICMP 数据包:
iptables -A INPUT -p icmp -j DROP
- 允许 SSH 访问:
-
iptables 持久化:
- iptables 规则默认在系统重启后会被清空,为了保持规则持久化,可以使用工具如
iptables-save
和iptables-restore
将规则保存到文件并在启动时加载。
- iptables 规则默认在系统重启后会被清空,为了保持规则持久化,可以使用工具如
-
注意事项:
- 在配置 iptables 规则时,务必小心,避免阻止合法流量导致网络服务不可用。
- 建议在修改 iptables 规则前备份当前规则,以便出现问题时能够恢复。
iptables 是一个强大而灵活的工具,可以根据具体需求配置各种复杂的网络规则,保护系统免受网络攻击。深入了解 iptables 可以帮助管理员更好地管理和保护系统。
iptables的filter表
-
默认链:
filter
表包含三个默认链:INPUT、OUTPUT 和 FORWARD。INPUT
链用于处理进入系统的数据包。OUTPUT
链用于处理从系统发出的数据包。FORWARD
链用于处理通过系统转发的数据包。
-
规则顺序:
- iptables 规则按照添加顺序逐条匹配,一旦匹配成功,将执行相应的动作并停止后续规则的匹配。
- 可以使用
-I
选项插入规则,使用-A
选项添加规则。
-
常见规则:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许特定端口的数据包通过 iptables -A INPUT -s 192.168.1.100 -j DROP # 拒绝特定 IP 地址的数据包 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许已建立的连接通过
-
默认策略:
- 可以使用
-P
选项设置默认策略,即当数据包不匹配任何规则时的动作。iptables -P INPUT DROP
- 可以使用
-
连接状态:
- 可以使用
-m state
模块来匹配数据包的连接状态,如已建立的连接、相关连接等。
- 可以使用
-
日志记录:
- 可以使用
--log-prefix
选项将匹配的数据包记录到系统日志中,方便跟踪和分析网络流量。
- 可以使用
-
清空规则:
- 可以使用
-F
选项清空指定链的所有规则,使用-X
选项删除自定义链。
- 可以使用
-
持久化:
- 为了保持规则持久化,可以使用
iptables-save
将当前规则保存到文件,并在系统启动时使用iptables-restore
加载规则。
- 为了保持规则持久化,可以使用
iptables -t filter -vnL
[oracle@localhost ~]$ sudo iptables -t filter -vnL
[sudo] password for oracle:
Chain INPUT (policy ACCEPT 29929 packets, 2522K bytes) # 处理进入系统的数据包。
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 # 第一条规则允许来自 virbr0 接口的 UDP 数据包目标端口为 53 的通过。
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 #第二条规则允许来自 virbr0 接口的 TCP 数据包目标端口为 53 的通过。
0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 #第三条规则允许来自 virbr0 接口的 UDP 数据包目标端口为 67 的通过。
0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 #第四条规则允许来自 virbr0 接口的 TCP 数据包目标端口为 67 的通过。
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) # 于处理通过系统转发的数据包
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED #第一条规则允许所有经过 virbr0 接口并与 192.168.122.0/24 子网相关或已建立的连接的数据包通过。
0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 #第二条规则允许所有从 virbr0 接口发送到 192.168.122.0/24 子网的数据包通过。
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 #第三条规则允许所有在 virbr0 接口之间传输的数据包通过。
0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable #第四条规则拒绝所有经过 virbr0 接口并目标不可达的数据包,并发送 ICMP 不可达消息。
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable #第五条规则拒绝所有从 virbr0 接口发送到目标不可达的数据包,并发送 ICMP 不可达消息。
Chain OUTPUT (policy ACCEPT 47720 packets, 5861K bytes) # 处理从系统发出的数据包。
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 # 第一条规则允许从系统发送到 virbr0 接口的 UDP 数据包目标端口为 68 的通过。
# 0.0.0.0/0:表示所有 IP 地址,即任意来源或目标 IP 地址。
# 0.0.0.0/0:表示所有端口,即任意来源或目标端口。
iptables的nat表
iptables 的 nat
表是用于网络地址转换(Network Address Translation,NAT)的表之一,用于修改数据包的源 IP 地址、目标 IP 地址或端口号,以实现网络地址的映射和转换。
-
功能:
nat
表主要用于实现网络地址转换,包括源地址转换(SNAT)、目标地址转换(DNAT)和端口转换(Port Forwarding)等功能。- 通过
nat
表,可以将内部私有网络的 IP 地址映射为外部公共 IP 地址,实现内部主机与外部网络的通信。
-
链:
nat
表包含三个主要链:PREROUTING、POSTROUTING 和 OUTPUT。PREROUTING
链用于在数据包进入路由之前进行转换。POSTROUTING
链用于在数据包离开路由之后进行转换。OUTPUT
链用于对本地生成的数据包进行转换。
-
常见用法:
- 实现源地址转换(SNAT):
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
- 实现目标地址转换(DNAT):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
- 实现端口转换(Port Forwarding):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.200:80
- 实现源地址转换(SNAT):
-
其他选项:
-j
选项用于指定转换动作,如 SNAT、DNAT、MASQUERADE 等。--to-destination
选项用于指定转换后的目标地址和端口。--to-source
选项用于指定转换后的源地址。-s
选项用于指定源 IP 地址。-d
选项用于指定目标 IP 地址。
nat
表在网络环境中起着重要作用,能够实现内部网络与外部网络之间的通信和地址转换。
eg:
sudo iptables -t nat -A PREROUTING -i eth0 -d 114.115.111.111 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1
-t nat
:指定操作的表为nat
表,即网络地址转换表。-A PREROUTING
:向PREROUTING
链中添加一条规则,该链用于在数据包进入路由之前进行转换。-i eth0
:指定数据包进入的网络接口为eth0
。-d 114.115.111.111
:指定目标 IP 地址为114.115.111.111
,即匹配目标 IP 地址为该地址的数据包。-p tcp
:指定协议为 TCP。--dport 80
:指定目标端口为80
,即匹配目标端口为80
的 TCP 数据包。-j DNAT
:指定动作为目标地址转换(DNAT)。--to-destination 10.0.0.1
:将匹配的数据包的目标地址转换为10.0.0.1
,即将数据包转发到内部主机10.0.0.1
上。
综合起来,这条规则的作用是将来自 eth0
接口、目标 IP 地址为 114.115.111.111
、目标端口为 80
的 TCP 数据包进行目标地址转换,将其转发到内部主机 10.0.0.1
上处理。这样可以实现端口转发,将外部访问 114.115.111.111:80
的请求转发到内部主机 10.0.0.1:80
上。
iptables-save
要将修改后的 iptables 规则写入配置文件,可以使用 iptables-save
命令将当前的规则保存到文件中。
iptables-save在centos7中没安装
sudo yum install iptables-services
-
保存当前 iptables 规则到文件:
运行以下命令将当前的 iptables 规则保存到文件中(例如iptables_rules.conf
):iptables-save > iptables_rules.conf
-
查看保存的规则文件:
您可以使用文本编辑器打开保存的规则文件,查看其中包含的 iptables 规则内容。 -
恢复保存的规则:
如果需要恢复保存的规则,可以使用iptables-restore
命令加载保存的规则文件:iptables-restore < iptables_rules.conf
原文地址:https://blog.csdn.net/yuanymnl/article/details/143834960
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!