由于站点是使用反向代理的,应用服务端口并不是443,而是9000,这样一来域名+9000端口就能直接访问应用服务器,emmm...怎么能禁止用户对应用服务器的直接访问呢?

iptables和netfilter

和windows一样,Linux也有软防火墙——netfilter

通过对数据包的管理(接受、丢弃、转发)来控制网络,它位于内核空间,所以用户并不能直接操作它,而是通过一个叫做iptables的应用来设置包的管理策略

简单说就是iptables设置管理策略,netfilter负责执行

如需详细了解可参阅iptables详解

简易配置

下面说说几个比较简单常用的iptables策略

开启指定端口的外网访问

iptables -A INPUT -p tcp -m tcp --dport 端口号 -j ACCEPT

上述语句即接受来自此端口的外来数据包

允许指定IP的任意端口请求

iptables -A INPUT -s 指定ip -p tcp -j ACCEPT

上属于即表示允许指定ip的请求,不限端口
当需要对做反向代理时,不需要开放应用服务器端口,但是内部nginx需要能够访问到应用服务器端口时,则可以将ip改为127.0.0.1,表示允许来自本机的所有请求

允许/禁用ping

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT/DROP
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT/DROP

默认规则

对于没有指定设置策略时执行的规则

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

上述规则:拒绝流入和转发的数据包,允许向外发送数据包

VPS使用这个默认规则之前,务必开放SSH的访问权限,不然VPS就失联了

解决默认配置无法连接外网的问题

使用默认规则后,由于所有的流入包都被拦截,那么服务器本身发送的数据请求返回的数据同样被iptables拒之门外,就会导致你无法连接外网了

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

使用此命令接受由本机发出请求正常的相应数据来保证正常访问外网

重启生效

由于iptables是一个用于管理netfilter的应用程序,它的规则时保存在内存中的,机器重启后,内存内容丢失就会造成配置失效需要重新配置的情况。

为了让iptables的配置一直有效,就需要将配置保存在一个文件中,在每次重启时,让Linux自动去执行它

iptables-save > /etc/sysconfig/iptables

通过上述命令将策略保存在文件中

iptables-restore < /etc/sysconfig/iptables

使用上述命令恢复iptables的配置。如果想每次开机都能自动执行,就把这个命令添加到开机脚本中吧。


Keeping frank is the easiest way to keep it simple.