HI,朋友们不啰嗦系列又更新了,本人最近有空,没事做做实验(自己亲自动手做,不抄袭,都是跑通了的),写写文章,纯手码字,还望大家指教,支持。
熟悉运维的朋友对于iptables一定不会陌生,但是很多中小企业,部署很多应用或者在生产环境时,依然是首先关闭iptables,这样是不对的。
iptables不能算防火墙,你把它理解为一个安全软件或者应用或者代理好了,iptables只能算代理,底层的netfilter才是真正的安全框架防火墙。iptables是一个基于命令行的防火墙代理工具,其使用规则链来允许/阻止网络流量。配合Ansible一类的批量管理工具,能够达到很强的安全防护效果,重点是它是免费的。
好了,今天就开始我们的实践教学,原理、命令格式网上都有很多,我们直接先实践一波。
对象机 192.168.31.155 操作系统 centos7
如果linux发行版中没有,我的centos为例,进行安装,老规矩,yum。
yum install iptables-services -y
安装iptables
systemctl enable iptables
允许开机自启动
systemctl start iptables
开启iptables应用
systemctl status iptables
查看iptables状态
作者考虑的比较周到,默认放通了22端口,也就是ssh远程端口
开启后其他端口默认是关闭的,比如我的inlfuxdb端口8086
其他服务器与31.155的8086端口失去连接,被iptables阻止了
场景一,iptables放通某个业务端口,允许其他ip地址进行访问
现在对192.168.31.155上的8086端口进行放通
vi /etc/sysconfig/iptables
insert(键盘)
输入
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8086 -j ACCEPT
对照iptables语法就是 m state是启用状态匹配模块 允许IN的数据包 NEW状态的包 访问目的8086端口 dport是目的端口的意思 ACCEPT是允许的意思
ESC+:wq! 退出保存。systemctl restart iptables,重启iptables 生效规则。
效果:
突然发现我的主机还有3000端口无法被其他主机访问,同理放通,3000这个是grafana业务。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3000 -j ACCEPT
同样systemctl restart iptables,重启iptables 生效规则。
访问恢复。
场景二:web应用访问准入控制
我这边准备的实验道具是python+flask,来个helloworld式的应用,超快部署。
将其部署在192.168.31.155上,端口号8331,返回字符串是“测试四表五链”。
默认肯定是无法访问的,iptables中没有相应放通规则,默认是拒绝。
同理,对8331端口进行放通。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8086 -j ACCEPT,解释同上
同样systemctl restart iptables,重启iptables 生效规则。
其他主机访问结果,OK
场景二扩展1,不允许某个主机(192.168.31.185)访问192.168.31.155对象机某个端口(8331).
目前状态是可以的
在31.155的iptables中加入规则,-A INPUT -p tcp -s 192.168.31.185 -dport 8331 -j DROP
来自31.185的包 目的端口8331 DROP这个包直接丢掉
同样systemctl restart iptables,重启iptables 生效规则。
依然可以访问,规则未生效?
这里有个比较重要的点,那就是规则的匹配顺序是从上往下。
因为这个拒绝访问的规则上方已经有了允许的规则,所以,优先匹配了允许访问。
修改方案:
将DROP规则上移,如图,再次重启iptables,生效规则。
再次访问,没有返回字符串。策略生效OK。
场景二扩展2,不允许某个主机(192.168.31.185)访问192.168.31.155对象机所有端口
-A INPUT -p tcp -s 192.168.31.185 -j DROP
去掉特定端口dport即可
8331和3000端口都不能访问
场景二扩展3,仅允许某台主机(192.168.31.185)访问192.168.31.155
将其余策略全部#号注释掉(失效)
-A INPUT -p tcp -s 192.168.31.185 -j ACCEPT
-p是协议tcp -s source 192.168.31.185来的包 -j是动作ACCEPT接受
同样systemctl restart iptables,重启iptables 生效规则。
规则生效OK,其余主机均无法访问192.168.31.155。
仅31.185可以访问31.155,测试了3000、8331、22端口都可以。
完毕。下次再进阶其他场景和课题。