
외부 소스에서 mysql에 대한 연결을 허용하지 않는 서버가 있습니다. 모든 데이터베이스와 연결은 localhost에서 이루어집니다. iptables의 기본 정책은 지정하지 않은 모든 포트에 대한 연결을 삭제하는 것입니다(현재 iptable 규칙에 포트 3306이 지정되어 있지 않으므로 이 포트에 대한 모든 연결이 삭제됩니다).
괜찮습니다. 하지만 이제 Amazon RDS 외부에 있는 mysql 데이터베이스에 연결하고 싶습니다.
포트 3306은 다음과 같이 외부 세계에 열릴 수 있습니다.
iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
이를 통해 Amazon RDS의 데이터베이스에 연결할 수 있을 뿐만 아니라 내 서버의 데이터베이스에 대한 원격 연결도 허용됩니다.
내 서버가 Amazon의 데이터베이스에 연결할 수 있도록 허용하되 내 서버의 데이터베이스에 대한 외부 연결을 제한하려면 어떻게 해야 합니까?
또한 Amazon RDS 인스턴스의 IP 주소는 주기적으로 변경될 수 있다는 점을 명심하세요.
답변1
상태 엔진을 활용하세요:
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
또는 이후 버전의 iptables에서
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT
이것이 바로 상태 엔진이 수행하는 작업입니다.다양한 기준을 충족하는 트래픽을 허용합니다.(예: 프로토콜, 소스 포트)하지만 기존 연결의 일부이기도 합니다.(정의대로연결). 결과적으로 TCP SYN
로컬 임시 포트에서 대상 포트 3306의 특정 외부 IP 주소로 나가는 패킷은 IP 주소와 포트 번호의 특정 조합에 대한 상태 테이블 항목을 생성하고 동일한 조합의 트래픽만 반환합니다. 주소와 포트는 해당 연결 기간 동안에만 허용됩니다.