在执行转发操作之前,确定需要转发的端口和目标主机:首先,确定需要转发的端口和目标主机。例如,如果需要将端口80上的请求转发到192.168.0.100的80端口,则需要配置转发规则。常用的转发方法有如下6中
- iptables转发 --CentOS 7.0 以下使用
- firewall转发 --CentOS 7.0以上使用
- rinetd转发 --需安装
- ncat转发 --yum install nmap-ncat -y
- socat转发 --yum install -y socat
- nginx转发 --需安装
以下详细介绍前两中转发(防火墙转发)的实现方法,其它的几种转发会后续继续介绍。
一、iptables转发 --CentOS 7.0 以下使用
- 系统开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
- 规则设置
# iptables -t nat -A PREROUTING -p tcp –dport 2201 -j DNAT –to-destination 10.6.1.114:22
# iptables -t nat -A POSTROUTING -p tcp -s 10.6.1.114 –sport 22 -j SNAT –to-source 42.162.6.44:2201
3.保存iptables
#service iptables save
4.重启iptables
#service iptables restart
iptables的4个表分别是:
filter(过滤):数据包过滤/拦截,可以包含INPUT、FORWARD、OUTPUT这3个内置chain。
nat(地址转换):IP地址或端口号转换,可以包含PREROUTING、OUTPUT、POSTROUTING 3个内置chain,nat table在会话建立时会记录转换的对应关系,同一会话的回包和后续报文会自动地址转换,这是因为nat使用了ip_conntrack模块。
mangle(包管理):用来修改IP报文,可以包含PREROUTING、OUTPUT、INPUT、FORWARD、POSTROUTING 5个内置chain。
raw:此表的优先级高于ip_conntrack模块和其它的table,主要用于将有会话状态的连接(比如tcp)的数据包排除在会话外。可以包含POSTROUTING、OUTPUT两个内置chain。
二、firewall转发 --CentOS 7.0以上使用
Firewalld是Linux系统上的一种动态防火墙管理工具,Firewalld的主要功能是管理网络连接和防止未经授权的访问。它可以对入站和出站流量进行管理,可以控制端口、服务和网络协议的访问权限,也支持NAT(网络地址转换)和端口转发等高级功能。
1、firewalld的基本使用
启动:systemctl start firewalld
查看状态:systemctl status firewa11d
停止:systemctl disable firewalld
禁用:systemctl stop firewalld
重启: systemctl restart firewa11d
开机自启动:systemctl enable firewalld
2、配置firewalld-cmd
运行firewall-cmd --list-all查看基础配置信息:
[root@localhost ~]# firewall-md --list-all
public
target : default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports : 3128/tcp 5432/tcpprotocols:
masquerade: no
forward-ports :
source-ports :
icmp-blocks :
rich rules:
public (default,active):表示 public区域是默认区域(当接口启动时会自动黑认〉,并且它是活动的。
interfaces : ens33列出了这个区域上关联的接口。
sources :列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式xxx.xXX.XX×.xXx/xx。
services: dhcpv6-client ssh 列出了允许通过这个防火墙的服务。可以通过运行firewall-cmd --get-services得到一个防火墙预定义服务的详细列表。
ports:列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。
masquerade: no表示这个区域是否允许 IP伪装。如果允许,它将允许工P转发,它可以让你的计算机作为一个路由器。
forward-ports:列出转发的端口。
icmp-blocks:阻塞的icmp流量的黑名单。
rich rules:在一个区域中优先处理的高级配置。
default:是目标区域,它决定了与该区域匹配而没有由上面设置中显式处理的包的动作。
运行以下命令理解firewall规则用法:
查看所有打开的端口: firewall-cmd --zone=public --list-port
更新防火墙规则: firewall-cmd --reload
列出所有区域: firewall-cmd --get-zones
查看区域信息:firewall-cmd --get-active-zones
设定默认区域,立即生效:firewall-cmd --set-default-zone=public
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=ens33
查看所有规则: firewall-cmd --list-all
通过以下两种手段可以进行永久修改:
firewall-cmd --permanent <some modification>
firewall-cmd --reload
3、常见使用场景
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态:firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
暂时开放ftp服务:firewall-cmd --add-service=ftp
永久开放ftp 服务:firewall-cmd --add-service=ftp --permanent
查询服务的启用状态:firewall-cmd --query-service ftp
开放mysq1端口:firewall-cmd --add-service=mysq1
阻止http端口:firewall-cmd --remove-service=http
查看开放的服务:firewall-cmd --list-services
查看对应规则库文件: cd /usr/lib/firewalld/services
开放通过tcp访问3306: firewall-cmd --add-port=3306/tcp
阻止通过tcp访问3306: firewall-cmd --remove-port=80tcp
永久开放80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
查看80端口: firewall-cmd --zone=public --query-port=80/tcp
查看所有开放端口: firewall-cmd --zone=public --list-ports
删除80端口: firewall-cmd --zone=public --remove-port=80/tcp --permanent
开放postgresq1服务: firewall-cmd --add-service=postgresq1 --permanent
允许http服务通过1分钟: firewall-cmd --zone=public --add-service=http --timeout=1m,这个 timeout选项是一个以秒(s)、分(m)或小时(h)为单位的时间值。
重载防火墙: firewall-cmd --reload
检查防火墙状态: firewall-cmd --state
让设定生效:systemct1 restart firewa1ld
检查设定是否生效: iptables -L -n l grep 21或 firewall-cmd --list-a11
4、端口转发
端口转发可以将指定地址访问指定的端口时,将流星转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口。 如果配置好端口转发之后不能用,可以检查下面两个问题:
比如我将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
其次检查是否允许伪装IP,没允许的话要开启伪装lP
开启伪装IP:
firewall-cmd --add-masquerade --permanent
#将8888端口的流里转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8888:proto=tcp:toport=80
#开启伪装IP
firewall-cmd --query-masquerade #检查是否允许伪装IP
firewall-cmd --add-masquerade #允许防火墙伪装IP
firewall-cmd --remove-masquerade #禁止防火墙伪装IP
#将8888端口的流量转发至101.37.65.91的80端口
firewall-cmd --add-forward-port=port=8888: proto=tcp:toaddr=101.37.65.91:toport=80
标签:linux,--,cmd,端口,firewall,转发,80
From: https://blog.51cto.com/u_16421711/8840467