我有一个服务(Elasticsearch后台代理)在eth1的端口80和443上监听客户stream量。 托pipe我的服务的服务器还在eth0和localhost上托pipe其他pipe理员/特权访问内容
我试图设置iptable规则locking在与客户端在同一networking上的服务器上的eth1(通过eth1阻塞像ssh /访问端口9904上运行的内部服务等)我也想确保规则不要禁止访问eth1:80和eth1:443。 我已经提出了以下的规则,但想要与iptable的大师审查这个规则的可能的问题。
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i eth1 -j DROP
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP -A INPUT -i eth1 -p tcp -j ACCEPT -A INPUT -i eth1 -j DROP
第一组规则首先允许端口80和443上的所有传入数据包。然后丢弃所有其他传入数据包(除了那些已被接受的数据包)。
第二套规则首先允许端口80和443上的所有传入数据包,然后丢弃传入的连接(不包括已经接受的80和443),这些数据包是仅设置了SYN标志的数据包。 然后它允许所有传入的数据包。
这里的区别是你的OUTGOING连接发生了什么。 在第一个规则集中,如果您尝试连接到另一个服务器,则任何服务器发送的响应数据包都将被丢弃,因此您将永远不会收到任何数据。 在第二种情况下,这些数据包将被允许,因为来自远程服务器的第一个数据包将同时具有SYN和ACK,因此将通过SYNtesting,并且任何后续数据包根本不会有SYN设置,从而通过testing。
这一直以来都是使用conntrack来完成的,它需要内核跟踪防火墙中的每个连接,并使用类似的命令
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
将传入的数据包与现有连接匹配,或与某些其他现有连接(例如FTP数据连接)相关的连接。 如果您没有使用FTP或使用多个随机端口的其他协议,则第二个规则集可以获得基本相同的结果,而无需跟踪和检查这些连接的开销。