记个笔记,如何用iptables实现简单的流量转发。
安装
CentOS:
#停用firewalld并禁止开机启动
systemctl stop firewalld
systemctl disable firewalld
#安装iptables
yum install iptables-services -ysystemctl enable iptables.service
Debian:
# Debian 默认防火墙即 iptables
查询是否开启转发以及开启转发的方法
#查询是否开启转发
sysctl net.ipv4.ip_forward
开启转发
# CentOS 7 以上
echo "net.ipv4.ip_forward = 1" >> /usr/lib/sysctl.d/sys.conf
sysctl -p /usr/lib/sysctl.d/sys.conf
# Debian 9/10
echo 1 >/proc/sys/net/ipv4/ip_forward
添加及保存规则 CentOS/Debian
落地机即为要被转发的服务器,以下操作均在中转机上进行。
# 放行端口(例如放行19998端口)
iptables -A INPUT -p tcp -m tcp --dport 19998 -j ACCEPT
#添加端口转发规则
iptables -t nat -A PREROUTING -p tcp --dport 19998 -j DNAT --to-destination 落地机IP:落地机被转发端口
iptables -t nat -A PREROUTING -p udp --dport 19998 -j DNAT --to-destination 落地机IP:落地机被转发端口
iptables -t nat -A POSTROUTING -p tcp -d 落地机IP --dport 落地机被转发端口 -j SNAT --to-source 中转机IP
iptables -t nat -A POSTROUTING -p udp -d 落地机IP --dport 落地机被转发端口 -j SNAT --to-source 中转机IP
#保存规则并重启服务-CentOS(Debian9/10 不需要这一步)
service iptables save
service iptables restart
更多:
多端口转发方法,反正我感觉平常用上面的方法就够了
#多端口转发配置(将本地服务器的 10000-65535 端口转发至目标IP的 10000-65535 端口)
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:65535 -j DNAT --to-destination 目标落地机IP
iptables -t nat -A POSTROUTING -d 目标落地机IP -p tcp -m tcp --dport 10000:65535 -j SNAT --to-source 本地服务器IP
iptables -t filter -I FORWARD -d 目标落地机IP -j ACCEPT
iptables -t filter -I FORWARD -s 目标落地机IP -j ACCEPT
iptables -t filter -I -A INPUT -s 0.0.0.0/0 -m multiport -p tcp --dport 10000:65535 -j ACCEPT
查看规则
#查看目前在nat的规则
iptables -t nat -nL
#查看目前在iptables的规则
iptables -nL --line-number
修改iptables规则文件
CentOS位置: /etc/sysconfig/iptables
Debian位置:/etc/iptables.up.rules
删除规则
删除iptables中的规则,可以使用iptables -L INPUT –line-numbers来显示规则,然后用命令iptables -D INPUT *,删除指定number所对应的规则。
#显示iptables入站规则,规则前会有数字
iptables -L INPUT --line-numbers
#删除iptables对应规则
iptables -D INPUT 规则对应数字
#显示nat表规则
iptables -t nat -L -n --line-numbers
#删除nat表对应规则
iptables -t nat -D POSTROUTING 对应数字
iptables -t nat -D PREROUTING 对应数字