우분투 iptables는 wget을 차단하지 않습니다

우분투 iptables는 wget을 차단하지 않습니다

내가 뭘 잘못하고 있는지 이해하도록 도와주세요.iptables우분투 14.04에서.

iptables -F
ip6tables -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# allows the outgoing traffic of established connections, necessary if the OUTPUT policy is not set to ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP

iptables-nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
10574   17M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    2    88 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  260 14124 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
10317  623K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate NEW,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

위에서는 ssh를 제외한 모든 것을 차단해 보았습니다. 그래서 나는 wget이 아무것도 다운로드할 수 없을 것이라고 예상했지만 작동하지만 apt-get update는 (예상대로) 작동하지 않습니다. 모든(수신/발신)을 차단하는 방법을 설명해주세요. 또는 이 구성이 괜찮은 경우 wget이 여전히 작동하는 이유는 무엇입니까?

편집: 또한 2행을 1행으로 변경하려고 시도했지만 도움이 되지 않았습니다.

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

결과: wget은 작동하지만 apt-get 업데이트는 작동하지 않습니다. 누군가 이유를 명확히 할 수 있습니까? 감사해요.

답변1

규칙과 요구 사항을 블록별로 살펴보겠습니다. 기본 정책이 있으므로 DROP최종 규칙이 필요하지 않습니다. (그래도 나쁜 생각은 아닙니다.)

SSH를 제외한 모든 것을 차단해 보았습니다. 그래서 wget아무 것도 다운로드할 수 없을 것이라고 예상했는데, apt-get update(예상대로) 작동할 수도 있고 안 될 수도 있습니다.

규칙을 입력하세요:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

즉, 나가는 연결과 관련된 모든 트래픽이 허용됩니다. tcp/22(예: )에 대한 인바운드 ssh도 모두 허용됩니다. 다른 모든 것은 버려야 합니다. 여기에는 나가서 요청하는 데 방해가 되는 것이 없으니 참고하시기 wget바랍니다 apt-get update.

출력 규칙:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP

이는 이전에 허용된 인바운드 연결과 관련된 모든 트래픽이 허용됨을 의미합니다. 대상 tcp/22(예: tcp/22 ssh)로의 모든 아웃바운드도 허용됩니다. 결국 다른 것들은 모두 버려야 합니다.

관찰 결과:

아웃바운드 섹션의 어떤 항목도 귀하 wget또는 apt-get update요청을 허용하지 않습니다. 따라서 wget작동하는 경우 와 함께 사용 중인 예제 명령을 제공하십시오 . (예를 들어 각 해당 프로토콜에 대한 프록시를 정의하는 set | grep _proxy것과 같은 하나 이상의 정의를 볼 수 있습니다 .)http_proxy


그런데 권장되는 접근 방식 iptables은 모든 루프백 트래픽을 허용하는 것입니다. 다음 두 명령을 사용하여 이 작업을 수행할 수 있습니다.

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT

관련 정보