내가 뭘 잘못하고 있는지 이해하도록 도와주세요.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