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/

posted @ 2019-04-28 13:54  風£飛  阅读(14)  评论(0)    收藏  举报