一、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区段,然后将其中一台机器的原来的网卡禁用
自己随便添加一个,我这里叫China
,这时候A机器有两个网卡,一个可以连外网,一个是刚加的china网段(内网),B机器只有China网段的内网网卡
这时候A机器的ens37还没有ip
ifconfig ens37 192.168.100.1/24 //快速设置ip
B机器由于 禁用了可以连外网的网卡,现在无法远程登陆,只能去主机操作,同样给ens37设置ip
ifconfig ens37 192.168.100.100/24
设置完之后可以互相ping一下测试
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通
这时候还不能连外网,需要设置下dns,
vi /etc/resolv.conf
添加
nameserver 119.29.29.,29
再测试是否可以ping通外网
问题二:
首先清理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***,也可以有效防止机器人发垃圾帖。