iptables的学习和使用(慕课学习笔记)

常见于Linux系统下的应用层防火墙工具

Netfilter

Netfilter 是 Linux操作系统核心层内部的一个数据包处理模块
Hook point 是数据包仔Netfilter中的挂载点(PRE_ROUTING , INPUT , OUTPUT , FORWARD , POST_ROUTING)

iptables 规则组成
组成部分:4张表 + 5条链(Hook point) + 规则
4张表 : filter , nat , mangle , raw
5条链 : PRE_ROUTING , INPUT , OUTPUT , FORWARD , POST_ROUTING

  • Mangle表 :修改数据包,改变包头中内容(TTL,TOS,MARK)
  • Raw表 :数据包状态跟踪
  • filter表:访问控制、规则匹配
  • nat表:地址转发
    数据包在规则表、链匹配流程
    iptables规则组成
    iptables规则组成
  • -t filter/nat 对表
  • -A 在后边追加一个规则
  • -D 删除
  • -L 显示规则 ,与 -n 连用,隐藏不相关的规则
  • -F 清理现有规则
  • -P 设置默认的规则
  • -I 在原有规则基础上插入规则变成第一条规则

  • -p tcp 显示协议
  • -s 发起源
  • -d 目标地址
  • -sport 发起源端口
  • -dport 目标端口
  • -dports 端口段
  • -m tcp 端口补充

iptables -L
iptables -F
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT 
nmap -sS -p 0-1000 10.10.163.233	//扫描0-1000的端口
iptables -nL
iptables -D INPUT -p tcp --dport 80 -j ACCEPT	//删除规则
iptables -I INPUT -p tcp --dport 80 -j REJECT 	//不允许访问80端口

可能存在的问题

  • 本机无法访问本机
  • 本机无法访问外机

解决方法

iptables -I INPUT -i lo -j ACCEPT	//允许本地访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT		//允许访问外网
iptables -D INPUT tcp --dport 80 -j ACCEPT	//清除规则
iptables -I INPUT tcp -s 10.10.188.233 --dport 80 -j ACCEPT	//只允许特定的IP访问

ftp模式下的规则
FTP主动模式
FTP被动模式

FTP主动模式下的iptables的设置

  • FTP连接的默认模式是被动模式
  • vsftpd服务支持主动模式需要注意配置选项
	port_enabled=yes
	connect_from_port_20=yes
  • iptables需要开启21端口的访问权限
iptables -F		//清理
iptables -I INPUT -p tcp -dport 21 -j ACCEPT

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		//临时
    $ vim /etc/sysconfig-iptables-config	//开机自动加载
    IPTEBLES_MODULES="nf_conntrack_ftp"
    

公司场景模拟

一、员工在公司内部(10.10.155.0/24,10.10.188.0/24)能访问服务器上的任何服务
二、当员工出差上海,通过VPN连接到公司,外网=== 拨号到= =》内网FTP,SAMBA,NFS,SSH
三、公司有个门户网站需要允许公网访问

常见的允许外网访问的服务

网站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

实现:

iptables -F
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT
iptebles -A INPUT -s 10.10.188.0/24 -j ACCEPT
iptables -A INPUT -s 10.10.140.0/24 -j ACCEPT	//本机网段

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT	//VPN端口1723
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT		

保存方法1.
/etc/init.d/iptables save		//保存规则备份
保存方法2.
$ history		//拷贝历史
$ vim /opt/iptables_ssh.sh	//写成shell文件
#!/bin/sh
...	//拷贝历史
$ /bin/sh /opt/iptables_ssh.sh

SANT规则设置
Iptables防火墙nat表规则配置
数据包流程
SNAT场景模拟

//10.10.188.173机器
1.配置好80端口
//10.10.188.232机器
$ vim /etc/sysctl.conf
net.ipv4.ip_forward=1
$ sysctl -p
$ iptables -t -nat -A POSTRPUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232		//转发设置
//10.10.177.233机器
curl 	http://10.10.188.173/hello/		//接通测试

cat /etc/sysconfig/network
route add 0.0.0.0 gw 10.10.177.232

DNAT场景模拟
DNAT场景模拟

//10.10.188.173机器
curl	http://10.10.188.232/		//连通测试
curl	http://10.10.188.232/test.txt
//10.10.188.232机器
iptables -F
iptables -t nat -A PREROUTING -d 10.10.188.232	-p tcp --dport 80 -j DNAT --to 10.10.177.233:80
iptables -t nat -L		//查看策略
//10.10.177.233机器
ping 10.10.177.232	//能连通
netstat	-luntp|grep	80		//80端口开放
curl http://10.10.177.233/test.txt	//能够访问	

利用iptables防CC攻击
防CC攻击

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

防CC攻击
模拟场景

//10.10.188.232机器
ping 10.10.188.233	//测试
//10.10.188.233机器
iptables -A INPUT -p icmp -m limit --limit 1/m	--limit-burst 10 -j ACCEPT	//允许10个内运行,超出则每分钟一个
iptables -A INPUT -p icmp -j DROP

命令实例脚本

//FTP内核模块
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		//默认规则设置
//开发本地访问
ipbtales -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dports 110,80,25,-j ACCEPT		//只允许访问80端口,POP3端口110,smtp端口25
iptables -A INPUT -p tcp -s 10.10.0.0/24 --dport 139 -j ACCEPT		//允许内网10.10.0.0网段的samba协议端口139访问

iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT		//允许通过eth1网卡访问udp  DNS端口53

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT		//允许vpn端口1723访问
iptables -A INPUT -p gre -j ACCEPT		//允许虚拟隧道协议访问

iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT		//只允许ip 192.186.0.0访问
iptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP	//只允许ppp0访问,限制15个链接

iptables -A INPUT -p icmp -j DROP	//封闭访问

iptables -t nat -A POSTROUTING -o ppp0 -s 10.10.0.0/24 -j MASQUERADE	//原地址的转发为ppp0出口--SNAT

//syn攻击限制
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-brust 6 -j RETURN 
iptables -A syn-flood -j REJECT

iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -s 10.10.0.0/24 -m mulitiport --dports 80,110,21,25,1723 -j ACCEPT
iptables -A FORWARD -p udp -s 10.10.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p icmp -s 10.10.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

//规定时间段内屏蔽相关关键词
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30  --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP	//上班期间禁止聊QQ
iptables -I FORWARD -p udp --dport 53  -m string --string "TENCENT" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP

iptables -I FORWARD -s 10.10.0.0/24  -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat  -j DROP

iptables -I FORWARD -s 10.10.0.0/24 -m string --string "ay2000.net" -j DROP
iptables -I FORWARD -d 10.10.0.0/24 -m string --string "eroticism" -j DROP		//分析数据包,屏蔽相关关键词访问

sysctl -w net.ipv4.ip_forward=1	>>	/dev/null		//数据包转发开关
sysctl -w net.ipv4.tcp_syncookies=1 >> /dev/null	//采用cookie防止syn攻击

iptables -I INPUT -s 10.10.0.50 -j ACCEPT	//允许本机访问所有机器
iptables -I FORWARD -S 10.10.0.50 -J ACCEPT


慕课课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值