Iptables基础
一、iptables防火墙包处理顺序
注意:规则的次序非常关键,规则越严格,放的越靠前,匹配规则时按照从上往下的方式进行匹配,转发流量仅由filter表里的forward链控制,进入本机的流量由filter表里的input、output链控制
二、iptables中的表
Filter表里有:INPUT ,FORWARD ,OUTPUT 三个链;
NAT表里有:PREROUTING ,OUTPUT ,POSTROUTING 三个链;
Mangle表(修改报文原数据)里有:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING 五个链
[root@m01 ~]# service iptables save #重启配置不还原,防火墙的规则保存在/etc/sysconfig/iptables
[root@m01 ~]# iptables -t nat/mangle -vnL #查看NAT/MANGLE表
[root@m01 ~]# iptables -L -n -v -vv -x -t nat --line-numbers
-L:查看管理命令下面是-L后附加的子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名
-v:显示详细信息
-vv:v越多越详细
-x:在计数器上显示精确值,不做单位换算
-t nat:显示所有的nat表信息
--line-numbers : 显示规则的行号
[root@m01 ~]# cat /proc/net/ip_conntrack|wc -l #查看当前跟踪连接数
当服务器连接多于最大连接数时会出现kernel: ip_conntrack: table full, dropping packet的错误
解决方法,修改conntrack最大跟踪连接数:
vim /etc/sysctl.conf #添加以下内容
net.ipv4.ip_conntrack_max = 102400
立即生效:sysctl -p
conntrack默认最大跟踪65536个连接,查看当前系统设置最大连接数:
cat /proc/sys/net/ipv4/ip_conntrack_max
三、iptables基本配置
1、关闭所有的 INPUT FORWARD OUTPUT
[root@m01 ~]# iptables -P INPUT DROP
[root@m01 ~]# iptables -P FORWARD DROP
[root@m01 ~]# iptables -P OUTPUT DROP
[root@m01 ~]# iptables -L -n #查看命令是否生效
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
2、打开22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
3、如何删除规则
[root@iptables ~]# iptables -L -n --line-number #显示规则和相对应的编号
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
[root@iptables ~]# iptables -D INPUT 2 #删除INPUT链编号为2的规则
4、过滤无效的数据包,并发送消息给被拒绝的主机
假设有人进入了服务器,或者有病毒木马程序,它可以通过80端口像服务器外传送数据。它的这种方式就和我们正常访问80端口有区别。它向外发的数据不是我们通过访问网页请求回应的数据包
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
#已经建立tcp连接的包以及该连接相关的包允许通过
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
# 这两条的意思是在INPUT表和FORWARD表中拒绝所有不符合规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机
四、iptables开启FTP流量转发需要加载的模块
[root@web02 ~]# lsmod | grep ip_conntrack
[root@web02 ~]# modprobe ip_nat_ftp
[root@web02 ~]# modprobe ip_conntrack_ftp
#!/bin/bash echo 1 >/proc/sys/net/ipv4/ip_forward /sbin/modprobe ip_conntrack_ftp ports=21,2121 /sbin/modprobe ip_nat_ftp ports=21,2121 /sbin/iptables -F -t filter /sbin/iptables -F -t nat /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -t nat -P PREROUTING ACCEPT /sbin/iptables -t nat -P POSTROUTING ACCEPT /sbin/iptables -t nat -P OUTPUT ACCEPT # ALLOW loopback NET and PRIVATE /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -i eth1 -j ACCEPT # FTP /sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT # NAT /sbin/iptables -t nat -A PREROUTING ! -s 192.168.3.0/24 -p tcp --dport 2121 -j DNAT --to 192.168.3.8 /sbin/iptables -t nat -A POSTROUTING -s 192.168.3.8 -j MASQUERADE # KEEP CONNECTIONS /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
五、iptables配置持久化
1、生成iptables.service文件
cat > /usr/lib/systemd/system/iptables.service << EOF [Unit] # 描述服务名称 Description= iptables # 表示在网络服务启动后启动此服务 After=network.target [Service] # 服务类型为oneshot,表示该服务是一次启动任务 Type=oneshot # 启动时加载规则文件内容 ExecStart=/bin/bash -c '/usr/sbin/iptables-restore < /root/iptables.txt' # 关机或者重启时自动保存规则到文件 ExecStop=/bin/bash -c '/usr/sbin/iptables-save > /root/iptables.txt' # 适配oneshot类型服务管理需求 RemainAfterExit=yes [Install] # 多用户模式启动时会加载iptables服务 WantedBy=multi-user.target EOF
2、iptables文件加载顺序
systemctl daemon-reload systemctl enable iptables.service # 配置服务开机自启动 /bin/bash -c '/usr/sbin/iptables-save >/root/iptables.txt' # 生成iptables.txt文件 systemctl start iptables.service # 启动服务 systemctl status iptables.service # 查看服务运行状态 # 通过定义的systemd服务,实现的功能就是在系统关机时自动保存iptables规则到文件;系统开机时会自动加载规则文件的规则到内存运行。这样就实现了通过systemd服务方式对iptables规则的关机自动保存和开机自动加载
参考链接:
http://fedoraproject.org/wiki/FirewallD/zh-cn # firewalld防火墙(CentOS7)
http://v.youku.com/v_show/id_XNTAyMjAwMzI0.html?qq-pf-to=pcqq.group
http://oldboy.blog.51cto.com/2561410/974194 # route命令实战(文档)
http://oldboy.blog.51cto.com/2561410/1119453 # route命令实战(视频)
http://www.netfilter.org/
浙公网安备 33010602011771号