【题目】iptables进行防火墙设置以使得可以访问虚拟机的端口
【时间】2022.03.09 周三
一、问题描述
有的应用在VMWare虚拟机上运行的,想要在物理机上访问对应的应用端口,如flink的web UI(默认端口8081)、tomcat(默认端口8080)等。
由于linux的防火墙限制,往往无法访问,需要使用 iptables命令设置防火墙规则放开端口访问。
2、解决方法:iptables命令设置防火墙放开端口访问
1、查看INPUT链规则
iptables -L INPUT
发现有一条REJECT拒绝的命令:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
所以需要在REJECT之前插入ACCEPT端口的规则,下面在位置1插入ACCEPT规则。
2、在位置1插入开放8081端口的ACCEPT规则。
iptables -I INPUT 1 -p tcp --dport 8081 -j ACCEPT
- -I INPUT 1 表示在INPUT链的位置1插入规则。
- -p tcp 表示指定协议为tcp
- --dport 8081 -j ACCEPT 其中--dport 8081指定目的端口8081,-j ACCEPT指定规则为接受。
3、这样即可开放虚拟机的8081端口(临时)。
4、保存iptables规则使得重启后不用重新设置。
若你用的是 RedHat 系列,应该使用 service iptables save 保存,用 chkconfig iptables on 实现开机启动启用
若不是 RedHat 系列,可以使用下面方法手动保存/恢复配置。
保存 iptables-save > /etc/sysconfig/iptables
恢复 iptables-restore < /etc/sysconfig/iptables
三、补充:iptables命令详解
(图片来源:https://my.oschina.net/u/1253780/blog/2050514)
命令格式
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 处理动作或跳转]
-t 接表名,如果不加-t 默认就是 –t filter
命令选项
-L 列出一个或所有链的规则
-v 显示详细信息,包括每条规则的匹配句数量和匹配字节数
-x 在v的基础上,禁止自动换算单位(K,M)
-n 只显示ip地址和端口号,不显示域名和服务名称
-I 插入到防火墙第一条生效
-A 添加链是添加到最后一条
-D 删除指定链中的某一条规则,按规则序号或内容确定要删除的规则
-F 清空指定链中的所有规则,默认清空表中所有链的内容
-X 删除指定表中用户自定义的规则链
条件匹配
-i 入站请求接口
-o 出站请求接口
-s 入站源地址
-d 目标地址
-p 指定规则协议,如tcp, udp,icmp等,可以使用all来指定所有协议
–dport 目的端口,数据包的目的(dport)地址是80,就是要访问我本地的80端口
–sport 来源端口 数据包的来源端口是(sport)80,就是对方的数据包是80端口发送过来的。
处理动作
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
一般不使用REJECT(拒绝)行为.REJECT会带来安全隐患。