iptables增加与插入规则语法

  • 格式:doc
  • 大小:41.50 KB
  • 文档页数:7

iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] [-io

interface] [-p tcp,udp,icmp,all] [-s IP/network]

[--sport ports] [-d IP/network] [--dport ports] -j

[ACCEPT,DROP]

参数说明:

-A :新增加一条规则,该规则增加在最后面,例如原本已经有四条规则,使用 -A 就可以加上第五条规则!

-I :插入一条规则,如果没有设定规则顺序,预设是插入变成第一条规则,例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5

INPUT :规则设定为 filter table 的 INPUT 链

OUTPUT :规则设定为 filter table 的 OUTPUT 链

FORWARD:规则设定为 filter table 的 FORWARD 链

-i :设定『封包进入』的网络卡接口

-o :设定『封包流出』的网络卡接口

interface :网络卡接口,例如 ppp0, eth0, eth1....

-p :请注意,这是小写呦!封包的协议啦!

tcp :封包为 TCP 协议的封包;

upd :封包为 UDP 协议的封包;

icmp:封包为 ICMP 协议;

all :表示为所有的封包!

-s :来源封包的 IP 或者是 Network ( 网段 );

--sport:来源封包的 port 号码,也可以使用 port1:port2 如

21:23

同时通过 21,22,23 的意思

-d :目标主机的 IP 或者是 Network ( 网段 );

--dport:目标主机的 port 号码;

-j :动作,可以接底下的动作;

ACCEPT :接受该封包

DROP :丢弃封包

LOG :将该封包的信息记录下来 (预设记录到

/var/log/messages 档案)

范例一:所有的来自 lo 这个界面的封包,都予以接受

[root@test root]# iptables -A INPUT -i lo -j ACCEPT

# 注意一下,因为 -d, --dport, -s, --sport 等等参数都没有设定,这表示:

# 不论封包来自何处或去到哪里,只要是来自 lo 这个界面,就予以接受!

# 这个观念挺重要的,就是『没有设定的规定,则表示该规定完全接受』的意思!

# 例如这个案例当中,关于 -s, -d...等等的参数没有规定时!

范例二:来自 192.168.0.1 这个 IP 的封包都予以接受:

[root@test root]# iptables -A INPUT -i eth0 -p tcp -s

192.168.0.1 -j ACCEPT

# 新增一条规则,只要是来自于 192.168.0.1 的封包,不论他要去哪里,使用的是那个协议 (port) 主机都会予以接受的意思。

范例三:来自 192.168.1.0 这个 C Class 的网段的任何一部计算机,就予以接受!

[root@test root]# iptables -A INPUT -i eth0 -p tcp -s

192.168.1.0/24 -j ACCEPT

# 这个是网段的写法喔!稍微注意一下的是,在范例二当中我们仅针对一个 IP ,

# 至于这个范例当中,则是针对整个网段来开放吶!而网段的写法可以是:

# 192.168.1.0/24 也可以是 192.168.1.0/255.255.255.0 都能够接受喔!

范例四:来自 192.168.1.25 的封包都给他丢弃去!

[root@test root]# iptables -A INPUT -i eth0 -p tcp -s

192.168.1.25 -j DROP

范例五:只要是想进入本机的 port 21 的封包就给他丢弃

[root@test root]# iptables -A INPUT -i eth0 -p tcp

--dport 21 -j DROP

范例六:来自 192.168.0.24 这个 IP 的封包,想要到我的

137,138,139 端口时,都接受

[root@test root]# iptables -A INPUT -i eth0 -p tcp -s

192.168.0.24 --dport 137:139 -j ACCEPT

范例七:只要是接触到我主机的 port 25 就将该封包记录 (LOG) 下来

[root@test root]# iptables -A INPUT -p tcp --dport 25

-j LOG

# 还是请特别注意到『规则的顺序排列』的问题喔!

iptables 的其它相关参数说明:

