在iptables中设置NAT(网络地址转换)表,可以按照以下步骤进行:
首先,建议清空现有的iptables规则,以避免冲突。
sudo iptables -F
sudo iptables -t nat -F
为INPUT、OUTPUT和FORWARD链设置默认策略。通常,INPUT和FORWARD链的默认策略设置为DROP,OUTPUT链的默认策略设置为ACCEPT。
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
允许本地回环接口(lo)的流量。
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
允许已建立的连接和相关流量通过。
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
如果你想将内部网络的私有IP地址转换为公共IP地址,可以使用SNAT。假设你的内部网络是192.168.1.0/24,公共IP地址是203.0.113.1。
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
其中,eth0是你的外部网络接口。
如果你想将到达特定公共IP地址和端口的流量重定向到内部网络的某个主机和端口,可以使用DNAT。例如,将到达203.0.113.1:80的流量重定向到192.168.1.100:8080。
sudo iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
iptables规则在系统重启后会丢失,因此需要保存规则。不同的Linux发行版有不同的保存方法。
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
sudo service iptables save
或者使用firewall-cmd(如果你使用的是firewalld):
sudo firewall-cmd --runtime-to-permanent
如果你启用了IP转发,确保内核参数net.ipv4.ip_forward设置为1。
sudo sysctl -w net.ipv4.ip_forward=1
为了使这个设置在重启后仍然有效,可以编辑/etc/sysctl.conf文件,添加或修改以下行:
net.ipv4.ip_forward=1
最后,验证你的iptables规则是否正确设置。
sudo iptables -L -v -n
sudo iptables -t nat -L -v -n
通过以上步骤,你应该能够成功设置iptables中的NAT表。