iptables

最近使用了路由器,然后就不能远程登录宿舍的电脑了,今天学习了一下iptables怎么设置端口转发。

一些概念

iptables中有多个表格,每个表格都定义自己的默认策略与规则,且每个表格的用途都不同。

  • Filter:管理本机进出
  • NAT:管理后端主机(防火墙内部的其他计算机)
  • Mangle:管理特殊标志(较少使用)

每个表格中又有自己的链(Chain)。
Filter

  • INPUT:管理进入主机的数据包
  • OUTPUT:管理本机送出的数据包
  • FORWARD:将数据包转发到防火墙后端的主机

NAT

  • PRROUTING:路由之前进行的规则,修改目的ip等
  • POSTROUTING:路由之后进行的规则,修改源ip等
  • OUTPUT:与发送出去的数据包有关

语法

参考:https://help.ubuntu.com/community/IptablesHowTo  
这里指列出常用的几个选项,其他细节可以看文档。  
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 源ip/网络][-d 目的ip/网络]-j [ACCEPT|DROP|REJECT|LOG]
-t:后面接table,例如nat或者filter,默认是filter
-L:列出目前的iptables规则
-n:不进行IP与HOSTNAME的反查,显示信息快很多
-v:显示更多的信息

-A:后面加链名(如INPUT、OUTPUT等)新增一条规则,添加到后面
-I:后面加链名(如INPUT、OUTPUT等)插入一条规则,最前面
-io:后面加网络接口,i、o表示进出,
-p:后面加协议,tcp、udp、icmp、all等,如果指定的协议是tcp或者udp,还可以指定端口选项
-d:目标ip
-s:源ip
-j:后面接操作,如ACCEPTDROPREJECTLOG
--sport:源端口
--dport:目的端口
-m-state:根据连接的状态决定行为,参考鸟哥私房菜服务器篇第三版P275。INVALID:无效数据包、ESTABLISHED:已成功建立连接的状态、NEW:想要建立新连接的状态、RELATED:是够与主机发送出去的数据包相关
没有列出的选项代表完全接受。

一些例子:

# 查看目前的NAT表的规则
iptables -L -t nat -n
# 列出完整的防火墙规则
iptables-save
# 清除所有的已制定的规则(慎用,可能导致远程连接断开,无法登录)
iptables -F
# 清除用户自定义的tables
iptables -X
# 将所有chain的计数与流量统计归零
iptables -Z
# 定义默认策略,-P(P大写)
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING DROP
# 想要进入本机21端口的都阻挡掉
iptables -A INPUT -i eth0 -p tcp --dport 21 -j dump
# 删除规则 https://stackoverflow.com/questions/10197405/how-can-i-remove-specific-rules-from-iptables
## 第一种是重新执行一遍要删除的rule,不过将-A换成-D
iptables -D INPUT -i eth0 -p tcp --dport 21 -j dump
## 按行号删除
iptables -L INPUT --line-numbers
iptables -D INPUT 2
sudo iptables -t nat -D PREROUTING 1 

NAT

SNAT

来源NAT:修改数据包报头的来源项目
内网主机发送报文到公网时,通过路由之后修改源ip为公网地址。

DNAT

目标NAT:修改数据包报头的目标项目
公网发来的数据包在路由之前修改目的ip为内网地址,发送到对应主机。

端口映射

举例说明:

路由器两个网络接口eth1是公网接口(ip是223.224.236.21)、br-lan是内网接口(ip是192.168.1.1
主机私有地址192.168.1.205
如果要开启ssh,则需要将主机的22端口映射到路由器上.

# 进入路由器eth1网络接口3003端口的数据包转发到主机22端口
iptables -t nat -A PREROUTING -i eth1 -d 223.224.236.21 -p tcp --dport 3003 -j DNAT --to 192.168.1.205:22
# 从eth1网络接口发出的来自192.168.1.205的22端口的数据包将源地址修改为223.224.236.21
# iptables -t nat -A POSTROUTING -o eth1 -d 192.168.1.205 -p tcp --dport 22 -j SNAT --to 223.224.236.21

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值