# 开放一个端口 9080
$ iptables -A OUTPUT -p tcp --sport 9080 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 9080 -j ACCEPT
# 保存并重启
$ service iptables save && service iptables restart
# 查看是否添加
$ iptables -L -n
# 移除规则
$ iptables -L INPUT --line-numbers
$ iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INPUT --line-numbers 所打印出来的行号)

docker容器动态加端口 【好像不行】

docker的端口映射本质上就是通过宿主机的IPtable控制网桥实现的。
例如有一个容器的8000端口映射到主机的9000端口,先查看iptabes设置了什么规则:

# 先查看iptabes设置了什么规则
iptables -t nat -vnL

输出结果:

Chain DOCKER (2 references)
pkts bytes target prot opt in     out     source        destination         
 98  5872 RETURN  all  --  docker0 *     0.0.0.0/0     0.0.0.0/0           
237 14316 DNAT    tcp  --  !docker0 *    0.0.0.0/0    0.0.0.0/0    tcp dpt:9000 to:172.17.0.3:8000

可以看出,docker创建一个名为DOCKER的链(Chain)来管理容器进出数据的NAT地址转换。
我们可以通过以下命令得到容器的ip地址

docker inspect [containerId] |grep IPAddress

以下是添加映射端口命令语法
例如我们要映射的容器ip地址为172.17.0.3,映射端口:8081(宿主机)>81(容器)
只需要在DOCKER链(chain)添加一条规则

iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81

如果加错了或者想修改:

#先显示行号查看
sudo iptables -t nat -vnL DOCKER --line-number
#删除规则3
sudo iptables -t nat -D DOCKER 3

多个端口范围映射:
我们可能在容器里搭建某些需要开放一段大量范围端口的服务(如RTP实时流),此时就建议使用IPtable端口范围映射。

对于这种情况,通过IPtable命令映射,是对服务器最效率、最节约资源的方法,因为如果是通过DOCKER创建容器时映射多个端口的话,当创建好容器后,通过命令sudo iptables -t nat -vnL查看IPtable规则就会发现,创建容器的时候映射了多少个端口,docker服务就会在IPtable的DOCKER链里添加多少条规则。对于IPtable来说,每条规则都是一个线程,当映射的端口少还影响不大,如果是有很多端口(比如20000-30000),IPtable就会多出10001个线程,届时服务器的运行效率就会受到明显的影响。如果是用IPtable命令添加,只需要一条规则就可以搞定,这样就大大的节约了规则的数量,避免了这样的问题发生。

具体的命令和上面的示例区别也不大,下面同样也来个示例

例如我们要映射的容器ip地址为172.17.0.3,映射端口:20000-30000(宿主机)>20000-30000(容器)

同样在DOCKER链(chain)添加规则

iptables -t nat -A  DOCKER -p tcp --dport 20000-30000 -j DNAT --to-destination 172.17.0.3:20000-30000

ps:需要注意的是,由于IPtable内核机制,当匹配的端口在映射端口的区间内时,那么端口号不会被修改。如果匹配端口不在映射端口的区间内,则大多数情况下映射端口号为最小的端口号,即映射端口号是不可预测的。

举例: [20000-30000] 映射到[20000-30000]时会一 一映射
   [20000-30000] 映射到[30000-40000]结果不可预知,一般会映射到30000端口。

参考来源:https://www.cnblogs.com/luckyftt/p/7698085.html例如:# 开放一个端口 9080$ iptables -A OUTPUT -p tcp --sport 9080 -j ACCEPT$ iptables -A INPUT -p tcp --dport 9080 -j ACCEPT# 保存并重启$ service iptables save && service iptables restart# 查看是否添加$ iptab
docker_iptables 该脚本旨在手动处理 Docker iptables 端口转发,适用于您无法让 Docker 自行管理 iptables 的情况,因为它与系统上也尝试管理 iptables 的其他事物发生冲突。 假设/先决条件: systemd是您的 init,容器将由 systemd .service 单元管理。 iptables 规则的规范来源是/etc/iptables.d/和/etc/ip6tables.d/ 存在名为iptables.service的服务,当声明或重新启动时,将刷新所有正在运行的 iptables 规则并从 .d 目录重新加载规则。 使用这个脚本: --iptables=false守护进程应配置为以--iptables=false开头。 使用以下规则创建一个/etc/iptables.d/10_docker文件。 这些是通常在 do
但是这样的话就将系统的所有能力都开放给了Docker容器 有一个image为aaa的将启动为容器名为bbb的且在容器内需要使用iptables功能,可以使用–privileged=true来进行开启,如: docker run --privileged=true -d -p 4489:4489/tcp --name bbb aaa 方法二:部分开放 对于iptables需要的权限进行开放,其它的权限不予开放 --cap-add NET_ADMIN --cap-add N
iptables -A INPUT -p tcp --dport 8080:9090 -j ACCEPT iptables -A OUTPUT -p tcp --sport 8080:9090 -j ACCEPT iptables-save
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关联的通信 iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
在安装nginx,mysql,tomcat等等服务的时候,我们会遇到需要使用的端口莫名其妙被占用,下面介绍如何解决这类问题。 说到端口,还不得不提到防火墙,本文还会简单介绍如何配置防火墙开发端口Linux查看端口情况的各种方法 所有端口的映射关系在 /etc/services 文件中有 Linux端口简单介绍,端口编号从0-65536,各编号端的用途如下: 0-1023:公认端口,与常见服务绑定(FTP,SSH) 1024-49151:注册端口,用于和一些服务绑定 49152-65535:动态或私有端口,可用于任意网络连接 端口分为TCP和UDP传输协议。 Linux查看端口状态命
清除原有的防火墙的规则 iptables -F iptables -t filter -A INPUT -p tcp --dport 22 -j DROP ---- -A表示添加规则到相应链,默认加到结尾 iptables -t filter -I INPUT -p tcp --dport 22 -j DROP ---- -I 表示插入规则到相应链上,默认加到首部 iptables -t filter -I INPU...