网上的访问通过tcp/ip封包来进入主机系统的。在linux中它一般要同过ip过滤机制来实现第一层防护,如果通过了这层防护还的通过下一关的检查 那就是TCP_Wrappers 的功能。
封包过滤( IP Filter ):
封包过滤是 linux 提供的第一道防火墙呦!但是不同的核心版本会有不一样的封包过滤机制!以 2.2.xx 为核心的 Linux 主要以 ipchains 作为过滤机制,至于目前新版的 2.4.xx 则以 iptables 为机制!OK!既然我们的 Red Hat 7.1, 7.2, 7.3 为 kernel 2.4.xx ,所以用 iptables 来进行 IP 抵挡的工作啦!那么由于 TCP 封包里头有 IP 及 port ,所以要抵挡来源 IP 或者是自身的 port ,自然就很容易来进行啦!您目前只要知道 iptables 可以经由 TCP 的封包表投资料来进行分析的工作例如:和附规则的就通过,否则就把它丢弃 这样就防止不符合规则的人进入你的电脑。
至于抵挡封包的工作则可以让 TCP_Wrappers 来进行要常常去看 /var/log/messages 与 /var/log/secure 这两个个档案!都是登陆登录记录等。要做好主机的防护,第一步就是要建立完善的密码规则啦!因为这个咚咚常常是 cracker 尝试入侵的第一步!你必须要建立好主机的密码规则,可以尝试以 chattr 来将 /etc/passwd 及 /etc/shadow 做成不可变更的档案!较为安全啦!
做好安全的几个常见的工作
1.升级与修补套件漏洞、及移除危险套件:
2.每项系统服务的安全设定项目
3.TCP_Wrappers 的基础防火设定
4.iptables 的防火规则设定
5.主机资源侦测系统( MRTG )
6.登录档案分析系统:
iptables:
iptables 是 linux Kernel 2.4.xx 版本以上的主要 IP 过滤机制!他最大的功能就是可以过滤掉不要的 TCP 封包啦!当然功能还不止于此,他还可以用来进行 IP 伪装,以达成 NAT 的主机功能呢! iptables 的工作方向,必须要依规则的顺序来分析,底下我们简单的谈一谈 iptables 的几个概念吧:
有几个 tables :
跟之前版本的 ipchains 不同的地方是, iptables 可以自行定义一些 tables 的新规定!将可以让防火墙规则变的更为便于管理呢!基本上,原本的 iptable 至少有两个 table ,一个是 filter ( 预设的,没有填写 tables 时,就是 filter 这个 table 啦 ),一个则是相当重要的 nat table 。其中, filter 可以用来管理主机的安全,至于 nat 则是用来处理 NAT 的功能啦!
清除规则:
iptables 的订定方法其实很简单,就是使用指令列的方式来订定而已,他的基础语法在清除规则时,是这样的:
[root @test /root]# /sbin/iptables [-FXZ]
参数说明:
-F :清除所有的已订定的规则;
-X :杀掉所有使用者建立的 chain (应该说的是 tables )??;
-Z :将所有的 chain 的计数与流量统计都归零
范例:
[root @test /root]# /sbin/iptables -F
[root @test /root]# /sbin/iptables -X
[root @test /root]# /sbin/iptables -Z
请注意,如果在远程联机的时候,『这三个指令必须要用 scripts 来连续执行』,不然肯定『会让你自己被主机挡在门外!』
定义政策( Policy ):
清除规则之后,再接下来就是要设定规则的政策啦!这个所谓的政策指的是『当你的封包不在你的规则之内时,则该封包的通过与否,以 Policy 的设定为准』,例如:你设定了十条规则,但有一个封包来的时候,这十条规则都不适用,这个时候此一封包就会依据 Policy 的规定为准,来决定是否可以通过防火墙??。通常这个政策在 INPUT 方面可以定义的比较严格一点,而 FORWARD 与 OUTPUT 则可以订定的松一些!
[root @test /root]# /sbin/iptables [-t tables] [-P] [I
NPUT,OUTPUT,FORWARD| PREROUTING,OUTPUT,POSTROUTING] [ACCEPT,DROP]
参数说明:
-t :定义 table !
tables :table 的名称,例如 nat ??!
-P :定义政策( Policy )。
INPUT :封包为输入主机的方向;
OUTPUT :封包为输出主机的方向;
FORWARD:封包为不进入主机而向外再传输出去的方向;
PREROUTING :在进入路由之前进行的工作;
OUTPUT :封包为输出主机的方向;
POSTROUTING:在进入路由之后进行的工作。
范例:
[root @test /root]# /sbin/iptables -P INPUT ACCEPT
[root @test /root]# /sbin/iptables -P OUTPUT ACCEPT
[root @test /root]# /sbin/iptables -P FORWARD ACCEPT
[root @test /root]# /sbin/iptables -t nat -P PREROUTING ACCEPT
[root @test /root]# /sbin/iptables -t nat -P OUTPUT ACCEPT
[root @test /root]# /sbin/iptables -t nat -P POSTROUTING ACCEPT
将预设的政策都定义为接受??!
增加、插入规则:
接下来则要定义规则啦!我们底下先完全以主机的角度来观察!可以这样来设定啦!
[root @test /root]# /sbin/iptables [-AI] [INPUT,OUTPUT,FORWARD] [-io interface] [-p TCP,UDP] [-s IP/network] [--sport ports] [-d IP/network] [--dport ports] -j [ACCEPT,DROP]
参数说明:
-A :新增加一条规则,该规则增加在最后面一行;
-I :在第一条规则加入;
INPUT :封包为输入主机的方向;
OUTPUT :封包为输出主机的方向;
FORWARD:封包为不进入主机而向外再传输出去的方向;
-i :流入的网卡接口
-o :流出的网卡接口
interface :网络卡接口,例如 ppp0, eth0, eth1....
-p :请注意,这是小写呦!封包的协议啦!
TCP :封包为 TCP 协议的封包;
UDP :封包为 UDP 协议的封包;
-s :来源封包的 IP 或者是 Network ( 网域 );
--sport:来源封包的 port 号码;
-d :目标主机的 IP 或者是 Network ( 网域 );
--dport:目标主机的 port 号码;
-j :动作,可以接底下的动作;
ACCEPT :接受该封包
DROP :丢弃封包
范例:
[root @test /root]# /sbin/iptables -A INPUT -i lo -j ACCEPT
所有的来自 lo 这个接口的封包,都予以接受
[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.0.1 -j ACCEPT
来自 192.168.0.1 这个 IP 的封包都予以接受
[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.1.0/24 -j ACCEPT
来自 192.168.1.0 这个 C Class 的网域的任何一部计算机,就予以接受!
[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.1.25 -j DROP
来自 192.168.1.25 的 IP 的封包,就直接全部给他丢弃!
[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP --dport 21 -j DROP
只要想要进来 21 这个 port 的封包,就把他丢弃!
[root @test /root]# /sbin/iptables -A INPUT -i eth0 -p TCP -s 192.168.0.24 --dport 22 -j ACCEPT
来自 192.168.0.24 的主机,想要到我的 port 22 时,就予以接受!
请注意:防火墙的规则是『一行一行依序来检查的,若符合任何一条规则,则予以动作(接受或丢弃),否则继续往下检查到最后一条』上
TCP_Wrappers:
这个 TCP_Wrappers 实在是很简单的一个设定工作,因为他只要设定 /etc/hosts.allow 及 /etc/hosts.deny 就可以啦!基本上,他是经由 /usr/sbin/tcpd 这个程序来进行 TCP 的检验工作!而检验的方式则是以 /etc/hosts.allow 及 /etc/hosts.deny 来设定的啦!检验的流程是先以 /etc/hosts.allow 这个档案,检验完之后,在到 /etc/hosts.deny 去搜寻!好了,那么 hosts.allow 要怎样设定呢?
<服务名称> : <IP/network> : <action>
特别注意, network 可以使用 192.168.0.0/255.255.255.0 ,但不可使用 192.168.0.0/24 !
[root @test /root]# vi /etc/hosts.allow
in.telnetd: 127.0.0.1 : allow
in.ftpd: 127.0.0.1 : allow
本机的 127.0.0.1 开放 telnet 及 ftp 哩!
[root @test /root]# vi /etc/hosts.deny
in.telnetd: 192.168.2.3 : deny
将 192.168.2.3 的 telnet 服务关掉!
用iptable做NAT上网
下面以redhat7.3为例
外网卡ip 200.200.200.100
内网卡ip 192.168.8.1
将下列内容加入/etc/rc.d/rc.local文件中,重新启动机器即可
################
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/rmmod ipchains
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprboe ip_nat_ftp
/sbin/iptables -F INPUT
/sbin/iptables -F FORWARD
/sbin/iptables -F POSTROUTING -t nat
/sbin/iptables -P FORWARD DROP
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.8.0/24 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.8.0/24 -j ACCEPT