iptables로 80,443을 제외한 모든 포트를 차단하는 방법은 무엇입니까? [복제]


15

모든 포트 (입출입)를 차단하는 것은 쉽지만 "제외"라는 단어는 어렵습니다. 나는 그 조건을 만족시키는 규칙을 모른다.

추신 :이 질문은 새로운 것이 아니라는 것을 알고 있습니다. 그러나 실제로, 나는 도움이되는 것을 찾지 못했습니다. pls 도와주세요!


모든 포트를 닫은 후 다음 줄에서 단일 포트를 열 수 없습니까?
— sinni800

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------ 작동하지 않습니다!
— user71169

답변:


25

먼저! NOT 기호입니다.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

둘째, 작성한 규칙에 예상 결과가 없을 수 있습니다. 포트 80의 연결에 대한 응답을 포함하여 모든 항목을 삭제합니다. 따라서 웹 서버의 목적으로 연결에 연결할 수 없습니다.

이러한 규칙은 관련 및 확립 된 연결을 허용하므로 웹 서버가 실제로 수행하려는 경우 웹 서버가 작동해야합니다.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
안 !같은 이스케이프 \!배쉬 쉘을 사용하는 경우,?
— Cristian Ciupitu

@CristianCiupitu 아니요 탈출 할 필요는 없습니다. 이상한 일이있을 수 있지만 내 배쉬에서는 벗어날 필요가 없습니다.
— cybernard

"iptables -nvL"의 출력을 확인하여 연결된 패키지를 확인했습니다. 규칙대로 작동하는 것 같습니다. 하지만 확인할 수 없습니다. 해당 포트를 사용하는 일부 앱을 제외하고는 실제로 작동하는지 여부입니다. 앱이 포트를 사용한다고해서 해당 포트만 사용한다는 의미는 아닙니다. 그래서, 확인 제안이 있습니까?
— user71169

1
@cybernard, 그렇습니다. 평원을 !탈출 할 필요는 없습니다. 잘못된 경보에 대해 죄송합니다.
— Cristian Ciupitu

3
@MohammadShahid 규칙은 자동으로 영구적이지 않으므로 재부팅하면 사라지고 로그인 할 수 있습니다. ssh 연결을 유지하려면 포트 목록에 22를 추가해야합니다.
— cybernard 2016 년

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

이것은 당신에게 필요한 것을 줄 것입니다


4
SSH를 통해 연결된 경우 TCP 포트 22를 열어야합니다.
— Maximilian Ast

예, SSH 포트를 잊지 마십시오. 기본 정책을 삭제하도록 설정하기 전에 SSH 포트를 추가해야합니다. ;)
— James Little

3

기본 조치를 DROP으로 설정 한 후 다음과 같이 80 및 443을 허용하는 예외 규칙을 작성할 수 있습니다.

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables는 일치하는 것을 찾을 때까지 '예외'목록을 통과합니다. 그런 다음 -j매개 변수로 지정된 조치를 수행합니다 (이 경우 ACCEPT). 일치하는 항목을 찾지 못하면 기본 정책으로 돌아가서 패킷을 삭제합니다.

참고 이 해결 방법으로 하위 도메인이 잠겨됩니다. 예를 들어이 방법을 사용하면 www.mydomain.com에서 제대로 작동하지만 하위 도메인에서 www.sub.mydomain.com이 DNS 오류로 열리지 않는다고 가정합니다.


작동해야하지만 그렇지 않습니다. 너무 혼란 스러워요.
— user71169

작동하지 않는 것은 무엇입니까? 들어오는 모든 패킷을 허용합니까, 아니면 허용하지 않습니까? 의 출력으로 질문을 업데이트 할 수 있습니까 iptables -nvL?
— mtak

왜 다운 투표? 프로덕션 환경에서 실행 중이므로 100 % 작동합니다.
— mtak

죄송합니다! 내가 아니에요, 누군가 그렇게했습니다 :)) 그렇습니다, 당신은 내가 좋아하지만 확실하지 않습니다. 그래서 내가 질문을해야하는 이유.
— user71169

2
이 작업을 수행하지 마십시오 ssh.
— Ashesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.