防火墙iptables
防火墙基本概念
防火墙指的是一个由软件和硬件设备组合而成、在内网和外网之间、专用网和公网之间的界面上构造的保护屏障。
防火墙是一种计算机软件和硬件的结合,是internet和intarnet之间建立起一个安全网关,从而保护内网免受非法用户的侵入。
防火墙主要由服务访问规则(ACL)、验证工具、包过滤3个部分组成。
Linux下的防火墙
常见的软件防火墙有iptables
iptables是建立在netfilter架构基础上的一个包过滤管理器,最主要的作用是用来做防火墙或透明代理。主要提供一下三种功能:包过滤、NAT、通用的pre-route packet mangling。
具有三种内建链:
INPUT -- 处理来自外部的数据
OUTPUT -- 处理向外发送的数据
FORWARD -- 将数据转发到本机的其他网卡设备上。
iptables相关的文件
/etc/init.d/iptables:这个是用来开始、停止iptables或是保存规则的初始化脚本。
/etc/sysconfig/iptables:所有的规则都保存在这个文件。
/sbin/iptables:是iptables的二进制文件。
相关命令:
iptables -L -- 查看当前iptables配置 -A 增加一个规则 -D 删除规则 -L 显示所有规则 -F 删除所有规则 -s:来源IP -d:目的IP -p:通信协议 --sport 源端口 --dport:目的端口 -j:代表"Jump" --in-interface 选择网卡--in-interface选择网卡 --fragment 数据包分段 --state 状态(RELATED,ESTABLISHED) # iptables大多数用来配置处理从网络进入Linux服务器的数据包,所以input规则链经常用到。 # 当有数据包通过linux核心,下面几个指令会决定数据包被匹配后如何处理。 # ACCEPT:数据包允许通过到达目的地。 # REJECT:数据包被拒绝并返回给发数据包的主机一个见到那的解释。 # DROP:数据包被丢弃不返回任何信息。
配置iptables规则注意点:
1、先添加允许规则,在添加阻止任何的规则。
2、编写的规则是存储在内存中,不会自动存储在磁盘,所以为了重启后依然有效,需要手动执行初始化脚本来保存规则。
基于TCP/IP状态的规则
iptables的特性之一是能确定数据包的状态。
NEW:A服务器发送给B服务器一个SYN数据包来新建一个连接。
RELATED:B服务器接受SYN数据包并发送给A服务器一个SYN-ACK数据包来确定连接正常。
ESTABLISHED:A服务器接受到SYN-ACK数据包并发送给B服务器ACK包来做最后的确认,至此连接建立完成,两台服务器开始传输数据。(三次握手过程)
以下规则是服务器自带的,为了能与其他服务器建立TCP连接。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptable -A OUTPUT -m state --state RELATED,ESTABLISHED
自定义规则实例:
iptables -A INPUT -s 213.10.10.13 -d 192.168.1.1 -p TCP --dport 22 -j ACCEPT
阻止IP:
iptables -A INPUT -s 213.10.10.13 -j DROP # 阻止从213.10.10.13传进来的数据包 iptables -A INPUT -d 192.168.1.15 -j REJECT # 阻止从局域网192.168.1.15来的数据包
允许IP:20
iptables -A INPUT -s 213.10.10.13 -d 192.168.1.4 -p TCP --dport 21 # 接收来自IP213.10.10.13到目标地址FTP服务器192.168.1.4的数据包
1、丢弃所有来自外网的ftp包,内网除外。
iptables -A -i lo -j ACCEPT(允许本机内部所有网络通信,必须的) iptables -A -i eth0 -p tcp --dport 21 -j ACCEPT(在本机开放21端口,即ftp控制端口) iptables -A -i eth0 -p tcp --dport 20 -j ACCEPT(在本机开放20端口,即ftp传输端口) iptables -A -i eth1 -j DROP(禁止所有数据包通过)
2、允许ssh禁止telnet
iptables -A -i lo -j ACCEPT(允许本机内部所有网络通信) iptables -A -i eth0 -p tcp --dport 22 -j ACCEPT iptables -A -i eth1 -p tcp --dport 22 -j ACCEPT(在本机开放22端口,即ssh服务端口) iptables -A -i eth1 -p tcp --dport 23 -j DROP(在本机关闭23端口,即telnet服务端口)
3、禁止ping本机
iptables -A -p icmp --icmp-type 8 -s 0/0 -j DROP(0/0所有网络) iptables -A -p icmp --icmp-type 0 -s 0/0 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 0 -s 192.168.28.1(本机ip) -j DROP iptables -A OUTPUT -p icmp --icmp-type 8 -s 192.168.28.1 -j ACCEPT # 这样的配置是你可以ping别人,别人不能ping你
4、禁止所有udp端口
iptables -A -i eth0 -p udp -j DROP iptables -A -i eth1 -p udp -j DROP # 当配置好接收的规则后,最后就要增加拒绝所有的规则了。 iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT # 这些规则必须在最后添加 # 要删除一个规则,只需把"-A"换为"-D"即可 # iptables规则是从上往下应用,当找到能通过的规则,不管下面是否有规则冲突,也一样能通过。
保存规则
为了保存规则需执行以下命令:
/etc/init.d/iptables save
重新启动iptables从/etc/sysconfig/iptables加载最新规则
/etc/init.d/iptables stop
/etc/init.d/iptables start
IPTABLES自身的基本操作
启动iptables:service iptables start 关闭iptables:service iptables stop 重启iptables:service iptables restart 查看iptables状态:service iptables status 保存iptables配置:service iptables save iptables服务配置文件:/etc/sysconfig/iptables-config iptables规则保存文件:/etc/sysconfig/iptables 打开iptables转发:echo "1">/proc/sys/net/ipv4/ip_forward