代码语言:javascript复制iptables-参数-A和-I
iptables -L -n --line-number 列出链所有的规则
iptables -F 清空规则
iptables-save 保存规则
最直观的讲解-A与-I的重要性
- -A添加规则的参数,是添加规则在现有的后面
- -I添加规则的参数,是添加在规则在现有的前面
如果是互不干涉的规则端口使用-A没关系不会受影响
假设node01节点的机器,我不想让他的ssh链接开放并且限制指定的主机连接 实验主机 三台都是均为虚拟机,主机的内网IP为192.168.1.250
IP | 备注 | ssh端口均为22 |
---|---|---|
192.168.1.10 | node01 | √ |
192.168.1.20 | node02 | √ |
192.168.1.30 | node03 | √ |
在不设置的情况下先测试是否能登录
- node02登录node01节点
[root@node02 ~]# ssh 192.168.1.10
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ECDSA key fingerprint is SHA256:/OtoB97JsQT5QLHo0lPNYm443x1fDWgpw5XAwKmQFeo.
ECDSA key fingerprint is MD5:fe:28:b2:d3:d4:12:02:45:a7:4b:bb:55:77:ce:94:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts.
root@192.168.1.10's password:
Last login: Tue Jan 12 09:04:53 2021 from 192.168.1.250
[root@node01 ~]# exit
登出
Connection to 192.168.1.10 closed.
把node01节点的22端口禁止不对外开放
一定一定要记住ssh端口在禁止之前先让自己能有权限登录,要不你会后悔!
`开放22端口给192.168.1.250这个地址`
[root@node01 ~]# iptables -A INPUT -s 192.168.1.250 -p tcp --dport 22 -j ACCEPT
`禁止22端口对外开放`
[root@node01 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
`如果当你执行完上一条规则之后,你的命令行还能进行操作,就成功了,否则直接无反应断开连接!`
测试node02、node03节点是否可以进行登录
- 登录失败
在node01节点看一下设置的规则以及编号顺序
代码语言:javascript复制[root@node01 ~]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.250 0.0.0.0/0 tcp dpt:22
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
。。。
在继续把node01节点的22端口开向node02节点
代码语言:javascript复制[root@node01 ~]# iptables -A INPUT -s 192.168.1.20 -p tcp --dport 22 -j ACCEPT
进行测试node02节点登录node01
- 一样失败
到这里会有疑惑的人,为什么同样的使用方法我可以操作连接node01为什么node02不能连接到node01,
主要原因-A参数添加规则是在现有规则之后添加,刚操作做步骤如下 1.开放22端口给我自己的地址是我能继续操作终端 2.node01把22端口关闭 3.开发22端口给node02节点 这个是一个顺序读取规则的,这三个操作都是关于22端口但是在第二条已经被禁止掉了,所以如果还用-A参数只会一直添加在第2条禁止规则之后,所以无效!
再看一下node01节点的规则顺序
代码语言:javascript复制[root@node01 ~]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.250 0.0.0.0/0 tcp dpt:22
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
3 ACCEPT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:22
现在使用-I参数测试将22端口开放于node03节点
[root@node01 ~]# iptables -I INPUT -s 192.168.1.30 -p tcp --dport 22 -j ACCEPT
查看规则
- 可以看到新添加的规则到了编号1的位置并且也在第2条禁止规则之上,所以node03节点可以登录,测试一下
[root@node01 ~]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.30 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 192.168.1.250 0.0.0.0/0 tcp dpt:22
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 ACCEPT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:22
node03节点测试登录node01
代码语言:javascript复制[root@node03 ~]# ssh 192.168.1.10
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ECDSA key fingerprint is SHA256:/OtoB97JsQT5QLHo0lPNYm443x1fDWgpw5XAwKmQFeo.
ECDSA key fingerprint is MD5:fe:28:b2:d3:d4:12:02:45:a7:4b:bb:55:77:ce:94:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts.
root@192.168.1.10's password:
Last login: Tue Jan 12 09:23:31 2021 from 192.168.1.250
[root@node01 ~]# exit
登出
Connection to 192.168.1.10 closed.
看到这里希望你能明白iptables的-A于-I的区别!