IPTables: Izinkan koneksi MySQL keluar tetapi tidak koneksi masuk

10

Saya memiliki server yang tidak mengizinkan koneksi ke mysql dari sumber eksternal - semua basis data dan koneksi saya berlangsung di localhost. Kebijakan default iptables adalah untuk menjatuhkan koneksi untuk setiap port yang tidak saya tentukan (saat ini saya tidak memiliki port 3306 yang ditentukan dalam aturan iptable saya, sehingga semua koneksi ke port ini terputus).

Tidak apa-apa, tapi sekarang saya ingin terhubung ke database mysql yang terletak di luar Amazon RDS.

Port 3306 dapat dibuka hingga dunia luar sebagai berikut:

iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT

Ini memungkinkan saya untuk terhubung ke database di Amazon RDS, namun juga memungkinkan koneksi jarak jauh ke database di server saya.

Apa yang harus saya lakukan untuk memungkinkan server saya terhubung ke database di Amazon, tetapi membatasi koneksi eksternal ke database di server saya?

Juga ingat bahwa alamat IP saya contoh Amazon RDS dapat berubah secara berkala saya percaya.

MrCarrot
sumber
2
Dapatkan IP statis dari Amazon dan kemudian buat daftar putih yang hanya mengizinkan IP untuk koneksi inbound / output?
Peter

Jawaban:

17

Manfaatkan mesin negara:

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

atau dalam versi iptables yang lebih baru

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

Inilah yang dilakukan oleh mesin keadaan: memungkinkan lalu lintas yang memenuhi berbagai kriteria (misalnya, protokol, port sumber) tetapi juga merupakan bagian dari koneksi yang ada (karena mendefinisikan koneksi ). Hasilnya adalah bahwa TCP SYNpaket keluar ke alamat IP eksternal tertentu pada port tujuan 3306, dari port ephmeral lokal, akan membuat entri tabel keadaan untuk kombinasi tertentu dari alamat IP dan nomor port, dan hanya mengembalikan lalu lintas dengan kombinasi yang sama dari alamat dan port akan diizinkan melalui, dan hanya selama durasi koneksi itu.

MadHatter
sumber