![iptables에는 중복 규칙 매개변수가 필요합니까?](https://linux55.com/image/38368/iptables%EC%97%90%EB%8A%94%20%EC%A4%91%EB%B3%B5%20%EA%B7%9C%EC%B9%99%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
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
그렇지 않은 경우 네트워크, 정책 및 트래픽에 따라 다양한 조합이 있습니다.
경험 법칙: 더 빠른 성능을 위해 중복 규칙을 피하고 일치 수준을 최소화하십시오.