背景:
生产上裁撤服务器的时候考虑到有可能还有现网流量,直接关机的话,回滚起来非常麻烦,所以可以对入流量进行封禁,这样就可以达到快速恢复的效果。
iptables常用命令点击:iptables常用命令汇总
新建一个SSH链表:
iptables -N ENS160
清空链表(生产环境慎用):
iptables -F ENS160
虽然已经创建了自定义链,链中也有具体的防火墙规则,但是实际上没有任何作用,因为发过来的请求依旧会进入到INPUT链,还需要在Iptables中应用一下自定义的链,使请求转发到自定义的链上。
应用链表(只针对22端口):
iptables -t filter -I INPUT -p tcp --dport 22 -j ENS160
此时已经从远程连接断开,在ENS160中添加策略后才成功连接:
iptables -I ENS160 -s 192.168.154.0/24 -j ACCEPT
iptables -A ENS160 -j DROP
新建一个封禁所有流量的链表
iptables -N Interdiction
iptables -A Interdiction -j DROP
应用链表:
iptables -A INPUT -j Interdiction
此时禁用了所有的协议(包括icmp),开放ping协议
iptables -I Interdiction -p icmp -j ACCEPT
对icmp进行抓包:
tcpdump -i ens160 -nnn icmp
实践过程中发现的问题–扩展
PS:这里因为用了docker,所以docker启动的服务INPUT拦截不到,主要是因为docker默认添加了策略
对外建立的连接经过INPUT不拦截
iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
这里我启动了两个容器服务,分别是:

分别是主机的80和8088端口
此时我对DOCKER添加封禁9000端口
iptables -I DOCKER -p tcp --dport 9000 -j DROP

此时访问不通了:

80端口正常转发:

思考:
如果在主机层面把端口转发到容器的22端口,是不是可以达到直接进入到容器的效果,如果可以这样的话,那就好玩了。一个物理机可以开很多容器,达到让很多人使用的效果。