iptables高级规则

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40195432/article/details/84934964

iptables高级部分

扩展匹配 man iptables /MATCH EXTENSIONS
扩展动作 man iptables /TARGET EXTENSIONS

netfilter不只是包过滤防火墙(四层)
netfilter同样是状态防火墙

一、扩展匹配 MATCH EXTENSIONS
获得帮助:
[root@uplook ~]# iptables -m icmp -h
[root@uplook ~]# iptables -m iprange -h

[root@uplook ~]# yum -y install vsftpd httpd
[root@uplook ~]# service httpd start; service vsftpd start; service sshd start
[root@uplook ~]# iptables -F
[root@uplook ~]# iptables -A INPUT -j REJECT

-m icmp(防止ping死机)
[root@uplook ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT

-m iprange(来自源池192.168.2.20-192.168.2.100的全部禁掉)
[root@uplook ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.20-192.168.2.100 -j REJECT

-m multiport(多端口)
[root@uplook ~]# iptables -m multiport -h
[root@uplook ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT

-m state
跟TCP中的状态没有关系
NEW 新生态
ESTABLISHED 连接态(客户端发出请求,服务端回应后)
RELATED 衍生态 (相关联的,有数据端口和传输端口的都符合)
INVALID 无效态
[root@uplook ~]# iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

NEW:表示数据包将要或已经开始建立一个新的链接,或者这个包和一个还没有在两端都有数据发送的链接有关。
ESTABLISHED:数据包完全有效,而且属于一个已建立的链接,这个链接的两端都已经有数据发送
RELATED:说明包正在建立一个新的链接,这个链接是和一个已建立的链接有关的
INVALID:说明这个包没有已知的流或链接与之关联

[root@uplook ~]# iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ftp 197,68 —>256*197+68
被动模式 数据端口不固定 服务器开随机等客户端连接

被动模式
tcp控制
new
es

udp数据
data
n
new–>related 状态跟踪把new转为related(允许第一次握手)
establshed

modeprob也可以加载
IPTABLES_MODULES=“nf_conntrack_ftp” 6.0需要加载 7.0无需加载 修改状态

lab1: 使用状态防火墙,放行本机FTP服务[被动模式]
[root@uplook ~]# iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@uplook ~]# iptables -t filter -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@uplook ~]# iptables -t filter -A INPUT -j REJECT
[root@uplook ~]# modprobe nf_conntrack_ftp
[root@uplook ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES=“nf_conntrack_ftp”
小结: 该内核模块的作用是在<连接数据端口时>,将第一次握手的数据包状态由原来的 NEW 识别成 RELATED

-m tos //ip协议头部type of service
[root@uplook ~]# iptables -F
[root@uplook ~]# tcpdump -i eth0 -nn port 22 -vvv //抓取远程主机访问本机ssh数据包,分别于输入密码前和后观察TOS值

[root@uplook ~]# tcpdump -i eth0 -nn port 22 -vvv //抓取远程从本机rsync或scp复制文件,分别于输入密码前和后观察TOS值
小结:都是使用22/tcp,但可以通过IP报文中的TOS值来区分应用
ssh: tos 0x0 0x10
scp: tos 0x0 0x8
rsync: tos 0x0 0x8
[root@uplook ~]# iptables -m tos -h
[root@uplook ~]# iptables -t filter -A INPUT -p tcp --dport 22 -m tos ! --tos 0x10 -j ACCEPT //仅拒绝客户端ssh到本机
[root@uplook ~]# iptables -t filter -A INPUT -j REJECT

0 常规服务
2 低开销
4 最大可靠性
8 最大吞吐量
16 最小延迟

如果只放行scp 不允许ssh 先deny tos 0x10 再发行dport 22

拒绝 --放行 —拒绝

iptables -m tcp -h
-m tcp
按TCP标记匹配
Flags are: SYN(同步位,同步请求) ACK(回应包) FIN() RST(重置位) URG PSH ALL NONE
[root@uplook ~]# iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT
[root@uplook ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT

–tcp-flags SYN,ACK,FIN,RST SYN 检查四个标记位SYN,ACK,FIN,RST 但只有SYN标记位才匹配
则允许三次握手中的第一次握手,等价于 --syn
先放行estalesh 再发行sync

-m limit [要命不要脸]
[root@uplook ~]# iptables -F
实验:从客户端ping本机,观察序列号
[root@uplook ~]# iptables -t filter -A INPUT -p icmp -m limit --limit 20/minute -j ACCEPT
[root@uplook ~]# iptables -t filter -A INPUT -j REJECT
进入本机INPUT链的ICMP,如果匹配第一条则放行,不匹配的将被第二条拒绝,默认前5个不限
16/second
16/minute
16/hour
16/day
[root@uplook ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -m limit --limit 50/second -j ACCEPT
[root@uplook ~]# iptables -t filter -A INPUT -j REJECT

-m connlimit 限同一IP最大连接数
[root@uplook ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@uplook ~]# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 2 -j ACCEPT
//仅允许每个客户端有两个ssh连接
–connlimit-above 2 表示大于两个
等价于:
[root@uplook ~]# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
//超过两个连接拒绝

[root@uplook ~]# iptables -A INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT
//仅允许每个客户端有100个requests
[root@uplook ~]# iptables -A INPUT -j REJECT

-m time(按时间控制)
[root@uplook ~]# iptables -A INPUT -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
[root@uplook ~]# iptables -A INPUT -p tcp --syn --dport 22 -m time --timestart 12:00 --timestop 13:00 -j ACCEPT
[root@uplook ~]# iptables -A INPUT -j REJECT

-m comment
[root@uplook ~]# iptables -A INPUT -s 172.16.130.7 -m comment --comment “cloud class” -j REJECT

-m mark(把所有进来的数据进行打标,打标的名字叫2)
[root@uplook ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

匹配标记
二、动作扩展 TARGET EXTENSIONS

防火墙处理数据包的四种方式(即匹配后的动作):
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息
LOG 在/var/log/messages 文件中记录日志信息,然后将数据包传递给下个规则

filter:
-j ACCEPT
-j DROP
-j REJECT
-j LOG

nat:
-j SNAT //转换源地址
-j MASQUERADE (伪装) //转换源地址
-j DNAT //转换目标地址及端口
-j REDIRECT //转换目标端口(重定向)

mangle:
-j MARK 给数据包打标记

-j LOG 记录日志
[root@uplook ~]# grep 'kern.’ /etc/rsyslog.conf
kern.
/var/log/kernel.log
[root@uplook ~]# service rsyslog restart

[root@uplook ~]# iptables -j LOG -h
[root@uplook ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --log-prefix "discre_ssh "
–log-prefix 是描述信息

[root@uplook ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT
[root@uplook ~]# iptables -t filter -A INPUT -j REJECT 默认返回一个拒绝消息

-j REJECT
当访问一个未开启的TCP端口时,应该返回一个带有RST标记的数据包
当访问一个开启的TCP端口,但被防火墙REJECT,结果返回port xxx unreachable
[root@uplook ~]# iptables -j REJECT -h
[root@uplook ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset //返回一个自定义消息类型

-j MARK
[root@uplook ~]# iptables -t mangle -L
[root@uplook ~]# iptables -j MARK -h
[root@uplook ~]# iptables -t mangle -A PREROUTING -s 192.168.2.110 -j MARK --set-mark 1
[root@uplook ~]# iptables -t mangle -A PREROUTING -s 192.168.2.25 -j MARK --set-mark 2
[root@uplook ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT //按照标记匹配
[root@uplook ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

NAT表:
POSTROUTING: SNAT, MASQUERADE
PRETROUTING: DNAT, REDIRECT
OUTPUT: DNAT,针对本机

-j REDIRECT //本地端口转发
[root@nat_server ~]# iptables -t nat -A PREROUTING -s 172.16.130.0/24 -p tcp --dport 8888 -j REDIRECT --to-ports 22

猜你喜欢

转载自blog.csdn.net/qq_40195432/article/details/84934964
今日推荐