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
그렇지 않으면 네트워크, 정책 및 트래픽에 따라 많은 조합이 있습니다.
경험 법칙은 다음과 같습니다. 규칙 반복을 피하고 더 빠른 성능을 위해 일치 수준을 최소화하십시오.