1. Centos iptables 安装使用
1
2
3
4
| yum install -y iptabels-services -y
systemctl enable iptables.service
vi /etc/sysconfig/iptables
systemctl restart iptables
|
以下是/etc/sysconfig/iptables的基本模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| *filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 允许所有回环流量(loopback traffic)和 ICMP 测试
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
# 开放 SSH 端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# 开放 HTTP、HTTPS 端口
-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 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
|
上面的规则允许回环流量和 ICMP 测试通过,并开放了 SSH、HTTP 和 HTTPS 端口。最后两行规则将拒绝所有其他流量。
Ubuntu 安装使用 iptables
1
2
3
| apt install iptables-persistent
netfilter-persistent save # 保存到/etc/iptables/rules.v4
netfilter-persistent reload
|
常用:
1
2
3
4
5
6
7
8
9
10
| *filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
|
解释:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT
#清空所有默认规则
iptables -F
#清空所有自定义规则
iptables -X
#所有计数器归0
iptables -Z
#允许来自于lo接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
#开放dhcp客户端(可删除)
iptables -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT
#开放995端口(POP3s)
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#其他入站一律丢弃
iptables -P INPUT DROP
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律丢弃
iptables -P FORWARD DROP
#允许接受本机请求之后的返回数据 RELATED,是为软件设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
|
3. docker iptables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| *filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1039:304535]
:DOCKER-USER DROP [0:0] #docker-user链,它运行于docker链之前,因此可过滤docker的流量。
#常规的规则(input链),根据情况自己写了。这里的话是开放22的访问。
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
#DOCK-USER链规则开始
-A DOCKER-USER -o eth0 -p tcp -j ACCEPT #允许docker的向外访问。 eth0需要改成外网网卡的实际名称。
-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #允许已建立的连接继续通信
-A DOCKER-USER -i docker0 -o docker0 -j ACCEPT #允许各个docker间的通信
-A DOCKER-USER -i br-+ -o br-+ -j ACCEPT #允许各个docker间的通信
-A DOCKER-USER ! -i docker0 -s 1.1.1.1 -p tcp -m tcp --dport 80 -j ACCEPT #默认规则为禁止,所以这个是白名单,允许1.1.1.1访问本地的80端口。
.... 对外开放的服务规则一直加在这里就好了
-A DOCKER-USER ! -i docker0 -p tcp -m tcp -j DROP #禁止除白名单外的所有请求
COMMIT
|
或
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| # Generated by iptables-save v1.8.9 (nf_tables) on Wed May 1 01:06:24 2024
*filter
:INPUT DROP [3816:196637]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2700:502529]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #SSH,正常应该白名单,我这个玩具机就开着了。
-A INPUT -p tcp -m tcp --dport 81 -j ACCEPT #这个是NPM的管理端口
-A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 80 -j ACCEPT #CF白名单,IP段几十年不变,写死即可。
-A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 80 -j ACCEPT #CF使用灵活模式,就是回源HTTP。回源HTTPS没有意义,除了消耗自己的CPU资源。
-A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 104.16.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 104.24.0.0/14 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
COMMIT
|
工作原理:https://mikeygithub.github.io/2023/03/01/yuque/%E7%BD%91%E7%BB%9C%E7%AF%87-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E9%98%B2%E7%81%AB%E5%A2%99%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/