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.