Iptables - 특정 포트를 허용하고 다른 포트를 차단하는 데 문제가 있음

Iptables - 특정 포트를 허용하고 다른 포트를 차단하는 데 문제가 있음

22(ssh), 80(http), 443(https)을 제외한 모든 포트를 차단해 보았습니다. 현재 입력 규칙은 다음과 같습니다.

> iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere            

http 및 https 포트를 허용한 다음 다른 모든 포트를 차단해야 합니다. 그러나 그것은 모든 것을 차단합니다. 예를 들어 포트 80과 443을 사용하여 Facebook에 액세스하려고 하면 작동하지 않습니다. 페이스북에 접속할 수 없습니다. 이제 어떻게 해야 하나요?

나도 이것을 시도했습니다. 언급된 포트를 허용하고 계속 진행하세요.정책 거부, 확실하지는 않지만. 같은 일이 일어납니다.

> iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

답변1

생성한 정책 규칙은 다음을 허용합니다.외부연결할 호스트당신의TCP 포트 22, 80 및 443, 그러나 자신의 트래픽을 포함한 다른 트래픽은 없습니다! 이 호스트가 이 세 포트 이외의 다른 포트에 액세스하는 것을 정말로 차단하고 외부 호스트가 호스트에 액세스하는 것을 원하지 않는 경우별말씀을요OUTPUT, 규칙 체인 대신 규칙 체인 에 규칙을 넣은 INPUT다음 입력 체인에 CONNTRACK 규칙을 추가하여 시작되지 않은 연결을 방지할 수 있습니다.

-P INPUT DROP
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m udp -p udp --sport 53 -j ACCEPT
-A OUTPUT -i lo -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A OUTPUT -m udp -p udp --dport 53 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A OUTPUT -m tcp -p tcp --dport 443 -j ACCEPT

나는 일반적으로 일부 내부 프로그램이 필요할 수 있기 때문에 루프백 어댑터가 작동하도록 허용합니다. 또한 DNS 트래픽도 허용합니다. 그렇지 않으면 도메인 이름을 확인할 수 없습니다.

답변2

다른 사람들이 의견에서 지적했듯이 웹 사이트에 액세스하는 데는 INPUT 규칙이 필요하지 않습니다. 이러한 규칙은 해당 포트에서 로컬로 서비스를 실행하는 경우에만 필요합니다. 아웃바운드 트래픽을 정말로 제한하려면 이러한 규칙을 OUTPUT 체인에 넣어야 합니다.

또한 모든 인바운드 트래픽이 삭제되므로 모든 연결이 끊어집니다. 웹 서버에 대한 연결을 설정하면 반환된 데이터(특히 TCP 3방향 핸드셰이크)는 catch-all 삭제로 인해 INPUT 체인에서 삭제됩니다. 이 문제를 해결하려면 다음 반환 연결을 허용하는 규칙을 추가해야 합니다.

iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

답변3

update-alternatives --config iptables이전 버전을 선택해 보세요 . 일시적으로 저에게 효과적입니다.

관련 정보