나는 다음과 같은 규칙을 만들었습니다.
-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j internet
-A internet -j MARK --set-xmark 0x63/0xffffffff
포트 80에서 들어오는 트래픽을 캡처하고 표시를 위해 보냅니다. 작동하지만 이제 53(DNS), DHCP 서비스 포트 및 기타 몇 가지 포트를 제외한 모든 포트를 캡처하도록 편집하고 싶습니다. 내 iptables 아래에
-A PREROUTING -i vboxnet0 -p tcp -m mark --mark 0x63 -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1
포트 80으로 향하는 태그가 지정된 모든 TCP 트래픽을 캡처하고 이를 로컬 IP로 DNAT합니다. 3(DNS), DHCP 서비스 포트 및 기타 몇 가지 포트를 제외한 모든 포트를 포함하도록 편집하고 싶습니다.
두 규칙 세트의 첫 번째 -m과 두 번째 -m 사이의 차이점에 대한 간단한 설명 대신 몇 가지 좋은 지침을 제시하면 올바른 방향으로 나아갈 수 있습니다.
답변1
당신의 규칙을 알아라
대부분의 경우와 마찬가지로 방화벽 규칙의 작동 방식을 이해하는 첫 번째 단계는 페이지 man
( man iptables
)를 검사하는 것입니다. man
페이지 에서 다음을 찾을 수 있습니다:
-m, --match 일치
사용할 일치 항목, 즉 특정 속성을 테스트하는 확장 모듈을 지정합니다. 이 일치 세트는 대상을 호출하기 위한 조건을 구성합니다. 일치 항목은 명령줄에 지정된 대로 처음부터 끝까지 평가되며 단락 방식으로 작동합니다. 즉, 확장 프로그램에서 오류가 발생하면 평가가 중지됩니다.
페이지 하단에서 다음 항목 man
도 확인할 수 있습니다.
매칭 및 타겟 확장
iptables는 확장된 패킷 일치 및 타겟팅 모듈을 사용할 수 있습니다. 이들 목록은 iptables-extensions(8) 맨페이지에 제공됩니다.
그러면 페이지는 귀하의 옵션이 실제로 수행하는 작업에 대한 iptables-extensions
man
구체적인 정보를 제공합니다. -m
거기에 몇 가지 작은 조각이 있습니다:
표시
[!] --태그 값[/mask]
...
TCP 프로토콜
[!] --destination-port,--dport 포트[:port]
...
DNAT
이 대상은 nat 테이블, PREROUTING 및 OUTPUT 체인, 그리고 이러한 체인에서만 호출되는 사용자 정의 체인에서만 유효합니다. 이는 패킷의 대상 주소를 수정해야 하고(이 연결의 모든 향후 패킷도 손상됨) 규칙 검사를 중지해야 함을 지정합니다. 다음 옵션이 필요합니다.
--대상 [ipaddr[-ipaddr]][:port[-port]]
...
표시
이 대상은 패킷과 관련된 Netfilter 태그 값을 설정하는 데 사용됩니다. 예를 들어 fwmark 기반 라우팅(iproute2 필요)과 함께 사용할 수 있습니다. 이렇게 할 계획이라면 라우팅에 영향을 미치기 위해 맹글 테이블의 PREROUTING 체인에 이 플래그를 설정해야 한다는 점에 유의하세요. 태그 필드의 너비는 32비트입니다.
--set-xmark 값[/마스크]
간단히 말해서 -m
옵션은 일치하는 옵션을 에 추가할 뿐입니다 iptables
. 그러나 이 man
페이지에는 일부 비표준 대상( DNAT
사용 중인 대상 포함)도 나열됩니다.
무엇을 해야할지
nat
이제 이 모든 것을 종합해보면 귀하가 사용하고 있는 테이블이 귀하의 목표 에 적합한 유일한 테이블 이라고 가정합니다 DNAT
.
트래픽을 표시하는 것도 불필요해 보입니다. nat
패킷을 처리 할 수 있도록 표시만 되어 있는데 , nat
애초에 표시를 하지 않고 그냥 패킷을 처리하면 됩니다.
예를 들어:
-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1
여러 포트를 포함하는 여러 규칙을 지정하거나, 지정된 포트 범위를 사용하거나 [port]:[port]
, 지정된 부정 일치 항목을 사용할 수 있습니다 !
.
53
예를 들어 (도메인) 및 (ssh) 를 제외한 모든 포트에 규칙을 적용하려면 22
다음을 수행합니다.
-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 53 -j DNAT --to-destination 192.168.56.1
-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 22 -j DNAT --to-destination 192.168.56.1
많은 포트를 필터링하려는 경우 이는 번거로울 수 있지만 그게 인생입니다 iptables
. /etc/services
특정 서비스/프로토콜에 영향을 주지 않도록 포트 매핑 목록을 확인하는 것이 좋습니다 .