由于站点是使用反向代理的,应用服务端口并不是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的配置。如果想每次开机都能自动执行,就把这个命令添加到开机脚本中吧。
Q.E.D.