Linux运维学习:中级进阶(5)——iptables安全策略构建

说明

什么是iptables,常用人员有哪些?
iptables是常见于Linux系统下的应用层防火墙工具,是Linux内核集成的IP信息包过滤系统。如果linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则系统有利于在linux系统上更好地控制IP信息包过滤和防火墙配置。
常用人员:系统管理人员、网络工程人员,安全人员。

压力测试

1.目标机器:192.168.1.51 开启HTTP服务

service httpd start      # 开启http服务
iptables -F           # 清除规则
netstat -an |grep 80 |grep 192.168.1.190 |grep EST -c # 查看并发数
w                 # 查看
iptables -I INPUT -p tcp --dport 80 -s 192.168.1.190 -m connlimit --connlimit-above 10 -j REJECT # 针对固定IP做策略,进行连接限制,最大访问为10个包

2.客户端:192.168.1.190 使用ab指令对192.168.1.51进行压力测试,windows系统ab工具下载地址:http://httpd.apache.org/

yum install apache2  # 安装ab(Apache Benchmark)
ab --help
ab -n 100000 -c 40 http://192.168.1.51/test.txt
-n 发送数量
-c 累增

思考

1、如何用iptables搭建一套如何企业实际使用的防火墙规则?
2、如何用iptables进行防攻击?
3、如何利用iptables进行数据转发?
4、明白iptables的强大及实际使用意义?

什么是netfilter?

是Linux操作系统核心层内部的一个数据包处理模块。
在这里插入图片描述

什么是Hook point?

是数据包在Netfilter中的挂载点(PRE_ROUTING INPUT OUTPUT FORWARD POST_ROUTING)。

iptables规则组成

组成部分:
四张表 + 五条链(Hook point)+ 规则
四张表:
filter表 nat表 (mangle表 raw表-不常用)
五条链:
INPUT OUTPUT PRE_ROUTING FORWARD POST_ROUTING

mangle表:
修改数据包,改变包头中内容(TTL TOS MARK)
数据包访问控制:
ACCEPT:接受   DROP:丢弃   REJECT:拒绝
数据包改写:
SNAT DNAT
信息记录:
LOG
在这里插入图片描述
在这里插入图片描述

实现如下需求:

规则1:对所有地址开放本机的TCP(80、22、10-21)端口的访问
规则2:允许对所有的地址开放本机的基于ICMP协议的数据包访问
规则3:其它未被允许的端口则禁止访问

netstat -tlnp                               # 查看本机所有开放的端口
iptables -v                                  # 查看版本
iptables -nL                                 # 查看当前规则,n为不显示主机名
iptables -F                                 # 清除规则
iptables -I INPUT -p tcp --dport 80 -j ACCEPT             # 对自己的TCP80端口允许访问
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
iptables -L                                  # 查看当前规则
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j ACCEPT                        # 其它的包拒绝掉
iptables -D INPUT -p tcp --dport 80 -j ACCEPT             # 删除规则
iptables -I INPUT -p tcp --dport 80 -j REJECT             # 插入一条不允许访问80端口
iptables -nL                                 # 查看当前规则,n为不显示主机名

以上存在的问题:本机无法访问本机,本机无法访问其它主机:

iptables -I INPUT -i lo -j ACCEPT                       # lo是网卡,允许本机访问本机
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    # 允许访问外网
curl - I http://127.0.0.1

在此基础上,修改只允许192.168.1.190访问本机的httpd服务:

iptables -D INPUT -p tcp --dport 80 -j ACCEPT                # 删除之前的规则
iptables -I INPUT -p tcp -s 192.168.1.190 --dport 80 -j ACCEPT        # 只允许0.11访问httpd

ftp下的使用案例

1、ftp主动模式下iptables的规则配置
在这里插入图片描述
ftp连接的默认模式为被动模式
vsftpd服务支持主动模式需要注意配置选项,vim /etc/vsftpd/vsftpd.conf
port_enable=yes
connect_from_port_20=YES
/etc/init.d/vsftpd restart

iptables -F                          # 服务端清除所有规则
iptables -I INPUT -p tcp --dport 22 -j ACCEPT    # 开启22端口的访问权限
iptables -I INPUT -p tcp -dport 21 -j ACCEPT     # 开启21端口的访问权限
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -nL                         # 查看规则

客户端模拟登录
ftp 10.113.0.10
name:anonymous
连接后被动模式被拒绝
passive # 客户端改为主动模式
ls # 查看

