技巧
修改之前在 crontab 里加入『每 5 分钟关闭一次 iptables』的计划任务。
使用 iptables -F
前一定要注意检查 :INPUT ACCEPT [0:0]
以防默认配置为 :INPUT DROP [0:0]
修改完确认无误之后再删掉
*/5 * * * * iptables -F
crontab 参数解释
* * * * * command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令
添加屏蔽 IP
禁止此 IP 访问服务器
顶部插入规则
iptables -I INPUT -s 1.2.3.4 -j DROP
底部插入规则
iptables -A INPUT -s 1.2.3.4 -j DROP
封禁某个网段
iptables -I INPUT -s 1.2.3.0/24 -j DROP
封禁指定端口
iptables -I INPUT -p tcp --dport 3306 -j DROP
禁止服务器访问此 IP
iptables -A OUTPUT -d 1.2.3.4 -j DROP
删除屏蔽 IP
删除 INPUT 中第二条
iptables -D INPUT 2
清空屏蔽 IP
iptables -t filter -D INPUT -s 1.2.3.4 -j DROP iptables -t filter -D OUTPUT -d 1.2.3.4 -j DROP
自定义规则链 CHAIN
添加
iptables -N BADIP
删除
iptables -X BADIP
一键清空所有规则
iptables -F
查看
iptables -L INPUT
查看全部
iptables -L
保存规则,下次开机自动执行
iptables-save
CentOS 保存到配置文件
iptables-save > /etc/sysconfig/iptables
Debian 保存到配置文件
iptables-save > /etc/iptables
导入规则
CentOS 读取配置文件
iptables-restore < /etc/sysconfig/iptables
Debian 读取配置文件
iptables-restore < /sysconfig/iptables
其它
处理 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
设定预设规则
远程服务器设置时注意首先设置 SSH 端口开放
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
带行号查看
iptables -L -n --line-numbers
配置回环
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -p all -j ACCEPT
丢掉坏的包
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
远程 SSH 登陆
首先添加 INPUT 链, INPUT 链的默认规则是 DROP, 所以我们就写需要 ACCETP (通过)的链,为了能采用远程 SSH 登陆, 我们要开启 22 端口.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
只允许特定 ip 访问 80 端口
iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -s 111.111.111.111 -p tcp --dport 80 -j ACCEPT
指定位置插入规则
第五行插入
iptables -I INPUT 5 -p tcp --dport 8080 -j ACCEPT
部分配置
iptables -F iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
默认配置样例
# Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :syn-flood - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -s 172.31.0.0/20 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood -A INPUT -j REJECT --reject-with icmp-host-prohibited -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN -A syn-flood -j REJECT --reject-with icmp-port-unreachable COMMIT