1. 程式人生 > >Linux之iptables

Linux之iptables

LINUX iptables

防火墻的主要類別有:
1、netfilter
2、tcp wrappers
3、proxy

Linux的數據包過濾軟件:iptables
//規則的順序非常重要

三張表:filter、nat、mangle
五條鏈:input、output、forward、prerouting、postrouting

規則的查看與清除

iptables [-t tables] [-L] [-nv]
-t:nat/filter
-L:列出當前的規則
-n:不進行IP的反查,顯示速度快
-v:列出更多的信息

iptables-save [-t tables]
#列出完整的防火墻規則

iptables [-t tables] [-FXZ]
-F:清除所有已制定的規則
-X:除掉所有用戶自定義的chain(tables)
-Z:清零所有chain的計數和流量統計

定義默認策略

iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

語法:

[root@www ~]# iptables [-AI [INPUT|OUTPUT|FOREARD...]] [-io [eth0|eth1...]] > [-p [tcp|udp|icmp...]] [-s [sip|net]] [-d [dip|net]] -j [ACCEPT|DROP|REJECT|LOG]

--sport、--dport

[-m state] [--state 狀態]

[-m mac] [--mac-source xxx]

iptables設置腳本:
1、清除已有規則
2、制定默認策略
3、設置各項規則
4、保存

#!/bin/bash

# 請先輸入相關參數,不要輸入錯誤

EXTIF="eth0"  # 這個是可以來你上public ip 的網絡接口
INIF="eth1"   #內部LAN 的網絡連接,若無則寫成 INIF=""
INNET="192.168.100.0/24"   # 若無內網絡接口,請填寫 INNET=""
export EXTIF INIF INNEF 

# 第一部分,針對本機的防火墻設置

# 1 . 先設置好內核的網絡功能

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4icmp_echo_ignore_broadcasts
for i in /proc/sys/net/ipv4/conf/*/{rp_filter,log_martians}; do
    echo "1" > $i
done
for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,send_redirects}; do
    echo "0" > $i
done

# 2 . 清除規則、設置默認策略及開放 lo 與相關的設置值

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FPRWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -nm state -state RELATED,ESTABLISHED -j ACCEPT

# 3 . 啟動額外的防火墻script模塊

if [ -f /usr/local/virus/iptables/iptables.deny ]; then
    sh /usr/local/virus/iptables/iptables.deny
fi 
if [ -f /usr/local/virus/iptables/iptables.allow ]; then 
    sh /usr/local/virus/iptables/iptables.allow
fi
if [ -f /usr/local/virus/iptables/iptables.http ]; then 
    sh  /usr/local/virus/iptables/iptables.http
fi

# 4 . 允許某些類型的 ICMP 數據包進入

AICMP ="0 3 3/4 11 12 14 16 18"
for tyicmp in $AICMP
do 
    iptables -A INPUT -i #EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
done

# 5 . 允許某些服務的進入,,請依照自己的環境開啟

# iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65535 -j ACCEPT # FTP
# iptables -A INPUT -p TCP -i $EXTIF --dport 22 --sport 1024:65535 -j ACCEPT # SSH
# iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65535 -j ACCEPT # SMTP
# iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65535 -j ACCEPT # DNS
# iptables -A INPUT -p TCP -i $EXTIF --dport 80 --sport 1024:65535 -j ACCEPT # WWW
# iptables -A INPUT -p TCP -i $EXTIF --dport 110 --sport 1024:65535 -j ACCEPT # POP3
# iptables -A INPUT -p TCP -i $EXTIF --dport 443 --sport 1024:65535 -j ACCEPT # HTTPS

# 第二部分,針對後端主機的防火墻設置

# 1 . 先加載一些有用的模塊

modules="ip_tables iptables_nat ip_nat_ftp ip_nat-irc ip_conntrack ip_conntrack_ftp ip_conntrack_irc"
for mod in $modules
do
    testmod=`lsmod | grep "^${mod} " | awk ‘{print $1}‘`
    if [ "$testmod" == "" ]; then
        modprobe $mod
    fi

# 2 . 清除 NAT table 的規則

iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# 3 . 若有內部接口的存在(雙網卡)開放成為路由器,且為IP分享器

if [ "$INIF" != "" ]; then
    iptables -A INPUT -i $INIF -j ACCEPT
    echo "1" > /proc/sys/net/ipv4/ip_forward
        if [ "$INIET" != "" ]; then 
            for innet in $INNET
            do
                iptables -r nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
            done
        fi
fi
# 如果你的 MSN 一直無法連接,或者是某些網站 OK 某些網站不 OK ,可能是 MTU 的問題,那可以將下面這行取消批註,來啟動 MTU 的範圍
iptables -A FORWARD -p tcp  -m tcp --tcp-flags STN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
# 4 . NAT 服務器後端的 LAN 內對外值服務器設置
iptables -t nat -A PREROUTING -p tcp -i $EXTIF --dport 80 -j DNAT --tp-description 192.168.1.210:80   #WWW
# 5 . 特殊的功能,包括 windows 遠程桌面產生的規則,假設桌面主機為 1.2.3.4
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --dport 6000 -j DNAT --to-description 192.168.100.10
# iptables -t nat -A PREROUTING -p tcp -s 1.2.3.4 --sport 3389 -j DNAT --to-description 192.168.100.20

# 6 . 最後將這些功能存儲下來

/etc/init.d/iptables save

Linux之iptables