目录
SNAT DNAT
下面是一个示例,将本地主机上的流量重定向到另一台服务器,类似于将访问本机的192.168.10.182的5566端口,转发到百度主页:
- 目的地址转换 (DNAT):
目的地址转换,内部地址映射到一个或者是一组公网地址。将内部私网地址映射成公网地址,公网地址可以直接对外提供访问服务
iptables -t nat -A PREROUTING -p tcp -d 192.168.10.182 --dport 5566 -j DNAT --to-destination 104.193.88.123:80
这个规则会将来自本地主机对192.168.10.182的5566端口的请求,重定向到104.193.88.123的80端口(假设百度主页在80端口上)。
- 源地址转换 (SNAT)(如果需要):
iptables -t nat -A POSTROUTING -p tcp -d 104.193.88.123 --dport 80 -j SNAT --to-source 192.168.10.182
这个规则会将从本地主机转发到104.193.88.123的80端口的请求的源地址改为192.168.10.182。这是为了确保返回的数据包能够正确返回给本地主机。
请注意:
-
如果使用的是HTTPS(端口443),在规则中相应地更改端口。
-
这些规则是针对IPv4的。如果使用IPv6,规则会有所不同。
-
确保开启了IP转发功能,以便iptables规则生效:
echo 1 > /proc/sys/net/ipv4/ip_forward
这些规则可能会因环境不同而有所调整。确保在配置之前备份iptables规则,并在对网络进行更改时谨慎操作,避免意外断开连接或影响网络连通性。
示例
准备
三台服务器
test1 :内网服务器 192.168.41.10
test2:网关服务器 192.168.41.11
test3:外网地址 12.0.0.10
重启服务
换到test3
到test02
iptables -t nat -A POSTROUTING -s 192.168.41.0/24 -o ens36 -j SNAT --to 10.0.0.10
这条iptables规则的作用是进行SNAT(Source Network Address Translation)操作,它会更改数据包的源IP地址。让我解释每个部分的含义:
-
-t nat
: 这是一个规则的表(table),它指定了要操作的iptables表。nat
表用于Network Address Translation(NAT)规则。 -
-A POSTROUTING
: 这部分表示将规则附加到POSTROUTING
链,它是nat
表中的一个链。POSTROUTING
链用于在数据包离开网络接口之前进行处理,通常用于进行SNAT操作。 -
-s 192.168.41.0/24
: 这部分指定了源IP地址的匹配条件。这个规则会匹配源IP地址在192.168.41.0/24子网中的所有数据包。 -
-o ens36
: 这部分指定了输出接口的匹配条件。这个规则会匹配从名为ens36
的网络接口出去的数据包。 -
-j SNAT --to 10.0.0.10
: 这部分是SNAT操作,它会将匹配的数据包的源IP地址更改为10.0.0.10。这意味着,所有从192.168.41.0/24子网发送到ens36
接口的数据包的源IP地址都会被更改为10.0.0.10。
这个规则的常见用途是将内部私有网络(如192.168.41.0/24)的数据包通过公共IP地址(10.0.0.10)进行Internet访问,从而实现IP地址伪装,使外部服务器只能看到公共IP地址而不是内部私有IP地址
iptables -t nat -A POSTROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 192.168.233.10:80
这条iptables规则的作用是进行DNAT(Destination Network Address Translation)操作,它会更改数据包的目标IP地址和目标端口。让我解释每个部分的含义:
-
-t nat
: 这是一个规则的表(table),它指定了要操作的iptables表。nat
表用于Network Address Translation(NAT)规则。 -
-A POSTROUTING
: 这部分表示将规则附加到POSTROUTING
链,它是nat
表中的一个链。POSTROUTING
链用于在数据包离开网络接口之前进行处理,通常用于进行DNAT操作。 -
-d 11.0.0.11
: 这部分指定了目标IP地址的匹配条件。这个规则会匹配目标IP地址为11.0.0.11的所有数据包。 -
-i ens36
: 这部分指定了输入接口的匹配条件。这个规则会匹配通过名为ens36
的网络接口进入系统的数据包。 -
-p tcp
: 这部分指定了协议条件,只匹配TCP协议的数据包。 -
--dport 80
: 这部分指定了目标端口的匹配条件,只匹配目标端口为80的数据包。 -
-j DNAT --to 192.168.233.10:80
: 这部分是DNAT操作,它会将匹配的数据包的目标IP地址更改为192.168.233.10,并将目标端口更改为80。这意味着,所有发送到11.0.0.11的TCP端口80的数据包将被重定向到内部主机192.168.233.10的TCP端口80。
这个规则的常见用途是将外部请求(目标IP地址为11.0.0.11,端口为80)重定向到内部主机以提供特定服务,比如Web服务。
linux系统对网络抓包
两种方式
静态抓包:指定抓多少数据包
动态抓包:不停止的话,一直抓包
tcpdump
是一个功能强大的命令行工具,用于抓取和分析网络数据包。以下是一些常见的
tcpdump
命令示例:
- 捕获特定网络接口上的所有数据包:
sudo tcpdump -i eth0
这会在接口 eth0
上捕获所有数据包的输出。
-
捕获特定主机的数据包:
Plain Text sudo tcpdump host 192.168.1.100
这会捕获与主机 IP 地址为 192.168.1.100 有关的所有数据包。
-
捕获特定端口的数据包:
Plain Text sudo tcpdump port 80
这会捕获目标端口为 80 的所有数据包(通常是 HTTP 流量)。
-
捕获特定协议的数据包(例如,HTTP):
Plain Text sudo tcpdump port 80
这会捕获所有 HTTP 数据包。
- 捕获并将数据包保存到文件中:
sudo tcpdump -i eth0 -w capture.pcap
这将把捕获的数据包保存到名为 capture.pcap
的文件中,以便稍后分析。
- 显示数据包的详细信息:
sudo tcpdump -i eth0 -nn -v
-nn
选项用于禁用主机名和端口号的解析,而 -v
选项会显示更多详细信息。
-
捕获特定主机与特定主机之间的数据包:
Plain Text sudo tcpdump host 192.168.1.100 and host 192.168.1.200
这会捕获来自主机 192.168.1.100 到主机 192.168.1.200 的数据包,或反之。
- 按协议过滤数据包:
sudo tcpdump -i eth0 tcp
这会捕获所有 TCP 数据包,或者您可以使用 udp
以捕获 UDP 数据包。
静态抓包:tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.41.0/24 -w /opt/test.cap
这个命令使用了多个 tcpdump
的选项和过滤器。让我们逐个解释这些选项和过滤器的含义:
-
tcp
: 捕获TCP协议的数据包。 -
-i ens33
: 指定捕获数据包的网络接口为ens33
。 -
-t
: 禁用打印时间戳。 -
-s0
: 设置捕获数据包的截断长度为0,表示捕获整个数据包的内容而不进行截断。 -
-c 10
: 指定捕获的数据包数量为10。 -
dst port 80
: 仅捕获目标端口为80的数据包。 -
src net 192.168.41.0/24
: 仅捕获源IP地址在192.168.41.0/24子网中的数据包。 -
-w /opt/test.cap
: 将捕获的数据包保存到/opt/test.cap
文件中。
综合起来,这个命令的意思是:在 ens33
网络接口上捕获来自192.168.41.0/24子网的前10个目标端口为80的完整TCP数据包,并将其保存到 /opt/test.cap
文件中。由于指定了截断长度为0,所以将会捕获完整的数据包内容。
动态抓包:tcpdump -i ens33 -s0 -w /opt/test.cap
-
-i ens33
: 指定捕获数据包的网络接口为ens33
,这表示你要在ens33
网络接口上进行数据包捕获。 -
-s0
: 设置捕获数据包的截断长度为0,表示捕获整个数据包的内容而不进行截断。 -
-w /opt/test.apt
: 指定将捕获的数据包保存到/opt/test.apt
文件中。
综合起来,这个命令的目的是在 ens33
网络接口上捕获所有传入和传出的数据包,并将这些数据包保存到名为 /opt/test.apt
的文件中。由于设置了截断长度为0,所以将会捕获整个数据包的内容。
可视化工具
firewall-config
是一个Linux防火墙管理工具,通常与 firewalld
防火墙服务一起使用。它提供了一个图形用户界面(GUI)来配置和管理防火墙规则,而不需要在命令行中手动输入规则。
以下是关于 firewall-config
工具的一些常见信息和用途:
-
配置防火墙规则:
firewall-config
允许管理员轻松配置防火墙规则,包括允许和拒绝特定端口、协议和服务的访问。这有助于增强系统的安全性,控制网络流量。 -
应用服务定义:通过
firewall-config
,管理员可以定义和配置服务对象,这些对象通常对应于特定应用程序或服务。这样,可以更容易地管理和调整相关的防火墙规则。 -
图形化界面:
firewall-config
提供了一个直观的图形用户界面,允许管理员使用鼠标和菜单来管理防火墙规则,而不需要记忆复杂的命令。 -
实时监控和修改:管理员可以在运行时监控和修改防火墙规则,这使得可以快速响应网络安全事件或需求变化。
-
支持复杂网络拓扑:
firewall-config
支持复杂的网络拓扑,包括多个区域(zones)和源/目标地址的定义,以实现高级的网络配置。 -
与 firewalld 集成:
firewall-config
是firewalld
的图形界面,而firewalld
是一种用户空间的动态防火墙管理工具,用于管理 iptables 防火墙规则。
-
block:限制区域,所有流量都会被拒绝
-
dmz:隔离区域,也叫非军事区,只会允许预定服务,ssh等系统预设服务,其余都会拒绝
-
drop丢弃区域丢弃所有传入流量,而且没有任何响应。
-
external 外部区域允许系统预设的服务,ssh,其他的全部拒绝
-
home:家庭区域,只允许预设的服务,其他的全部拒绝
-
internal:内部区域,和家庭区域—样。
-
public:公共区域,也是firewalld默认区域。允许预设服务ssh,其他的全部拒绝
-
trusted:信任区域,允许所有的传入流量
-
work:工作区域,允许预定义服务的流量传入,其他的全部拒绝。
更改默认区域
firewall -cmd
firewall-cmd
是一个命令行工具,用于在基于 firewalld
的 Linux 系统上配置和管理防火墙规则。它允许管理员通过命令行界面对防火墙进行动态的配置和修改。以下是一些关于 firewall-cmd
的常见用法和选项:
-
查看防火墙状态:可以使用
firewall-cmd --state
命令来查看防火墙的状态,以确定它是否处于活动状态。 -
管理区域和服务:可以使用
firewall-cmd --zone
命令来配置区域,允许特定服务或应用程序通过防火墙。例如,您可以使用--zone=public
选项来设置公共区域。 -
添加和删除规则:可以使用
--add-...
和--remove-...
选项向特定区域添加或删除防火墙规则。例如,使用--add-port
可以允许特定端口的流量通过防火墙,而--remove-port
可以删除该规则。 -
重新加载防火墙:在应用更改后,可以使用
firewall-cmd --reload
命令重新加载防火墙配置,以确保新的规则生效。 -
查看当前配置:使用
firewall-cmd --list-all
命令可以查看当前防火墙的所有配置信息,包括区域、规则和接口。