IPTables : 나가는 MySQL 연결은 허용하지만 들어오는 연결은 허용하지 않음 포트에 대한 연결을 끊는 것입니다

외부 소스에서 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 주소는 주기적으로 변경 될 수 있습니다.



답변

상태 엔진을 활용하십시오.

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로컬 ephmeral 포트에서 대상 포트 3306의 특정 외부 IP 주소로 나가는 패킷이 IP 주소와 포트 번호의 특정 조합에 대한 상태 테이블 항목을 만들고 동일한 조합의 트래픽 만 반환한다는 것입니다 주소와 포트는 해당 연결 기간 동안 만 허용됩니다.