Penerangan terperinci firewall-iptables Linux

PHPz
Lepaskan: 2024-02-20 11:57:02
ke hadapan
893 orang telah melayarinya

Pengenalan projek

iptables ialah perisian tembok api penapisan paket percuma di bawah sistem Linux, yang boleh merealisasikan penapisan paket, pengalihan semula paket dan terjemahan alamat rangkaian dan fungsi lain. Ia adalah penyelesaian yang cekap dan fleksibel yang menggantikan tembok api komersial yang mahal. iptables mempunyai pilihan konfigurasi dan tetapan peraturan yang berkuasa, membolehkan pengguna mengawal trafik rangkaian dengan teliti mengikut keperluan mereka sendiri dan meningkatkan keselamatan dan prestasi rangkaian.

Peraturan iptables sebenarnya merujuk kepada syarat yang dipratakrifkan oleh pentadbir rangkaian Peraturan biasanya ditakrifkan sebagai "Jika pengepala paket data memenuhi syarat sedemikian, proses paket data dengan cara ini." Peraturan disimpan dalam jadual penapisan paket dalam ruang kernel Peraturan ini menentukan alamat sumber, alamat destinasi, protokol penghantaran (seperti TCP, UDP, ICMP) dan jenis perkhidmatan (seperti HTTP, FTP dan SMTP). Apabila paket data sepadan dengan peraturan, iptables memproses paket data ini mengikut kaedah yang ditakrifkan oleh peraturan, seperti terima, tolak, lepas, dsb. Tugas utama mengkonfigurasi tembok api adalah untuk menambah, mengubah suai dan memadam peraturan ini.

iptables mempunyai 4 jadual terbina dalam, iaitu jadual penapis, jadual nat, jadual mangle dan jadual mentah, yang digunakan untuk melaksanakan penapisan paket, terjemahan alamat rangkaian, pembinaan semula paket (pengubahsuaian) dan pemprosesan pengesanan data masing-masing. Setiap rantaian sebenarnya hanyalah senarai semak antara banyak peraturan Setiap rantaian boleh mempunyai satu atau beberapa peraturan. Apabila paket tiba di rantai, iptables akan menyemak bermula dari peraturan pertama dalam rantai untuk melihat sama ada paket itu memenuhi syarat yang ditentukan oleh peraturan. Jika berpuas hati, sistem akan memproses paket mengikut kaedah yang ditakrifkan oleh peraturan jika tidak iptables akan terus menyemak peraturan seterusnya. Jika paket tidak mematuhi sebarang peraturan dalam rantaian, iptables akan memproses paket mengikut dasar lalai yang dipratakrifkan bagi rantaian.

Secara keseluruhan, iptables ialah alat yang berkuasa untuk mengkonfigurasi fungsi terjemahan firewall dan alamat rangkaian pada sistem Linux.

Penerangan terperinci firewall-iptables Linux

Ganti tembok api sistem: Alat pengurusan tembok api lalai dalam sistem Centos7 bukan iptables Apabila anda perlu menggunakannya, anda perlu memasang dan menggantikannya sendiri.

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# yum install -y iptables iptables-services

[root@localhost ~]# systemctl restart iptables
[root@localhost ~]# systemctl enable iptables
Salin selepas log masuk

Soal peraturan firewall yang lengkap: Gunakan parameter -L -n –line-numbers untuk melihat peraturan konfigurasi lalai firewall.

[root@localhost ~]# iptables -L -n --line-numbers
[root@localhost ~]# iptables -F # 临时清空规则
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED
2ACCEPT icmp --0.0.0.0/00.0.0.0/0 
3ACCEPT all--0.0.0.0/00.0.0.0/0 
4ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:22
5REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 
1REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Salin selepas log masuk

Tetapkan tembok api untuk menafikan secara lalai: Tetapkan peraturan penafian lalai dan tetapkan rantaian INPUT untuk menafikan secara lalai, yang bermaksud menolak semua permintaan sambungan.

[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP) #这里可以看出INPUT链已变成DROP
numtarget prot opt source destination 

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Salin selepas log masuk

Dayakan gema ICMP firewall: Apabila peraturan lalai menafikannya, tetapkannya untuk mendayakan ujian ICMP dan benarkan hos melakukan ping.

