我有一项服务在eth1的端口80和443上侦听客户流量。托管我的服务的服务器还托管eth0和localhost
上的其他管理员/特权访问内容我正在尝试设置iptable规则来锁定与客户端在同一网络上的服务器上的eth1(阻止像ssh通过eth1 /访问在端口9904上运行的内部服务等等)我还要确保规则不要禁止定期访问eth1:80和eth1:443。我已经提出了以下规则,但想与iptable大师一起审查这条规则的可能问题。
-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
答案 0 :(得分:0)
谢谢我在https://serverfault.com/questions/834534/iptable-rules-to-restrict-eth1-access-to-ports-80-and-443得到了回答,在此处添加了完整性
第一组规则首先允许端口上的所有传入数据包 80和443.然后它丢弃所有其他传入的数据包(除了那些 已被接受)。
第二组规则首先允许端口80上的所有传入数据包 然后它丢弃传入的连接(不包括80和443) 已被接受),这是仅设置了SYN标志的数据包。 然后它允许所有传入的数据包。
这里的不同之处在于您的OUTGOING连接会发生什么。在 第一个规则集,如果您尝试连接到另一个服务器,任何 服务器在响应中发送的数据包将被丢弃,因此您将这样做 从未收到任何数据。在第二种情况下,这些数据包将是 允许,因为来自远程服务器的第一个数据包将同时拥有 SYN和ACK设置因此通过SYN测试,以及任何以下 数据包根本不会设置SYN,因此通过了测试。
传统上这是使用conntrack完成的,需要使用conntrack 内核用于跟踪防火墙中的每个连接,用 像
这样的命令-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
将传入的数据包与现有连接匹配,或者 与某些其他现有连接相关的连接(例如FTP数据 连接)。如果您没有使用FTP或其他使用的协议 多个随机端口,然后第二个规则集基本实现了 相同的结果没有跟踪和检查这些的开销 连接。