下面给你一份 CentOS 下 iptables 配置实用指南,涵盖 CentOS 6/7/8(未用 firewalld 时) 的常见用法。
默认使用 iptables。
默认是 firewalld,如要用 iptables:
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables
iptables -L -n -v
清空所有规则(谨慎):
iptables -F
iptables -X
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 -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
service iptables save
service iptables save
# 或
/usr/libexec/iptables/iptables.init save
规则保存在:
/etc/sysconfig/iptables
| 服务 | 端口 |
|---|---|
| SSH | 22 |
| MySQL | 3306 |
| Redis | 6379 |
| DNS | 53 |
示例(仅允许指定 IP 访问 MySQL):
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
开启转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
SNAT 示例:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
systemctl restart iptables
如果你愿意,可以告诉我:
我可以直接给你一份 可复制的完整 iptables 脚本。