目录

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.8state状态

11.8.1实现功能

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

延伸

11.9target

12.规则保存

12.1开机自动加载

12.2测试

12.3备份工具

13.自定义链

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

15.SNAT

16.DNAT

 

在使用iptables时注意要先关闭firewalld(systemctl 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链编号规则-jtarget-I链规则-R链编号规则

target:

选项含义DROP已读不回REJECT回不合适ACCEPT允许LOG生成日志SNAT使用snat;source 修改源ipDNAT使用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:无论是我发出的第一个包还是收到的第一个包  都叫NEWESTABLISHED: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

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: