Mengonfigurasi Gateway Internet dengan NAT dan Port Forwarding pada CentOS 7

Pada artikel ini, kami akan mempertimbangkan proses pengorganisasian dan konfigurasi gateway Internet sederhana berdasarkan CentOS 7.x. Gateway ini akan memungkinkan pengguna dari jaringan lokal untuk mengakses Internet, serta akses ke server atau komputer di jaringan internal dari luar. Untuk mengatur perutean dan penerusan paket, kami akan menggunakan teknologi NAT berdasarkan firewall iptables. Kami juga mempertimbangkan cara memelihara dan menganalisis log koneksi di gateway Internet ketika pengguna eksternal mengakses jaringan lokal.

Konten:

  • Diagram jaringan lokal dengan gateway akses Internet, tipe NAT
  • Mengkonfigurasi Sumber NAT: Akses LAN
  • Konfigurasikan NAT Tujuan dan penerusan port: akses dari Internet ke jaringan lokal
  • Menganalisis Log Koneksi Jaringan NAT di Linux

Diagram jaringan lokal dengan gateway akses Internet, tipe NAT

NAT (Terjemahan Alamat Jaringan) - Terjemahan alamat IP, ini adalah mekanisme yang memungkinkan Anda untuk mengganti alamat sumber dan tujuan di header IP paket ketika mereka melewati router, mis. antar jaringan yang berbeda.

Kami akan mengkonfigurasi NAT antara jaringan internal dengan mengatasi 10.2.0.0/24 dan jaringan Internet eksternal, dari dua jenis:

  • sumber NAT - ini adalah pengganti alamat IP sumber, dalam kasus kami, untuk mengatur akses ke Internet melalui satu alamat IP publik dari beberapa klien.
  • NAT tujuan - substitusi alamat IP tujuan, dalam kasus kami, untuk menyediakan akses dari jaringan Internet eksternal melalui alamat IP publik ke server jaringan internal.

Kami mendefinisikan elemen jaringan (Gambar 1) di mana NAT akan diatur:

  • gw-server - gateway server yaitu server CentOS Linux kami, yang menyediakan akses di luar jaringan internal. Ini memiliki dua antarmuka, eth1 pertama (10.2.0.1) pada jaringan internal, eth0 kedua (84.201.168.122) dengan alamat IP publik dan akses Internet;
  • web-server01 - Server web dari jaringan internal, alamat IP 10.2.0.11;
  • my-server01 - server pribadi dari jaringan internal, alamat IP 10.2.0.12.

Catatan: untuk server jaringan internal web-server01 dan myserver01 rute default diatur ke antarmuka eth1 (10.2.0.1) dari server gw-server01.

Mengkonfigurasi Sumber NAT: Akses LAN

Dengan sumber NAT untuk server jaringan eksternal, permintaan dari klien kami dari jaringan internal akan terlihat seolah-olah server gateway berkomunikasi langsung dengan mereka - gw-server01.

Pada artikel terakhir, "Konfigurasi firewall Linux Dasar menggunakan iptables," kami membahas dasar-dasar penggunaan iptables. Kali ini, kami akan bekerja di iptables tidak hanya dengan tabel filter, tetapi juga dengan meja nat. Tidak seperti tabel untuk menyaring lalu lintas filter, Tabel nat berisi rantai berikut:

  • PENYUSUNAN - Dalam rantai ini, paket IP yang masuk diproses, sebelum dibagi menjadi yang ditujukan untuk server itu sendiri atau untuk transmisi ke yang lain, yaitu sebelum memutuskan pilihan rute untuk paket IP;
  • OUTPUT - Rantai dirancang untuk memproses paket IP yang dihasilkan secara lokal oleh aplikasi di server. Paket IP yang dihasilkan secara lokal tidak melalui rantai PREROUTING;
  • POSTROUTING - semua paket IP keluar diproses dalam rantai ini, setelah memutuskan rute untuk paket IP.

Tindakan yang dilakukan untuk paket IP dalam tabel ini juga berbeda:

  • MASQUERADE dan SNAT- mengganti alamat IP sumber untuk paket keluar. Perbedaan antara tindakan ini adalah bahwa SNAT memungkinkan untuk menetapkan alamat IP tertentu untuk sumber baru, dan dalam kasus MASQUERADE ini terjadi secara dinamis;
  • DNAT - mengganti alamat IP tujuan dengan paket yang masuk.
Itu penting: tindakan MASQUERADE dan SNAT ditetapkan hanya untuk rantai POSTROUTING, dan tindakan DNAT hanya untuk PREROUTING atau OUTPUT.

Gambar 2 menunjukkan langkah-langkah untuk memproses paket IP dari jaringan internal pada gateway gw-server01 dengan SNAT pada iptables. Alamat IP dan port tujuan tetap tidak berubah..

