IPtables의 Mac 주소 필터

IPtables의 Mac 주소 필터

포트 2001에 애플리케이션이 있고 mac 주소를 가진 일부 사용자가 이 포트에 연결할 수 있도록 허용하고 싶습니다. 그래서 저는 다음 명령을 사용합니다.

sudo iptables -A INPUT -p tcp --destination-port 2001 -j DROP

sudo iptables -A INPUT -p tcp --destination-port 2001 -m mac --mac-source [My PC mac] -j ACCEPT

service iptables save

모든 사람에게 작동하지만 나에게는 작동하지 않습니다. (mac 주소는 허용되지 않습니다.) 무엇이 문제인가요?

답변1

iptable규칙은 "첫 번째 게임"을 기반으로 합니다. 따라서 첫 번째 규칙은 모든 것을 포기하고 두 번째 규칙은 결코 달성되지 않습니다.

순서를 변경하면(먼저 "수락", 그 다음 "삭제") 예상대로 작동합니다.

답변2

IPtables 규칙이 충돌합니다. IPtables는 첫 번째 일치 기준으로 작동합니다. 이 -A옵션을 사용하면 규칙이 목록 끝에 있도록 규칙 이 목록 ACCEPT끝에 배치됩니다.

따라서 해당 설명(포트 2001의 tcp 연결)이 포함된 패킷을 설명하는 순서대로 규칙을 입력하면 해당 패킷이 삭제되고 다음 규칙 중 하나도 확인되지 않습니다. 물론, 그것이 유일한 규칙이라면요!

나는 이해이 링크는 오래되었습니다, 그러나 IPtables 규칙 우선 순위가 어떻게 작동하는지에 대한 훌륭한 정보를 제공합니다.

따라서 이 규칙을 지우고 싶을 것입니다. 먼저 규칙을 식별한 다음 삭제해야 합니다.

sudo iptables -L --line-numbers    
sudo iptables -D INPUT [The Number of the Drop Rule]

그런 다음 이 옵션을 사용하기 전과 마찬가지로 규칙을 다시 추가할 수 있습니다 -A. 이제 IPtable이 예상대로 작동해야 합니다.

관련 정보