1. iptables是Linux内核的一个模块,用以管理对网络设备(网卡)的访问,如路由过滤、端口转发、NAT等,root用户可以通过iptables配置操作系统的路由表。在当前的主流Linux发布系统中,都默认安装了iptables。
为了适应IPv6,事实上iptables用以管理IPv4数据包的过滤和地址转换,ip6tables用以管理IPv6数据包的过滤和地址转换。后文将其统一称为iptables。
在CentOS 5.x+上,检查iptables的安装情况:
[root@my]# rpm -q iptables
iptables-1.4.21-28.el7.x86_64
在CentOS上,检查iptables的启动情况:
[root@my]# lsmod | grep ip_tables
ip_tables 27126 5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
如果iptables没有被启动,则执行命令:
[root@my]# system-config-securitylevel
2. iptables的路由规则以表(table)的方式存储,默认为如下5个表
1) filter
iptables/ip6tables命令默认操作的表,过滤IP数据包
2) nat
iptables/ip6tables -t nat,创建新连接的IP数据包
3) mangle
iptables/ip6tables -t mangle,特殊IP数据包的替换
4) raw
iptables/ip6tables -t raw
5) security
iptables/ip6tables -t security,MAC网络规则
表中又以链(chain)的方式组织不同类型的过滤规则。链与链之间可以嵌套(父子链)或级联(先后链)。iptables/ip6tables提供了一些内置的chain,如表filter中的过滤规则,默认被划分为3个chains:
每个chain都包含一个路由规则的列表。对于要处理的IP包,按照从上到下的顺序匹配列表中的路由规则,一旦某个路由规则被匹配则执行对应的操作(DROP,ACCESS或RETURN),而不再考虑后续的路由规则。
如果最后没有任何一个路由规则被匹配,则执行该chain的默认操作。一个chain的默认操作可以是DROP或ACCESS。对于INPUT chain,建议默认操作为DROP;对于OUTPUT chain,建议默认操作为ACCESS。
3. iptables的常见命令
1) 查看路由表
iptables -L
iptables -L -n
2) 查看NAT相关的路由表
iptables -L -t nat
3) 配置SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
4) 可以将若干命令写入到一个脚本文件myfirewall,并chmod +x myfirewall,这样在需要的时候执行脚本文件./myfirewall即可。
# iptables -P INPUT ACCEPT
# iptables -F即flush all existing rules
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -L -v
4. 保存对iptables的配置
[root@my]# /sbin/service iptables save
说明,iptables/ip6tables中的过滤规则往往是由初始化脚本或daemon进程创建,默认是不能持久化的;所以Linux系统重启后,需要重新设置。
该命令将执行iptables初始化脚本,并进而调用/sbin/iptables-save命令,从而将当前的过滤规则写入到/etc/sysconfig/iptables文件中。这样,当重启Linux系统时,iptables初始化脚本会调用/sbin/iptables-restore命令恢复/etc/sysconfig/iptables文件中的过滤规则。
5. Linux内核中的netfilter模块
与iptables运行在用户空间不同,为了提高执行的效率,netfilter是运行在Linux内核空间的模块。
netfilter实际进行路由控制的过滤操作,对于IP包进行实际的操作,DROP或者ACCESS。
参考链接:
https://wiki.centos.org/HowTos/Network/IPTable