场景:某个WEB服务器提供服务的端口为8080, 而常用的WEB服务端口为80,在不能修改服务器端口的情况下,增加80端口为对外服务端口。即访问主机的80端口,也能访问到8080端口的内容。

办法:将80端口的请求转发到8080端口。使用iptables的DNAT (Destination Network Address Translation)即实现端口转发。下面假设主机的IP地址为192.168.0.100。访问连接分为本地连接和外部连接,分开讲述区别。

1) 外部连接。指的是由其他的主机连接到本台主机的连接。网络连接的数据包在iptables 会首先经过 PREROUTING链, 所以我们在PREROUTING做DNAT即可。

#iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.100 --dport 80 
-j DNAT --to 192.168.0.100:8080

2)本地连接。常用的地址localhost或者127.0.0.1,或者本机的IP地址192.168.0.100,访问本机的内容时, 数据包不会经过iptables的PREROUTING链,所以在PREROUTING链做DNAT是无效的。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。数据包在 iptables 中只经过 OUTPUT 链。

# iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
# iptables -t nat -A OUTPUT -p tcp -d 192.168.0.100 --dport 80 -j DNAT --to 127.0.0.1:8080

如果还没有实现端口转发,可能由于系统还没有打开转发的缘故。

# echo 1 > /proc/sys/net/ipv4/ip_forward

如果已经实现了端口转发,不妨将iptables配置保存起来,以后在系统重启的时候自动加载

# iptables-save > /etc/sysconfig/iptables

修改系统配置,默认打开数据转发

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

这样在重启后,还可以继续拥有端口转发功能。

linux系统以iptables为防火墙。以CentOS为例,打开iptables的配置文件。

vi /etc/sysconfig/iptables

查看各个链表的配置信息

/etc/init.d/iptables status

1)iptalbes的配置文件默认路径为/etc/sysconfig/iptables。添加一行配置开放常用的WEB端口TCP80

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

2.关闭/开启/重启防火墙, stop/start/restart

/etc/init.d/iptables stop

3.永久性关闭防火墙

chkconfig --level 35 iptables off  
/etc/init.d/iptables stop

4.关闭主机的25端口, 禁止外部的SMTP发送,并且保存iptables配置

iptables -A INPUT -p tcp --dport 25 -j DROP 
iptables-save > /etc/sysconfig/iptables

注意:SSH常用的端口为TCP 22。如果关闭了SSH的连接端口,将可能无法管理服务器。