Saya perlu membuat beberapa modifikasi kecil untuk lalu lintas masuk dari host tcp yang dikenal: port sebelum proses penanganan koneksi mendapatkan aliran.
Misalnya, biarkan 192.168.1.88 menjadi host jarak jauh yang menjalankan server web.
Saya membutuhkan itu, ketika suatu proses pada host lokal saya menerima data dari 192.168.1.88:80 (misalnya browser), data pertama kali diganti diganti text-A
dengan text-B
, seperti ini:
- 127.0.0.1: ... terhubung ke 192.168.1.88:80
127.0.0.1: ... kirim ke 192.168.1.88:80:
GET /
192.168.1.88:80 mengirim ke 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Data itu agak dicegat oleh sistem dan diteruskan ke program yang outputnya adalah:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
sistem memberikan data yang begitu berubah ke proses penanganan 127.0.0.1: ..., seperti jika itu berasal dari 192.168.1.88:80.
Dengan asumsi saya memiliki cara berbasis aliran untuk membuat perubahan ini (menggunakan sed
misalnya), apa cara termudah untuk pra-proses aliran tcp yang masuk?
Saya kira ini akan melibatkan iptables
, tapi saya tidak terlalu pandai.
Perhatikan bahwa aplikasi harus merasa berurusan dengan host asli, jadi menyiapkan proxy sepertinya bukan solusi.
sumber
Jawaban:
Gunakan proksi jaring dan iptables.
Lalu lari:
NetSED adalah utilitas kecil dan praktis yang dirancang untuk mengubah, secara real time, isi paket yang diteruskan melalui jaringan Anda. Ini sangat berguna untuk perubahan paket jaringan, penempaan, atau manipulasi. NetSED mendukung:
audit protokol kotak hitam - setiap kali ada dua atau lebih kotak eksklusif yang berkomunikasi menggunakan beberapa protokol tidak berdokumen. Dengan memberlakukan perubahan pada transmisi yang sedang berlangsung, Anda akan dapat menguji apakah aplikasi yang diperiksa dapat diklaim aman.
percobaan menghasilkan fuzz, tes integritas - setiap kali Anda melakukan tes stabilitas aplikasi untuk melihat bagaimana itu peduli untuk integritas data;
kasus penggunaan umum lainnya: transfer menipu, pemfilteran konten, konversi protokol - apa pun yang paling sesuai dengan tugas Anda.
sumber
netsed
, itu cocok untuk tujuan saya. Satu-satunya hal yang tidak saya dapatkan adalah bagaimana mengatur "proxy transparan lokal" (lihat pertanyaan). Mungkin saya harus mengatur antarmuka jaringan (virtual) lain untuk mendapatkan itu. Ngomong-ngomong, untuk sekarang ini adalah jawaban yang paling memuaskan.OUTPUT
, bukanPREROUTING
. juga,-D
pilihannya harus-A
untuk saya. juga, untuk-j
opsi, saya harus menggunakanDNAT --to-destination (ip)
atauREDIRECT --to-port
. Akhirnya, saya TIDAK bisa memperbaiki kesalahan segmentasi netsed. lihat juga: ubuntuforums.org/showthread.php?t=2337389Anda dapat melakukan ini dengan menggunakan iptables untuk koneksi proxy secara transparan melalui proxy squid , dan kemudian membuat squid menulis ulang konten http untuk Anda.
sumber
iptables
+ penggunaan libnetfilter_qu adalah opsi lain yang akan melakukan apa yang Anda inginkan:"... [reinject] paket yang diubah ke subsistem kernel nfnetlink_queue."
Kemungkinan akan memberi Anda ekstensibilitas yang paling besar karena terserah Anda untuk membuat kode perangkat lunak.
Ada pembungkus python juga tersedia.
sumber