防火墙是一个重要的安全模块,它能够限制网络的访问。
现在有一个要求那就是要让主机A能够访问主机B,主机B不能访问主机A,那么防火墙能够做到么?
答案是可以的,当主机A的防火墙入站规则限制了主机B,那么主机B想访问主机A的时候,发出的网络包确实会被A的防火墙拦截,那么网络包无法到达A,自然B无法访问A。但是在A访问B的时候,有不少同学有这样的疑惑:此时防火墙不会拦截A发送B网络包,但是在B收到A发来的包以后,向A发送针对之前的网络包的回复包,那么在到达A的时候,岂不是也被主机A的防火墙拦截了?那么主机A迟迟收不到主机B的网络包,岂不是就连接失败,无法访问B了?
事实上,这里面的原理需要解释一下:
tcp连接有三次握手,请求连接,同意连接,建立连接。那么入站出站规则则分别均对应请求连接。假设有A和B均开启了80端口,B想访问A的80端口,那么假设A防火墙上面设置了入站规则是禁止B访问,B对A发出的请求连接的网络包确实会被A的防火墙拦截,那么网络包无法到达A,自然B无法访问A,但是在A想访问B的时候,A对B的请求连接的网络包不会被A的防火墙拦截,B收到请求连接的网络包之后对A发出的回复同意连接的网络包实际上是不会被A上的防火墙拦截的,因为A上防火墙拦截的只是请求连接的数据包,不会拦截之后的回复包。同理假如设置了出站规则,那么防火墙拦截的也是请求连接的数据包,假如此时在A的入站规则里面删去B,在出站连接里面添加B,那么就会导致主机B能够访问主机A,主机A不能访问主机B的情况,因为A向B建立连接的请求包被拦截了。