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