iptables에서 규칙 매개변수를 반복해야 합니까?

iptables에서 규칙 매개변수를 반복해야 합니까?

iptables에 SSH 규칙이 필요하다고 가정해 보겠습니다. 그러나 우리는 또한 모든 규칙에 대해 다른 체인을 지정하고 싶습니다. 우리는 다음과 같은 것을 사용할 수 있습니다:

iptables -t filter -N ssh
iptables -t filter -N tcp
iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j tcp
iptables -t filter -A tcp -p tcp --dport 22 -m conntrack --ctstate NEW -j ssh
iptables -t filter -A ssh -p tcp --dport 22 -m conntrack --ctstate NEW -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -t filter -A ssh -p tcp --dport 22 -m conntrack --ctstate NEW -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT

각 규칙에 모든 옵션을 지정해야 하나요, 아니면 하위 체인에서는 생략할 수 있나요? 예를 들어 최종 SSH 규칙은 다음과 같습니다.

iptables -t filter -A ssh -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -t filter -A ssh -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT

답변1

이를 피하려면 새 체인이 필요합니다.

iptables -N sshgroup1
# or reset with iptables -F sshgroup1 if it already exists
iptables -t filter -A ssh -s 10.10.10.10/32 -m mac \
  --mac-source 10:10:10:10:10:10 -j sshgroup1
iptables -t filter -A sshgroup1 ... -j ACCEPT
iptables -t filter -A sshgroup1 ... -j ACCEPT

답변2

LAN에 있는 두 개의 호스트에서만 SSH 연결을 허용하려면 이 규칙을 맨 위에 유지하여 iptables가 더 빠르게 작동하도록 해야 합니다.

iptables -I INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -s 10.10.10.10/32 -m mac --mac-source 10:10:10:10:10:10 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -s 11.11.11.11/32 -m mac --mac-source 11:11:11:11:11:11 -j ACCEPT

그렇지 않으면 네트워크, 정책 및 트래픽에 따라 많은 조합이 있습니다.

경험 법칙은 다음과 같습니다. 규칙 반복을 피하고 더 빠른 성능을 위해 일치 수준을 최소화하십시오.

관련 정보