Linux iptables
创建日期:2015-01-21 13:48 修改日期:2022-03-11 20:33:00

技巧

修改之前在 crontab 里加入『每 5 分钟关闭一次 iptables』的计划任务。

使用 iptables -F 前一定要注意检查 :INPUT ACCEPT [0:0] 以防默认配置为 :INPUT DROP [0:0]

修改完确认无误之后再删掉

*/5 * * * * iptables -F

crontab 参数解释

*  *  *  *  *  command
分 时 日 月 周 命令
1列表示分钟159 每分钟用*或者 */1表示
2列表示小时1230表示0点)
3列表示日期131
4列表示月份112
5列标识号星期060表示星期天)
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

相关网站

IptablesHowTo