[!] --syn :这个设定仅能用于 -p tcp 的规则中,因为 TCP 封包有 syn 的旗标存在啊!当 TCP 封包存有 syn 旗标,表示这个联机是对方『主动』连过来的!

若于 --syn 之前加上 ! 表示该封包不带有 syn 的意思~(刚好相反之意!)

范例一:将来自 192.168.100.200 的主动联机封包丢弃:

[root@test root]# iptables -A INPUT -p tcp -i eth0 -s

192.168.100.200 --syn -j DROP

--icmp-type:可以管制 ICMP 封包的某些类型!还记得我们在 网络基础 里面谈到的 ICMP 的某些类型吧!对啦!如果您不想要让对方

ping 到您的机器,就是利用这个!

范例二:别的主机 ping 我们主机时,我们主机不予以响应

[root@test root]# iptables -A INPUT -p icmp --icmp-type

8 -j DROP

# 当您下达这样的指令后,就表示未来别人对您使用 ping 的时候,

# 我们的主机将不会响应,所以对方主机就会显示我们主机『无法连接』的状态!

-m :表示封包的状态,状态有底下数种:

-m mac --mac-source aa:bb:cc:dd:ee:ff

这个就是我们上面提到的可以控制『网卡卡号, MAC』的设定方法啰!

那个 aa:bb:cc:dd:ee:ff 就是网络卡的 MAC !

-m state --state

有数种状态,状态有:

INVALID:无效的封包,例如数据破损的封包状态

ESTABLISHED:已经联机成功的联机状态;

NEW:想要新建立联机的封包状态;

RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机喔!可以简化相当多的设定规则啦!

范例三:让 bb:cc:dd:aa:ee:ff 网络卡无法使用我们主机的资源

[root@test root]# iptables -A INPUT -p all -m mac

--mac-source 01:01:01:01:02:01 -j DROP

# 这种方式可以用来管制网卡卡号喔!就不怕别人使用 IP 搞怪了!

范例四:让已经建立或者是与我们主机有关的响应封包通过,但是让不合法的,以及想要尝试新建立的封包被抵挡在外!

[root@test root]# iptables -A INPUT -p tcp -m state

--state ESTABLISHED,RELATED -j ACCEPT

[root@test root]# iptables -A INPUT -p tcp -m state

--state INVALID,NEW -j DROP

# 需要设定两条喔!至于封包状态则可以使用逗号隔开!逗号两边不要有空格

-j :除了比较常见的 ACCEPT 与 DROP 之外,还有哪些动作?

REDIRECT --to-ports

这个也挺常见的,基本上,就是进行本机上面 port 的转换就是了!

不过,特别留意的是,这个动作仅能够在 nat table 的

PREROUTING 以及 OUTPUT 链上面实行而已喔!

MASQUERADE:封包伪装

这个就是 NAT 主机最重要的一个机制啦!进行封包的伪装!

范例五:将要求与 80 联机的封包转递到 8080 这个 port

[root@test root]# iptables -t nat -A PREROUTING -p tcp

--dport 80 -j REDIRECT --to-ports 8080

# 这玩意最容易在您使用了非正规的 port 来进行某些 well known

的协议,

# 例如使用 8080 这个 port 来启动 WWW ,但是别人都以 port 80

来联机,

# 所以,您就可以使用上面的方式来将对方对您主机的联机传递到

8080 啰!

范例六:进行封包的伪装,将来自 192.168.0.0/24 的封包的来源 IP

伪装成为本机的 ppp0 那个界面的 IP。

[root@test root]# iptables -t nat -A POSTROUTING -s

192.168.0.0/24 -o ppp0 -j MASQUERADE

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i eth+ -j ACCEPT

iptables -A OUTPUT -o eth+ -j ACCEPT

iptables -A INPUT -i ppp0 -j ACCEPT

iptables -A OUTPUT -o ppp0 -j ACCEPT