IPtables学习笔记四

一、自定义链

定义一条新链:
# iptables -N clean_in
添加规则:
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
# iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP

# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
如果上面的规则一条也没匹配到,则返回到主链:
# iptables -A clean_in -d 172.16.100.7 -j RETURN 

被主链调用:
# iptables -I INPUT -j clean_in

删除自定义链
#iptables -X clean_in (但是,必须要求clean_in为空链)

二、利用iptables的recent模块来抵御DOS攻击

如果有客户端不断的试图暴力破解服务器的密码,则需要用到recent模块

前面已经对iptables的-m选项有所了解了,接下来介绍-m选项中的recent模块

recent模块
常用参数
--name    #设定列表名称,默认DEFAULT。
--rsource #源地址,此为默认。
--rdest   #目的地址
--seconds #指定时间内
--hitcount#命中次数
--set     #将地址添加进列表,并更新信息,包含地址加入的时间戳。
--rcheck  #检查地址是否在列表,以第一个匹配开始计算时间。
--update  #和rcheck类似,以最后一个匹配计算时间。
--remove  #在列表里***相应地址,后跟列表名称及地址

要防止客户端对服务器的暴力破解方法1:

#iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP

但是这种方法不好,因为利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

我们可以利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问:

#iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH 
记录访问tcp 22端口的新连接,记录名称为SSH 。--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
#iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
SSH记录中的IP300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用

以上记录会被保存在:/proc/net/ipt_recent/SSH

当然也可以自己用日志形式进行记录。

三、网络防火墙(NAT Network Address Translation)

之前的iptables规则都是在默认表(filter)的INPUT和OUTPUT链上,相当于是主机防火墙

接下来,对设置网络防火墙,主要有:
    SNAT:源地址转换
    DNAT:目标地址转换

都是在网关(相当于一台电脑有两个网口,一个接内网,一个接外网)上进行设置的。


将/proc/sys/net/ipv4/ip_forward置为1,则该主机便打开了网络间转发功能,转发所有报文。(可以作为路由器)


3.1、源地址转换

-j SNAT 
--to-source 明确指定修改源地址为什么
-j MASQUERADE:地址伪装(会自动选择一个能上互联网的地址,转换过去)若用ADSL拨号上网,则得到的地址会一直变,因此用MASQUERADE只有外网地址是动态获取的时候才用MASQUERADE,因为效率很低)

例1:

公网地址:ADSL172.16.100.7
要让内网地址能访问互联网上的任何一个网络

启用地址转换
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 172.16.100.7

转换为多个网关
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 172.16.100.7-172.16.100.9

接例1、不允许ping外网但是可以与外网通信
#iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT (拒绝ping)

#iptables -L -n 查看是否匹配到

例2、给网关设置规则来过滤报文

所有经过网关转发的报文都需要经过网关的forward链

#iptables -P FORWARD DROP 默认规则丢弃

只要是已建立的连接就放行
#iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT (如果为已建立的连接,就放行) 

只允许内网用户访问外网
#iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT (放行)
放行内网用户ping出去
#iptables  -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT

放行内网用户ftp服务(确保已经装载了与ftp相关的内核模块):
#iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEPT (放行了ftp的命令连接)
#iptables -R FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT  (放行ftp的数据连接)

3.2、DNAT:目标地址转换 (服务器打开了ip_forward网卡间转发)

-j DANT
  --to-destination IP[:port]一定要指明端口号

两台服务器一台http一台ftp,但只有一个网关(公网地址),希望两台服务器都能被外网访问,这时就需要目标地址访问
做目标地址转换,一定是数据报文刚进入网卡时就转换,在路由选路发生之前就转换

外网地址:172.16.100.11 网关:172.16.100.7 
内网地址:192.168.10.22 网关:192.168.10.6

当外网有人访问的http服务时,转换到内网的地址【回应数据报文时,会自动做源地址转换】

#iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22
也可以用不同的端口响应原始的访问PNAT
#iptables -t nat -R PREROUTING  1 -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22:8080
外网用户访问内网服务时,如果包含mazi字符串,则拒绝
#iptables -A FORWARD -m sting --algo kmp --string "mazi" -j DROP
#iptables -L -n -v 查看是否匹配到规则
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值