安装iptables

1
2
3
4
# centos
yum install iptables
# debian/ubunte
apt-get install iptables

查看已添加的规则

1
2
3
4
5
6
7
8
9
iptables -L -n -v
iptables -L --line-numbers
# 查看nat规则
iptables -t nat -vnL

# 注释
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名

清空iptables规则

1
2
3
4
5
6
7
8
9
10
11
12
13
iptables -F
iptables -X
iptables -Z

# 删除nat规则
iptables -t nat -F

# 序号显示
iptables -L -n --line-numbers
# 删除相关序号
iptables -D INPUT 3
# 保存规则
iptables save

开放本机防火墙常用端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

# 允许本机访问
iptables -l INPUT -i lo -j ACCEPT

# 开放789端口
iptables -I INPUT -p tcp --dport 789 -j ACCEPT

# 开放80443端口
iptables -t filter -l INPUT -p tcp -m multiport --dports 80,443 -j REJECT

# 开放20-22端口
iptables -t filter -I INPUT -p tcp --dport 20:21 -j ACCEPT

允许对所有的地址开放本机的基于ICMP协议的数据包访问

1
iptables -t filter -I INPUT -p icmp -j ACCEPT

其他未被允许的端口则禁止访问

1
iptables -t filter -A INPUT -j REJECT

防止SYN洪水攻击

1
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT

允许/屏蔽PING

1
2
3
4
5
6
# 允许ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# 禁止ping
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

屏蔽IP或IP段

1
2
3
4
5
# 屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP

# 屏蔽IP段
iptables -l INPUT -s 123.0.0.0/8 -j DROP

禁止其他未允许的规则访问

1
2
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

只允许指定ip地址访问指定端口

1
2
iptables -A  INPUT -s xxx.xxx.xxx.xxx -p tcp --dport  22 -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -p tcp --sport 22 -j ACCEPT

上面这两条,请注意 --dport 为目标端口,当数据从外部进入服务器为目标端口;反之,数据从服务器出去则为数据源端口,使用 --sport 同理,-s 是指定源地址,-d 是指定目标地址。

转发NAT规则

1
2
3
4
5
6
7
8
# 允许数据转发
iptables -A FORWARD -j ACCEPT

# 添加IP TCP转发
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1122 -j DNAT --to-destination 10.10.10.11:22

# 添加IP UDP转发
iptables -t nat -A PREROUTING -p udp -m tcp --dport 1122 -j DNAT --to-destination 10.10.10.11:22

删除NAT规则

1
2
3
4
5
# 列出nat规则
iptables -t nat -vnL PREROUTING --line-number

# 删除相对应序号2的规则
iptables -t nat -D PREOUTING 2

iptables持久化

1
2
3
4
5
# 保存规则
iptables save

# 重启服务
iptables restart

安装 iptables-persistent

1
2
3
4
5
apt install iptables-persistent

# 规则生效
netfilter-persistent save
netfilter-persistent reload