2、ftp被动模式下iptables的规则配置
在这里插入图片描述
方法一:为vsftpd指定数据端口,并且通过iptables开放相应需要传输的端口段

iptables -I INPUT -p tcp -dport 21 -j ACCEPT
vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT

方法二:使用连接追踪模块

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p tcp -dport 21 -j ACCEPT
modprobe nf_conntrack_ftp    # 临时加载内核模块ftp
modprobe -l|grep ftp    # 查看模块加载
vim /etc/sysconfig/iptables-config    # 开机自动加载
IPTABLES_MODULES="nf_conntrack_ftp"

案例

如下需求,进行实现:
1、员工在公司内部(192.168.1.0/24,192.168.2.0/24)能访问服务器上的任何服务
2、当员工出差例如在上海,通过vpn连接到公司
3、外网员工=拨号到VPN服务器=内网FTP,SAMBA.NFS.SSH
4、公司有一个门户网站需要公网访问

常见外网访问的服务:

网站  www http 80/tcp
    https 443/tcp 邮件  mail smtp 25/tcp
    smtps 465/tcp
    pop3 110/tcp
    pop3s 995/tcp
    imap 143/tcp

一些不允许外网访问的服务:

文件服务器:  NFS 123/udp
        SAMBA 137 138 139 /tcp 445/tcp
        ftp 20/tcp 21/tcp 远程服务:   ssh 22/tcp
        mysql 3306/tcp
        oracle 1521/tcp

基本思路:

允许本地访问
允许已监听状态数据包通过
允许规则中允许的数据包通过,开启远程ssh管理端口
拒绝未被允许的数据包

规则保存成配置文件:

iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT    # VPN端口
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT
/etc/init.d/iptables save
more /etc/sysconfig/iptables
chkconfig iptables on

nat表规则配置

SNAT 源地址转换 出口 postrouting
在这里插入图片描述
DNAT 目标地址 进口 prerouting
在这里插入图片描述
SANT模拟

转发需要编辑 vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
sysctl -a |grep ip_forward
iptables -t nat -A POSTROUTING -s 10.113.0.0/24 -j SNAT --to 10.113.100.232(自己地址)
iptables -t nat -L

在源机器加一条路由 vim /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=localhost
GATEWAY=10.113.100.232

DNAT模拟

iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80
iptables -t nat -L

防CC攻击

connlimit模块

作用:用于限制每一个客户端IP的并发连接数
参数:–connlimit-above n # 限制并发个数

iptables -I INPUT -p tcp -syn -dport 80 -m connlimit --connlimit-above 100 -j REJECT

Limit 模块

作用:限速,控制流量
例:iptables -A INPUT -m limit --limit 3/hour
–limit-burst 默认值为5

iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT    #  每分钟只接受10个包
iptables -A INPUT -p icmp -j DROP

一个规则比较常见的脚本

#This program is about iptables rules
#history
#  20190904 By 那个不是我 FirstRelease
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

iptables -P INPUT DROP    # 默认规则
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m ultiport --dports 110,80,25 -j ACCEPT
iptables -A INPUT -p tcp -s 10.113.0.0/24 --dport 139 -j ACCEPT

iptables -A INPUT -I eth1 -p udp -m multiport --dports 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 1723 - ACCEPT      # VPN
iptables -A INPUT gre -j ACCEPT                # gre隧道

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

iptables -A INPUT -p icmp -j DROP

iptables -t nat -A POSTROUTING -o ppp0 -s 10.113.0.0/24 -j MASQUERADE    # 地址转发

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptalbes -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 10.113.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 10.113.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p gre -s 10.113.0.0/24 -j ACCEPT
iptables -A FORWARD -p icmp 10.113.0.0/24 -j ACCEPT

iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -m time --timestart 8:15 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string "qq.com" -m time --timestart 8:15 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP

iptables -I FORWARD -s 10.113.0.0/24 -m string --string "ay2000.net" -j DROP    # 关键词屏蔽
iptables -I FORWARD -s 10.113.0.0/24 -m string --string "eroticism" -j DROP

iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP

sysctl -w net.ipv4.ip.forward=1 &>/dev/null
sysctl -w net.ipv4.tcp.syncookies=1 &>/dev/null

iptables -I INPUT -s 10.113.0.9 -j ACCEPT          # 自己机器允许所有
iptalbes -I FORWARD -s 10.113.0.9 -j ACCEPT

转自 使用iptables构建安全防护盾

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值