iptables的nat规则骚操作
水一枪
我对防火墙这块的认知是比较低的, 之前一直没怎么去用
最多的要么就是
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
,这还是以前刚出来接触linux的时候redhat6跑的,后来改革了,好吧,centos7
firewall-cmd --zone=public --add-port=6379/tcp --permanent && firewall-cmd --reload
直到我与区块链搭上了肩膀才用上了iptables端口转发
上面水了一段,正文开始
需求
在生产环境上面所在运行的数据库做一个远程连接,前提是数据库不能重启(由于原先只有一个root用户而且限定是本地使用的,不能添加额外连接用户)
那么这个时候就可以用iptables做一个小小的映射,其实说的那么玄乎,无非就是nat规则...
把本地的3306端口映射出去变成63306,外面连接的语句是
mysql -uroot -p'password' -h xxxxx -P 63306
注:当访问63306的时候,会自动去请求3306,然后返回数据,当然,63306是不受监听的哈,那些用过kali或者渗透的朋友是不是应该想到了什么呢...
什么?没有?那当我没说过。
实现
先扔三条code去抠一下
echo 1 >/proc/sys/net/ipv4/ip_forward sysctl -w net.ipv4.conf.eth0.route_localnet=1 sysctl -w net.ipv4.conf.default.route_localnet=1
不用说也知道这是干嘛的了,【允许数据包转发】
nat规则
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306 iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1
注:这是允许所有外来的IP访问,慎用。
限制单个来源IP
iptables -t nat -R PREROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306 iptables -t nat -R POSTROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1
注:这是只给外网的192.168.40.154连接, 其他的都连不上,
修改规则(4代表编号, --line-number可查看对应编号, -s 指定来源IP)。
查看nat规则
iptables -L -t nat --line-number
删除nat规则
iptables -t nat -D POSTROUTING 1
笔记
-A 追加规则-->iptables -A INPUT -D 删除规则-->iptables -D INPUT 1(编号) -R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置) -I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位 -L 查看规则-->iptables -L INPUT 列出规则链中的所有规则 -N 新的规则-->iptables -N allowed 定义新的规则