首先初步学习一下iptales的命令
iptales指令的详细教程:https://blog.csdn.net/weixin_44390164/article/details/120500075
实践一、转发地址与端口
外网远程服务上开放了SMB服务,端口号自定义的为44513,WINDOWS不能直接访问,可以通过路由器上的转发功能来实现,但是远程服务又是动态IP地址,可以用以下方式来访问:
要想自动获取动态IP并转发,可以在/root/目录下面新建以下脚本文件,命名为www.test.com.sh
1、在/root/下面建立IP地址文件
将目标域名的IP地址手工写改入/root/www.test.com.IP文件里面,或者执行下面命令也可自动写入
bash
echo $(ping www.test.com -c1 | grep PING | awk '{ print $3 }' | cut -c 2- | cut -d\) -f1)>/root/www.test.com.IP
cat /root/www.test.com.IP #查看是否写入成功
2、开机时先自动执行一次
将下面命令添加到 防火墙-自定义规则 里面
bash
iptables -t nat -I PREROUTING -p tcp -d 192.168.6.1 --dport 445 -j DNAT --to $(cat /root/www.test.com.IP):44513
# 192.168.6.1为路由器地址,当访问路由器的445端口时,将会自动转换到远程域名对应的IP地址与端口上去
# www.test.com为域名
# 44513为远程SMB端口号
#iptables -t filter -I FORWARD 1 -p all -d $(cat /root/www.test.com.IP) -j ACCEPT
#iptables -t filter -I FORWARD 1 -p all -d $(cat /root/test2.x3322.net.IP) -j ACCEPT
重启后用命令查看一下结果
bash
iptables -t nat -nvL PREROUTING --line
可以看到,第一条记录就是新增加上去的
bash
root@OpenWrt:/tmp# iptables -t nat -nvL PREROUTING --line
Chain PREROUTING (policy ACCEPT 88500 packets, 15M bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.6.1 tcp dpt:445 to:113.65.5.52:44513
2 88500 15M prerouting_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom prerouting rule chain */
3 88399 15M zone_lan_prerouting all -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
4 0 0 zone_wan_prerouting all -- eth0.2 * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
5 101 5232 zone_VPN_prerouting all -- pptp-vpn * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
3、建立脚本文件:www.test.com.sh
bash
dyIP=$(ping www.test.com -c1 | grep PING | awk '{ print $3 }' | cut -c 2- | cut -d\) -f1)
if [ -z "$dyIP" ];then
echo "get Ip false"
exit
fi
file_content=$(cat www.test.com.IP)
echo "newIP="$dyIP
echo "lastIP="$file_content
if [ "$file_content" != "$dyIP" ];then
echo "print new ip to text file"
echo $dyIP>www.test.com.IP
iptables -t nat -D PREROUTING 1
iptables -t nat -I PREROUTING -p tcp -d 192.168.6.1 --dport 445 -j DNAT --to $dyIP:44513
# iptables -t filter -D FORWARD 1
# iptables -t filter -I FORWARD 1 -p all -d $dyIP -j ACCEPT
else
echo "no change!"
fi
4、添加实时任务,每5分钟执行一次
bash
crontab -e
*/5 * * * * sh /root/www.test.com.sh
#*/5 * * * * sh /root/test2.x3322.net.sh
自此就可以自动转发了,随便远程IP怎么变化都可以正常访问SMB服务了。
实践二、控制终端访问情况
要想让MAC为:F8:4E:17:D7:E6:29的终端,在任何时间都可以通过WAN口访问124.229.32.179
bash
iptables -t filter -I zone_lan_forward 3 -p all -d 124.229.32.179 -m mac --mac-source F8:4E:17:D7:E6:29 -j zone_wan_dest_ACCEPT
# -t filter 【表示指定filter表】
# -I zone_lan_forward 3 【插入自定义名的zone_lan_forward链 第三行,如果没有3,则默认插入到第一条】
# -p all 【匹配所有协议包括TCP\UDP等】
# -d 124.229.32.179 【匹配要访问的目标IP地址】
# -m mac --mac-source F8:4E:17:D7:E6:29 【匹配需要访问的终端MAC地址】
# -j zone_wan_dest_ACCEPT 【前面匹配成功后规则,最后指定动作--允许从WAN口访问】
#如果之前有记录的话,要先删除
iptables -t filter -D zone_lan_forward 3
让所有终端允许访问www.test.com 和 test2.x3322.net
bash
iptables -t filter -I FORWARD 1 -p all -d 124.229.32.179 -j ACCEPT #固定IP的例子
iptables -t filter -D FORWARD 1 #如果前面有写入的话, 需要删除
iptables -t filter -I FORWARD 1 -p all -d $(cat /root/www.test.com.IP) -j ACCEPT #www.test.com.IP文件由上面的脚本自动生成
iptables -t filter -D FORWARD 2 #如果前面有写入的话, 需要删除
iptables -t filter -I FORWARD 2 -p all -d $(cat /root/test2.x3322.net.IP) -j ACCEPT #test2.x3322.net.IP文件由上面的脚本自动生成
iptables -t filter -nvL FORWARD --line #查看表链数据
以下是iptables一些其它选项的说明
-t :指定表
-I: 插入新规则(默认为1:插入到第一个) 与之对应的有 -A :新增一条规则,默认加在已存在的规则的最底端 PREROUTING:PREROUTING链在进行路由决定之前处理数据包,因此可以用来修改目标地址(DNAT)或源地址(SNAT)。iptables
-t nat -L PREROUTING:查看nat表PREROUTING链的规则
-p :对相应网络协议的包做规则限制如tcp、udp、icmp或all
-d:目标地址
--dport:目的端口
-j:对条件满足数据作出对应的动作(有ACCEPT,DROP,REJECT等下列可选项)
ACCEPT:接受
DROP:丢弃
REJECT:决绝
LOG:记录日志
SNAT:源地址转换
DNAT:目标地址转换
MASQUERADE:源地址动态转换为指定网卡上可用的IP地址
REDIRECT:重定向:将本机端口映射到本机的另一个端口
bash
#查看规则所在nat表中链PREROUTING的行号
iptables -t nat -L PREROUTING -n --line-numbers
#删除所在nat表中链PREROUTING第[$Num]行规则
iptables -t nat -D PREROUTING [$Num] #[$Num]指的是需要删除的num。删除规则后,下方的其他规则会补位,num会发生变更