iptables对刚入门Linux新手一般比较难理解和配置。但是如果掌握了其中的诀窍,就会发现其实没有那么难学。iptables是Linux的静态防火墙,用来创建规则来过滤数据包和NAT模块。
简单地说,iptables为Linux网络连接的防火墙。
检查iptables是否安装
在配置Iptables之前,我们首先得确认Iptalbes是否已经安装了:
rpm -qa | grep iptables
执行命令后应该会打印出iptables-your.installed.version这样的信息。如果没有,则表示没有安装,可以下载最新的 rpm软件包通过命令rpm -Uvh iptables-downloaded.version.rpm安装,或是直接使用yum安装:
yum install iptables
iptables相关的文件
/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-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?

iptables命令输完之后会立刻生效,但重启之后配置就会消失,Debian提供了一个iptables-save程序快速保存配置,但还需要我们做一些工作才能让iptables配置实现开机自启动,自加载。
1、将iptables配置保存到/etc/iptables,这个文件名可以自己定义,与下面的配置一致即可
iptables-save > /etc/iptables
2、创建自启动配置文件,并授于可执行权限
touch /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
3、编辑该自启动配置文件,内容为启动网络时恢复iptables配置
vim /etc/network/if-pre-up.d/iptables
文件内容如下:
#!/bin/sh
/sbin/iptables-restore < /etc/iptables
4、:wq保存配置文件并退出即可,以后在修改完iptables配置之后只要再次执行下面的命令保存即可
iptables-save > /etc/iptables
----------------------------------------------------------------------------
 

VPS 上配置 iptables 防火墙

 
一个裸服务器,比如 VPS 架设好了 Web 服务等等之后,为了服务器的安全,防火墙设置也就成了必须的一个步骤了。Linux 下比较常用的就是 iptables,本文适用于 CentOS 和 Debian。
简单的来说,防火墙,就是只开启某些必要的服务端口,限时其他服务端口的使用。比如这么几个常用的默认端口和对应的服务: 22(ssh), 80(http), 443(https), 21(ftp), 25(smtp), 110(pop), 143(imap), 1194(openvpn), 3306(mysql), 8080(tomcat) 等等,看自己的需要来开启。
下面的防火墙规则,请在命令行直接运行,我简单的逐个的按顺序的分析给大家 (# 表示注释内容):
# 允许本地回环 127.0.0.1 iptables -A INPUT -i lo -p all -j ACCEPT # 允许已经建立的所有连接 iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许所有向外发起的连接 iptables -A OUTPUT -j ACCEPT # 拒绝 ping iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT # 允许 SSH 服务端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 Web 服务端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 拒绝其他所有未被允许的连接 iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT 这些规则必须要保存,否则下次重启服务器后,规则会丢失。CentOS 和 Debian 的 iptables 保存各有区别:
# CentOS
service iptables save # 保存 service iptables restart # 重启 chkconfig iptables on # 确认服务会随开机自动启动 # Debian
iptables-save > /etc/firewall.conf # 保存规则到一个文件 echo '#!/bin/sh' > /etc/network/if-up.d/iptables # 创建一个开机启动项文件 echo 'iptables-restore < /etc/firewall.conf' >> /etc/network/if-up.d/iptables # 同上,继续添加内容 chmod +x /etc/network/if-up.d/iptables # 修改启动项文件的执行属性 如果不满意以上配置的规则,可以使用以下命令来清空全部规则:
iptables -F iptables -X iptables -Z 到此,全部结束.
 --------------------------------------------------------
 iptables端口转发
 
routing
decision
IN ——> PRE —> ——> FORWARD —–> —-> POST —–> OUT
interface  ROUTING  \       filter       /       ROUTING     interface
DNAT     |       tracking     ^       SNAT
REDIRECT |                      |       MASQUERADE
v                     |
INPUT                OUTPUT
| filter             ^ filter,DNAT
v                     |
\–> Local Process –/
user-space programs
-A PREROUTING -d 210.14.65.203 -p tcp -m tcp –dport 23 -j DNAT –to-destination 192.168.1.230:22
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth0 -j MASQUERADE
-A POSTROUTING -d 192.168.1.230 -p tcp -m tcp –dport 22 -j SNAT –to-source 192.168.1.21