Gambar 2

  1. Paket IP tiba pada antarmuka internal eth1 dari server gw-server01. Karena IP tujuan bukan milik gw-server01, paket IP dilanjutkan ke pemrosesan oleh rantai FORWARD.
  2. Setelah melewati rantai FORWARD, untuk paket IP, antarmuka jaringan keluar dari mana ia harus dikirim ditentukan, ini ditandai dengan warna kuning
  3. Pada akhirnya, paket IP melewati rantai POSTROUTING, di mana alamat IP sumber diubah menjadi alamat IP dari antarmuka eksternal eth0 dari server gw-server01

Mari mengatur. Pertama, Anda perlu mengatur parameter kernel, yang memungkinkan Anda untuk mentransfer paket antar antarmuka server. Untuk melakukan ini dalam file /etc/sysctl.conf tambahkan variabel:

net.ipv4.ip_forward = 1

Untuk menerapkan perubahan, jalankan perintah

sysctl -p /etc/sysctl.conf

di sini sysctl adalah perintah yang memungkinkan Anda mengelola parameter kernel, kuncinya -hal berarti Anda perlu membaca parameter dari file.

Buat aturan di iptables yang memungkinkan paket untuk ditransfer antara antarmuka internal (eth1) dan eksternal (eth0):

iptables -Sebuah FORWARD -i eth1 -o eth0 -j MENERIMA

dan mari kita transfer paket antar antarmuka yang terkait dengan koneksi yang sudah ada.

iptables -SUARA KE DEPAN -m keadaan --state TERKAIT, DIDIRIKAN -j MENERIMA

Masuk akal untuk membuat dua aturan sebelumnya hanya jika kebijakan DROP ditetapkan secara default untuk rantai FORWARD:

iptables-P DRW MAJU

Aktifkan SNAT:

iptables -t nat -A POSTROUTING -s 10.2.0.0/24 -o eth1 -j SNAT --ke-sumber 84.201.168.122

  • -ke sumber harus alamat pada antarmuka dari mana ia direncanakan untuk mengeluarkan paket IP ke jaringan eksternal;
  • -s 10.2.0.0/24 ditentukan bahwa jaringan internal adalah 10.2.0.0/24, tetapi ini adalah parameter opsional, jika Anda tidak menentukannya, tidak akan ada batasan pada sumber interaksi.

Mari kita lihat konfigurasi yang dihasilkan untuk tabel filter dan rantai Maju (output dipangkas):

iptables -L -n -v

dan konfigurasi untuk tabel nat dan rantai POSTROUTING (output dipangkas):

iptables -t nat -L -n -v

Untuk memverifikasi bahwa server web kami di jaringan internal telah mendapatkan akses ke Internet, kami akan mencoba menghubungkan melalui telnet ke alamat 1.1.1.1 (Cloudflare DNS) port 80:

telnet 1.1.1.1 80

Output tim Terhubung 1.1.1.1, menunjukkan bahwa koneksi berhasil.

Konfigurasikan NAT Tujuan dan penerusan port: akses dari Internet ke jaringan lokal

Sekarang pertimbangkan situasi sebaliknya. Kami ingin pelanggan di luar dapat mengakses situs kami di jaringan internal. Dan juga kita harus pergi ke server pribadi Anda (atau workstation) dari Internet. Perbedaan antara kasus ini tidak hanya dalam arah interaksi, tetapi juga dalam kenyataan bahwa Anda perlu mengarahkan permintaan ke masing-masing port, 80 (TCP) dan 3389 (TCP), saat mengganti server tujuan dan, mungkin, port tujuan. Teknik ini disebut penerusan porta (port forwarding).

Penerusan port di Windows dapat diatur menggunakan perintah portproxy antarmuka netsh.

Pertama, aktifkan pengiriman paket dari antarmuka eksternal (eth0) ke antarmuka internal (eth1):

iptables -Sebuah FORWARD -i eth0 -o eth1 -j ACCEPT

Aturan ini memungkinkan paket IP untuk ditransfer antar antarmuka terlepas dari sumbernya. Tetapi Anda dapat menggunakan aturan terpisah untuk melarang koneksi melalui NAT untuk alamat atau subnet IP individu:

iptables -SAYA MAJU 1 -o eth1 -s 167.71.67.136 -j DROP

Perhatian: di sini perintahnya menggunakan -I alih-alih -A. Switch -I memungkinkan Anda untuk menambahkan aturan dengan nomor tertentu dalam urutan aturan rantai dengan menentukan indeks. Misalnya, dalam perintah di atas, indeks adalah satu di rantai FORWARD, yaitu aturan akan ditambahkan ke awal rantai. Jika aturan ini ditambahkan ke akhir, itu tidak akan berfungsi, karena paket IP akan diproses oleh aturan sebelumnya, memungkinkan sumber interaksi, dan pada bagian ini melalui rantai FORWARD akan diselesaikan.

