Linux系统安全——iptables相关总结

目录

1.查看iptables规则

2.删除规则

3.插入规则

4.黑白名单

5.添加回环网卡

6.清空规则

7.基本匹配条件

8.扩展匹配条件

9.tcp

10.icmp

11.显式扩展

11.1multiport扩展

11.2iprange扩展

11.3mac

11.4string扩展

11.5time

11.6连接最大数

[11.7limit 限制流量](#11.7limit 限制流量)

11.8state状态

11.8.1实现功能

[老用户可以访问 新用户不可以访问](#老用户可以访问 新用户不可以访问)

延伸

11.9target

12.规则保存

12.1开机自动加载

12.2测试

12.3备份工具

13.自定义链

14.永久开启路由转发功能

15.SNAT

16.DNAT


在使用iptables时注意要先关闭firewalldsystemctl stop firewalld.service

1.查看iptables规则

iptables -vnL

选项 含义
-v 查看时显示更多详细信息
-n 所有字段以数字形式显示
-L 查看规则列表

例,拒绝来自192.168.241.22的源地址 直接丢弃

iptables -t filter -A INPUT -s 192.168.241.22 -j DROP

其中**-t** filter是指filter表,常用的还可以替换为**-t** nat表

|----|---|----|----|----|--------|
| -A | | | | | |
| -D | 链 | 编号 | 规则 | -j | target |
| -I | 链 | | 规则 | | |
| -R | 链 | 编号 | 规则 | | |

target

选项 含义
DROP 已读不回
REJECT 回不合适
ACCEPT 允许
LOG 生成日志
SNAT 使用snat;source 修改源ip
DNAT 使用dnat; 修改目的ip

例,拒绝来自192.168.241.22的源地址 不回复 241网段的主机都无法访问

iptables -A INPUT -s 192.168.241.0/24 -j REJECT

tcpdump -i ens33 icmp -nn 在22主机上抓包只能看到去的包,看不到回的包

注意:配错策略无法远程登录服务器

登录本地 查看规则编号

iptables -vnL --line-numbers

2.删除规则

iptables -D INPUT 2

删除第二条规则

3.插入规则

iptables -I INPUT 编号 -s 192.168.241.22 -j DROP

iptables -I INPUT -s 192.168.241.1 -j ACCEPT 允许本地

iptables -A INPUT -s 192.168.241.0/24 -j REJECT 拒绝所有241网段的主机

4.黑白名单

修改默认规则为白名单后自己也无法访问

iptables -P INPUT DROP

访问127.0.0.1也不行

5.添加回环网卡

iptables -I INPUT 2 -i lo -j ACCEPT

6.清空规则

iptables -F 不包括默认规则 清空全部规则

iptables -P INPUT DROP 修改INPUT链的默认规则为拒绝,清空规则后又无法登录(因为此时的INPUT链的默认规则是拒绝)

手动白名单

iptables -A INPUT -s 192.168.241.1 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -j REJECT 最后再添加拒绝所有,比较安全,也不会影响自己本机登录

7.基本匹配条件

-s, --source address/mask,...:源IP地址或者不连续的IP地址

-d, --destination address/mask,...:目标IP地址或者不连续的IP地址

-p, --protocol protocol:指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or"all"

iptables -I INPUT 2 -p icmp -s 192.168.91.241 -j REJECT 禁止icmp协议,ssh协议可以继续使用

-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链

-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

8.扩展匹配条件

rpm -ql iptables |grep time

man iptables 看不到扩展

man iptables-extensions 扩展模块

隐式扩展 -p tcp 指定了特殊的协议无需再次使用-m 选项

显示扩展 必须加 -m 选项

9.tcp

iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80 -j REJECT 指定端口号

iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80:82 -j REJECT 连续的端口号

tcp的标记位

--tcp-flags

--syn:用于匹配第一次握手,相当于:--tcp-flags SYN、ACK、FIN、RST、SYN

10.icmp

A可以ping B B不可以ping A

iptables -A INPUT -s 192.168.241.22 -j REJECT 双方都不可以ping

iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 8 -j REJECT 拒绝请求包

iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 0 -j REJECT 拒绝回复包

拒绝请求包要好用

11.显式扩展

11.1multiport扩展

混合端口,以离散的方式定义多个端口

yum install epel-release.noarch -y 安装额外源

systemctl start redis 开启redis

ss -natp | grep 6379

vim /etc/redis.conf

在第61行 bind 0.0.0.0 修改绑定地址

redis-cli -h 192.168.241.11 主机二登录

拒绝源地址为192.168.241.22访问本机80和6379端口

iptables -A INPUT -s 192.168.241.22 -p tcp -m multiport --dports 80,6379 -j REJECT

11.2iprange扩展

ip地址范围,之前只能指定网段

iptables -A INPUT -m iprange --src-range 192.168.241.22-192.168.241.24 -j REJECT

指定源地址为192.168.241.22-192.168.241.24 三个地址无法访问当前主机

11.3mac

根据mac地址

iptables -A INPUT -m mac --mac-source 00:0c:29:51:4b:b5 -j REJECT

只有源mac没有目标mac

11.4string扩展

根据字符串过滤

vim /var/www/html/index.html www.google.com

vim /var/www/html/index.html www.baidu.com

www.google.com

curl 192.168.241.11/index.html

www.baidu.com

iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT

11.5time

时间是UTC时间 世界协商时间

date -u

man iptables-extensions

iptables -A INPUT -m time --timestart 16:00 --timestop 18:00 -j REJECT

11.6连接最大数

gcc flood connect.c -o flood

./flood 192.168.241.11

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

11.7limit 限制流量

iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

每分钟允许10个 前5个不限制

iptables -A INPUT -p icmp -j REJECT

11.8state状态

  • NEW:无论是我发出的第一个包还是收到的第一个包 都叫NEW
  • ESTABLISHED:NEW 之后都叫ESTABLISHED,除了第一个
  • RELATED:ftp 权限端口会自动打开数据端口
  • NVALID:无效的连接,如flag标记不正确
  • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
  • cat /proc/net/nf_conntrack 默认连接跟踪功能需要开启 state功能

11.8.1实现功能

老用户可以访问 新用户不可以访问

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

已在ping的可以继续ping,ping停止的话不可以再ping,xshell也不可以连

iptables -A INPUT -m state --state NEW -j REJECT 新用户拒绝

lsmod | grep comn 内核模块可以看到,调用state状态时可以看到

cat /proc/sys/net/netfilter/nf_conntrack_max 记录的用户数为65536

echo 1 > /proc/sys/net/netfilter/nf_conntrack_max 修改最大记录数

tail /var/log/messages 查看日志

iptables -A INPUT -m state --state ESTABLISHED ACCEPT

iptables -A INPUT -m state --state NEW -j REJECT

延伸

报错Feb 5 09:41:49 localhost kernel: nf_conntrack: table full, dropping packet

A不能访问我,我可以访问A 单向通讯

iptables -A INPUT -s 192.168.91.101 -j REJECT 不行都不可以了

iptables -A INPUT -s 192.168.91.101 -m state --state NEW -j REJECT 第一个包是请求包只要禁止请求包即可

11.9target

log

iptables -I INPUT -s 192.168.91.101 -p tcp -m multiport --dports 80,21:23 -m state --state NEW -j LOG --log-prefix "hello:"

12.规则保存

iptables-save 此条命令会将所有规则打印在屏幕上

iptables-restore 支持标准输入

iptables-save > /data/iprule

iptables-restore < /data/iprule

iptables -A INPUT -s 192.168.241.1 -j ACCEPT

iptables -A INPUT -s 192.168.241.0/24 -j ACCEPT

iptables -A INPUT -j REJECT

将这三条规则加入到规则表中

iptables-save > /data/iprule 备份

iptables-restore < /data/iprule 导入

12.1开机自动加载

vim ~/.bashrc

vim /etc/rc.d/rc.local

iptables-restore < /data/iprule

chmod +x /etc/rc.d/rc.local

12.2测试

iptables -F

/etc/rc.d/rc.local

iptables -vnL

12.3备份工具

yum install iptables-services.x86_64 -y

rpm -ql iptables-service

/etc/sysconfig/iptables 存放系统自带的规则

systemctl start iptables-services

systemctl enable iptables-services

13.自定义链

将规则分类 web链 db链 java链

iptables -N web 自定义链

iptables -vnL 可以看到自己定义的链

iptables -E web WEB 修改名称

iptables -A INPUT -s 192.168.241.0/24 -j WEB

input链调用将自定义链和INPUT链修改也可以保存

删除自定义链

iptables -F INPUT

iptables -F WEB 删除

iptables -X WEB 清空自定义链的规则

curl http://ip.sh 查看本机主机访问公网时使用的ip

14.永久开启路由转发功能

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1 将此写入配置文件

15.SNAT

iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j SNAT --to 12.0.0.1

将源地址为192.168.241.0网段的私网地址全部转化为网关地址

iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j MASQUERADE

如果地址不固定可以设置

16.DNAT

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.10 -p tcp --dport 80 -j DNAT --to 192.168.241.22

iptables -t nat -A POSTROUTING -o ens36 -s 192.168.241.0/24 -j SNAT --to 12.0.0.254

有去有回踩可以ping通 所以要加SNAT

iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.241.11:8080

相关推荐
大树889 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush410 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52010 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz10 小时前
Maven依赖冲突
java·服务器·maven
不会C语言的男孩11 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈12 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
程序猿阿伟12 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
凡人叶枫13 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
AC赳赳老秦13 小时前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw