iptables를 사용하여 파일에 대한 모든 아웃바운드 연결을 기록하려고 합니다.
내 규칙은 다음과 같습니다.
-A OUTPUT ! -o lo ! --destination 127.0.0.1 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
그러나 다른 IP 대상(멀티캐스트)을 추가하면 내 규칙은 다음과 같습니다.
-A OUTPUT ! -o lo ! --destination 127.0.0.1 ! --destination 239.192.0.0 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
다음 오류가 발생합니다.
multiple -d flags not allowed
내 질문은 이 오류가 무엇을 의미하는지가 아니지만 내 규칙에서 여러 IP 주소를 어떻게 제외합니까? 두 가지 조건
! --destination 127.0.0.1
그리고
! --destination 239.192.0.0
상호 배타적이므로 두 개의 규칙이 있는 것은 실제로 규칙이 전혀 없는 것과 같습니다(더 나쁜 것은 거의 두 배나 많은 로그를 얻게 되기 때문입니다).
그렇다면 "AND" 연산자가 있나요?
답변1
이러한 문제의 경우 새 체인을 정의하고 체인 사이를 이동할 수 있습니다. 예를 들어, 다음 작업을 사용하여 체인을 추가 LOGGING
하고 기록하지 않으려는 체인의 시작 부분에 패킷을 일치시킬 수 있습니다 RETURN
.
$ iptables -N LOGGING
$ iptables -A LOGGING -d 127.0.0.0/8 -j RETURN
$ iptables -A LOGGING -d 239.192.0.0/16 -j RETURN
$ iptables -A LOGGING -j LOG
$ iptables -A OUTPUT -j LOGGING
이렇게 하면 OUTPUT
체인을 통과하는 모든 패킷이 먼저 체인을 통과하고 , LOGGING
맞지 않는 패킷 127.0.0.0/8
은 모두 239.192.0.0/16
기록된 다음 제어권이 로 반환됩니다 OUTPUT
.
답변2
예, 하지만 원하는 대로 작동하지 않습니다. 매뉴얼 페이지에서:
여러 주소를 지정할 수 있지만 이렇게 하면 여러 규칙으로 확장되거나(-A를 추가하는 경우) 여러 규칙이 제거됩니다(-D와 함께 사용하는 경우).
이를 수행하는 방법은 체인 초기에 규칙을 추가하여 기록 또는 수정을 원하지 않는 트래픽을 전환하는 것입니다.
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT --destination 239.192.0.0 -j ACCEPT
-A OUTPUT -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
답변3
쉼표로 구분된 값 및 -d
또는 을 사용하여 -s
여러 IP를 설정할 수 있습니다. (토론 참조http://www.gossamer-threads.com/lists/gentoo/user/210361)
예를 들어 다음 명령은
sudo iptables -A OUTPUT -d 192.168.235.43,192.168.235.46 -j DROP
두 서버 모두에 대한 트래픽을 필터링합니다.