iptables使用详解( 五 )


iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT因为通过22或80建立的连接 , 可能会衍生出一些RELATED的连接 , 他们的端口可能不是22或80 , 那样也就被拒掉了 。会导致通信出问题 。
如何将规则持久化上述命令对iptable的操作 , 并不是永久生效的 , 机器重启后 , 对应配置会丢失 。如果需要持久化 , 则需要以下命令进行保存
centos

  1. 第一步 , 在修改iptables配置后 , 将其导出到某个文件 , 比如:/etc/iptables.conf。命令为:iptables-save > /etc/iptables.conf 这一步 , 每次修改后都要做
  2. 第二步 , 在/etc/rc.local中添加命令iptables-restore < /etc/iptables.conf 。从此之后 , 每次重启 , 系统会自动从/etc/iptables.conf恢复对应的iptables配置 。这一步只需要做一次
ubuntu安装iptables-persistent , 它会在系统启动时 , 从/etc/iptables/rules.v4/etc/iptables/rules.v6分别加载ipv4 和ipv6的iptables 规则
sudo apt install iptables-persistent所以 , 每次我们对iptables进行了任何改动 , 使用下面的命令 , 将当前生效的iptables配置 , 导出到/etc/iptables/rules.v4/etc/iptables/rules.v6即可
sudo iptables-save > /etc/iptables/rules.v4 //如果添加了ipv4 规则 , 执行这步sudo ip6tables-save > /etc/iptables/rules.v6 //如果添加了ipv6规则 , 执行这步自定义链除了在现有的链中添加规则 , 我们也可以自定义链 , 自定义链可以帮助我们将一组规则收纳在一起 , 方便我们管理 。比如:
  1. 我们可以定义一个名为ssh-rules的链来管理ssh登录的一些规则
iptables -t filter -N ssh-rules
  1. 在这个链中添加具体的规则
iptables -t filter -A ssh-rules -s 18.130.0.0/16 -j ACCEPTiptables -t filter -A ssh-rules -s 18.11.0.0/16 -j ACCEPTiptables -t filter -A ssh-rules -j DROP
  1. 然后将该链作为一个规则出口 , 挂在到iptable内置的链上 。
iptables -A INPUT -p tcp -m tcp --dport 22 -j ssh-rules以上含义就是在Input链中添加一个规则 , 所有22号端口的访问 , 都会导向ssh-rules再次强调: 只要不指定具体使用的表 , 默认都是filter表
删除自定义链当我们想要删除自定义链时 , 使用命令:iptables -X ssh-rules
如何屏蔽docker 暴露的端口一般我们会在filter中的input链中 , 配置对某个端口的限制 。但是在装有docker的linux服务器上 , docker暴露的任何端口 , 我们却无法通过在filter表中的input链的规则进行限制 , 这是为什么呢? 我们通过上文的对整个iptables的工作机制 , 来拆解下原因 。
访问docker服务时 , iptables的工作机制比如 , 我们在docker 中启动一个mysql , 暴露端口是3306 。docker宿主机所在ip: 192.168.31.102 。docker 服务启动的虚拟网段:172.17.0.1/16  ,  启动的mysql在该虚拟网络的ip是: 172.17.0.2
iptables使用详解

文章插图

iptables使用详解

经验总结扩展阅读