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,
-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 :接受该封包 covered
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