iptables是Linux中的控制端口开启与关闭的命令,防止服务器的端口对外暴露。

但是一定要慎用,如果不慎配置错误则会导致服务器访问不了,

如下是一些查看,清理规则的命令(稍微可以挽救一下)

  • 查看规则&&恢复默认设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看已经设置的规则
sudo iptables --list

# 默认策略设置为ACCEPT,否则后续操作会导致连接断开,无法再次连接
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -P PREROUTING ACCEPT
sudo iptables -t nat -P POSTROUTING ACCEPT
sudo iptables -t nat -P OUTPUT ACCEPT
# 清空所有规则
sudo iptables -F
sudo iptables -t nat -F
# 删除所有非系统默认的链
sudo iptables -X
sudo iptables -t nat -X


# 保存
sudo iptables-save
  • 但是如果未正确按照规则清理出错导致xshell,crt等工具连接不上那就必须到机房去处理了!!(慎重)

iptables相关设置

防火墙常用操作

注意:firewalld和iptables不能同时打开,一定要关闭firewalld,再打开iptables

这里是一些参考,如果有端口方面的需要,执行时一定小心谨慎,知道这条命令的作用是什么再去执行,而不是盲目的复制一条命令就拿到生产环境中跑!!!

还有就是执行rm -rf的时候必须谨慎!

1
2
3
4
5
6
7
8
9
10
#关闭 firewalld 防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#安装 iptables 防火墙
yum -y install iptables iptables-services

#设置 iptables 开机启动
systemctl start iptables.service
systemctl enable iptables.service

iptables命令常用操作

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
29
30
31
32
33
34
35
36
37
38
# 查看规则链
iptables -L

# 清除规则链,只剩默认策略
iptables -F

# 阻止所有机器访问本机
iptables -I INPUT -j DROP

# 不允许任何主机 ping 本主机,REJECT 拒绝
iptables -t filter -A INPUT -p icmp -j REJECT

# 禁止全部 ping 操作,同上
iptables -I INPUT 1 -p icmp --icmp-type echo-request -j DROP

# 允许指定 ip 可以 ping 操作
iptables -I INPUT -p icmp --icmp-type echo-request -s 192.168.10.30 -j ACCEPT

# 配置允许某一网段访问本机所有端口
iptables -A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT

# 拒绝所有主机访问本机 tcp 22 端口
iptables -I INPUT -p tcp --dport 22 -j DROP

# 允许指定主机访问本机 tcp 22 端口
iptables -I INPUT -s 192.168.10.30 -p tcp --dport 22 -j ACCEPT

# 配置允许所有 IP 访问本机 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许指定范围 IP 访问本机所有 tcp 端口
iptables -I INPUT -p tcp -m iprange --src-range 192.168.10.10-192.168.10.100 -j ACCEPT

# 配置禁止某个 ip 访问本机的 80 端口
iptables -A INPUT -s 192.168.1.123 -p tcp --dport 80 -j DROP

# 使配置防火墙策略永久生效,执行保存命令,不然的话重启后会失效
service iptables save

iptables封IP及解封IP

自己总结的,然后最后一个限制端口可能跟上面的命令有冲突

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 封单个IP
iptables -I INPUT -s 192.168.88.162 -j DROP


# 解封IP
iptables -D INPUT -s 192.168.88.162 -j REJECT
iptables -F # 全清掉了


# 只允许46.166.150.22访问本机的80端口。如果要设置其他ip或端口,改改即可。
iptables -I INPUT -p TCP --dport 9870 -j DROP #(执行之后所有的IP都不能访问9870端口了)
iptables -I INPUT -s 192.168.88.162 -p TCP --dport 9870 -j ACCEPT #(执行后保存并重启iptables)
iptables -I INPUT -s 172.20.10.3 -p TCP --dport 9870 -j ACCEPT # (允许本机访问9870端口

# 保存配置
service iptables save

# 重启iptables
service iptables restart

iptables设置白名单相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@master ~]#vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#
# #定义白名单群组
-N whitelist
#设置白名单IP,开放ip可以访问设备,白名单就按类似规则增加就可以
-A whitelist -s 192.168.10.20 -j ACCEPT
-A whitelist -s 192.168.10.30 -j ACCEPT
#开放所有设备主动访问的服务器,处在RELATED,ESTABLISHED状态可以通信,这样设备需要主动访问的服务器就不用一个一个添加到白名单了
-A INPUT -m state --state RELATED,ESTABLISHED -j whitelist
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
# #白名单端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
#拒绝白名单以外IP访问指定端口
-A INPUT -p tcp -m multiport --dports 3306,80,22 -j DROP
COMMIT

[root@master ~]#systemctl restart iptables

参考:

附录

  • 别人给的一些文档仅供参考(感觉写的不详细,说不清)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#放行所有回环口的连接

iptables -I INPUT -i lo -j ACCEPT

#允许本机主动对外的连接

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允许本机访问本机所有端口

iptables -A INPUT -s 10.23.134.70 -d 10.23.134.70 -j ACCEPT

iptables -A OUTPUT -s 10.23.134.70 -d 10.23.134.70 -j ACCEPT

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

# 开放端口22 25 8888 8761

iptables -A INPUT -i ethO -p tcp -m multiport --dport 22,25,8888,8761 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m multiport --sport 22,25,8888,8761 -m state --state ESTABLISHED -j ACCEPT

# 限制端口6379,仅允许三个IP来访问

iptables -A INPUT -i ethO -p tcp -s 192.168.43.33 --dport 9870 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 9870 -m state --state ESTABLISHED -j ACCEPT

# 其他拒绝(慎重执行,执行后crt就断开了!!!)

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited


#允许本机访问本机所有端口

iptables -A INPUT -s 10.0.3.100 -d 10.0.3.100 -j ACCEРT

iptables -A OUTPUT -s 10.0.3.100 -d 10.0.3.100 -j ACCEРT

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

#限制端口9870,仅允许1个IP来访问,其他拒绝

iptables -A INPUT -i eth0 -p tcp -s 192.168.88.162 --dport 9870 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp -s 192.68.43.33 --dport 9870 --state NEW -j REJECT

iptables -A OUTPUT -o eth0 -p tcp --sport 9870 -m state --state ESTABLISHED -j ACCEPT