iptables限制某个IP(网段/某段IP)连接指定端口
iptables只允许某个IP(段)访问服务器指定端口(或全部端口)
20130407 Chenxin
禁止访问设置(禁止某个IP或某段IP访问服务器固定端口)
iptables -A INPUT -s 192.168.80.121 -p tcp -d 192.168.11.4 --dport 80 -j DROP
iptables -A INPUT -s 192.168.80.0/24 -p tcp -d 192.168.11.4 --dport 80 -j DROP
iptables -A INPUT -m iprange --src-range 192.168.80.109-192.168.80.121 -p tcp -d 192.168.11.4 --dport 80 -j DROP
也可以不指定目标地址,只给出源地址:
iptables -A INPUT -s 192.168.80.121 -p tcp --dport 80 -j DROP
只允许固定ip(段)访问服务器固定端口(注意规则顺序,具体查看扩展阅读二,-I与-A)
iptables -A INPUT -s 192.168.80.121 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.10.205 --dport 80 -j DROP(-I是插入的意思,-A添加)
(-A会将新加的规则追加到之前规则的最后面,-I则是插入到最前面)
或者是允许多个地址段,如下:
iptables -I INPUT -s 192.168.80.0/24 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.10.0/24 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -nL -v --line-numbers (规则默认顺序采取的是压入iptables的方式)
Chain INPUT (policy ACCEPT 1102 packets, 153K bytes)
num pkts bytes target prot opt in out source destination
1 12 522 ACCEPT tcp -- * * 192.168.80.121 192.168.10.205 tcp dpt:80
2 3 152 DROP tcp -- * * 0.0.0.0/0 192.168.10.205 tcp dpt:80
查看规则链
查看当前规则对应的规则号:
iptables -nL --line-numbers #--numeric -n numeric output of addresses and ports
#--list -L [chain [rulenum]] List the rules in a chain or all chains
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 192.168.80.0/24 192.168.11.4 tcp dpt:80
查看当前规则中各规则具体接收和发送数据情况:
iptables -nL -v #--verbose -v verbose mode
Chain INPUT (policy ACCEPT 9870 packets, 1348K bytes)
pkts bytes target prot opt in out source destination
3 152 DROP tcp -- * * 192.168.80.0/24 192.168.11.4 tcp dpt:80
放在一起也可以:
iptables -nL --line-numbers -v
清除规则链
清除原先的规则
iptables -F; --flush -F [chain] Delete all rules in chain or all chains
iptables -F -t nat;
iptables -X; --delete-chain -X [chain] Delete a user-defined chain
根据规则号清理:
iptables -D INPUT 1 # --delete -D chain rulenum. Delete rule rulenum (1 = first) from chain
设置默认规则
iptables -P INPUT ACCEPT; --policy -P chain target. Change policy on chain to target
iptables -P OUTPUT ACCEPT;
iptables -P FORWARD ACCEPT;
如果发现设置出错,可以让机房重启服务器即恢复初始状态.
扩展阅读一:
iptables执行规则顺序
iptables执行规则时,是从从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则, 执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。
1.一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则.
2.一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行.
3。一种是中止所有规则队列的执行.
iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。
ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则炼(nat:postrouting)
REJECT 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。 范例如下:
iptables -A FORWARD -p TCP ——dport 22 -j REJECT ——reject-with tcp-reset
DROP 丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式 porxy 或用来保护 web 服务器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080
MASQUERADE 改写封包来源IP为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE ——to-ports 1024-31000
LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其它规则。例如:
iptables -A INPUT -p tcp -j LOG ——log-prefix "INPUT packets"
SNAT 改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT ——to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 ——dport 80 -j DNAT ——to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用……等。
RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。
MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:
iptables -t mangle -A PREROUTING -p tcp ——dport 22 -j MARK ——set-mark 2
扩展阅读二:
iptables 添加/删除/查看/修改
当我们用iptables添加规则,保存后(services iptables save),这些规则以文件的形势存在磁盘上的,以centos为例,文件地址是/etc/sysconfig/iptables,我们可以通过命令的方式去添加,修改,删除规则,也可以直接修改/etc/sysconfig/iptables这个文件就行了。
二,添加防火墙规则
1,添加filter表
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT //开放21端口
2,添加nat表
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
将源地址是 192.168.10.0/24 的数据包进行地址伪装
3,-A默认是插入到尾部的,可以-I来插入到指定位置(默认-I是插入到最前面)
iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT
iptables -L -n --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 //-I指定位置插的
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
7 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID,NEW
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 //-A默认插到最后
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
三,查下iptable规则
1,查看filter表
iptables -L -n --line-number |grep 21 //--line-number可以显示规则序号,在删除的时候比较方便
5 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:21
如果不加-t的话,默认就是filter表,查看,添加,删除都是的
2,查看nat表
iptables -t nat -vnL POSTROUTING --line-number
Chain POSTROUTING (policy ACCEPT 38 packets, 2297 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 MASQUERADE all -- * * 192.168.10.0/24 0.0.0.0/0
四,修改规则
iptables -R INPUT 3 -j DROP //将规则3改成DROP
五,删除iptables规则
iptables -D INPUT 3 //删除input的第3条规则
iptables -t nat -D POSTROUTING 1 //删除nat表中postrouting的第一条规则
iptables -F INPUT //清空 filter表INPUT所有规则
iptables -F //清空所有规则
iptables -t nat -F POSTROUTING //清空nat表POSTROUTING所有规则
六,设置默认规则
iptables -P INPUT DROP //设置filter表INPUT默认规则是 DROP
所有添加,删除,修改后都要保存起来,/etc/init.d/iptables save.上面只是一些最基本的操作,要想灵活运用,还要一定时间的实际操作。