iptables 分别将 8080 和 8443 路由到 80 和 443

iptables 分别将 8080 和 8443 路由到 80 和 443

我有以下创建 iptables 的脚本。如何才能使我访问 IP_ADDR:8080 或 :8443 时,它分别路由到 80 或 443?

#!/bin/bash

# Delete all existing rules
iptables -F

# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Allow loopback access
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

  # Allow inbound SSH
  iptables -A INPUT -i eth0 -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

  # Allow outbound DNS
  iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp --sport 53 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

  # Allow outbound HTTP
  iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

  # Allow outbound HTTPS
  iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

  # Allow outbound SMTP
  iptables -A OUTPUT -o eth0 -p tcp --dport 587 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  iptables -A INPUT -i eth0 -p tcp --sport 587 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

答案1

您实际上并没有指定是否要翻译:(内部)80 -> (外部)8080 还是反过来。

假设您想在系统上运行 httpd 来监听 8080 和 8443,以便为 80 和 443 上的外部用户流量提供服务(从而避免必须以 root 身份运行来打开那些端口 <1025 的问题)您想使用 iptables 的 NAT 功能:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

对 443 -> 8443 执行相同操作

相关内容