博主博客
CentOS 默认使用的是 firewall 作为防火墙,这里改为iptables防火墙。
一、关闭删除 firewall
# 停止 firewall
systemctl stop firewalld.service
# 取消 firewall开机启动
systemctl disable firewalld.service
二、安装 iptables
# 一键安装 iptables
yum install iptables-services -y
# 设置防火墙开机启动
systemctl enable iptables.service
三、配置
# 编辑防火墙配置文件
vim /etc/sysconfig/iptables
下面为默认配置
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
如果想增加规则, 可增加
# 开启 tcp 的 80 端口
-A INPUT -p tcp --dport 80 -j ACCEPT
# 开启 tcp 的 3306 端口
-A INPUT -p tcp --dport 3306 -j ACCEPT
最后 :wq
保存退出, 使用 systemctl restart iptables.service
重启 iptables 使配置生效。
验证防火墙规则是否生效命令:iptables -L
四、注意事项(笔者在上面踩过的坑)
4.1 只允许 IP 1.2.3.4 访问 80 端口, 其他 IP 禁止
# 注意顺序, 先禁止所有, 后对 IP 开放, 网段也一样
-A INPUT -p TCP –dport 80 -j DROP
-A INPUT -s 1.2.3.4 -p TCP –dport 80 -j ACCEPT
4.2 禁止 IP 1.2.3.4 访问, 其他 IP 允许
# 注意顺序, 这里是禁止 1.2.3.4 访问所有端口, 其他 IP 可以访问 80 端口, 网段也一样
-A INPUT -s 1.2.3.4 -j DROP
-A INPUT -p tcp --dport 80 -j ACCEPT
五、命令行操作(当作查表看就行了)
# 添加 Insert
iptables -I ...
# 删除 Delete
iptables -D ...
# 追加 Append
iptables -A ...
5.1 开启端口
# 开启 80 端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# 只针对 IP 1.2.3.4 开启 80 端口
iptables -I INPUT -s 1.2.3.4 -p tcp --dport 80 -j ACCEPT
# 只针对 网段 1.2.3.0/24 开启 80 端口
iptables -I INPUT -s 1.2.3.0/24 -p tcp --dport 80 -j ACCEPT
5.2 禁止 IP 访问
# 禁止 1.2.3.4 IP 访问
iptables -I INPUT -s 1.2.3.4 -j DROP
# 禁止 1.2.3.0/24 网段访问
iptables -I INPUT -s 1.2.3.0/24 -j DROP
5.3 解封 IP 访问
# 解封 1.2.3.4 IP 访问
iptables -D INPUT -s 1.2.3.4 -j DROP
# 解封 1.2.3.0/24 网段访问
iptables -D INPUT -s 1.2.3.0/24 -j DROP
5.4 禁止服务器访问IP
# 禁止服务器访问 1.2.3.4 IP
iptables -I OUTPUT -d 1.2.3.4 -j DROP
# 禁止服务器访问 1.2.3.0/24 网段
iptables -I OUTPUT -d 1.2.3.0/24 -j DROP
5.5 清除所有规则
# 清空所有的规则
iptables -F
5.6 查看现在的规则
[root@nukixPC ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 195.54.161.0/24 0.0.0.0/0
20855 37M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 36 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
19 1116 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
9 540 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
82 11736 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 22160 packets, 42M bytes)
pkts bytes target prot opt in out source destination
单独输出可以使用
iptables -vnL INPUT
iptables -vnL FORWARD
iptables -vnL OUTPUT
5.7 保存规则
iptables save
5.8 防止攻击处理
# 处理 IP 碎片数量, 防止攻击, 允许每秒 100 个
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
# 设置 ICMP 包过滤, 允许每秒 1 个包, 限制触发条件是 10 个包
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
# 限制 syn 并发数为每秒 1 次
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 限制 80 端口单个 IP 在 60 秒新建立的连接数为 10
iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT
5.9 进行端口映射
# 8080 端口映射为 80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
5.10 查看端口映射
iptables -vnL -t nat