예를 들어, 모든 소스/대상의 모든 포트를 차단하는 방화벽이 있습니다.
성공적으로 실행하려면 어떤 포트를 열어야 합니까?
ping google.com
...브라우저를 통해 google.com을 보려면 추가 포트를 열어야 하나요?
포트 53(dns) 80(http) 및 443(https)을 열려고 했습니다. 충분하지 않습니다. iptables를 사용하고 있지만 iptables에서 구성하는 방법을 묻는 것이 아니라 어떤 포트에 필요한지 묻는 것뿐입니다. 무엇을 사용하든 열려 있습니다. 포트 기반 방화벽이군요.
답변1
DNS의 경우 방화벽 내부 IP 주소의 포트와 방화벽 외부 IP 주소의 포트 53 사이에서 UDP 패킷을 허용해야 합니다.
HTTPS의 경우 방화벽 내부의 IP 주소에 있는 모든 포트와 방화벽 외부의 포트 443 간에 TCP 패킷을 허용해야 하며, 방화벽 외부의 모든 포트(일부 웹사이트는 기본 포트에 있지 않음) 데이터 팩 간에 TCP를 거의 허용하지 않아야 합니다. HTTP의 경우 포트 80과 동일합니다.
TCP는 연결 프로토콜입니다. 연결의 두 끝은 비대칭이며 방화벽은 일반적으로 두 끝을 구별합니다. 나가는 이메일이 개인 릴레이를 통과하도록 강제하는 것(감염된 컴퓨터가 감지되지 않은 채 스팸을 보내는 것을 방지하기 위해) 외에 나가는 연결을 차단하는 보안상의 이유는 거의 없습니다. 클라이언트 컴퓨터의 일반적인 기본 방화벽은 나가는 연결을 모두 또는 대부분 허용하고 들어오는 연결을 차단합니다.
ping의 경우 ICMP를 허용하십시오. 특정 유형의 패킷을 차단해야 하는 특별한 이유가 없는 한 모든 ICMP를 허용해야 합니다. ICMP를 무분별하게 차단하면 네트워크 문제를 진단하기가 어려워지고 애플리케이션이 올바른 오류 응답을 받을 수 없기 때문에 서비스 장애가 발생할 수 있습니다.
smtp.example.com
다음은 SMTP를 제외한 모든 연결을 허용하고 포트 22(SSH)를 제외한 들어오는 TCP 연결을 차단하는 일반적인 클라이언트 컴퓨터에 대한 간단한 Linux 방화벽 구성입니다 .
iptables -F INPUT
# Accept everything on localhost
iptables -A INPUT -i lo -j ACCEPT
# Accept incoming packets on existing connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Accept DNS replies
iptables -A INPUT -p udp --sport 53 -j ACCEPT
# Accept incoming SSH connections
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Reject everything else that's incoming
iptables -A INPUT -j REJECT
iptables -F OUTPUT
# Forbid outgoing SMTP except to a known relay
iptables -A OUTPUT -p tcp --dport 22 ! -host smtp.example.com -j REJECT
# Allow everything else that's outgoing
iptables -P OUTPUT -j ALLOW