ID가 모든 연결(미국 및 호주 연결 제외)을 차단할 것이라고 생각했고 해당 부분은 작동했지만 더 이상 적절한 업데이트를 실행할 수 없으며 터미널에서 Google을 핑하는 데 실패했습니다.
내가 여기서 무엇을 놓치고 있는 걸까요? geoip 라인을 제거하면 모든 것이 잘 작동합니다... 그런데, apt 미러는 미국에 있고 제가 운영하는 digitalocean 서버에서 호스팅됩니다...
도움을 주시면 감사하겠습니다.
iptables -N LOGGING
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -I INPUT -m geoip ! --src-cc AU,US -j LOGGING
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "iptables-dropped: " --log-level 4
iptables -A LOGGING -j DROP
Google에 핑을 보내고 apt-get을 설치한 결과는 다음과 같습니다.
Jan 3 12:18:33 wifi kernel: [ 6083.707903] iptables-dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.53 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35873 DF PROTO=UDP SPT=51564 DPT=53 LEN=64
Jan 3 12:19:13 wifi kernel: [ 6123.745110] iptables-dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.53 LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=38624 DF PROTO=UDP SPT=36189 DPT=53 LEN=47
Jan 3 12:19:33 wifi kernel: [ 6144.125699] iptables-dropped: IN=eth0 OUT= MAC=42:40:27:b3:46:91:fe:00:00:00:01:01:08:00 SRC=117.50.110.5 DST=198.199.71.101 LEN=60 TOS=0x00 PREC=0x00 TTL=42 ID=59012 DF PROTO=TCP SPT=47926 DPT=80 WINDOW=28280 RES=0x00 SYN URGP=0
Jan 3 12:20:04 wifi kernel: [ 6175.132445] iptables-dropped: IN=eth0 OUT= MAC=42:40:27:b3:46:91:fe:00:00:00:01:01:08:00 SRC=117.50.110.5 DST=198.199.71.101 LEN=60 TOS=0x00 PREC=0x00 TTL=44 ID=734 DF PROTO=TCP SPT=33934 DPT=80 WINDOW=28280 RES=0x00 SYN URGP=0
요청에 따라 iptables-save -c 출력을 사용하여 다음을 수행합니다.
:INPUT ACCEPT [33:1936]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:260]
:LOGGING - [0:0]
[27:2919] -A INPUT -m geoip ! --source-country AU,US -j LOGGING
[269:136906] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[0:0] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 2010 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
[261:18115] -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
[22:2420] -A OUTPUT -o lo -j ACCEPT
[5:550] -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "iptables-dropped: "
[27:2919] -A LOGGING -j DROP
답변1
현재 스크립트끼워 넣다첫 번째 규칙으로 이 규칙은 호주와 미국의 패킷만 허용합니다. 여기에는 루프백 인터페이스에 사용되는 127.0.0.0/8의 패킷이 포함되지 않습니다. 따라서 나중에 나오는 다른 모든 규칙은 사용되지 않습니다. 필요한 패킷이 삭제되었습니다.
예를 들어 로컬 DNS 서버 127.0.0.53에 대한 클라이언트 127.0.0.1과 관련된 DNS 확인이 실패하고 호스트 이름을 확인해야 하는 쿼리에서 올바르게 작동하지 않습니다.
바꾸다:
iptables -I INPUT -m geoip ! --src-cc AU,US -j LOGGING
그리고:
iptables -A INPUT -m geoip ! --src-cc AU,US -j LOGGING
여전히 스크립트의 같은 위치에 유지하세요. 이렇게 하면 이전에 설정된 연결의 패킷만 허용하는 상태 저장 규칙을 우회하지 않습니다.지역적으로 시작된 것을 포함하여나가는호주 및 미국 이외의 지역 연결로컬 DNS 서버를 포함한 다양한 로컬 서비스에 필요한 루프백 인터페이스 규칙. 서비스별 규칙이 허용될 때까지 호주/미국에서 발생하지 않은 콘텐츠는 계속 차단됩니다.
또한 간단히 말해서 OUTPUT 체인의 기본 정책은 ACCEPT이고 DROP 대상이 있는 규칙이 없기 때문에 OUTPUT 체인의 두 규칙은 현재 쓸모가 없습니다.