Ubuntu Server 上的 Iptables 未打开端口

Ubuntu Server 上的 Iptables 未打开端口

Iptables 需要 ufw 才能工作吗?

我尝试使用 iptables 在我的 ubuntu 服务器 12.10 上打开 4447,但没有成功。

做过:

server:~# iptables -A INPUT -p tcp --dport 4447 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

之后 iptables -L:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:4447 state NEW,RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

但是 nmap 没有显示端口 4447:

server:~# nmap -sV localhost
Starting Nmap 6.00 ( http://nmap.org ) at 2013-04-26 12:54 BRT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00078s latency).
Not shown: 991 closed ports
PORT     STATE SERVICE                VERSION
22/tcp   open  ssh                    OpenSSH 6.0p1 Debian 3ubuntu1 (protocol 2.0)
139/tcp  open  netbios-ssn            Samba smbd 3.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn            Samba smbd 3.X (workgroup: WORKGROUP)
3306/tcp open  mysql                  MySQL 5.5.31-0ubuntu0.12.10.1
5432/tcp open  postgresql             PostgreSQL DB
8080/tcp open  http                   Apache httpd 2.2.22 ((Ubuntu))

有人可以帮我修复它吗?

我在另一台服务器(CentOS 6)上做了同样的步骤,一目了然

提前致谢

答案1

确保确实有程序在监听端口 4447/tcp。否则,如果没有,nmap 不会显示此端口为打开状态。

您可以使用以下方法检查:

sudo netstat -tpln | grep 4447

如果您在输出中没有看到程序名称,则表示该端口上没有任何内容在监听。

更新:

经过 OP 的澄清,看起来目标是将传入的 TCP 连接重定向到某个端口到备用端口。例如将传入的 4447/tcp 连接重定向到 MySQL 正在监听的 3306/tcp。

假设你的服务器的 IP 地址为 10.0.0.1,并且 MySQL 正在 3306/tcp 上监听它,那么执行所需操作的方法是:

iptables -t nat -A PREROUTING -p tcp --dport 4447 -j DNAT --to-destination 10.0.0.1:3306
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 4447 -j REDIRECT --to-ports 3306

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 4447 -j ACCEPT

相关内容