Tugas: Tutup semua koneksi yang masuk kecuali untuk alamat ip tertentu.
Ada lingkungan pengujian yang terdiri dari linux dan tiga jendela dengan alamat ip statis. Di linux, buruh pelabuhan diinstal dengan
zabbix , redmine gambar. Dan pada dua mesin windows agen dari zabbix diinstal dan dikonfigurasi, pada ketiga Anda perlu mengatur kemampuan untuk melihat zabbix. Penting untuk membatasi pengguna lain dari server zabbix, tetapi tidak membatasi dari redmine.
Semua perintah dieksekusi sebagai root.
Dokumentasi resmi mengatakan aturan iptables DOCKER-USER. Hanya perlu mengubah aturan ini. Pertama, kita melihat aturan apa, kita fokus hanya pada beberapa aturan.
Dapat dilihat bahwa aturan dengan target DOCKER-USER adalah yang pertama dalam aturan FORWARD. Karena itu, Anda hanya perlu mengubahnya.
iptables -L FORWARD -n -v Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 421K 169M DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0 419K 167M DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
Dari tabel aturan DOCKER, Anda dapat melihat port mana yang terbuka dan alamat ip internal kontainer.
iptables -L DOCKER -n -v Chain DOCKER (4 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- !docker_redmine docker_redmine 0.0.0.0/0 172.16.237.2 tcp dpt:3000 0 0 ACCEPT udp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.2 udp dpt:162 0 0 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.3 tcp dpt:10051 0 0 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.4 tcp dpt:443 5 248 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.4 tcp dpt:80
Tidak ada aturan khusus dalam aturan DOCKER-USER, seluruh koneksi melewati dirinya sendiri.
iptables -L DOCKER-USER -n -v Chain DOCKER-USER (1 references) pkts bytes target prot opt in out source destination 4180 1634K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Pertama-tama, kita akan berurusan dengan jaringan zabbix, yaitu, kita akan membuat nama jaringan yang konstan. Sehingga saat Anda membuat ulang docker-compose, nama jaringan tidak berubah. Dari kondisi jaringan saat ini, zabbix memiliki jaringan yang disebut br-c56432fe07cc, yang tidak terlalu baik. Dalam file * .yaml, tambahkan satu baris yang bertanggung jawab untuk nama jaringan zbx_net_frontend: "com.docker.network.bridge.name:" docker_zabbix ".
Bagian dari konfigurasi:
networks: zbx_net_frontend: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" com.docker.network.bridge.name: "docker_zabbix"
Setelah kami membuat ulang jaringan. Harus diganti dengan * .yaml Anda.
docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml down docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml up -d
Kami melihat aturan DOCKER.
iptables -L DOCKER -n -v Chain DOCKER (4 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- !docker_redmine docker_redmine 0.0.0.0/0 172.16.237.2 tcp dpt:3000 0 0 ACCEPT udp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.2 udp dpt:162 0 0 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.3 tcp dpt:10051 0 0 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.4 tcp dpt:443 5 252 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.4 tcp dpt:80
Tetap menambahkan aturan ke tabel DOCKER-USER. Pertama-tama, kami memperkenalkan aturan DROP untuk semua koneksi ke jaringan docker_zabbix dari antarmuka eksternal (saya punya
eth0 ).
iptables -I DOCKER-USER -i eth0 -o docker_zabbix -j DROP
Sekarang semua koneksi ditolak ke jaringan docker_zabbix. Mari kita aktifkan koneksi untuk satu alamat ip, lebih tepatnya, paket dapat melanjutkan lebih jauh ke depan.
iptables -I DOCKER-USER -i eth0 -s 192.168.43.55 -j RETURN
Jaringan docker_zabbix tidak ditentukan secara eksplisit di sini. Kami memeriksa ketersediaan zabbix dari host 192.168.43.55 menggunakan powershell.
tnc 192.168.43.136 -port 8081 ComputerName : 192.168.43.136 RemoteAddress : 192.168.43.136 RemotePort : 8081 InterfaceAlias : vEthernet (Swich_in) SourceAddress : 192.168.43.55 TcpTestSucceeded : True
Port 8081 terbuka untuk zabbix docker. Untuk memastikan bahwa zabbix adalah milik port 8081.
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c047f18a4445 zabbix/zabbix-web-nginx-mysql:ubuntu-4.2-latest "docker-entrypoint.sh" About an hour ago Up About an hour (healthy) 0.0.0.0:8081->80/tcp, 127.0.0.1:8443->443/tcp zabbix_zabbix-web-nginx-mysql_1
Tetapi harus dicatat bahwa aturan harus menentukan port 80, bukan 8081. Jika Anda menentukan port 8081, maka akses ke zabbix tidak akan dibuka. Untuk tuan rumah kedua, perintahnya.
iptables -I DOCKER-USER -i eth0 -p tcp --dport 80 -s 192.168.43.10 -j RETURN
Untuk host ketiga, buka hanya port 10051, agen aktif digunakan pada host ini.
iptables -I DOCKER-USER -i eth0 -p tcp --dport 10051 -s 192.168.43.13 -j RETURN
Masalah lain, kita tidak bisa keluar dari kontainer ke dunia luar. Skrip pemberitahuan tidak berfungsi dan tidak dapat memeriksa ketersediaan situs. Ada satu perintah lagi untuk menyelesaikan koneksi yang sudah ada.
iptables -I DOCKER-USER -i eth0 -o docker_zabbix -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Jangan lupa bahwa setelah me-reboot server, aturan yang dibuat dihapus.