Sekarang arahkan semua koneksi ke port 80 dari antarmuka jaringan eksternal (eth0) ke alamat IP dari server web pada jaringan internal web-server01:

iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --untuk menuju tujuan 192.168.0.11

-ke-tujuan - harus menjadi alamat IP yang tujuan alamat IP harus diganti.

Untuk memeriksa, coba sambungkan dari Internet melalui telnet ke alamat IP publik server gw-server pada port 80:

telnet 84.201.168.122 80

Hasilnya akan menjadi respons dari server web web-server01 dari jaringan internal kami:

HTTP / 1.1 400 Bad Request Server: nginx / 1.14.2 Tanggal: Rab, 31 Jul 2019 10:21:21 GMT Tipe Konten: teks / html Konten-Panjang: 173 Koneksi: tutup 

Demikian pula, Anda dapat mengkonfigurasi akses dari Internet ke workstation Anda melalui RDP. Karena sejumlah orang membutuhkan akses RDP, akan lebih aman untuk menggunakan port non-standar, misalnya 13389, ketika menghubungkan, dan mengarahkannya ke port 3389 pada server jaringan internal (atau mengubah nomor port RDP pada komputer Windows). Port tujuan yang diubah ditunjukkan oleh titik dua setelah alamat IP:

iptables -t nat -A PREROUTING -p tcp --port 13389 -i eth0 -j DNAT --untuk menuju tujuan 192.168.0.12//389

Untuk memeriksa, coba sambungkan dari Internet melalui telnet (atau cmdlet PowerShell Test-NetConnection) ke alamat IP publik server gw-server pada port 13389:

telnet 84.201.168.122 13389

Sebagai tanggapan, kami mendapatkan layar kosong dan kursor, ini menunjukkan bahwa koneksi berfungsi.

Menganalisis Log Koneksi Jaringan NAT di Linux

Salah satu momen untuk meningkatkan tingkat keamanan setelah mengonfigurasi port forwarding ke server pribadi kami dari jaringan eksternal adalah perakitan dan analisis log koneksi eksternal. Memang, selain kita, seorang penyerang dapat mencoba menggunakan akses ini.

Pertama, aktifkan entri dalam file log /var/ log / pesan semua upaya untuk terhubung ke port RDP non-standar yang kami gunakan:

iptables -I INPUT 1 -p tcp --port 13389 -m state --state NEW -j LOG --log-awalan "NEW RDP SESSION"

Sambungkan ke server pribadi kami sehingga log muncul di log. Sekarang kami menyaring semua entri dalam file log yang kami butuhkan:

cat / var / log / messages | grep "Sesi RDP BARU"

kernel: SESI RDP BARU DALAM = KELUAR = eth1 SRC = 167.71.67.79 DST = 84.201.168.122  LEN = 60 KL = 0x00 PREC = 0x00 TTL = 64 ID = 16270 DF PROTO = TCP SPT = 60836 DPT = 13389 WINDOW = 29200 RES = 0x00 SYN URGP = 0

Membaca log seperti itu sangat tidak nyaman, terutama setiap hari. Oleh karena itu, langkah selanjutnya adalah mengotomatiskan analisis log untuk secara teratur menerima laporan berdasarkan filter kami. Untuk melakukan ini, gunakan utilitas Logwatch, menginstalnya melalui manajer paket yum standar:

yum pasang logwatch

Pertama, coba buat laporan secara manual:

/ usr / sbin / logwatch - detail iptables layanan rendah --range hari ini

disini,

  • -layanan - menetapkan layanan spesifik, pesan yang darinya Anda perlu menganalisis, dalam kasus kami, hanya dari iptables;
  • -jangkauan - menunjukkan periode pengambilan sampel data, hari ini - semua acara untuk hari ini;
  • -detail - tingkat detail laporan (tinggi, med, rendah).

Secara default, logwatch akan menampilkan laporan di layar, kami mendapatkan sesuatu seperti ini:

--------------------- iptables firewall Mulai ------------------------ Terdaftar oleh host sumber: Logged 2 paket pada antarmuka eth1 Dari 167.71.45.65 - 2 paket ke tcp (13389) ---------------------- Akhir iptables firewall ------------------------- 

Laporan berfungsi, tetap menjalankannya sesuai jadwal, sekali sehari dan mengirimkannya ke email Anda, untuk ini kami memperbarui perintah dan menuliskannya ke file /etc/cron.daily/00logwatch:

/ usr / sbin / logwatch --output mail --mailto [email protected] --detail rendah --service iptables --range kemarin

Di sini opsi ditambahkan:

-keluaran - menunjukkan metode keluaran laporan, surat - kirim ke surat;

-mailto - alamat email penerima laporan.

Saat meneruskan RDP di dalam jaringan lokal, Anda juga harus dapat menganalisis log koneksi RDP langsung di Windows.