Java 企業(yè)應(yīng)用
          不要溫柔的走入那個(gè)良夜

           

          程序的目的是在redhat和AIX上同時(shí)運(yùn)行,對(duì)于很多指令,使用Redhat完成了,但是AIX上沒有,這時(shí),我們選擇Alias的方式,在AIX的Env中,提供具備這樣功能的指令模塊。

          下面是研究怎么實(shí)現(xiàn)redhat iptables的stub.

          Step (1)about port  <=> [inbound ,outbound]

          查看端口占用情況:

          Issue the command:(as 389 it the port you want to seek )
          netstat -Aan | grep 389
          this will return:
          f1000089c27a2358 tcp4 0 0 *.389 *.* LIST EN
          The next step is to take this value that was generated, f1000089c27a2358 and run it against the rmsock command:
          rmsock f100089c27a2358 tcpcb
          this command will return the process that is holding the socket.
          The socket 0xc27a2000 is being held by process 204914 (ndsd).

          image

          Step (2)ipsec

          什么是ipsec?

          ipsec是IEFT提出的network管理標(biāo)準(zhǔn)工具。

          ipsec的指令集:

          Filters can be defined via the SMIT panel at the fastpath ips4_add_filter or via the command line, using the genfilt command. The SMIT method presents a screen similar to the table in the previous section. To create the filter "by hand", the following flags to the genfilt command are used to specify the attributes of the filter rule:

          -v

          The IP version to which this filter applies. Valid values are "4" and "6"
          -n

          The filter ID, or number: The new rule will be added before the number specified with this flag. If not specified, the rule will be added to the end of the filter rules table.
          -a

          The "action" of the rule: valid values are "P" (permit) and "D" (deny)
          -s

          The source address: Specify either a fully qualified domain name (FQDN) or an IP address of the host or network to which this rule will apply. The value "0.0.0.0" specifies all IP addresses.
          -m

          The source subnet mask: This will be used with the source address in determining whether this filter rule matches. The value "0.0.0.0" specifies all subnet masks.
          -d

          The destination address: Specify either the FQDN or the IP address of the interface for which incoming packets should be matched against. The value "0.0.0.0" specifies all IP addresses on the system.
          -M

          The destination subnet mask: This will be used with the destination address in determining whether this filter rule matches. The value "0.0.0.0" specifies all subnet masks.
          -g

          Specifies whether this rule applies to source routed packets. Valid values are "Y" (yes) and "N" (no).
          -c

          Protocol: Specify the protocols which will be matched by this filter rule. Valid values are "udp", "icmp", "tcp", "tcp/ack", and "all".
          -o

          Source port/ICMP operation: This is the comparison operator that will be used in matching the source port of the packet to this rule. Valid values are "lt" (less than), "le" (less than or equal to), "gt" (greater than), "ge" (greater than or equal to), "eq" (equal), "neq" (not equal), or "any".
          -p

          Source port/ICMP type: This value will be compared to the source port of the packet for possible matches.
          -O

          Destination port/ICMP operation: This is the comparison operator that will be used in matching the destination port of the packet to this rule. Valid values are the same as for the "-o" flag.
          -P

          Destination port/ICMP type: This value will be compared to the destination port of the packet for possible matches.
          -r

          Routing/Scope: Specifies whether the rule will apply to forwarded packets (R), packets destined or originated from the local host (L), or both (B).
          -w

          Direction: Specifies whether the rule will apply to incoming packets (I), outgoing packets (O), or both (B).
          -l

          Logging: Specifies that an entry to syslog will be sent for packets that match this rule. Valid values are "Y" (yes) and "N" (no).
          -f

          Fragmentation control: Specifies whether the rule will apply to fragment headers and unfragmented packets (H), fragment headers and fragments only (O), unfragmented packets only (N), or all packets (Y).
          -i

          Interface: specifies the interface on which this filter rule applies. Valid values are the logical names of interfaces (en0, tr0, lo0, etc.) or "all" for all interfaces.

          ipsec四個(gè)命令:

          To work with TCP/IP filters you only need a few commands, which is explained here and then used in the next section. If you're familiar with AIX commands you see that these follow the same logic of having descriptive prefixes in their names, like mk, ls, and rm, followed by the filt suffix.

          • lsfilt: List filters rules present in the table. When created, each rule is assigned a number, which can be easily seen using this command.
          • genfilt: Adds a filter rule to the table. This is the one you use to create new filters. If you do not specify a position with the –nparameter, the new rule is added at the end of the table.
          • chfilt: Used to change existing filter rules. You need to provide the rule ID to indicate which rule you want to modify. Rule 1 is the default rule and can't be changed with this command.
          • rmfilt: The rm suffix should sound familiar with any UNIX administrator. You use this command whenever you have to remove a filter rule providing its rule ID.
          • mkfilt: This is a key command that allows us to activate or deactivate the filter rules in the table, enable or disable logging for filters, and change the default rules. For the changes done to the filters table to take effect, you'll have to run this command with some arguments.

           

          Refer:http://www.darklab.net/resources/aix-ipsec-filtering.html

                     http://unix.ittoolbox.com/groups/technical-functional/ibm-aix-l/implementing-ipsec-on-aix-machines-1332621

                     http://www.ibm.com/developerworks/aix/library/au-aixfiltering/index.html

          使用過程:

          (1)啟動(dòng)/關(guān)閉

          # smitty ipsec4

          (2)是否啟動(dòng)

          # lsdev -l ipsec_v4

           

          (3)做個(gè)改變

          # chfilt -v 4 -n 3 -i en1
          Filter rule 3 for IPv4 has been changed successfully.
          #

           

          (4)添加新的Rule

          ## Rules to reject traffic to the Web Application not coming from the Proxy
          # genfilt -v 4 -a D -s 0 -m 0 -d 172.16.10.45 -M 255.255.255.255 -g N 
          -c tcp -O eq -P 80 -r L -w I -l Y -f Y -i all

           

          (5)設(shè)置log

          Now, you are going to configure the syslog daemon to log entries coming from the IP filters in a file that you specify.

          ## Backup syslog.conf file before modifying it.
          # cp /etc/syslog.conf /etc/syslog.conf.bak
          ## Append entry for IP filters logs.
          # echo "local4.debug /var/adm/ipsec.log" >> /etc/syslog.conf
          ## Create log file and set permissions (permissions may depend on 
          ## company policies)
          # touch /var/adm/ipsec.log
          # chmod 644 /var/adm/ipsec.log
          ## Refresh the syslog subsystem to activate the new configuration.
          # refresh -s syslogd
          0513-095 The request for subsystem refresh was completed successfully.

           

          (6)配置更新,上面的更新不會(huì)立即生效,除非運(yùn)行下面的命令

           # Start the log functionality of the filter rule module
          # mkfilt -g start
          # # Activates the filter rules
          # mkfilt –u
          Step (3) iptables
          iptables 是linux中防火墻流行的管理工具
          針對(duì)本文的作用,僅僅說明一種使用,若要詳盡的了解,需耐心的閱讀一個(gè)非常優(yōu)秀的文章,鏈接如下:
          Refer:http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html
                or http://linux.ccidnet.com/pub/html/tech/iptables/index.htm
           
          我們只是需要使用iptables像外界提供訪問本機(jī)資源的端口:

          httpPort=80
          httpsPort=443
          adminPort=8008

           

          那么就使用下面的命令:

          cmd 1 :iptables -A INPUT -p tcp --dport ${port} -j ACCEPT

          cmd 2 :iptables -A INPUT -p tcp -s localhost -j ACCEPT

          cmd 1 .在filter表上添加一條規(guī)則,如果socket pack來自TCP且push到${port}端口,就接收。

          cmd 2 .在filter表上添加一條規(guī)則,如果源IP地址是本機(jī),就接收。

           

          Step (4)mock iptables

          如果是用IPsec來實(shí)現(xiàn)打開端口,允許訪問的話,是這樣:

          genfilt -v 4 -a P -s 0.0.0.0 -m 0.0.0.0 -d 127.0.0.1 -M 0.0.0.0 -g Y -c tcp –o any –p 0  -O eq -P 80 -r B -w B -l N -f Y -i all

          mkfilt -u

           

          所以,就是這樣做一個(gè)mock

          #
          # cloud_iptables - simulate iptables
          #
          function aix_iptables
          {
              echo "aix_iptables:[$@]"
              port=""
                while [ $# -ne 0 ]; do
                  case $1 in
                      --dport)
                          port=$2
                          genfilt -v 4 -a P -s 0.0.0.0 -m 0.0.0.0 -d 127.0.0.1 -M 0.0.0.0 -g Y -c tcp –o any –p 0 -O eq -P $port -r B -w B -l N -f Y -i all
                          shift 1
                          ;;
                      -s)
                          sourceip=$2
                          genfilt -v 4 -a P -s $sourceip -m 0.0.0.0 -d 127.0.0.1 -M 0.0.0.0 -g Y -c tcp –o any –p 0 -O any -P 0 -r B -w B -l N -f Y -i all
                          shift 1
                          ;;   
                      *)
                          shift 1
                          ;;
                  esac
              done
          }

          但是,這還沒有結(jié)束

          使用iptables時(shí),我們是這樣:

          iptables -A INPUT -p tcp -s localhost -j ACCEPT
          service iptables save

          語(yǔ)句1 用來實(shí)現(xiàn)添加一條 rules

          語(yǔ)句2 用來使變更生效

          所以,還需要mock service 方法,這樣,在兩個(gè)平臺(tái)中,語(yǔ)句1和語(yǔ)句2就都完成了打開一些防火墻端口的功能。  

          function aix_service
          {
              if [ "$1" = "iptables" ]; then
                  mkfilt -u  
              else
                  echo "aix_service $*"
              fi
          }

          對(duì)于系統(tǒng)的判斷:

          function on_AIX
          {
              test "`uname`" = "AIX"
          }

          如果是AIX系統(tǒng)的話,就要在AIX上執(zhí)行aliases了。

          if aliases_on_aix ; then
              shopt -s expand_aliases     # enable expand aliases,keep it on
              alias sudo='aix_sudo'
              alias hostname='aix_hostname'
              alias iptables='aix_iptables'
              alias chkconfig='aix_chkconfig'
              alias service='aix_service'
              alias                     
          fi

          上面是在AIX的bash環(huán)境下進(jìn)行的。

          posted on 2012-08-11 13:59 cpegtop 閱讀(4260) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 建平县| 中牟县| 永丰县| 原阳县| 莲花县| 威宁| 旬邑县| 肥西县| 县级市| 道孚县| 郎溪县| 大理市| 永清县| 呼伦贝尔市| 平和县| 宝丰县| 宜宾县| 绥江县| 澄迈县| 安龙县| 芦溪县| 庄河市| 云霄县| 历史| 恭城| 西华县| 石楼县| 阿城市| 兴仁县| 兖州市| 富平县| 金华市| 米脂县| 伊金霍洛旗| 博乐市| 来宾市| 铜陵市| 莱芜市| 剑河县| 庆阳市| 南开区|