Saya telah menyiapkan proxy TCP lokal dan transparan di localhost
. Saya ingin mengarahkan SEMUA lalu lintas TCP ke proxy ini, sehingga dapat menanganinya dan tidak ada yang “bocor”, yang menghindari proxy. Saya perlu menggunakan IPTables untuk mengarahkan lalu lintas. Saya berpikir untuk menggunakan TPROXY, tetapi itu membutuhkan dukungan aplikasi dan hanya target REDIRECT yang didukung saat ini.
Saya telah menggunakan aturan IPTables berikut:
iptables -t nat -A OUTPUT -o lo -j RETURN
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A OUTPUT -m owner --uid-owner proxy-owner -j RETURN
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $PROXY_PORT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner proxy-owner -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j LOG
iptables -P OUTPUT DROP
Mereka sepertinya untuk bekerja dengan baik, namun saya bingung mengapa.
Berikut adalah dua pertanyaan yang saya masih belum tahu jawabannya:
1) Mengenai aturan terakhir di tabel NAT, mengapa saya hanya ingin mengarahkan ulang paket SYN ke port proxy lokal (--syn
)?
Saya ingin mengarahkan SEMUA paket TCP. Dalam konfigurasi saat ini sepertinya hanya paket SYN
yang diarahkan ke proxy lokal, dan semua paket lain diizinkan untuk langsung mengalir ke tujuan, yang (secara teori) menyebabkan kekacauan total (atau semua kecuali SYN sedang diblokir oleh tabel filter).
Namun, jika saya menghapus --syn
opsi dan mengarahkan SEMUA paket ke proxy lokal, proxy tidak berfungsi sama sekali. Mengapa?
2) Mengenai aturan ke-4 dalam tabel filter, mengapa saya perlu secara eksplisit mengizinkan koneksi keluar yang sudah ada? Proxy adalah satu-satunya aplikasi yang diizinkan untuk mengirim paket ke tujuan non-localhost, dan itu sudah diizinkan untuk melakukannya (aturan 3), jadi untuk apa saya memerlukan aturan ke-4? Sepertinya ini memungkinkan koneksi non-proxy untuk menghindari proxy.
Terima kasih!
Jawaban yang Diterima:
Kedua bagian pertanyaan Anda terhubung.
Bagian (1) menangkap paket SYN dan mengarahkannya seperti yang Anda sarankan. Dari titik ini conntrack (2) mengambil alih dan mengenali bahwa setiap paket berikutnya dalam aliran itu adalah bagian dari koneksi yang sama dan mengalihkannya dengan cara yang sama seperti paket SYN asli.
Terkait:Ubah lingkungan dari proses yang berjalan?Ikhtisar Pelacakan Sambungan dapat ditemukan di http://en.wikipedia.org/wiki/Netfilter#Connection_Tracking