工作中iptables要点学习


整理得有点匆忙,如果有什么不对的地方,麻烦读者指出 ……^__^

一、linux下用iptables做本机端口转发方法

(线上入口服务器几乎都用到,因为很多没公网的服务器)

1、举例:

公司项目有一些MySQL服务器位于服务器的内网段,作为运维人员,经常需要去连接这些服务器,因无法直接通过外网访问,给管理造成了不便。

 

2、网络环境

(1)公网服务器:

  (a)公网IP:14.17.112.289

  (b)内网IP:10.0.0.64

(2)mysql 服务器:

  (a)内网IP:10.0.0.215

  (b)端口:3306

 

3、实现方法:通过访问公网IP的63306端口来实现到内网mysql 服务器的3306端口的访问

在公网服务器289上:

(1)启用网卡转发功能,允许服务器的IP转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

(2)iptables添加nat网络地址转换规则

1 iptables -A PREROUTING -d 10.0.0.64/32 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 10.0.0.215:3306
  
2 iptables -A POSTROUTING -d 10.0.0.215/32 -p tcp -m tcp --dport 3306 -j SNAT --to-source 10.0.0.64

说明:

 PREROUTING——对数据包作路由选择前应用此链中的规则  (所有的数据包进来的时侯都先由这个链处理)

 POSTROUTING——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

 

(3)转发完公网连接mysql的使用方法:

mysql -h 14.17.112.289 -p 63306 -uroot -p

 

 

二、iptables其他用法

1、根据目标行号删除规则

假设删除tcp协议,端口为44222,dnat目的地址转换的iptable规则

1  TCP_Del_DNAT_num=`iptables -t nat -nvL --line-numbers |grep 44222 |grep DNAT | grep tcp | awk '{print $1}'`
2  iptables -t nat -D PREROUTING ${TCP_Del_DNAT_num}

 

2、iptables封禁ip/ip段访问服务器

(1)封IP的命令

iptables -I INPUT -s 211.1.0.0 -j DROP

(2)封IP段的命令

iptables -I INPUT -s 211.1.0.0/16 -j DROP

 

3、iptables封禁ip访问服务器的某个端口

(1)应用场景:

假设入口服务器开启nginx,监听80端口,后端转发到某台虚拟主机上

现在发现有ip段: 124.115.0.0 不停过来耗nginx服务器网络流量

 

(2)禁止该ip段访问nginx

iptables -I INPUT -p tcp --dport 80 -s 124.115.0.0/24 -j DROP

 

4、iptables添加白名单

(1)开放所有端口给某个ip(192.111.51.45)

iptables -A INPUT -s 192.111.51.45 -p all -j ACCEPT

(2)开放特定端口给某个ip

(假设默认22端口  给同网段的ip:192.111.51.45,通过ssh访问本机)

iptables -A INPUT -s 192.111.51.45 -p tcp --dport 22 -j ACCEPT

 

5、其他

(1)查看iptable规则

iptables -nvL

(2)保存iptables规则

systemctl save iptables

(3)重启iptables防火墙

systemctl restart iptables

 

(4)备份与还原

#保存配置
iptables-save > /etc/iptables # (注意:后边这个文件路径可以自选)
#还原配置
iptables-restore < /etc/iptables # (注意:后边这个文件路径可以自选,要是前边备份文件的位置)