
TCP(SSH 및 FTP)에서 21 및 22를 제외한 모든 포트를 차단하는 몇 가지 규칙을 설정하려고 합니다. 하지만 이 스크립트를 실행하려고 하면 인스턴스가 잠겨 액세스할 수 없습니다. 스크립트는 다음과 같습니다.
# Flush the FW Rules
iptables -F
iptables -X
# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
스크립트에서는 SSH 및 FTP에 대한 들어오고 나가는 요청을 모두 설정하지만 왜 액세스할 수 없습니까?
답변1
- 체인 의 규칙에 대해서는 대상 포트( )가 아닌
OUTPUT
소스 포트 일치( )를 지정해야 합니다 .--sport
--dport
- 어쨌든 체인
DROP
의 정책은OUTPUT
일반적인 관행이 아닙니다. - iptables 튜토리얼과 예제 규칙 세트를 읽어보세요.
- 연결이 끊어지지 않도록 더 나은 사용
iptables-save
및iptables-apply
도구를 사용하십시오.
답변2
상태 추적을 설정하고 -A OUTPUT ... -j ACCEPT
라인을 잃어야 합니다.
IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
명시적인 송신 필터링을 사용하는 것은 좋지만 구현해야 할 작업이 더 많습니다.