iptables的使用
格式:
iptables -t 表名 选项(参数) 链名称 条件 动作
安装:
1.yum install iptables*
启动:
systemctl start iptables
关闭firwalld:
systemctl disable --now firewalld
参数
常用:
pkts :数据包
-t :操作的表
-L :列出当前规则
-v :显示数据包和数据包大小
-n :不反解地址(反解就是转换为英文单词)
-A :追加一条规则到链中
-I :插入一条规则到顶部
-F :清空(清空所有规则)
-Z :清空计数器
动作
常用:
ACCET :将数据包方形,进行完此处理动作后,将不在对比其他规则,直接跳往下一个规则链
REJECT :阻止该数据包,并传送数据包通知对方(阻隔后通知对方)
DROP :丢弃包不予处理,进行完此动作后,将不再对比其他规则,直接终端过滤程序(直接丢弃)
REDIRECT :将包重新导向另一个端口,进行此动作处理完成后,将会继续对比其他规则
iptables基本的条件匹配
TCP(http)
UDP
ICMP(ping)
ALL(所有)
-s源地址,-d目标地址
-s源地址:
发生请求的地址
-d目标地址:
访问(接收)的地址
--sport源端口,--dport目标端口
--sport源端口:
发生请求出去的端口
--dport目标端口
访问的端口
-i,-o,-m,-j动作
-i :进来的网卡
-o :出去的网卡
-m :指定模块
-j :转发的动作
-p :指定协议
案例
案例1:只允许22端口可以访问,其他端口全部无法访问。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例2:只允许22,80,443端口可以访问,其他端口全部无法访问。
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例3:只允许22,80,443端口可以访问,其他端口全部无法访问,但是本机可以访问百度。
案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行
iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例5:只允许192.168.15.71能够通过22端口链接,其他的不行。
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
案例6:要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP
案例7:要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i etho -j DROP
使用172.16.1.71登录进来的窗口,不允许访问百度。
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP
案例8:要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
iptables -t filter -I INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -I INPUT -p TCP --dport 22 -j DROP
知识储备
查看本机端口占用的命令:
netstat -nutlb
curl 网址
模块
扩展iptables的功能
multiport模块
连续匹配多个端口
参数:
--dports
指定多个端口,不同端口以逗号(,)分割,连续的多个端口以冒号(:)分割
iprange模块
指定一段连续的ip地址范围
参数:
--src-range from[-to] :源地址范围
--dst-range from[-to] :目标地址范围
string模块
匹配指定字符串
--string pattern :指定字符串
--lago {bm|kmp} :指定算法
time模块
根据时间段匹配报文
注:时区为UTC时间
--timestart hh:mm[:ss] :开始时间
--timestop hh:mm[:ss] :结束时间
--monthdays day[,day...] :指定一个月的某一天
--weekdays day[,day...] :指定周好事周天
icmp模块
禁ping,默认本机无法ping别人,别人无法ping自己
参数:
--icmp-type {type[/code]|typename}
echo-request (8) 请求
echo-reply (0) 回应
connlimit模块
限制链接数,并发连接数
参数:
--connlimit-upto n :现有链接数小于等于n则匹配
--connlimit-above n :大于或等于n则匹配
limit模块
--limit rete[/second|/minute|/hour|/day] :报文数量
--limit-burst number :报文数量(默认:5)
案例
1、要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP
2、要求访问数据包中包含HelloWorld的数据不允许通过。
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
3、要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝
iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP
4、要求每天的12到13之间,不允许访问
iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -j DROP
必须使用UTC时间
5、要求别人不能ping本机,但是本机可以ping别人
iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP
6、要求主机连接最多有2个
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
7、要求限制速率在500k/s左右
iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP