iptables常用知识回顾点
- iptables -I/-A/-D 后紧跟 链 ,可以是INPUT,OUTPUT,FORWARD
- iptables -P 用来指定 链的默认策略 --------最好不要直接操作,否则会造成远程的终端断开
iptables案例
需求:
把80,22,21端口放行,但22端口指定一个IP段,只允许这个IP段的IP访问的时候,才可访问到,其他段的一概拒绝; 使用脚本来实现 RELATED状态,这是一个边缘的一个状态 比如:客户端和服务端相互了通信,建立完连接之后,还会有一些额外的链接出来,这时候状态就变成了RELATED(若紧紧只有ESTABLISHED,而没有RELATED,很有可能导致其他的通信被禁掉,因为默认策略是INPUT DROP) ESTABLISHED状态, 保持连接 有时,在没有增加-m --state这条规则,导致增加了80或21端口,但是不能正常通信,加这条规则的目的是为了让通信更加顺畅编辑脚本
[root@linux-128 ~]# vim /usr/local/sbin/iptables.sh
添加内容:
#! /bin/bashipt="/usr/sbin/iptables"#这里ipt是定义个一个变量(写脚本的时候,写全局的路径,就是绝对路径,就是后面再加载它,用变量去代替,看着更加简单)$ipt -F#清空之前的规则——>在没有 -t 指定表的时候,默认的就是filter表$ipt -P INPUT DROP#把IPPUT的策略给扔掉$ipt -P OUTPUT ACCEPT#把OUTPUT放行$ipt -P FORWARD ACCEPT#把FORWARD放行$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT#增加规则,-m --state 指定了状态,并针对这些状态放行(-m --state这种用法并不多见,但是这条规则必须写进来,目的是让相关>的数据包放行)$ipt -A INPUT -s 192.168.202.130/24 -p tcp --dport 22 -j ACCEPT#把该网段的22端口数据包放行——>这里的IP段根据自己的IP段来做实验$ipt -A INPUT -p tcp --dport 80 -j ACCEPT#把80端口数据包放行$ipt -A INPUT -p tcp --dport 21 -j ACCEPT#把21端口数据包放行
执行脚本:
[root@linux-128 ~]# sh /usr/local/sbin/iptables.sh
[root@linux-128 ~]# iptables -nvLChain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 30 2148 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 192.168.202.0/24 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 18 packets, 1816 bytes) pkts bytes target prot opt in out source destination
注意:为什么这里要用脚本:因为这里有INPUT DROP,肯定要把你的远程连接给断开,所以需要执行脚本把你的命令批量执行。
icmp示例
iptables -I INPUT -p icmp --icmp-type 8 -j DROP 这个规则会产生一个效果,让你ping外面的机器还可以ping通,但是ping本机的时候,就不会通了
[root@linux-128 ~]#iptables -I INPUT -p icmp --icmp-type 8 -j DROP
注意:这里会发现可ping通外面的网络,但自己的虚拟机和物理机则无法连接
[root@linux-128 ~]# ping www.baidu.comPING www.a.shifen.com (180.97.33.107) 56(84) bytes of data.64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=1 ttl=128 time=17.4 ms64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=2 ttl=128 time=17.5 ms64 bytes from 180.97.33.107 (180.97.33.107): icmp_seq=3 ttl=128 time=17.8 ms^C--- www.a.shifen.com ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2004msrtt min/avg/max/mdev = 17.403/17.614/17.895/0.206 ms
这时用自己的物理机去ping虚拟机,会发现无法连接
这时,再来删除这条命令
[root@linux-128 ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROPiptables: Bad rule (does a matching rule exist in that chain?).
service iptables restart 重启iptables服务
[root@linux-128 ~]# service iptables restart //重启iptables服务Redirecting to /bin/systemctl restart iptables.service[root@linux-128 ~]# iptables -nvL //这里会看到还没禁掉之前的规则Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 81 6996 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 61 packets, 6060 bytes) pkts bytes target prot opt in out source destination