[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT icmp --0.0.0.0/00.0.0.0/0 

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Salin selepas log masuk

Benarkan pelanggan menyambung melalui SSH dari jauh: Jika berlaku penafian secara lalai, tetapkan port 22 untuk dibuka untuk membenarkan sambungan SSH jauh ke mesin.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT

[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp spt:22
Salin selepas log masuk

Padamkan peraturan yang ditentukan: Dalam kes penolakan secara lalai, padamkan rantai INPUT, data kedua dan padamkan peraturan ICMP.

[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
2ACCEPT icmp --0.0.0.0/00.0.0.0/0 

[root@localhost ~]# iptables -D INPUT 2
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
Salin selepas log masuk

Nyatakan akses segmen rangkaian yang dibenarkan: Dalam kes penafian secara lalai, sediakan untuk hanya membenarkan hos dalam segmen rangkaian 192.168.1.0/24 mengakses port 22 mesin.

[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp spt:22
Salin selepas log masuk

Tolak akses kepada port yang ditentukan: Dalam rantai peraturan INPUT, tambahkan port 8888 yang menafikan akses semua orang kepada mesin.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
2ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
Salin selepas log masuk

Tolak akses kepada port segmen rangkaian hos yang ditentukan: Dalam rantai peraturan INPUT, tambah hos 192.168.1.20 untuk menafikan akses kepada port tempatan 80.

[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable
2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
Salin selepas log masuk

Tolak akses kepada julat port yang ditentukan: Dalam rantaian peraturan INPUT, tambah untuk menafikan akses semua hos ke port tempatan

[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable
2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
4REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpts:1000:2000 reject-with icmp-port-unreachable
5REJECT udp--0.0.0.0/00.0.0.0/0udp dpts:1000:2000 reject-with icmp-port-unreachable
Salin selepas log masuk

SNAT - Terjemahan alamat sumber : Paket data yang dihantar dari kawasan setempat akan secara automatik menyamar sebagai IP rangkaian awam selepas SNAT, dan IP rangkaian awam akan digunakan untuk mengakses perkhidmatan yang ditetapkan

#例:将本地 192.168.1.1 的请求自动伪装成外网地址 59.110.167.234
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 59.110.167.234

-o#指定外网接口,此处为ens32
-s#指定内网口地址,此处为192.168.1.1
--to-source #外网口的地址
Salin selepas log masuk

Penterjemahan Alamat Destinasi DNA : Paket data yang diterima daripada rangkaian awam akan dimajukan secara automatik ke hos intranet yang ditetapkan selepas DNAT

#例:将请求 59.110.167.234 且端口为 80 的数据包,自动映射到内网 192.168.1.10
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 59.110.167.234 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10

--to-destination #内网口地址,此处为192.168.1.1
-i #绑定外网接口,此处为ens32
-d #外网地址,此处为8.8.8.8
-dport #内网端口,此处为80
Salin selepas log masuk

Hadkan bilangan sambungan permintaan fizikal: iptables boleh menggunakan modul connlimit untuk mengehadkan bilangan sambungan IP yang sama untuk port tertentu Ia membenarkan mengehadkan bilangan sambungan serentak untuk setiap IP pelanggan, iaitu bilangan serentak sambungan ke pelayan untuk setiap IP Anda juga boleh Hadkan penggunaan rangkaian pengguna intranet, dan untuk pelayan, anda boleh mengehadkan bilangan sambungan yang dimulakan oleh setiap IP.

# 限制同一IP同时最多100个http连接
[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT

# 只允许每组C类IP同时100个http连接
[root@localhost ~]# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT

# 只允许每个IP同时5个80端口转发,超过的丢弃
[root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

# 限制某IP最多同时100个http连接
[root@localhost ~]# iptables -A INPUT -s 192.168.1.100 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

# 限制每IP在一定的时间(比如60秒)内允许新建立最多100个http连接数
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
Salin selepas log masuk

Konfigurasikan peraturan tembok api asas: Kami boleh melaksanakan kod berikut dalam sistem yang baru dipasang untuk mengkonfigurasi peraturan tembok api asas.

# 删除已有规则
iptables --delete-chain
iptables --flush

# 默认禁止进,允许出,允许回环网卡
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的或相关连接的通行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 限制80端口443端口的单个IP的最大连接数为10
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP

# 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT

# 允许SSH端口的连接,放行SSH端口
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT

# 允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

# 放行允许DNS解析端口
iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT

# 保存规则
iptables-save
Salin selepas log masuk

Peraturan konfigurasi yang biasa digunakan untuk pengeluaran: Berikut ialah konfigurasi beberapa peraturan yang biasa digunakan dalam persekitaran pengeluaran Dalam keadaan biasa, konfigurasi peraturan ini sudah memadai.

 filter -P INPUT DROP #设置默认规则,拒绝所有
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80口
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT#放行22口

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80端口
iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT#插入在顶端一条放行443端口的规则
iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一条443放行规则
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP#丢弃80端口的请求
iptables -I INPUT 2 -p icmp -j DROP#丢弃ICMP请求
iptables -t filter -D INPUT 3#删除第三条规则

iptables -A FORWARD -s 192.168.1.10 -j REJECT#拒绝IP的转发请求
iptables -I INPUT -s 10.20.30.0/24 -j DROP #丢弃IP网段的入站请求
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP#丢弃从eth1网卡流入,且地址匹配的数据包
iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP#丢弃从eth0网卡流出,且地址匹配的数据包
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #放行20-21端口的数据包

iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
Salin selepas log masuk

Atas ialah kandungan terperinci Penerangan terperinci firewall-iptables Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:mryunwei.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan