使用iptables构建安全防护盾

一、什么是iptables,常用人员有哪些?

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

常用人员:系统管理人员、网络工程人员,安全人员

 -------------------------------------------------------------------------羞 涩 的 分 隔 符---------------------------------------------------------------------------------------

二、压力测试小试验:

目标机器: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个包

 

客户端: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
chkconfig --list |grep iptables

-------------------------------------------------------------------------羞 涩 的 分 隔 符---------------------------------------------------------------------------------------

六、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

 

posted @ 2019-09-04 16:48  让未来到来  阅读(716)  评论(0编辑  收藏  举报