Linux系统中默认都自带iptables进行规则控制,我在工作和实际生活中经常遇到linux服务器需要开放某个端口的问题,一般不常接触linux的人往往对这个概念不是特别的熟悉。本文书写了一个shell脚本,用来放行端口或者端口段,支持tcp和udp的端口和段的放行,系统可以支持centos6和7,ubuntu,后期我会逐步再更新这个脚本。
下载地址:http://www.gaoshan.me/download/shell/portctl.sh
使用方法:
ssh远程登录后,在服务器命令行界面,复制下面代码粘贴在服务器上执行
wget -O portctl.sh http://www.gaoshan.me/download/shell/portctl.sh && chmod +x portctl.sh && bash portctl.sh
——————————–
更新日志:
2019年3月14日
# v1.0 发布脚本
2019年6月6日
# v1.1 修复在TCP和UDP下出现相同端口无法正常覆盖已有规则的情况。
2019年6月18日
# v1.2 新增centos端口范围调整
2019年7月3日
# v1.3 新增删除端口和段放行功能
2019年7月15日
# v1.4 新增ubuntu ufw放行端口范围支持,支持删除已放行端口
2019年8月20日
# v1.5 调整了初始显示已放行的端口规则的可阅读性
2019年10月17日
# v1.6 新增了对centos7以上的firewalld的支持,避免切换防火墙导致规则出现问题,增加iptables未启动情况的判断
——————————–
1、放行端口
先输入需要放行的端口(端口范围限制1——65535),比如这里输入5555,然后输入协议,正常tcp协议直接回车即可,如果是udp协议端口则输入udp。
如果是放行端口范围,则输入 端口1:端口2 的形式,比如这里输入的8001:8009
注意ubuntu一般默认都没开ufw,脚本会先检测一次ufw的状态。如果未开启则默认没有端口拦截,会跳过设置。
centos中,会添加到iptables规则中进行控制,默认规则是加到iptables中的第一行的,这样避免被最后的拦截规则拦截掉。
2、删除已放行的端口
可支持删除放行端口或者端口段,首先运行脚本,选择2,删除端口放行:
根据需求,输入需要放行的端口,比如这里我删除8001:8009的IP段放行
输入IP后还需验证协议,默认tcp协议直接回车即可,检测无误后脚本会删除已放行的端口。
================
3、简洁版
应同事的要求,写了一个简洁版的端口放行脚本,只支持centos,目前暂时只用了iptables,使用firewalld的慎用,附带禁ping功能,下载地址:
http://www.gaoshan.me/download/shell/simpleportctl.sh
下载后请使用不是win自带记事本的编辑软件打开,比如editplus,subline text,notpad++等,编辑前面的总配置,禁ping就设置1,要放行的端口之间用空格隔开,支持范围端口,目前仅支持tcp,保存后上传到服务器bash simpleportctl.sh运行即可。
命令行操作(需要ssh登录服务器内):
centos6:
iptables -I INPUT -p 协议 -m 协议 --dport 端口 -j ACCEPT iptables-save > /etc/sysconfig/iptables service iptables restart
centos7(firewalld和iptables只能使用其中一个):
a、iptables
iptables -I INPUT -p 协议 -m 协议 --dport 端口 -j ACCEPT iptables-save > /etc/sysconfig/iptables systemctl restart iptables
b、firewall
firewall-cmd --zone=public --add-port=端口/协议 --permanent firewall-cmd --reload
ubuntu:
ufw enable (启动防火墙) ufw allow 端口/协议 ufw reload