iptables对刚入门Linux新手一般比较难理解和配置。但是如果掌握了其中的诀窍,就会发现其实没有那么难学。iptables是Linux的静态防火墙,用来创建规则来过滤数据包和NAT模块。
简单地说,iptables为Linux网络连接的防火墙。
检查iptables是否安装
在配置Iptables之前,我们首先得确认Iptalbes是否已经安装了:
/etc/init.d/iptables: 这个是用来开始、停止Iptables或是保存规则的初始化脚本。
/etc/sysconfig/iptables: 所有的规则都保存在这个文件。
/sbin/iptables: 是Iptables的二进制文件。
在真正开始配置规则时,我们先来看看当前的配置:
Iptables大多数用来配置处理从网络进入Linux服务器的数据包,所以INPUT规则链经常会到用到。当有数据包通过Linux核心,下面几个指令会决定数据包被匹配之后如何处理。
ACCEPT: 数据包允许通过其到达目的地。
REJECT: 数据包被拒绝并返回给发数据包的主机一个简单的解释。
DROP: 数据包被拒绝不返回任何信息。
配置iptables规则
在开始配置规则之前,有必要提出三点建议:
1、规则的顺序很重要。比如一开始你就添加了一个阻止任何的规则,那么你下面的允许规则都不会起作用了。
2、你要记住编写的规则是存储在内存中,不会自动存储磁盘,因此你重启之后,规则就不会了,所以你需要手动执行初始化脚本来保存规则。
3、如果你是在远程来管理服务器,比如SSH,那么配置规则之前首先得添加允许ssh的规则,要不iptables会把你阻止在外。
-A:附加INPUT规则链;
-s: 来源IP,例子中就是你当前登录ssh所用的电脑IP;
-d:目的地址,例子中就是服务器IP
-p:通信协议
–dport:目的端口,例子中是ssh默认端口22;
-j:代表“Jump”,所以之前的规则都匹配,则接受数据包。
下面让我们来为一般的数据包设置基本的规则。Iptables的特性之一是能确定数据包的状态。下面是在一个新的连接的数据包状态:
NEW:第一服务器发送给第二服务器一个SYN数据包来新建一个连接。
RELATED: 第二服务器接收SYN数据包并发送给第一服务器一个SYN-ACK数据包来确定连接正常。
ESTABLISHED: 第一服务器接收到SYN-ACK数据包并发送给第二服务器ACK服务器来做最后的确认,至此连接建立完成,两台服务器开始传输数据。
为了让你的服务器能与其它服务器建立TCP连接,iptables必须配置如下:
阻止IP:
允许IP:
当配置来必要的规则之后,到时候在最后增加拒绝所有的规则了:
要删除一个规则,只需把”-A”替换成”-D”即可。
保存规则
为了保存Iptables规则,只需执行以下命令:
----------------------------------------------
看了下secure日志和access的日志,一大半都是暴力破解和扫描,虽然哥的密码极其复杂,不过总被这么消耗服务器资源也不是事,索性还是把ssh 端口和ftp改了然后写个iptables稍微保护一下好了。还有个东西叫Fail2Ban,可以自动检测暴力破解,密码错误超过一定次数就把对端ban 掉,不过我实在是不想再开一个服务了,改端口应该问题不大…
简单地说,iptables为Linux网络连接的防火墙。
检查iptables是否安装
在配置Iptables之前,我们首先得确认Iptalbes是否已经安装了:
rpm -qa | grep iptables执行命令后应该会打印出iptables-your.installed.version这样的信息。如果没有,则表示没有安装,可以下载最新的 rpm软件包通过命令rpm -Uvh iptables-downloaded.version.rpm安装,或是直接使用yum安装:
yum install iptablesiptables相关的文件
/etc/init.d/iptables: 这个是用来开始、停止Iptables或是保存规则的初始化脚本。
/etc/sysconfig/iptables: 所有的规则都保存在这个文件。
/sbin/iptables: 是Iptables的二进制文件。
在真正开始配置规则时,我们先来看看当前的配置:
iptables -L默认的,当前只有三条规则链:INPUT、OUTPU、FORWARD。INPUT规则链包含进站数据包的规则,OUTPUT规则链包含出站数据包规则,FORWARD规则链包含转发数据包到其它主机的规则。
Iptables大多数用来配置处理从网络进入Linux服务器的数据包,所以INPUT规则链经常会到用到。当有数据包通过Linux核心,下面几个指令会决定数据包被匹配之后如何处理。
ACCEPT: 数据包允许通过其到达目的地。
REJECT: 数据包被拒绝并返回给发数据包的主机一个简单的解释。
DROP: 数据包被拒绝不返回任何信息。
配置iptables规则
在开始配置规则之前,有必要提出三点建议:
1、规则的顺序很重要。比如一开始你就添加了一个阻止任何的规则,那么你下面的允许规则都不会起作用了。
2、你要记住编写的规则是存储在内存中,不会自动存储磁盘,因此你重启之后,规则就不会了,所以你需要手动执行初始化脚本来保存规则。
3、如果你是在远程来管理服务器,比如SSH,那么配置规则之前首先得添加允许ssh的规则,要不iptables会把你阻止在外。
iptables -A INPUT -s 213.10.10.13 -d 192.168.1.1 -p TCP -dport 22 -j ACCEPT说明:
-A:附加INPUT规则链;
-s: 来源IP,例子中就是你当前登录ssh所用的电脑IP;
-d:目的地址,例子中就是服务器IP
-p:通信协议
–dport:目的端口,例子中是ssh默认端口22;
-j:代表“Jump”,所以之前的规则都匹配,则接受数据包。
下面让我们来为一般的数据包设置基本的规则。Iptables的特性之一是能确定数据包的状态。下面是在一个新的连接的数据包状态:
NEW:第一服务器发送给第二服务器一个SYN数据包来新建一个连接。
RELATED: 第二服务器接收SYN数据包并发送给第一服务器一个SYN-ACK数据包来确定连接正常。
ESTABLISHED: 第一服务器接收到SYN-ACK数据包并发送给第二服务器ACK服务器来做最后的确认,至此连接建立完成,两台服务器开始传输数据。
为了让你的服务器能与其它服务器建立TCP连接,iptables必须配置如下:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED自定义规则
阻止IP:
iptables -A INPUT -s 213.10.10.13 -j DROP这条规则表示阻止从IP213.10.10.13传进来的数据包。
iptables -A INPUT -d 192.168.1.15 -j REJECT这条规则表示阻止从局域网IP192.168.1.15来的数据包。
允许IP:
iptables -A INPUT -s 213.10.10.13 -d 192.168.1.4 -p tcp --dport 21这条规则表示接受来自IP 213.10.10.13到目标地址FTP服务器192.168.1.4的数据包。
当配置来必要的规则之后,到时候在最后增加拒绝所有的规则了:
iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT这些规则必须在最后添加。
要删除一个规则,只需把”-A”替换成”-D”即可。
保存规则
为了保存Iptables规则,只需执行以下命令:
/etc/init.d/iptables save停止Iptables来刷新所有规则:
/etc/init.d/iptables stop重新启动Iptables从/etc/sysconfig/iptables加载最新规则:
/etc/init.d/iptables start这只是一个基础的iptables教程,适合配置比较简单的规则,如果需要配置复杂的规则,还需要深入的学习。
----------------------------------------------
VPS安全之iptables基本配置
看了下secure日志和access的日志,一大半都是暴力破解和扫描,虽然哥的密码极其复杂,不过总被这么消耗服务器资源也不是事,索性还是把ssh 端口和ftp改了然后写个iptables稍微保护一下好了。还有个东西叫Fail2Ban,可以自动检测暴力破解,密码错误超过一定次数就把对端ban 掉,不过我实在是不想再开一个服务了,改端口应该问题不大…
#配置,禁止进,允许出,允许回环网卡
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#允许ping,不允许删了就行
iptables -A INPUT -p icmp -j ACCEPT
#允许ssh
iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
#允许ftp
iptables -A INPUT -p tcp -m tcp –dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#允许ftp被动接口范围,在ftp配置文件里可以设置
iptables -A INPUT -p tcp –dport 20000:30000 -j ACCEPT
#学习felix,把smtp设成本地
iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT -s 127.0.0.1
iptables -A INPUT -p tcp -m tcp –dport 25 -j REJECT
#允许DNS
iptables -A INPUT -p tcp -m tcp –dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp –dport 53 -j ACCEPT
#允许http和https
iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
#允许状态检测,懒得解释
iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p all -m state –state INVALID,NEW -j DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#允许ping,不允许删了就行
iptables -A INPUT -p icmp -j ACCEPT
#允许ssh
iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
#允许ftp
iptables -A INPUT -p tcp -m tcp –dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT
#允许ftp被动接口范围,在ftp配置文件里可以设置
iptables -A INPUT -p tcp –dport 20000:30000 -j ACCEPT
#学习felix,把smtp设成本地
iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT -s 127.0.0.1
iptables -A INPUT -p tcp -m tcp –dport 25 -j REJECT
#允许DNS
iptables -A INPUT -p tcp -m tcp –dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp –dport 53 -j ACCEPT
#允许http和https
iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
#允许状态检测,懒得解释
iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p all -m state –state INVALID,NEW -j DROP
#保存配置
iptables-save > /etc/iptables
iptables-save > /etc/iptables
保存之后就行了,Debian不需要单独把iptbles做成服务,具体如何让iptables开机自动加载,请看文章《Debian下iptables防火墙开机自动加载实现》
我是把上面那段和下面这段都写到sh里了,start{}和stop{}。需要修改规则的时候直接清空了重建比较好,因为规则有顺序问题。
#清空配置
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
-------------------------------------------
如何使得开机自动加载iptables?
iptables命令输完之后会立刻生效,但重启之后配置就会消失,Debian提供了一个iptables-save程序快速保存配置,但还需要我们做一些工作才能让iptables配置实现开机自启动,自加载。
1、将iptables配置保存到/etc/iptables,这个文件名可以自己定义,与下面的配置一致即可
2、创建自启动配置文件,并授于可执行权限
3、编辑该自启动配置文件,内容为启动网络时恢复iptables配置
文件内容如下:
4、:wq保存配置文件并退出即可,以后在修改完iptables配置之后只要再次执行下面的命令保存即可