一、iptables filter表案例

需求:将80、20、21端口放行,对22端口指定特定的ip才放行

以下为操作方法:

vim  /usr/local/sbin/iptables.sh    //加入如下内容


#! /bin/bashipt="/usr/sbin/iptables"   //定义一个变量,写iptables的绝对路径
$ipt -F                //清空规则
$ipt -P INPUT DROP        //添加默认的INPUT规则
$ipt -P OUTPUT ACCEPT     //添加默认的OUTPUT规则
$ipt -P FORWARD ACCEPT    //添加默认的FORWARD规则
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT      //放行一些相关的通信,这一条加上防止一些小问题,以后写规则只需要修改之后的部分即可
$ipt -A INPUT -s 192.168.127.0/24 -p tcp --dport 22 -j ACCEPT  
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

 icmp示例


iptables -I INPUT -p icmp --icmp-type 8 -j DROP   //可以ping通别人,别人ping不通自己,简单说就是禁止别人ping自己


二、iptables  nat表应用

A机器两块网卡ens33(192.168.127.133)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
 需求1:可以让B机器连接外网
 A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
 A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
 B上设置网关为192.168.100.1
 需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
 A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
  A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
 A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
 B上设置网关为192.168.100.1

以下为上面两个问题的具体操作

首先,在两个机器各增加一个网卡,链接方式都选LAN区段,然后将其中一台机器的原来的网卡禁用

iptables如何让一个ip延迟发送 iptables放行指定ip_外网

iptables如何让一个ip延迟发送 iptables放行指定ip_iptables如何让一个ip延迟发送_02

自己随便添加一个,我这里叫China

,这时候A机器有两个网卡,一个可以连外网,一个是刚加的china网段(内网),B机器只有China网段的内网网卡

iptables如何让一个ip延迟发送 iptables放行指定ip_iptables如何让一个ip延迟发送_03

这时候A机器的ens37还没有ip



ifconfig ens37 192.168.100.1/24  //快速设置ip



B机器由于 禁用了可以连外网的网卡,现在无法远程登陆,只能去主机操作,同样给ens37设置ip



ifconfig ens37 192.168.100.100/24



设置完之后可以互相ping一下测试

iptables如何让一个ip延迟发送 iptables放行指定ip_外网_04

A机器(A/B两个机器最好先 iptables -F (iptables -t nat -F)一下,我在最后遇到了主机B可以ping主机A 的两个我网卡ip,但是ping不通外网与192.168.127.1,最后是执行iptables -F 然后重新添加下面的规则才解决问题

echo "1">/proc/sys/net/ipv4/ip_forward  //此文件默认为0,改为1就是打开路由转发
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE  //让192.168.100.0/24 可以以ens33联网

B机器设置网关


route -n   //查看网关
route add  default gw 192.168.100.1   //设置网关为192.168.100.1
 
  
ping 192.168.127.133  //ping A机器的外网ip  测试可以ping通


iptables如何让一个ip延迟发送 iptables放行指定ip_数据_05

这时候还不能连外网,需要设置下dns,



vi   /etc/resolv.conf



添加

nameserver 119.29.29.,29

再测试是否可以ping通外网

iptables如何让一个ip延迟发送 iptables放行指定ip_数据_06


问题二:

首先清理A机器nat规则


iptables -t nat -F 
iptables -t nat -A PREROUTING -d 192.168.127.133 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22   //将192.168.127.133的1122端口的数据转发192.168.100.100:22端口
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.127.133   //将192.168.100.100返回的数据转发到192.168.127.133


给B机器增加网关(之前已经做过,这里省略)


route add  default gw 192.168.100.1   //设置网关为192.168.100.1

这时候在xshell中登陆192.168.127.133的1122端口,成功登陆了B主机

扩展:

针对网段

iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP

iptables限制syn速度

1. iptables -A INPUT -s ! 192.168.0.0/255.255.255.0 -d 192.168.0.101 -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name httpuser --rsource
2. iptables -A INPUT -m recent --update --seconds 5 --hitcount 20 --name httpuser --rsource -j DROP

原理,每5s内tcp三次握手大于20次的属于不正常访问

其中192.168.0.0/255.255.255.0 为不受限制的网段, 192.168.0.101  为本机IP。
该iptables策略,可有效预防syn***,也可以有效防止机器人发垃圾帖。