工作中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 # (注意:后边这个文件路径可以自选,要是前边备份文件的位置)