Mam serwer, który nie zezwala na połączenia z mysql ze źródeł zewnętrznych - wszystkie moje bazy danych i połączenia odbywają się na localhost. Domyślną zasadą iptables jest porzucanie połączeń dla portów, których nie podałem (obecnie nie mam portu 3306 w moich regułach iptable, więc wszystkie połączenia z tym portem są usuwane).
W porządku, ale teraz chciałbym połączyć się z bazą danych mysql zlokalizowaną zewnętrznie na Amazon RDS.
Port 3306 można otworzyć na świat zewnętrzny w następujący sposób:
iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
To pozwala mi łączyć się z bazą danych na Amazon RDS, jednak pozwala także na zdalne połączenia z bazami danych na moim serwerze.
Co muszę zrobić, aby mój serwer mógł połączyć się z bazą danych w Amazon, ale ograniczyć połączenia zewnętrzne z bazami danych na moim serwerze?
Należy również pamiętać, że adres IP mojej instancji Amazon RDS może się okresowo zmieniać.
Odpowiedzi:
Skorzystaj z mechanizmu stanu:
lub w późniejszych wersjach iptables
Właśnie do tego służy silnik stanowy: zezwalaj na ruch, który spełnia różne kryteria (np. Protokół, port źródłowy), ale jest także częścią istniejącego połączenia (ponieważ definiuje połączenie ). Rezultatem jest to, że wychodzący
TCP SYN
pakiet do określonego zewnętrznego adresu IP na docelowym porcie 3306, z lokalnego portu efmeralnego, utworzy pozycję tablicy stanów dla tej konkretnej kombinacji adresów IP i numerów portów, i zwraca ruch tylko z tą samą kombinacją adresy i porty będą dozwolone przez i tylko na czas trwania tego połączenia.źródło