firewall

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

防火墙配置

防火墙配置

概述

概述

iptables、firewalld、nftables、ufw 防火墙配置技能。
iptables、firewalld、nftables、ufw 防火墙配置技能。

iptables

iptables

基础命令

基础命令

bash
undefined
bash
undefined

查看规则

查看规则

iptables -L -n -v iptables -L -n --line-numbers iptables -t nat -L -n -v
iptables -L -n -v iptables -L -n --line-numbers iptables -t nat -L -n -v

清空规则

清空规则

iptables -F iptables -X iptables -t nat -F
iptables -F iptables -X iptables -t nat -F

默认策略

默认策略

iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
undefined
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
undefined

常用规则

常用规则

bash
undefined
bash
undefined

允许回环

允许回环

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

允许已建立连接

允许已建立连接

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许 SSH

允许 SSH

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许 HTTP/HTTPS

允许 HTTP/HTTPS

iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT

允许特定 IP

允许特定 IP

iptables -A INPUT -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

允许网段

允许网段

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT

拒绝其他

拒绝其他

iptables -A INPUT -j DROP
undefined
iptables -A INPUT -j DROP
undefined

删除规则

删除规则

bash
undefined
bash
undefined

按行号删除

按行号删除

iptables -D INPUT 3
iptables -D INPUT 3

按规则删除

按规则删除

iptables -D INPUT -p tcp --dport 80 -j ACCEPT
undefined
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
undefined

NAT 配置

NAT 配置

bash
undefined
bash
undefined

开启转发

开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward

SNAT

SNAT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

DNAT 端口转发

DNAT 端口转发

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80 iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
undefined
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80 iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
undefined

保存规则

保存规则

bash
undefined
bash
undefined

Debian/Ubuntu

Debian/Ubuntu

iptables-save > /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v4 iptables-restore < /etc/iptables/rules.v4

CentOS/RHEL

CentOS/RHEL

service iptables save
undefined
service iptables save
undefined

firewalld

firewalld

基础命令

基础命令

bash
undefined
bash
undefined

状态

状态

systemctl status firewalld firewall-cmd --state
systemctl status firewalld firewall-cmd --state

重载

重载

firewall-cmd --reload
firewall-cmd --reload

查看区域

查看区域

firewall-cmd --get-zones firewall-cmd --get-default-zone firewall-cmd --get-active-zones
undefined
firewall-cmd --get-zones firewall-cmd --get-default-zone firewall-cmd --get-active-zones
undefined

服务管理

服务管理

bash
undefined
bash
undefined

查看服务

查看服务

firewall-cmd --list-services firewall-cmd --get-services
firewall-cmd --list-services firewall-cmd --get-services

添加服务

添加服务

firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent
firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent

删除服务

删除服务

firewall-cmd --remove-service=http --permanent
undefined
firewall-cmd --remove-service=http --permanent
undefined

端口管理

端口管理

bash
undefined
bash
undefined

查看端口

查看端口

firewall-cmd --list-ports
firewall-cmd --list-ports

添加端口

添加端口

firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --add-port=5000-5100/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --add-port=5000-5100/tcp --permanent

删除端口

删除端口

firewall-cmd --remove-port=8080/tcp --permanent
undefined
firewall-cmd --remove-port=8080/tcp --permanent
undefined

富规则

富规则

bash
undefined
bash
undefined

允许特定 IP

允许特定 IP

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent

允许网段访问端口

允许网段访问端口

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent

拒绝 IP

拒绝 IP

firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject' --permanent
undefined
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject' --permanent
undefined

ufw (Ubuntu)

ufw (Ubuntu)

基础命令

基础命令

bash
undefined
bash
undefined

启用/禁用

启用/禁用

ufw enable ufw disable
ufw enable ufw disable

状态

状态

ufw status ufw status verbose ufw status numbered
undefined
ufw status ufw status verbose ufw status numbered
undefined

规则管理

规则管理

bash
undefined
bash
undefined

允许端口

允许端口

ufw allow 22 ufw allow 80/tcp ufw allow 443/tcp
ufw allow 22 ufw allow 80/tcp ufw allow 443/tcp

允许服务

允许服务

ufw allow ssh ufw allow http
ufw allow ssh ufw allow http

允许 IP

允许 IP

ufw allow from 192.168.1.100
ufw allow from 192.168.1.100

允许网段到端口

允许网段到端口

ufw allow from 192.168.1.0/24 to any port 3306
ufw allow from 192.168.1.0/24 to any port 3306

拒绝

拒绝

ufw deny 23
ufw deny 23

删除规则

删除规则

ufw delete allow 80 ufw delete 3
undefined
ufw delete allow 80 ufw delete 3
undefined

默认策略

默认策略

bash
ufw default deny incoming
ufw default allow outgoing
bash
ufw default deny incoming
ufw default allow outgoing

常见场景

常见场景

场景 1:Web 服务器

场景 1:Web 服务器

bash
undefined
bash
undefined

iptables

iptables

iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP

firewalld

firewalld

firewall-cmd --add-service=ssh --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload
undefined
firewall-cmd --add-service=ssh --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload
undefined

场景 2:数据库服务器

场景 2:数据库服务器

bash
undefined
bash
undefined

只允许应用服务器访问

只允许应用服务器访问

iptables -A INPUT -s 192.168.1.10 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -s 192.168.1.11 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP
undefined
iptables -A INPUT -s 192.168.1.10 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -s 192.168.1.11 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP
undefined

场景 3:限速防护

场景 3:限速防护

bash
undefined
bash
undefined

限制 SSH 连接频率

限制 SSH 连接频率

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
undefined
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
undefined

故障排查

故障排查

问题排查方法
连接被拒检查规则顺序、默认策略
规则不生效检查 --permanent、reload
NAT 不工作检查 ip_forward、FORWARD 链
bash
undefined
问题排查方法
连接被拒检查规则顺序、默认策略
规则不生效检查 --permanent、reload
NAT 不工作检查 ip_forward、FORWARD 链
bash
undefined

查看计数

查看计数

iptables -L -n -v
iptables -L -n -v

日志

日志

iptables -A INPUT -j LOG --log-prefix "IPT_DROP: " tail -f /var/log/messages | grep IPT_DROP
iptables -A INPUT -j LOG --log-prefix "IPT_DROP: " tail -f /var/log/messages | grep IPT_DROP

连接跟踪

连接跟踪

conntrack -L
undefined
conntrack -L
undefined